(58)【調査した分野】(Int.Cl.,DB名)
それぞれ所定の周期で交互に実行される複数のタスクを実現するプログラムを格納する格納部と、前記格納部に格納された前記プログラムを実行するプログラム実行部とを有する制御装置と、
前記プログラムの一部を構成し前記複数のタスクの各々に割り当てられる複数のプログラム部品を作成する装置であって、前記プログラム部品の実際の実行時間より長い設定実行時間の入力を受け付け可能な受付部と、前記プログラム部品を作成するときに、受け付けられた前記設定実行時間を固定化された固定化時間として設定する作成部とを有するプログラム部品作成装置と、
を備えた制御システム。
それぞれ所定の周期で交互に実行される複数のタスクを実現するプログラムを格納する格納部と、前記格納部に格納された前記プログラムを実行するプログラム実行部とを有する制御装置と、
前記プログラムの一部を構成し前記複数のタスクの各々に割り当てられる複数のプログラム部品を作成する装置であって、前記プログラム部品の実際の実行時間より長い設定実行時間の入力を受け付け可能な受付部と、前記プログラム部品を作成するときに、受け付けられた前記設定実行時間を固定化された固定化時間として設定する作成部とを有するプログラム部品作成装置と、
を備えた制御システムにおいて、
前記プログラムの一部を構成するプログラム部品であって、
プログラム本体と、
前記プログラム部品作成装置の前記受付部によって受け付けられた設定実行時間に基づいて設定され、前記制御装置の前記プログラム実行部によって前記プログラム本体が実行されるときに前記プログラム本体の実行時間として機能する固定化時間と、
を備えたプログラム部品。
【発明を実施するための形態】
【0017】
1.第1実施形態
(1)制御システムの全体構成
まず、第1実施形態に係る制御システムの全体構成について、
図1を用いて説明する。
図1は、制御システムの全体構成を示すブロック図である。制御システム100は、PLCシステム1と開発支援装置3とを備える。
PLCシステム1は、例えば、センサ又はスイッチにより構成される信号入力部5から信号を入力する。また、PLCシステム1は、信号入力部5からの入力信号を必要に応じて用いプログラムを実行して、制御対象機器7を制御する出力信号を算出する。
【0018】
開発支援装置3は、制御装置11において実行されるユーザプログラム(後述)を作成するための各種機能を実現する。また、PLCシステム1に接続可能な開発支援装置3の数は1に限られず、例えば、開発支援装置3に割当可能なアドレス数などが許す限り、任意の数の開発支援装置3を接続できる。
【0019】
(2)PLCシステムの構成
次に、PLCシステム1の詳細な構成について
図1を用いて説明する。PLCシステム1は、制御装置11と、入力ユニット13と、出力ユニット15と、電源ユニット17と、を有する。
【0020】
制御装置11は、プログラマブル・ロジック・コントローラ(Programmable Logic Controller、PLC)のCPUユニットである。
【0021】
制御装置11においては、所定のタスクが所定の周期にて繰り返し実行される。タスクは、POUが割り当てられて実行される単位である。タスクの一例としては、入力ユニット13からの入力信号に基づいて入力変数を更新し、出力変数に基づいて出力ユニット15へ出力する出力信号を更新するI/Oリフレッシュ処理と、ユーザプログラム及び/又はシステムプログラムを実行する処理とを含むものがある。なお、タスクには、モーションコントロール処理などの他の処理がさらに含まれたものもある。
【0022】
入力ユニット13は、センサ又はスイッチといった信号入力部5から入力信号を入力し、制御装置11に当該入力信号を出力する。入力ユニット13としては、信号入力部5から入力される信号種類に応じた入力ユニットを使用できる。具体的には、例えば、信号入力部5が温度を測定する熱電対により構成されている場合には、熱電対において発生する電圧を入力信号とする入力ユニットを入力ユニット13として用いることができる。また、例えば、信号入力部5が電気スイッチにより構成されている場合には、当該スイッチのON/OFF状態を入力信号とする入力ユニットを入力ユニット13として用いることができる。
【0023】
出力ユニット15は、出力信号を対応する制御対象機器7に出力する。これにより、制御装置11は制御対象機器7を制御できる。出力ユニット15としては、出力信号の種類に応じた出力ユニットを使用できる。例えば、制御対象機器7がモータであり、モータの位置制御などを行う場合には、モーションコントローラ機能を有した出力ユニットを用いることができる。また、例えば、制御対象機器7が電気炉である場合には、電気炉を制御するリレーを制御する信号(例えば、ON/OFFデューティ比を制御する信号)を出力する出力ユニットを用いることができる。
【0024】
電源ユニット17は、制御装置11、入力ユニット13、及び出力ユニット15に電力を供給する。
なお、PLCシステム1は、上記の構成要素の全てを1の筐体内に組み込んだシステムであってもよいし、各構成要素を個別の筐体に組み込んで当該構成要素を接続してPLCシステムとしてもよい。特に、入力ユニット13及び出力ユニット15を個別の構成要素とすることにより、PLCシステム1は、所望する制御対象機器及び信号入力部を所望の数接続できる。
【0025】
(3)制御装置の構成
次に、制御装置11の構成の詳細について、
図2及び
図3を用いて説明する。
図2は、制御装置及び開発支援装置の構成を示すブロック図である。
図3は、制御装置及び開発支援装置の機能及びデータの配置を示すブロック図である。
【0026】
図2において、制御装置11は、CPU111と、RAM113と、ROM115と、通信インターフェース117とを有している。通信インターフェース117は、開発支援装置3に接続されており、制御装置11が開発支援装置3と通信するのに用いられる。
【0027】
制御装置11では、システムプログラム115aがROM115にインストールされており、CPU111は、システムプログラム115aを実行することで、制御装置11の動作を制御するように構成されている。なお、システムプログラム115aには、入力ユニット13に入力された信号をRAM113に取り込む処理を実行するためのプログラムや、CPU111によって演算されたさらにRAM113に格納された演算結果を出力ユニット15に送り出す処理を実行するためのプログラムなどが含まれている。
【0028】
図3に示すプログラム格納部44は、RAM113により実現されている。プログラム格納部には、複数のPOUからなるユーザプログラムが格納されている。
POUは、IEC61131−3におけるユーザプログラムの実行モデルの単位である。POUは、プログラムと、ファンクションと、ファンクションブロックとを含んでいる。ファンクションおよびファンクションブロックは、再利用することが可能である。すなわち、ファンクションおよびファンクションブロックは、複数のユーザプログラムで共用することが可能である。なお、ファンクションは、所定の入力値が入力された場合に、所定の入力値に対応する一定の出力値を出力する関数であり、ファンクションブロックは、内部状態を持てることにより、入力値に対する出力値が一定ではない関数である。
【0029】
制御装置11は、ユーザプログラムの更新を行うことが可能なように構成されている。すなわち、制御装置11は、オンラインエディットを行うことが可能である。なお、オンラインエディットとは、制御装置11の運転(タスクの実行)を停止させることなく、開発支援装置3を用いてユーザプログラムの一部を変更・追加することをいう。
【0030】
オンラインエディット中の際には、制御装置11は、最初に、開発支援装置3からアップロードされたユーザプログラムを通信インターフェース117により受信する。その後、制御装置11は、実行されている複数のタスクが完了してから複数のタスクが再び実行されるまでの間に、ユーザプログラムを更新する。具体的には、制御装置11は、例えば、ユーザプログラムのPOU(例えば、ファンクションブロック)を通信インターフェース117により受信した後、ユーザプログラムのPOUを受信したPOUに置き換える。
【0031】
(4)開発支援装置の構成
次に、開発支援装置3の構成の詳細について、
図2及び
図3を用いて説明する。
開発支援装置3は、
図2に示すように、CPU31と、記憶部33と、通信インターフェース35と、入力部37と、表示部39とを有している。記憶部33は、開発支援プログラム33aを格納している。開発支援装置3の機能は、CPU31において、開発支援プログラム33aを実行することにより実現されている。入力部37は、キーボード、マウス、タッチパネルなどの入力手段である。表示部39は、LCD、有機ELを用いたディスプレイからなる表示手段である。
【0032】
表示部39は入力内容および処理内容を表示できる。入力部37は、ユーザからの操作に基づいて、各種情報を入力できる。
【0033】
通信インターフェース35は、開発支援装置3の記憶部33に記憶されているプログラム及びデータを制御装置11にダウンロードするためのインターフェースである。
【0034】
図3を用いて、開発支援装置3の開発支援プログラム3a(
図2)の機能を説明する。開発支援プログラム3aは、プログラムエディタ61と、コンパイラ63と、ライブラリ格納部65を有している。
プログラムエディタ61は、ユーザプログラムを編集する機能を有している。具体的には、プログラムエディタ61は、ソースプログラムをPOU単位で作成及び更新する。ソースプログラムの作成及び更新に用いられる情報は、入力部37から入力される。また、作成及び更新されたソースプログラムは、表示部39に出力されることで、ユーザが確認可能である。
【0035】
コンパイラ63は、プログラムエディタ61から受け取ったPOUのソースコードから、POU配置情報(図示せず)に基づいてプログラムを生成する。
【0036】
そして、上記コンパイラ63で生成されたオブジェクトコードとしてのユーザプログラムが、制御装置11に送られる。ユーザプログラムは、制御装置11のRAM113からなるプログラム格納部44の所定の場所に転送される。
【0037】
ライブラリ格納部65は、複数のライブラリ部品(図示せず)を含むライブラリ格納している。ライブラリ部品は、POU部品であり、POU定義及びデータ型からなる。後述するようにPOUが作成・更新されると、必要に応じて、その内容がライブラリ部品に反映される。ライブラリ部品は、標準化又は工数削減を目的として、作成・利用される。
【0038】
図4を用いて、開発支援装置3におけるプログラムの作成を説明する。
図4は、プログラム部品作成制御を示すフローチャートである。
最初に、プログラムエディタ61が、変数を定義する。(ステップS1)。
次に、プログラムエディタ61が、プログラムを定義する(ステップS2)。
【0039】
次に、プログラムエディタ61が、プログラムロジックの作成を定義する(ステップS3)。
次に、プログラムエディタ61が、各プログラムをタスクに登録する(ステップS4)。
最後に、コンパイラ63が、コンパイルを実行する(ステップS5)。
【0040】
図5を用いて、プログラムのタスク登録に関する情報であるタスク設定データ45を説明する。
図5は、タスク設定データの内容を示す表である。タスク設定データ45には、各タスクの名称、優先度と、実行周期と、タスクに割り付けられたプログラムの名称とが記載されている。
なお、タスクは、一例として、優先度の値が小さいタスクが優先的に実行される。また、制御装置11では、予め設定された時間間隔(たとえば、1ms)の制御サイクルを処理全体の共通サイクルとして採用している。
【0041】
図5の例では、タスクAは、タスクBよりも優先的に実行されるとともに、1msの周期で実行される。すなわち、タスクAは、1回分の制御サイクル(1msの時間間隔)を実行サイクルとしている。また、タスクAには、POUとしてのプログラムP1、プログラムP2、プログラムP3が割り付けられている。また、タスクAには、プログラム1で利用されるファンクションブロックFB1が含まれている。
【0042】
タスクBは、2msの周期で実行される。すなわち、タスクBは、2回分の制御サイクル(2msの時間間隔)を実行サイクルとしている。また、タスクBの周期は、タスクAの周期の整数倍(2倍)に設定されている。また、タスクBは、POUとしてのプログラム4、プログラム5が割り付けられている。また、タスクBには、プログラム4で利用されるファンクションブロックFB2が含まれている。
以上に述べたように、開発支援装置3は、プログラム部品作成装置として機能する。
【0043】
(5)POUの固定化時間の設定
上述のプログラムロジックの作成の定義が行われる際に、プログラムエディタ61によって、POUの固定化時間が設定される。POUの固定化時間とは、POUの実際の実行時間より長い時間が、POUの固定された実行時間として設定されたものである。つまり、POUが実行された後に、固定化時間と実際の実行時間との差分である非実行時間が確保される。なお、固定化時間は、予測される実際の実行時間の最大値を超えていることが好ましい。
【0044】
図6を用いて、POUの設定データの内容を説明する。
図6は、POUの設定データの内容を示すPOU設定データ46である。POU設定データ46では、プログラムP2のみに固定化時間が設定されている。ユーザは、例えば表示部39に表示されたPOU設定データ46を見ながら、POUの固定化時間を設定できる。なお、POU設定データ46は、POU毎に、最終的なバージョンアップにおける予想最大実行時間を有していてもよい。
【0045】
図7を用いて、POUの固定化時間設定をさらに詳細に説明する。
図7は、POUの実際の実行時間と固定化時間の関係を示す概念図である。POUのVer.1.0を作成するときに、実際の実行時間はR1である。そこで、R1より長い固定化時間KがこのPOUに設定される。そのため、POUの修正が行われて例えば、Ver.1.1が作成されたとしてもその実行時間R2であり、固定化時間Kより短い。さらに、POUの修正が行われて例えば、Ver.2.0が作成されたとしてもその実行時間R3であり、固定化時間Kより短い。
以上の場合、固定化時間Kは、POUのバージョンアップ予想情報に基づいて、最終的なバージョンアップにおける予想最大実行時間より長く設定されることが好ましい。
【0046】
次に、
図8を用いて、POUの固定化時間の設定形態について説明する。
図8は、POUの構造を示す図である。POU_A71は、固定化時間情報73が内部に埋め込まれている。この場合、制御装置11のCPU111は、POU_A71の固定化時間情報73を読み出し、固定化時間の設定に基づいてPOU_A71を実行する。
【0047】
図9を用いて、変形例を説明する。
図9は、POUの構造を示す図である。POU_B75は、固定化時間情報が埋め込まれていない。代わりに、テーブル77にPOU_B75の固定化時間情報が記述されている。この場合、制御装置11のCPU111は、テーブル77の固定化時間情報を読み出し、固定化時間の設定に基づいてPOU_A71を実行する。
【0048】
ここで、POUの中でもファンクションブロックについての固定化時間の設定を説明する。ファンクションブロックは、定義とインスタンスとから構成されている。インスタンスは、変数であり、複数の属性(例えば、定数、初期値)を有している。そこで、この実施形態では、固定化時間を変数の属性とすることで、ライブラリのユーザ側で定義の固定化時間の設定を変更できるようになる。この場合、例えば、変数名、型、固定化時間設定からなる変数テーブル使用する。その結果、制御装置11のCPU111は、定義の設定ではなく、インスタンスの属性を優先することで、ファンクションブロックの実行時間を固定化する。また、別の例として、インスタンスの設定値を定義の設定値に上書きしてもよい。
【0049】
以上に述べたように、開発支援装置3において、入力部37及び記憶部33が、POUの実際の実行時間より長い設定実行時間の入力を受け付け可能な受付部として機能する。また、プログラムエディタ61及びコンパイラ63が、POUを作成するときに、受け付けられた設定実行時間を固定化された固定化時間として設定する作成部として機能する。また、上述の作成部は、後述するように、制御装置11においてユーザプログラム41の実行中にPOUの固定化時間を変更可能である。なお、POUの固定化時間は、後述する変更が行われない限りは、基本的には一定である。
【0050】
(6)制御動作
図10及び
図11を用いて、タスク実行動作を説明する。
図10は、タスク実行のタイミングを示すタイミングチャートであり、
図11は
図10の一部を拡大したタイミングチャートである。
制御装置11では、電源が投入されると、所定の初期処理が実行される。
【0051】
そして、制御サイクルと同時にタスクA、Bの実行サイクルが開始される。なお、タスクAは1msの周期で実行され、タスクBは2msの周期で実行される。このように、本実施形態では、実行周期が異なる2種類のタスクの例を用いる。ただし、タスクの種類の数は限定されない。
また、この実施形態では、後述するように、タスクAは、割り付けられたPOUの1つであるプログラムP2に実行時間として固定化時間が設定されており、プログラムP2の実行の際には固定化時間が適用されるタスクである。タスクBは、割り付けられたPOUには実行時間として固定化時間が設定されていないタスクである。
以下の説明において、タスクA及びタスクBを実行するのは、プログラム実行部43である。プログラム実行部43は、タスクA及びタスクBを実行する際には、RAM113に格納されたタスク設定データ45を利用する。
【0052】
具体的には、まず、最も優先度の高いタスクAの処理が開始される。このとき、タスクBは、タスクAよりも優先度が低いことから、実際の処理が開始されることなく待機状態になる。
【0053】
そして、タスクAのユーザプログラムUPG1が実行される。このとき、実際には、
図11に示すように、プログラムP1、プログラムP2、プログラムP3が実行される。タスクAの処理が完了すると、タスクBの処理が開始される。つまり、タスクBのユーザプログラムUPG2が実行される。このとき実際には、
図11に示すように、プログラムP4、プログラムP5が実行される。
【0054】
次に、タスクA、Bの実行サイクルが同時に開始されてから1ms経過すると、タスクAの実行サイクルが経過することから、タスクBのユーザプログラムUPG2が中断され、タスクAの実行が開始される。このとき、タスクBは待機状態である。
【0055】
そして、タスクAのユーザプログラムUPG1が実行されタスクAの処理が完了すると、中断されたタスクBの処理が再開される。これにより、タスクBのプログラムP5が実行される。
【0056】
次に、タスクA、Bの実行サイクルが同時に開始されてから2ms、3ms経過すると、タスクAの実行サイクルが経過することから、タスクAの実行が開始される。
そして、タスクA、Bの実行サイクルが同時に開始されてから2ms経過すると、タスクAの実行サイクルが経過することから、タスクAの実行が開始される。このとき、タスクBの実行サイクルも経過することから、タスクBは待機状態である。すなわち、タスクA、Bの実行サイクルが同時に開始されてから2ms経過すると、タスクA、Bの実行サイクルが再び同時に開始される。その後、上記した動作が繰り返し行われる。
【0057】
図11から明らかなように、POUであるプログラムP2の固定化時間は、プログラムP2が実際に実行される時間(実コードが実行されている時間)より長く設定されているので、実際の処理が終了してからプログラムP3が開始されるまでの間には、非実行時間Sが確保されている。非実行時間Sは、変化すなわち将来の修正・拡張に対応するために確保されている時間である。
図11に示す例では、タスクAの固定化時間が100μsであり、プログラムP2の実際の実行時間が70μsであるので、非実行時間Sは30μsである。非実行時間Sには、処理は何も行わないことが好ましく、例えば、空ループを処理したり、プログラム実行を一時休止したりする。また、非実行時間Sでは、タスク及びプログラムの実行順序に影響しない処理である、外部通信又はイベントとして発生する処理を実行してもよい。
【0058】
この実施形態では、プログラムP2に固定化時間が設定されるので、プログラムP2の実行時間が変更されて長くなる修正が行われたとしても、制御装置11における実際の実行時間が固定化時間を超えない。より具体的には、タスクAの実際の実行時間が長くなることがなく、したがってタスクBの開始タイミングは変わることがなく、タスクBの実行を設定通りに正しく行うことができる。
【0059】
この実施形態では、プログラムP2のみに固定化時間が設定されている例を説明したが、プログラムP1及びプログラムP3にも固定化時間を設定してもよい。
【0060】
次に、
図12及び
図13を用いて、本発明の実施形態と異なる場合に生じる問題を説明する。
図12及び
図13は、本発明の実施形態とは異なる場合のタスク実行のタイミングを示すタイミングチャートである。
【0061】
この例では、本発明の実施形態とは異なり、タスクAのPOUに固定化時間が設定されていない。したがって、
図12ではタスクAの実際の実行時間は500μsであるが、例えば割り当てられたPOUの変更によって、長くなることがある。
図12の状態から変化して、
図13のようにタスクAの実行時間が長くなると(例えば、変更後のタスクAの実際の実行時間は540μs)であり、タスクBの実行開始時が遅くなる。つまり、上記の場合には、タスクBの開始タイミングが変更されてしまい、さらにはタスクBの終了時が後ろにずれてしまう。その結果、
図12の状態では2msの周期内に収まっていたタスクBが、
図13の状態では2msの周期を超えてしまい(斜線部分)、その結果、タスクBのプログラムP5が実行できなくなる。
【0062】
本発明の実施形態の説明に戻って、次に、
図14を用いて、POUの実際の実行時間を取得して表示する制御を説明する。
図14は、POUの実際の実行時間を取得する制御を説明するためのフローチャートである。
最初に、POU実行が開始されるのを待つ(ステップS11)。
POU実行が開始されると(ステップS11でYes)、プログラム実行部43は、タイマ(図示せず)からPOUの開始時刻を取得する(ステップS12)。
次に、プログラム実行部43は、POUの実行が終了するのを待つ(ステップS13)。
【0063】
終了すると、プログラム実行部43は、タイマ(図示せず)からPOUの実行終了時刻を取得する(ステップS14)。
次に、プログラム実行部43は、POUの実際の実行時間を算出する(ステップS15)。
【0064】
次に、プログラム実行部43は、固定化時間と実際の実行時間との差分を演算する(ステップS16)。
次に、プログラム実行部43は、POUの実際の実行時間と、差分とをRAM113に格納する(ステップS17)。
最後に、プログラム実行部43は、差分の時間が経過して固定化時間が終了すると(ステップS17でYes)、プロセスはステップS11に戻る。
【0065】
開発支援装置3は、定期的に又はユーザからの指示によって、制御装置11からPOUの実際の実行時間、固定化時間及び差分を取得する。より具体的には、開発支援装置3のCPU31が、制御装置11のRAM113に格納されているPOUの実際の実行時間、固定化時間及び差分を制御装置に11に要求し、その結果制御装置11から送信されてくるPOUの実際の実行時間、固定化時間及び差分を受信する。CPU31は、上記データを記憶部33に保存する。
その結果、開発支援装置3の表示部39において、
図14の表52が表示される。
図15は、タスクの実際の実行時間と固定化時間の関係を示す表である。
図15では、実行時間(最小)、実行時間(最大)、固定化時間、差分が示されている。差分は、固定化時間と実行時間(最大)との差である。これにより、ユーザは、タスクの実際の実行時間と固定化時間との関係をリアルタイムで知ることができる。なお、タスクの実際の実行時間と固定化時間との関係の判断結果としては、固定化時間に対する実行時間(最大)の割合を表示してもよい。差分と割合はいずれか一方でもよいし、両方でもよい。上記のように、開発支援装置3のCPU31が、制御装置11において実行されているPOUの実際の実行時間及び固定化時間を、制御装置11から取得する取得部として機能している。
上記実施形態では、固定化時間と実際の実行時間との差分の演算は、制御装置11で行われていたが、開発支援装置3で行われてもよい。
最後に、固定化時間が経過すると(ステップS17でYes)、プロセスはステップS11に戻る。
【0066】
ユーザは、開発支援装置3の表示部39に表示された
図15の表52を見ながら、入力部37から変更内容を開発支援装置3に入力する。例えば、実行時間(最大)と固定化時間を比較して、差分が充分であると判断すれば固定化時間を短くするように変更し、差分が不足であると判断すれば固定化時間を長くなるように変更する。その結果、例えば、固定化時間の設定が書き換えられたPOUが作成され、それが制御装置11に送信される。
具体的な例として、ファンクションブロックの場合を以下に説明する。
図8のように固定化時間情報73がPOUに埋め込まれている場合は、開発支援装置3のプログラムエディタ61及びコンパイラ63が、POUを更新し、その修正内容を制御装置11に送信する。それにより、制御装置11のプログラム格納部44に新たなPOUが格納される。それとは異なり
図9のように固定化時間情報がテーブル77によって管理されている場合は、開発支援装置3のプログラムエディタ61が、テーブル77を更新し、その修正内容を制御装置11に送信する。それにより、制御装置11のプログラム格納部44に新たなテーブル77が格納される。
【0067】
この結果、固定化時間の値が変更された後に開始されるPOUについては、変更後の固定化時間が適用される。
以上に述べたように、POUが実行される毎に、POUの実際の実行時間と固定化時間との関係(具体的には、差分又は割合)が判断される。そして、その判断結果に基づいて、開発支援装置3が固定化時間を再設定できる。
【0068】
上記実施形態は、入力ユニット及び出力ユニットが増減するようなフレキシブルなPLCにおいて、構成変更による影響を抑制する効果がある。
上記実施形態ではPOUの実行時間が固定化されているので、ライブラリにおける標準化部品の作成者が設計変更しやすくなる。また、ライブラリ利用者も安心して標準化部品を利用できるようになる。なぜなら、標準化部品に固定化処理時間が設定されることで、ライブラリを利用しているアプリケーションプログラムが異常動作を起こしにくいからである。
【0069】
2.他の実施形態
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、発明の要旨を逸脱しない範囲で種々の変更が可能である。特に、本明細書に書かれた複数の実施形態及び変形例は必要に応じて任意に組み合せ可能である。