説明

プログラマブルコントローラの制御方法並びにユーザプログラム開発支援装置、ユーザプログラム開発支援用プログラム、記録媒体、プログラマブルコントローラシステム及びプログラマブルコントローラ

【課題】一のタスクのユーザプログラムがデータにアクセスするにあたって、他のタスクのユーザプログラムによるデータへのアクセスに関与しない処理の高速性及び高精度性を維持できるプログラマブルコントローラの制御方法並びにユーザプログラム開発支援装置、ユーザプログラム開発支援用プログラム、記録媒体、プログラマブルコントローラシステム及びプログラマブルコントローラを提供する。
【解決手段】ユーザプログラムP1〜PnをPLC100で実行可能なコードに変換する変換手段Qaを備えるユーザプログラム開発支援装置200の変換手段Qaで変換されるユーザプログラムP1〜Pnは、アクセスを開始する前にデータDへのアクセスの排他制御のロック開始を指示するタスク間排他命令Lockと、アクセスを終了した後にロック解除を指示するタスク間排他解除命令Unlockとを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のタスク間で共有するデータに対してアクセスするユーザプログラムを実行可能なプログラマブルコントローラの制御に関する。
【背景技術】
【0002】
ファクトリーオートメーション(FA)の制御装置として、プログラマブルコントローラ(以下、「PLC」ということがある)が広く利用されている。PLCは、例えば、電源供給源の電源ユニット、PLC全体の制御を司るCPUユニット、FAの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット、アクチュエータなどに制御出力を出す出力ユニット、通信ネットワークに接続するための通信ユニットといった複数のユニットを適宜組み合わせて構成されることが多い。
【0003】
PLCのCPUユニットにおける制御は、入力ユニットで入力した信号をCPUユニットのI/Oメモリに取り込み(INリフレッシュ)、予め登録されたPLC制御用の言語(例えばラダー言語)が組まれたユーザプログラムに基づき論理演算を実行し、その演算の実行結果をI/Oメモリに書き込んで出力ユニットに送り出し(OUTリフレッシュ)、その後、いわゆる周辺処理を行うといった一連のサイクリック処理を繰り返し行う。ユーザプログラムは、ユーザプログラム開発支援装置によって、作成、編集され、さらに、PLCに実行可能なオブジェクトコードに変換されてPLCで実行される。そして、ユーザプログラムは、タスク毎に割り当てられて実行される。
【0004】
図19は、ユーザプログラムがタスク毎に割り当てられる状態を説明するための説明図である。図19に示すように、ユーザプログラム全体は、複数のユーザプログラムから構成される。各ユーザプログラムは、タスク毎に割り当てられる。
【0005】
また、タスクは、周期的に実行される周期実行型タスクと、何らかのイベントが発生したときに実行されるイベント実行型タスクとに大別される。
【0006】
また、タスク処理として、シングルコアで行う場合には、同時に一つのタスクしか実行できないために、優先度が高いタスクのユーザプログラムと、そのタスクより優先度が低いタスクのユーザプログラムとを同時期に実行した場合の重なった時間において、優先度の低いタスクのユーザプログラムが実行している全体の処理を中断して、優先度の高いタスクのユーザプログラムを実行する割込制御が行われる。
【0007】
ところで、複数のタスクが実行される場合には、複数のタスクのユーザプログラムがデータに対して順にアクセスする場合には支障がないが、複数のタスク間で共有するデータに対して少なくとも二つのユーザプログラムがデータに対して同時にアクセスする場合に、次のような不都合が生じる。
【0008】
図20は、複数のタスクT1〜Tn間で共有するデータDに対して少なくとも二つのユーザプログラムがアクセスする場合での不都合を説明するための説明図である。なお、nは2以上の整数である。図20(a)は、複数のタスクT1〜Tn間で共有するデータDに対して二つのユーザプログラムP1,P3がアクセスする状態を示している。図20(b)は、二つのタスクT1,T3のユーザプログラムP1,P3がデータDに順にアクセスする処理例を示している。図20(c)は、二つのユーザプログラムP1,P3がデータDに同時にアクセスする処理例を示している。
【0009】
図20(a)に示すように、複数のタスクT1〜Tn間で共有するデータDに対して二つのユーザプログラムP1,P3がアクセスする場合において、図20(b)に示す例では、二つのタスクT1,T3のユーザプログラムP1,P3を順にアクセスするので、〔1〕「ユーザプログラムP1がデータD(例えば5)を取り出す」→〔2〕「ユーザプログラムP1がデータDをインクリメント(例えば5に1を加算してD=5+1=6を算出)する」→〔3〕「ユーザプログラムP3がデータD(例えば6)を取り出す」→〔4〕「ユーザプログラムP3がデータDをインクリメント(例えば6に1を加算してD=6+1=7を算出)する」という処理手順になる。
【0010】
すなわち、ユーザプログラムP3は、ユーザプログラムP1の処理が終わってからデータDを取り出しているために、データDは正確に処理(例えば5に1が2回加算されてD=5+2=7が算出)される。よって、この例では支障なくデータ処理を行える。
【0011】
これに対して、図20(c)に示す例では、二つのタスクT1,T3のユーザプログラムP1,P3が一つのデータDに同時にアクセスするので、〔1〕「ユーザプログラムP1がデータD(例えば5)を取り出す」→〔2〕「ユーザプログラムP3がデータD(例えば5)を取り出す」→〔3〕「ユーザプログラムP1がデータDをインクリメント(例えば5に1を加算してD=5+1=6を算出)する」→〔4〕「ユーザプログラムP3がデータDをインクリメント(例えば5に1を加算してD=5+1=6を算出)する」という処理手順になることがある。
【0012】
すなわち、ユーザプログラムP3は、ユーザプログラムP1の処理が終わる前にデータD(例えば5)を取り出しているために、ユーザプログラムP3はユーザプログラムP1がデータDを処理する前の情報(例えば5)に基づきデータDを処理してしまう。この結果、ユーザプログラムP1が処理したデータ処理が失われてしまうことになる。つまり、ユーザプログラムP1,P3の双方がデータDに処理を行った(例えば1を加算した)にも拘わらず、データDは本来の処理(例えば5に1が2回加算されてD=5+2=7が算出)に対して正確に処理(例えば5に1が1回しか加算)されないことになる。
【0013】
このような不都合を回避するために、従来では、複数のタスクのうち、一のタスクのユーザプログラムがデータにアクセスを開始する前に、その後にアクセスする他の優先度の高いタスクのユーザプログラムに対して割込制御を禁止するようにしている(特許文献1参照)。
【0014】
図21は、複数のタスクT1〜Tn間で共有するデータDに対して少なくとも二つユーザプログラムが同時にアクセスする場合での一のタスクのユーザプログラムへの従来の割込制御を時系列的に示す概念図である。なお、図21において、「斜線」は、割込制御が必要な区間を表しており、「二重線」は、ユーザプログラムP1〜Pnの実行完了を表している。
【0015】
図21に示すように、複数のタスクT1〜Tn間で共有するデータD(図20(a)参照)に対して二つタスクT1,T3のユーザプログラムP1,P3がデータDに同時にアクセスする場合には、ユーザプログラムP3がデータDにアクセスを開始する前に、他の優先度の高いタスクT1のユーザプログラムP1に対して割込制御の禁止を指示する割込実行禁止命令Aによって割込制御の禁止を開始し、タスクT3のユーザプログラムP3がデータDへのアクセスを終了した後に、データDへの割込制御の禁止の解除を指示する割込許可命令Bによって割込制御の禁止を解除する。こうすることで、二つのユーザプログラムP1,P3の双方が同時にデータDにアクセスしても、データDが正確に処理されないといった不都合を回避することが可能となる。
【先行技術文献】
【特許文献】
【0016】
【特許文献1】特開2010−026660号公報
【発明の概要】
【発明が解決しようとする課題】
【0017】
しかしながら、このような従来の割込制御では、図21に示すように、他のタスクT1のユーザプログラムP1は、割込制御が禁止されている間、区間αでデータDへアクセスしない(データDへのアクセスに関与しない処理を行える)にも拘わらず、全体の処理が(データDへアクセスする処理だけでなく、データDへのアクセスに関与しない処理も)待たされることになる。すなわち、ユーザプログラムP1は、区間αにおいてデータDへのアクセスに関与しない処理が遅延することになり、これにより、区間αでの他のタスクT1のユーザプログラムP1によるデータDへのアクセスに関与しない処理の高速性及び高精度性の低下を招く。
【0018】
そこで、本発明は、複数のタスク間で共有するデータに対して少なくとも二つのユーザプログラムが前記データに対して同時にアクセスする場合に、一のタスクのユーザプログラムが前記データにアクセスするにあたって、他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理の高速性及び高精度性を維持できるプログラマブルコントローラの制御方法並びにユーザプログラム開発支援装置、ユーザプログラム開発支援用プログラム、記録媒体、プログラマブルコントローラシステム及びプログラマブルコントローラを提供することを目的とする。
【課題を解決するための手段】
【0019】
本発明は、前記課題を解決するために、次のプログラマブルコントローラの制御方法並びにユーザプログラム開発支援装置、ユーザプログラム開発支援用プログラム、記録媒体、プログラマブルコントローラシステム及びプログラマブルコントローラを提供する。
【0020】
(1)プログラマブルコントローラの制御方法
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの制御方法であって、前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令によって前記排他制御のロックを開始する排他制御ステップと、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令によって前記排他制御のロック状態を解除する排他制御解除ステップとを実施することを特徴とするプログラマブルコントローラの制御方法。
【0021】
(2)ユーザプログラム開発支援装置
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する変換手段を備えたユーザプログラム開発支援装置であって、前記ユーザプログラムは、前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令と、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令とを含み、前記変換手段は、前記タスク間排他命令及び前記タスク間排他解除命令を含む前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換することを特徴とするユーザプログラム開発支援装置。
【0022】
(3)ユーザプログラム開発支援用プログラム
ユーザプログラム開発支援装置における制御部を、複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する変換手段として機能させるユーザプログラム開発支援用プログラムであって、前記ユーザプログラムは、前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令と、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令とを含み、前記変換手段は、前記タスク間排他命令及び前記タスク間排他解除命令を含む前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換することを特徴とするユーザプログラム開発支援用プログラム。
【0023】
(4)記録媒体
前記本発明に係るユーザプログラム開発支援用プログラムを記録したコンピュータ読み取り可能な記録媒体。
【0024】
(5)プログラマブルコントローラシステム
前記本発明に係るユーザプログラム開発支援装置と、前記プログラマブルコントローラとを備えたことを特徴とするプログラマブルコントローラシステム。
【0025】
(6)プログラマブルコントローラ
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラであって、前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令によって前記排他制御のロックを開始する排他制御手段と、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令によって前記排他制御のロック状態を解除する排他制御解除手段とを備えることを特徴とするプログラマブルコントローラ。
【0026】
本発明によれば、前記一のタスクのユーザプログラムが前記データにアクセスを開始する前に前記他のタスクのユーザプログラムに対して割込制御を禁止しなくても、前記タスク間排他命令によって、前記一のタスクのユーザプログラムが前記データにアクセスを開始する前に前記排他制御のロックを開始し、前記タスク間排他解除命令によって、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態を解除することができ、これにより、前記一のタスクのユーザプログラムが先に前記データにアクセスするときでも、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理が待たされることがないようにすることができる。すなわち、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理の遅延をなくすことができ、これにより、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理の高速性及び高精度性を維持することが可能となる。
【0027】
本発明において、前記データは、複数のデータとされており、前記タスク間排他命令及び前記タスク間排他解除命令は、前記複数のデータへのそれぞれのアクセスの前記排他制御のロック及びロック状態の解除を指示するものであってもよい。この場合、前記タスク間排他命令及び前記タスク間排他解除命令には、前記複数のデータに対応させて識別符号が付されている態様を例示できる。
【0028】
この特定事項では、前記タスク間排他命令及び前記タスク間排他解除命令は、前記複数のデータへのそれぞれのアクセスの前記排他制御のロック及びロック状態の解除を指示するものであるので、ユーザによる前記ユーザプログラムの作成において前記複数のデータに対応する用途ごとに別々に前記排他制御を行うことが可能となる。
【0029】
本発明において、前記タスク間排他命令及び前記タスク間排他解除命令は、対応関係にある前記タスク間排他命令及び前記タスク間排他解除命令の間に、他の対応関係にある前記タスク間排他命令及び前記タスク間排他解除命令が入るネスティング構造を構成する態様を例示できる。
【0030】
この特定事項では、前記タスク間排他命令及び前記タスク間排他解除命令を前記ネスティング構造とするので、ユーザによる前記ユーザプログラムの作成にあたって前記排他制御の利用範囲を広げることができる。
【0031】
本発明において、前記タスク間排他命令及び前記タスク間排他解除命令は、同一の前記識別符号に対して、前記ネスティング構造を構成する態様を例示できる。
【0032】
この特定事項では、同一の前記識別符号の前記タスク間排他命令及び前記タスク間排他解除命令を前記ネスティング構造とするので、ユーザが前記ネスティング構造において同一の前記識別符号の前記タスク間排他命令及び前記タスク間排他解除命令を複数使用することがあっても、その使用を許容することが可能となり、前記ネスティング構造を使用するにあたって利便性を向上させることが可能となる。
【0033】
本発明において、前記一のタスクの実行終了時に前記排他制御のロック状態を強制的に解除するようにしてもよい。
【0034】
この特定事項では、前記一のタスクの実行終了時に前記排他制御のロック状態を強制的に解除するので、例えば、ユーザが前記ユーザプログラムの誤りにより、前記タスク間排他解除命令を入れ忘れたり、ロジック上の不都合があったりしても、次の前記タスク以降では前記排他制御のロック状態が解除された状態となり、ユーザによるユーザプログラムの誤りを補填することが可能となる。
【発明の効果】
【0035】
以上説明したように、本発明によると、前記一のタスクのユーザプログラムが前記データにアクセスを開始する前に前記他のタスクのユーザプログラムに対して割込制御を禁止しなくても、前記タスク間排他命令によって、前記一のタスクのユーザプログラムが前記データにアクセスを開始する前に前記排他制御のロックを開始し、前記タスク間排他解除命令によって、前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態を解除することができ、これにより、前記一のタスクのユーザプログラムが先に前記データにアクセスするときでも、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理が待たされることがないようにすることができる。すなわち、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理の遅延をなくすことができ、これにより、前記他のタスクのユーザプログラムによる前記データへのアクセスに関与しない処理の高速性及び高精度性を維持することができる。
【図面の簡単な説明】
【0036】
【図1】プログラマブルコントローラシステムにおけるユーザプログラム開発支援装置及びそれと通信するプログラマブルコントローラを概念的に示す概略構成図である。
【図2】PLCにおけるCPUユニットのハードウェア構成を示すブロック図である。
【図3】マイクロプロセッサにより実行されるPLC全体の処理例を示すフローチャートである。
【図4】プロジェクトのファイルのデータ構造を示す模式図である。
【図5】PLCと通信するユーザプログラム開発支援装置の概略構成を示すシステムブロック図である。
【図6】ユーザプログラムのラダー言語、ST言語及びSFC言語がタスクに割り当てられた状態の一例を示す概念図である。
【図7】複数のタスク間で共有するデータに対して二つのユーザプログラムがデータに対して同時にアクセスする場合での排他制御を説明するための概念図である。
【図8】タスク間排他命令及びタスク間排他解除命令を用いたユーザプログラムのST言語によるプログラム例を説明するための説明図であって、(a)は、プログラム処理の概念図であり、(b)は、プログラム処理で使用するテーブルを示す図であり、(c)は、一のタスクでのユーザプログラム及び他のタスクでのユーザプログラムを示す図である。
【図9】複数のタスク間で共有するデータに対して少なくとも二つユーザプログラムが同時にアクセスする場合での排他制御の一例を時系列的に示す概念図である。
【図10】PLCにおけるマイクロプロセッサで実行されるユーザプログラムにおけるタスク間排他命令及びタスク間排他解除命令による排他制御の処理の流れを示すフローチャートである。
【図11】図10に示す排他制御を説明するための概念図である。
【図12】二つのタスクのユーザプログラムが同時にアクセスしない場合での排他制御の一例を時系列的に示す概念図である。
【図13】複数のデータへのアクセスの排他制御のロック及びロック解除を指示するタスク間排他命令及びタスク間排他解除命令による排他制御の一例を時系列的に示す概念図である。
【図14】同一のユーザプログラム内に記載されたタスク間排他命令及びタスク間排他解除命令のプログラム例を示す概念図である。
【図15】複数のデータへのアクセスの排他制御のロック及びロック解除を指示するタスク間排他命令及びタスク間排他解除命令のネスティング構造のプログラム例を示す概念図である。
【図16】タスク間排他命令及びタスク間排他解除命令の同一のロック番号に対するネスティング構造による排他制御の一例を時系列的に示す概念図である。
【図17】タスクの実行終了時にタスク間排他命令によって排他制御のロック状態にある場合に排他制御のロック状態を強制的に解除する排他制御の一例を時系列的に示す概念図である。
【図18】図10に示す排他制御の処理のフローチャートに対して、タスク実行終了時でのロック状態の強制的な解除の処理を加えたフローチャートである。
【図19】ユーザプログラムがタスク毎に割り当てられる状態を説明するための説明図である。
【図20】複数のタスク間で共有するデータに対して少なくとも二つのユーザプログラムがアクセスする場合での不都合を説明するための説明図であって、(a)は、複数のタスク間で共有するデータに対して二つのユーザプログラムがアクセスする状態を示す図であり、(b)は、二つのタスクのユーザプログラムがデータに順にアクセスする処理例を示す図であり、(c)は、二つのユーザプログラムがデータに同時にアクセスする処理例を示す図である。
【図21】複数のタスク間で共有するデータに対して少なくとも二つユーザプログラムが同時にアクセスする場合での一のタスクのユーザプログラムへの従来の割込制御を時系列的に示す概念図である。
【発明を実施するための形態】
【0037】
以下、本発明の実施の形態について添付図面を参照しつつ説明する。なお、以下の実施の形態は、本発明を具体化した例であって、本発明の技術的範囲を限定する性格のものではない。
【0038】
[プログラマブルコントローラシステムの全体構成]
図1は、プログラマブルコントローラシステム300におけるユーザプログラム開発支援装置200及びそれと通信するプログラマブルコントローラ100を概念的に示す概略構成図である。
【0039】
図1に示すように、プログラマブルコントローラシステム300は、プログラマブルコントローラ(以下、「PLC」という)100とユーザプログラム開発支援装置200(ここではコンピュータ)とを備えている。
【0040】
プログラマブルコントローラシステム300において、PLC100は、入出力ユニット130で入力した信号をCPUユニット110の入出力メモリ117(後述する図2参照)に取り込み(INリフレッシュ)、予め登録されたラダー言語等のPLC制御用の言語が組まれたユーザプログラムP(図2参照)に基づき論理演算を行い(演算実行)、その演算実行結果を入出力メモリ117に書き込んで入出力ユニット130に送り出し(OUTリフレッシュ)、その後、いわゆる周辺サービス処理を行うといった一連のサイクリック処理に繰り返し行う。ユーザプログラム開発支援装置200は、PLC100に通信ケーブルCBを介して接続され、ユーザプログラムPをダウンロードし、PLC100におけるCPUユニット110のバックアップメモリ114(図2参照)やユーザメモリ116(図2参照)に格納させる。また、ユーザプログラム開発支援装置200は、PLC100に格納されているユーザプログラムPを修正等する場合には、PLC100に格納されているユーザプログラムPをアップロードし、必要な修正をした後、修正後のユーザプログラムPをPLC100に再度ダウンロードする。なお、図1において、符号210,211,212,230,231は、それぞれ、操作入力部、キーボード、ポインティングデバイス、表示出力部及び表示装置を示している。
【0041】
[PLCのハードウェア構成]
PLC100は、CPU(Central Processing Unit)部分(入出力更新処理、ユーザプログラム実行処理、周辺サービス処理などを司る部分)、入出力回路部分、通信回路部分、各種高機能回路部分等々を単一のハウジングに収容してなるオールインワンタイプのものと、それらの部分をそれぞれ専用のユニットハウジングに収容してなるビルディングブロックタイプのものとが知られている。本発明はいずれのタイプのPLCにも適用できるが、本実施の形態では、ビルディングブロックタイプのものを例にとって以下に説明する。また、本発明は、マルチタスク処理において、同時に一つのタスクしか実行できないシングルコアプロセッサ(以下単にシングルコアという。)による処理の他、複数のタスクを並行して実行するマルチコアプロセッサ(以下単にマルチコアという。)による処理にも適用することができる。
【0042】
本実施の形態では、PLC100は、CPUユニット110、通信ユニット120、複数の入出力ユニット130及び電源ユニット140を含んで構成されている。
【0043】
CPUユニット110は、PLC100の全体を統括制御するものであり、後ほど図3に示すフローチャートを参照して説明するように、入出力更新処理、ユーザプログラム実行処理、周辺サービス処理などを実行するように構成される。
【0044】
通信ユニット120は、LAN(Local Area Network)等のネットワークを介してユーザプログラム開発支援装置200との間における通信を制御する他、図示していないが、PLC100に対して他のPLC又はリモートIOターミナル等が接続されている場合には、それらとの間における通信制御にも供される。
【0045】
入出力ユニット(I/Oユニット)130は、外部入出力回路及び図示しない端子台を備えており、この端子台には図示しない光電スイッチ、リミットスイッチ、マイクロスイッチ等々のような各種の外部入力機器とリレー、ランプ、ソレノイド等の各種外部出力機器が配線される。
【0046】
図2は、PLC100におけるCPUユニット110のハードウェア構成を示すブロック図である。
【0047】
図2に示すように、CPUユニット110は、マイクロプロセッサ(MPU)111、システムメモリ(SROM)112、バックアップメモリ(BROM)114、ワークメモリ(WRAM)115、ユーザメモリ(URAM)116及び入出力メモリ(IORAM)117を備えている。
【0048】
マイクロプロセッサ111は、CPUユニット110の全体を統括制御するものであり、システムメモリ112に格納されたシステムプログラムSPを実行することによって、CPUユニット110に必要な各種の機能を実現するように構成されている。
【0049】
システムメモリ112は、この例ではフラッシュメモリなどの不揮発性メモリで構成されており、先に述べたように、マイクロプロセッサ111で実行される各種のシステムプログラムSPが格納されている。
【0050】
バックアップメモリ114は、フラッシュメモリなどの不揮発性メモリで構成され、電源オフ時にはバッテリが存在しない状態でも内容を保持するように構成されている。バックアップメモリ114には、PLC100の制御仕様に対応したユーザプログラムPが、所定のプログラム言語(例えば、ラダー言語など)にて作成され、マイクロプロセッサ111で実行可能なオブジェクトコードに変換されて格納される。
【0051】
ワークメモリ115は、マイクロプロセッサ111がシステムメモリ112から読み出されたシステムプログラムSPを実行する際のワークエリアとして機能するものであり、書き換え可能なRAMで構成されている。
【0052】
ユーザメモリ116は、ユーザプログラムPの実行用メモリとされている。ユーザメモリ116は、揮発性メモリとして作用するスタティックRAM(Static Random Access Memory)で構成されており、電源オフ時には内容を保持することができない。ユーザメモリ116には、電源が投入されたときに、バックアップメモリ114から転送されたユーザプログラムPが格納される。
【0053】
入出力メモリ117は、マイクロプロセッサ111がユーザメモリ116から読み出されたユーザプログラムPを実行する際に参照するものであり、その内部には、IOバス118を介して接続された入出力ユニット130(図1参照)の入出力端子のデータと対応する入出力データエリア、内部演算のみに使用される補助リレーエリア、演算途中で使用される各種の設定データ、カウントデータ等を格納するデータエリアの他に、特殊補助リレーエリアが設けられている。なお、これらのデータへのアクセスの排他制御については、図2に示す排他制御手段Qb1、排他制御解除手段Qb2及び強制解除手段Qb3と共に後ほど説明する。
【0054】
[PLC全体の処理例]
次に、マイクロプロセッサ111により実行されるPLC100全体の処理について図3を参照しながら以下に説明する。
【0055】
図3は、マイクロプロセッサ111により実行されるPLC100全体の処理例を示すフローチャートである。
【0056】
図3に示すように、PLC100の状態の変化は、電源投入時、動作モード変更時、ユーザプログラム開発支援装置200からPLC100へのダウンロード時等に発生する。すなわち、PLC100では、電源投入(Power On)により処理が開始されると、まず、各種のフラグやレジスタ類の初期設定を行うために初期化処理を実行し、その後「運転可能状態」に移行する。「運転可能状態」において動作モードは、ユーザプログラム開発支援装置200から到来するリクエストにより「プログラムモード」と「運転モード」との間で変更される。なお、電源投入時には、予め設定された動作モードが実行される。「プログラムモード」では、PLC100のシステム設定などを転送したり、ユーザプログラムPのPLC100へのダウンロードやPLC100からのアップロードを行ったり、入出力テーブルを作成したり、入力(IN)リフレッシュ、出力(OUT)リフレッシュを行ったりする処理を実行する。一方、「運転モード」では、入力更新処理や出力更新処理を実行したり、ユーザメモリ116からユーザプログラムPを構成するオブジェクトコードの各命令を順次に読み出し、読み出した命令を、入出力メモリ117の入出力データを参照して実行し、その実行結果に基づいて入出力データの書き換えを行う各命令対応処理を実行したり、ユーザプログラム開発支援装置200と適宜やり取りを行うことによって、ユーザプログラム開発支援装置200から到来するリクエストに対応した様々な処理を実行したりする。
【0057】
そして、「運転モード」においてユーザプログラムPがマルチタスク処理として実行される。シングルコアでは、マルチタスク処理を逐次実行する一方、マルチコアでは、マルチタスク処理を並列実行する。具体的には、複数のタスクをタスクA,B,Cとする場合において、タスクAをタスクB及びタスクCよりも優先的に実行する場合には、所定の最短周期(例えば1ms)の第1周期でユーザプログラムを実行することができる。例えば、タスクAは、1回分の制御サイクル(1msの時間間隔)を実行サイクルとすることができる。また、タスクBをタスクCよりも優先的に実行する場合には、第1周期よりも大きい周期(例えば2ms)の第2周期でユーザプログラムを実行することができる。例えば、タスクBは、2回分の制御サイクル(2msの時間間隔)を実行サイクルとすることができる。また、タスクCをタスクA及びタスクBよりも劣後して実行する場合には、第2周期よりも大きい周期(例えば4ms)の第3周期でユーザプログラムを実行することができる。例えば、タスクCは、4回分の制御サイクル(4msの時間間隔)を実行サイクルとすることができる。そして、タスクA、タスクB及びタスクCを並行に実行する場合には、タスクAを第1周期で、タスクBを第2周期で、タスクCを第3周期で並行に実行することができる。なお、優先度の高いタスクの周期を小さくする場合を例示したが、優先度と周期とは依存関係はなく、周期は優先度の低いタスクに比べ優先度の高いタスクの方が大きい場合もある。
【0058】
[ユーザプログラム開発支援装置のハードウェア構成]
ユーザプログラム開発支援装置200は、既述したように、本実施の形態では、ユーザプログラムPの作成、編集、PLC100へのダウンロード、PLC100からのアップロード、その他各種のパラメータ設定又は変更などに供される。
【0059】
一般に、この種のユーザプログラム開発支援装置200は、パーソナルコンピュータ等の通信機能を備えたコンピュータに所定のプログラムを格納(インストール)することにより構成される。
【0060】
ユーザプログラム開発支援装置200を用いてユーザプログラムPを作成する場合、複数のユーザプログラムP(P1〜Pn)(後述する図4及び図5参照)からなるユーザプログラム全体の情報を1つのプロジェクトPRとして管理する構成とされている。なお、nは2以上の整数である。
【0061】
プロジェクトPRのファイルデータ(以下、単にファイルという)には、複数のユーザプログラムP(P1〜Pn)からなるユーザプログラム全体が変数(データ)などの情報と共に保存される。ユーザプログラム全体が保存されたプロジェクトPRのファイルは、ハードディスク装置224(後述する図5参照)に格納される。
【0062】
図4は、プロジェクトPRのファイルのデータ構造を示す模式図である。図4に示すプロジェクトPRのファイルは、複数のユーザプログラムP1〜Pnからなるユーザプログラム全体及び変数テーブル、PLCシステム設定、I/Oテーブル、I/Oメモリデータなどの他の設定データを含んでいる。
【0063】
ユーザプログラム開発支援装置200は、PLC100と通信し、PLC100上で実行させるユーザプログラムP(P1〜Pn)を作成、編集してオブジェクトコードに変換する機能を有している。
【0064】
図5は、PLC100と通信するユーザプログラム開発支援装置200の概略構成を示すシステムブロック図である。
【0065】
図5に示すように、ユーザプログラム開発支援装置200は、操作入力部210(図1も参照)と、記憶部220と、表示出力部230(図1も参照)と、通信部240と、制御部250と、読み取り部260とを備えている。
【0066】
操作入力部210は、キーボード211やポインティングデバイス212等の入力装置を備えており、制御部250の入力系に接続されている。操作入力部210は、ユーザによる入力操作を受け付けて入力された操作情報を制御部250に送信する構成とされている。
【0067】
記憶部220は、ROM221、RAM222、フラッシュメモリ等のデータ書き換え可能な不揮発性メモリ223等の記憶装置及びこれも不揮発性メモリとして作用するハードディスク装置224等の大容量記憶装置を備えている。なお、ハードディスク装置224には、後述するユーザプログラム開発支援用プログラムBPが記録されたCD(Compact Disc)−ROM等の記録媒体Mを読み出す読み取り部260によって読み出されたユーザプログラム開発支援用プログラムBPを含むソフトウェアが予め格納(インストール)されている。また、記録媒体Mは、USB(Universal Serial Bus)メモリやSD(Secure Digital)メモリカードであってもよい。
【0068】
表示出力部230は、液晶表示パネルやEL(Electro Luminescence)表示パネル等の表示装置231を備えており、制御部250の出力系に接続されている。表示装置231は、制御部250からの出力表示情報を表示画面に表示する構成とされている。なお、表示装置231における表示画面には、タッチパネル等のタッチ入力操作装置が設けられていてもよい。タッチ入力操作装置は、表示画面に表示される画面の表示状態に応じた入力操作を行うことができ、操作入力部として作用する構成とされる。
【0069】
通信部240は、インターフェイス部241(具体的にはLANポート)を有しており、通信ケーブルCB(具体的にはLANケーブル)を介して制御部250とPLC100における通信ユニット120(図1参照)との間でデータの通信ができるようになっている。なお、PLC100及びユーザプログラム開発支援装置200は、例えば、USBポートやRS232Cなどのシリアルインターフェイスを介して相互に接続されるようになっていてもよい。
【0070】
制御部250は、CPU等の演算処理装置で構成されており、記憶部220のハードディスク装置224に予め格納されたユーザプログラム開発支援用プログラムBP等のソフトウェアプログラムを記憶部220のRAM222上にロードして実行することにより、各種の処理を行うようになっている。記憶部220のRAM222は、制御部250に対して作業用のワークエリアを提供する。
【0071】
[ユーザプログラム開発支援装置のソフトウェア構成]
そして、ユーザプログラム開発支援装置200における制御部250は、変換手段Qa(具体的にはコンパイル手段)として機能する。すなわち、ユーザプログラム開発支援用プログラムBPは、変換手段Qaに対応する変換ステップを制御部250に実行させる。
【0072】
(変換ステップ)
変換ステップでは、複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムPを実行するPLC100のユーザプログラムPをPLC100で実行可能なオブジェクトコードに変換(具体的にはコンパイル)する。
【0073】
変換ステップは、本実施の形態では、ユーザプログラムPのラダー言語、ST(ストラクチャード・テキスト)言語、SFC(シーケンシャル・ファンクション・チャート)言語をオブジェクトコードに変換する。ここで、オブジェクトコードは、PLC100におけるマイクロプロセッサ111に理解できる言語(マシン語)で記述されたプログラムのコードである。具体的には、変換ステップは、ユーザプログラムPがラダー言語である場合には、ラダー言語に対応するコンパイル処理(コンパイラ)によってラダー言語をオブジェクトコードに変換し、ユーザプログラムPがST言語である場合には、ST言語に対応するコンパイル処理(コンパイラ)によってST言語をオブジェクトコードに変換し、ユーザプログラムPがSFC言語である場合には、SFC言語に対応するコンパイル処理(コンパイラ)によってSFC言語をオブジェクトコードに変換する。
【0074】
そして、変換ステップは、ユーザプログラムPのラダー言語、ST言語及びSFC言語から、対応するコンパイラによって変換されたユーザプログラムPのオブジェクトコードを実行単位としてのタスクに割り当てる。
【0075】
図6は、ユーザプログラムP1〜Pnのラダー言語、ST言語及びSFC言語がタスクT1〜Tnに割り当てられた状態の一例を示す概念図である。
【0076】
図6に示すように、ユーザプログラム開発支援装置200では、ユーザプログラムPをラダー言語、ST言語又はSFC言語で記述することが可能であり、これにより、ユーザがラダー言語、ST言語及びSFC言語の何れかの言語を適宜使い分けることによって、処理に応じて最適な言語を使用することが可能となる。ユーザプログラムP1〜Pnは、オブジェクトコードに変換されてタスクT1〜Tnに割り当てられる。なお、本実施の形態では、1つのタスクに、1つのユーザプログラムを指定しているが、1つのタスクに、複数のユーザプログラムを指定してもよい。
【0077】
こうして作成されたユーザプログラムPは、コンパイラによって、PLC100におけるマイクロプロセッサ111で実行可能なオブジェクトコードに変換され、変換されたユーザプログラムPのオブジェクトコードは、PLC100へダウンロードされ、マイクロプロセッサ111(図2参照)で実行される。
【0078】
(データへのアクセスの排他制御)
次に、複数のタスクT1〜Tn(後述する図7参照)間で共有するデータDに対して少なくとも二つのユーザプログラムがデータDに対して同時にアクセスする場合でのデータDへのアクセスの排他制御について以下に説明する。
【0079】
PLC100におけるマイクロプロセッサ111は、ユーザプログラムPに記述されたタスク間排他命令(Lock)によって排他制御のロックを開始する排他制御手段Qb1(図2参照)、及び、ユーザプログラムPに記述されたタスク間排他解除命令(Unlock)によって排他制御のロック状態を解除する排他制御解除手段Qb2(図2参照)として機能する。すなわち、システムプログラムSPは、排他制御手段Qb1に対応する排他制御ステップと、排他制御解除手段Qb2に対応する排他制御解除ステップとをマイクロプロセッサ111に実行させる。なお、ここでは、複数のタスクT1〜Tnのうち、一のタスクT3のユーザプログラムP3及び他の優先度の高いタスクT2のユーザプログラムP2を例にとって説明する。
【0080】
図7は、複数のタスクT1〜Tn間で共有するデータDに対して二つのユーザプログラムP2,P3がデータDに対して同時にアクセスする場合での排他制御を説明するための概念図である。
【0081】
図7に示すように、ユーザプログラムP2,P3は、タスクT1〜Tn間で共有するデータDへのアクセスの排他制御が必要な処理の区間に限定して、排他制御を実行できる命令として、タスク間排他命令Lock(1)と、タスク間排他解除命令Unlock(1)とを含んでいる。本実施の形態では、タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)には、データDに対応させて識別符号(具体的にはロック番号1)が付されている。
【0082】
タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)は、本実施の形態では、ラダー言語及びST言語に適用されている。
【0083】
タスク間排他命令Lock(1)は、他のタスクのユーザプログラムの実行を排他して該ユーザプログラムによるデータDへのアクセスの排他制御のためにデータDへのアクセスを受け付けない排他制御をロックする。タスク間排他解除命令Unlock(1)は、他のタスクのユーザプログラムの実行の排他を解除してデータDへのアクセスの排他制御のためのロック状態を解除する。タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)は、互いに組み合わせて使用する。
【0084】
そして、PLC100において、排他制御ステップは、複数のタスクT1〜Tnのうち何れかのタスク(例えばT3)のユーザプログラム(例えばP3)のタスク間排他命令Lock(1)によってデータDへのアクセス開始前に他のタスク(例えばT2)のユーザプログラム(例えばP2)の実行を排他してユーザプログラム(例えばP2)によるデータDへのアクセスの排他制御をロックし、排他制御解除ステップは、ユーザプログラム(例えばP3)のタスク間排他解除命令Unlock(1)によってユーザプログラム(例えばP3)の実行の排他を解除してデータDへのアクセス終了後に排他制御のロック状態を解除する。
【0085】
図8は、タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)を用いたユーザプログラムP2,P3のST言語によるプログラム例を説明するための説明図である。図8(a)は、プログラム処理の概念図を示しており、図8(b)は、プログラム処理で使用するテーブルを示しており、図8(c)は、一のタスクT3でのユーザプログラムP3及び他のタスクT2でのユーザプログラムP2を示している。
【0086】
図8に示す例では、ユーザプログラムP2及びユーザプログラムP3は、それぞれ、タスクT2及びタスクT3で動作する。データDの一例であるグローバル変数GTable1にタスクT2のユーザプログラムP2及びタスクT3のユーザプログラムP3からアクセスするにあたって、ユーザプログラムP2でGTable1にレコードを追加し、ユーザプログラムP3でGTable1の最新レコードを取り出す(図8(a)参照)。
【0087】
データ型テーブルの「USER_TABLE」には、メンバーとしてデータ型がINT(整数)の「index」と、データ型がLREAL(倍長浮動小数点数)の「Record[0..99]」とが含まれており、変数テーブルの「GTable1」が「USER_TABLE」とされている(図8(b)参照)。
【0088】
そして、タスクT2では「GTable1」にレコードを追加するユーザプログラムP2が実行され、また、タスクT3では「GTable1」から最新レコードを取り出すユーザプログラムP3が実行される(図8(c)参照)。
【0089】
図9は、複数のタスクT1〜Tn間で共有するデータDに対して少なくとも二つユーザプログラムが同時にアクセスする場合での排他制御の一例を時系列的に示す概念図である。なお、図9において、「斜線」は、排他制御が必要な区間を表しており、「二重線」は、ユーザプログラムP1〜Pnの実行完了を表している。
【0090】
図9に示すように、タスク間排他命令Lock(1)は、タスクT3のユーザプログラムP3がデータD(図7参照)にアクセスを開始する前に、ユーザプログラムP3によるデータDへのアクセスより遅れてデータDにアクセスする他のタスクT2のユーザプログラムP2の実行を排他してユーザプログラムP2によるデータDへのアクセスを受け付けない排他制御の開始(排他制御のロック)を指示する。また、タスク間排他解除命令Unlock(1)は、タスクT3のユーザプログラムP3がデータDへのアクセスを終了した後に、他のタスクT2のユーザプログラムP2によるデータDへのアクセスを受け付けない排他制御の終了(排他制御のロック状態の解除)を指示する。こうすることで、二つのユーザプログラムP2,P3の双方が同時にデータDにアクセスしても、データDが正確に処理されないといった不都合を回避することが可能となる。
【0091】
具体的には、タスクT3のユーザプログラムP3において、タスク間排他命令Lock(1)の実行時に指定したロック番号(具体的には1)がロック状態ならば、他のタスクT2のユーザプログラムP2は、そのロック番号(具体的には1)のロックが解除されるまで、データDへのアクセスを待つ。すなわち、タスクT3のユーザプログラムP3でタスク間排他命令Lock(1)によるデータDへのアクセスの排他制御が先に指定され、後に他のタスクT2のユーザプログラムP2でタスク間排他命令Lock(1)によるデータDへのアクセスの排他制御が指定されると、タスクT3のユーザプログラムP3でタスク間排他解除命令Unlock(1)によるデータDへのアクセスの排他制御のロック解除が指定されるまでは、タスクT2のユーザプログラムP2でのタスク間排他命令Lock(1)によるデータDへのアクセスが行えず、その間、タスクT2のユーザプログラムP2でのタスク間排他命令Lock(1)によるデータDへのアクセスの排他制御のみが待たされる。
【0092】
つまり、他のタスクT2のユーザプログラムP2は、割込制御が禁止されていないので、タスクT2のユーザプログラムP2によるデータDへのアクセス開始から、タスクT3のユーザプログラムP3のタスク間排他解除命令Unlock(1)までの区間β1でデータDへのアクセスに関与しない処理を行える。ユーザプログラムP2は、ユーザプログラムP2のタスク間排他命令Lock(1)とユーザプログラムP3のタスク間排他解除命令Unlock(1)との間の区間γでデータDへのアクセスに関与する処理が待たされるものの、区間β1ではデータDへのアクセスに関与しない処理は待たされることがない。よって、ユーザプログラムP2は、区間β1においてデータDへのアクセスに関与しない処理が遅延することがなく、これにより、高精度性(定時性)が要求されるI/Oリフレッシュに影響を与えることがなく、しかも、データDへのアクセスに関与しないユーザプログラムを実行できるので、タスクT3の実行により、他のタスクT2のユーザプログラムの実行がタスク周期内に完了しないというケースを少なくすることができる。
【0093】
ここで、区間β1においては、タスクT3のユーザプログラムP3によるデータDへのアクセスに関与する処理は優先的に行える一方で、タスクT3のユーザプログラムP3によるデータDへのアクセスに関与しない処理について、例えばシングルコアによる処理ではタスクT2のユーザプログラムP2によるデータDへのアクセスに関与しない処理が優先されるために待ち状態となる。なお、例えばマルチコアによる処理を行う場合には、区間β1においてタスクT2のユーザプログラムP2によるデータDへのアクセスに関与しない処理と、タスクT3のユーザプログラムP3によるデータDへのアクセスに関与しない処理とが並行して処理される。
【0094】
図10は、PLC100におけるマイクロプロセッサ111で実行されるユーザプログラムPにおけるタスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)による排他制御の処理の流れを示すフローチャートである。また、図11は、図10に示す排他制御を説明するための概念図である。
【0095】
図10に示すタスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)による排他制御の処理では、先ず、複数のタスクT1〜Tnのうち、一のタスク(例えばT3)のユーザプログラム(例えばP3)がデータDにアクセスするにあたり、処理S11では、命令を読み出し、処理S12では、処理S11で読み出した命令を認識し、処理S13では、他のタスク(例えばT2)のユーザプログラム(例えばP2)の実行を排他してデータDへのアクセスを受け付けない排他制御のロック中か否かを判断する。処理S14では、排他制御のロック中とし、処理S15では、排他制御のロック中の他のタスク(例えばT2)のユーザプログラム(例えばP2)をタスク間排他解除命令Unlock(1)まで実行する。また、処理S16では、排他制御のロック待ちがあるか否かを判断し、処理S17では、他のタスク(例えばT2)のユーザプログラム(例えばP2)の実行の排他を解除してユーザプログラム(例えばP2)によるデータDへのアクセスの排他制御のロック状態を解除する。そして、処理S18では、全命令実行が完了か否かを判断する。
【0096】
ところで、タスクは、周期的に実行される周期実行型タスクと、何らかのイベントが発生したときに実行されるイベント実行型タスクとに大別されるが、周期実行型タスクは、最小単位の周期(制御サイクル)でかつ最も優先度が高い定周期タスクを含んでいる。周期実行型タスクでは、INリフレッシュ/OUTリフレッシュを定期的に行う。このことから、周期実行型タスクは、高速で高精度(定時的)な処理が要求される。すなわち、優先度が高いタスクほど、高速で高精度な処理が求められる。一方、イベント実行型タスクは、タスクの実行条件が成立したときに1回だけ実行するイベントタスクを含んでいる。イベント実行型タスクでは、発生したイベントに対する応答性能が要求される。
【0097】
この点に関し、従来の割込制御では、図21に示すように、他のタスクT1のユーザプログラムP1は、割込制御が禁止されている間、区間αでデータDへアクセスしない(データDへのアクセスに関与しない処理を行える)にも拘わらず、全体の処理が(データDへアクセスする処理だけでなく、データDへのアクセスに関与しない処理も)待たされる。これに対し、本実施の形態では、タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)を用いることで、図21に示すユーザプログラムP1は、区間αにおいてデータDへのアクセスに関与しない処理が遅延することがなく、これにより、図21に示す区間αでの他のタスクT1のユーザプログラムP1によるデータDへのアクセスに関与しない処理の高速性及び高精度性を維持することができる。
【0098】
以上説明したように、本実施の形態によると、例えば、一のタスクT3のユーザプログラムP3がデータDにアクセスを開始する前に他のタスクT2のユーザプログラムP2に対して割込制御を禁止しなくても、タスク間排他命令Lock(1)によって、タスクT3のユーザプログラムP3がデータDにアクセスを開始する前に、他のタスクT2のユーザプログラムP2の実行を排他してデータDへのアクセスを受け付けない排他制御をロックし、タスク間排他解除命令Unlock(1)によって、タスクT3のユーザプログラムP3がデータDへのアクセスを終了した後に、他のタスクT2のユーザプログラムP2の実行の排他を解除してデータDへのアクセスの排他制御のロック状態を解除することで、タスクT3のユーザプログラムP3が先にデータDにアクセスするときでも、他のタスクT2のユーザプログラムP2によるデータDへのアクセスに関与しない処理が待たされることがないようにすることができる。すなわち、他のタスクT2のユーザプログラムP2によるデータDへのアクセスに関与しない処理の遅延をなくすことができ、これにより、他のタスクT2のユーザプログラムP2によるデータDへのアクセスに関与しない処理の高速性及び高精度性を維持することが可能となる。
【0099】
なお、二つのタスク(例えばT2,T3)のユーザプログラム(例えばP2,P3)が同時にアクセスしない場合には次のような排他制御を行う。
【0100】
図12は、二つのタスクT2,T3のユーザプログラムP2,P3が同時にアクセスしない場合での排他制御の一例を時系列的に示す概念図である。なお、図12において、「斜線」は、指定したロック番号でロックしている区間を示している。
【0101】
図12に示すように、タスクT2のユーザプログラムP2は、タスクT3のユーザプログラムP3によるタスク間排他命令Lock(1)実行時に指定したロック番号(具体的には1)がタスク間排他解除命令Unlock(1)によって排他制御のロック状態が解除され、排他制御がロック状態でない場合には、タスク間排他命令Lock(1)によってロック状態にしてデータDへアクセスする。そして、タスクT2のユーザプログラムP2は、データDへアクセスした後、タスク間排他解除命令Unclockによってロック状態を解除する。
【0102】
(複数のデータへのアクセスの排他制御)
本実施の形態では、データDは、複数のデータD1〜Dm(mは2以上の整数)とされている。タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)は、それぞれ、他のタスクのユーザプログラムの実行の排他による複数のデータD1〜Dmへのアクセスの排他制御のロック及びロック状態の解除(ロック解除)を指示するものとされている。なお、iは1〜mの整数である。タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)には、互いに異なる複数種類のデータD1〜Dmに対応させて一意の(ユニークな)識別符号(具体的にはロック番号1〜m)が付されている。さらに説明すると、タスク間排他命令Lock(1)が指定されると、他のタスクのユーザプログラムの実行を排他してデータD1へのアクセスの排他制御をロックし、タスク間排他解除命令Unlock(1)が指定されると、他のタスクのユーザプログラムの実行の排他を解除してデータD1へのアクセスの排他制御のロック状態を解除する。また、タスク間排他命令Lock(2)が指定されると、データD2へのアクセスの排他制御をロックし、タスク間排他解除命令Unlock(2)が指定されると、他のタスクのユーザプログラムの実行の排他を解除してデータD2へのアクセスの排他制御のロック状態を解除する。以降のロック番号3〜mのタスク間排他命令Lock(3)〜Lock(m)及びタスク間排他解除命令Unlock(3)〜Unlock(m)についても、対応するデータD3〜Dmに対して同様に作用させることができる。
【0103】
そして、変換ステップ並びに排他制御ステップ及び排他制御解除ステップは、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)に付したロック番号1〜mにより、複数のデータD1〜Dmへのアクセスの排他制御のうち何れのデータへのアクセスの排他制御であるかを区別する。すなわち、タスク間排他命令Lock(i)とタスク間排他解除命令Unlock(i)との間に挟まれたデータが排他制御の対象となるデータとなる。ここでは、タスクT3のユーザプログラムP3がデータD2へアクセスし、他のタスクT2のユーザプログラムP2がデータD1へアクセスする場合を例にとって説明する。
【0104】
図13は、複数のデータD1,D2へのアクセスの排他制御のロック及びロック解除を指示するタスク間排他命令Lock(1),Lock(2)及びタスク間排他解除命令Unlock(1),Unlock(2)による排他制御の一例を時系列的に示す概念図である。なお、図13において、「斜線」は、指定したロック番号でロックしている区間を示している。
【0105】
変換ステップ並びに排他制御ステップ及び排他制御解除ステップは、図13に示すように、タスク間排他命令Lock(1),Lock(2)及びタスク間排他解除命令Unlock(1),Unlock(2)をそれぞれタスクT2,T3間で共有するデータD1,D2へのアクセスの排他制御をロック番号ごとに別々に区別することができる。そして、複数のデータD1,D2に対応する用途ごとにロック番号1,2を割り当てる。
【0106】
図13の例では、タスクT2のユーザプログラムP2は、アクセスするデータD1に対応して、タスク間排他命令及びタスク間排他解除命令がそれぞれLock(1)及びUnlock(1)とされている。また、タスクT3のユーザプログラムP3は、アクセスするデータD2に対応して、タスク間排他命令及びタスク間排他解除命令がそれぞれLock(2)及びUnlock(2)とされている。タスクT2のユーザプログラムP2によるデータD1へのアクセスは、ロック番号がタスクT3のユーザプログラムP3のロック番号とは異なるので、タスクT3のユーザプログラムP3によるデータD2へのアクセス排他制御のロック状態の場合でも、該排他制御のロック解除を待たず(該排他制御のロック状態に関係なく)行うことができる。
【0107】
このような排他制御では、タスク間排他命令(例えばLock(1),Lock(2))及びタスク間排他解除命令(例えばUnlock(1),Unlock(2))は、それぞれ、複数のデータ(例えばD1,D2)へのアクセスの排他制御のロック及びロック解除を指示するものであるので、ユーザによるユーザプログラム(例えばP2,P3)の作成において複数のデータ(例えばD1,D2)に対応する用途ごとに別々に排他制御を行うことが可能となる。また、タスク間排他命令(例えばLock(1),Lock(2))及びタスク間排他解除命令(例えばUnlock(1),Unlock(2))に複数のデータ(例えばD1,D2)に対応させて付してあるロック番号(例えば1,2)にて複数のデータ(例えばD1,D2)へのアクセスの排他制御のうち、何れのデータへのアクセスの排他制御であるかを区別するので、タスク間排他命令(例えばLock(1),Lock(2))及びタスク間排他解除命令(例えばUnlock(1),Unlock(2))に対応するそれぞれのデータ(例えばD1,D2)に対する排他制御を確実に行うことが可能となる。
【0108】
なお、同一のユーザプログラム(例えばP1)内において異なるロック番号(例えば3,4)のタスク間排他命令(例えばLock(3),Lock(4))及びタスク間排他解除命令(例えばUnlock(3),Unlock(4))を指定してもよい。
【0109】
図14は、同一のユーザプログラムP1内に記載されたタスク間排他命令Lock(3),Lock(4)及びタスク間排他解除命令Unlock(3),Unlock(4)のプログラム例を示す概念図である。
【0110】
図14に示すように、ユーザプログラムP1では、データD3,D4に対応して異なるロック番号3,4のタスク間排他命令Lock(3),Lock(4)及びタスク間排他解除命令Unlock(3),Unlock(4)を指定することができる。
【0111】
(ネスティング構造による排他制御)
また、本実施の形態では、複数のデータD1〜Dmへのアクセスの排他制御のロック及びロック解除を指示するタスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)は、対応関係にあるタスク間排他命令(例えばLock(1))及びタスク間排他解除命令(例えばUnlock(1))の間に、他の対応関係にあるタスク間排他命令(例えばLock(2))及びタスク間排他解除命令(例えばUnlock(2))が入るネスティング構造を構成する。すなわち、ユーザプログラム開発支援装置200では、変換ステップによりネスティング構造を構成するユーザプログラムがオブジェクトコードに変換され、PLC100では、変換されたユーザプログラムのオブジェクトコードにより排他制御ステップ及び排他制御解除ステップが実行される。
【0112】
図15は、複数のデータD1,D2へのアクセスの排他制御のロック及びロック解除を指示するタスク間排他命令Lock(1),Lock(2)及びタスク間排他解除命令Unlock(1),Unlock(2)のネスティング構造のプログラム例を示す概念図である。
【0113】
図15の例では、タスクT1のユーザプログラムP1におけるタスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)の中に、タスクT2のユーザプログラムP2におけるタスク間排他命令Lock(2)及びタスク間排他解除命令Unlock(2)が挿入されている。
【0114】
このような排他制御では、タスク間排他命令(例えばLock(1),Lock(2))及びタスク間排他解除命令(例えばUnlock(1),Unlock(2))をネスティング構造とするので、ユーザによるユーザプログラム(例えばP1)の作成にあたって排他制御の利用範囲を広げることができる。
【0115】
なお、ユーザプログラム開発支援装置200において、変換手段Qaの実行時(具体的にはユーザプログラムPをPLC100で実行可能なオブジェクトコードに変換するためのコンパイル手段によるコンパイル時)にタスク間排他命令Lock(i)とタスク間排他解除命令Unlock(i)との対応関係の組み合わせが合致しているか否かを検出し、対応関係の組み合わせが合致していない(例えば、Lock(1)が存在するがUnlock(1)がない、或いは、Unlock(2)が存在するがLock(2)がない)ときには、その旨(例えば、何れのロック番号で対応関係の組み合わせが合致していないか)をユーザ(通常はベンダ及びエンドユーザ)に報知(具体的には表示装置231に表示)するようにしてもよい。例えば、ユーザプログラム開発支援装置200において、ロジック上の不都合については回避することはできないものの、変換手段Qaの実行時(具体的にはユーザプログラムPをPLC100で実行可能なオブジェクトコードに変換するためのコンパイル手段によるコンパイル時)にタスク間排他解除命令(具体的にはUnlock(1))の入れ忘れを検出し、入れ忘れを検出したときには、その旨(具体的には何れのロック番号で入れ忘れを検出したか)をユーザ(通常はベンダ及びエンドユーザ)に報知(具体的には表示装置231に表示)するようにしてもよい。
【0116】
(利便性向上処理について)
ところで、PLC100のタスクT1〜Tnで実行するユーザプログラムP1〜Pnは、通常はベンダやエンドユーザが作成するものである。そのため、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)の使われ方を考慮して、以下の利便性向上処理を組み込んでいる。
【0117】
(同一ロック番号でのネスティング構造による排他制御)
本実施の形態では、プログラムを部品化して使用するファンクションブロックや、入力パラメータに基づき出力パラメータに出力するファンクションにおいて、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)を使用することができる。つまり、ファンクションブロックやファンクションにおいてタスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)が使用されるだけでなく、ファンクションブロックやファンクションを利用する上位のユーザプログラムにおいても間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)が使用されることもある。そうすると、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)のネスティング構造において、例えば、ユーザプログラムとファンクションブロックやファンクションとの間でユーザ(通常はベンダ及びエンドユーザ)が同一のロック番号のタスク間排他命令及びタスク間排他解除命令を複数使用してしまうことがある。このような使用を禁止してしまうと、ネスティング構造においてユーザが同一のロック番号のタスク間排他命令及びタスク間排他解除命令を一対にするように配慮する必要があり、ネスティング構造を使用するにあたって利便性が良くない。
【0118】
そこで、本実施の形態では、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)は、同一のロック番号に対して、ネスティング構造を構成するようにしている。
【0119】
図16は、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)の同一のロック番号に対するネスティング構造による排他制御の一例を時系列的に示す概念図である。なお、図16において、「斜線」は、指定したロック番号でロックしている区間を示している。ここでは、ユーザプログラムP1においてデータD1に対応するタスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)のネスティング構造を例にとって説明する。
【0120】
図16に示す例では、ユーザプログラムP1において、同じロック番号1でタスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)をネスティングしてロックしている。そして、タスク間排他命令Lock(1)の実行回数分(この例では2回)、タスク間排他解除命令Unlock(1)を実行しないと、排他制御のロック状態は解除することができない。なお、実行回数は、3回以上であってもよい。
【0121】
タスク間排他命令Lock(1)及びタスク間排他解除命令Unlock(1)の同一ロック番号でのネスティング構造は、例えば、タスク間排他命令Lock(1)についてネストの段数の回数だけカウントして排他制御のロックを行った後、同じロック番号のタスク間排他解除命令Unlock(1)についてネストの段数の回数だけカウントし、タスク間排他解除命令Unlock(1)のカウント数がタスク間排他命令Lock(1)のカウント数と等しくなると、排他制御のロック状態を解除することで実現することができる。或いは、同じロック番号を後入れ先出し (LIFO: Last In First Out; FILO: First In Last Out) の構造でPuch操作及びPop操作を行うスタックのデータ構造を用いることでも実現することができる。
【0122】
このような排他制御では、同一のロック番号のタスク間排他命令(例えばLock(1))及びタスク間排他解除命令(例えばUnlock(1))をネスティング構造とするので、ユーザ(通常はベンダやエンドユーザ)がネスティング構造において同一のロック番号のタスク間排他命令(例えばLock(1))及びタスク間排他解除命令(例えばUnlock(1))を複数使用することがあっても、その使用を許容することが可能となり、例えば、タスク間排他命令Lock(i)及びタスク間排他解除命令Unlock(i)をユーザプログラムとファンクションブロックやファンクションとの間でロック番号を意識することなく使用することができ、いわば構造化プログラミングに好適に利用することができる。これにより、ネスティング構造を使用するにあたって利便性を向上させることが可能となる。
【0123】
なお、本実施の形態では、同一ロック番号でのネスティング構造におけるネストの段数の回数は上限があり、それを超えるとエラーとなるが、その回数は一千万回以上であり、タスク間排他命令(例えばLock(1))及びタスク間排他解除命令(例えばUnlock(1))の複数使用を実質的に許容することができる。
【0124】
(タスク実行終了時でのロック状態の強制的な解除)
また、タスク(例えばT1)の1又は複数のユーザプログラムP1〜Pj(jは1又は2以上の整数)の実行終了時には、通常は排他制御のロック状態が解除されている必要がある。しかし、ユーザがユーザプログラム(例えばP2)においてデータDへのアクセスに対してタスク間排他解除命令(例えばUnlock(1))を入れ忘れると、タスク(例えばT1)の実行終了時にタスク間排他命令(例えばLock(1))によって排他制御のロック状態のままとなり、或いは、所定条件を満たしたときのみにタスク間排他解除命令(例えばUnlock(1))が実行されるようなロジックとされていたりすると、条件によっては、タスク(例えばT1)の実行終了時にタスク間排他命令(例えばLock(1))によって排他制御のロック状態のままとなり、そうすると、次のユーザプログラムP3以降、さらには次のタスク(例えばT2)以降では排他制御のロック状態が維持されることになる。すなわち、排他制御のロック状態が次のタスク以降に影響を及ぼしてしまう。
【0125】
そこで、本実施の形態では、PLC100におけるマイクロプロセッサ111は、タスク(例えばT1)の実行終了時にタスク間排他命令(例えばLock(1))によって排他制御のロック状態にある場合には、排他制御のロック状態を強制的に解除する強制解除手段Qb3(図2参照)として機能する。すなわち、システムプログラムSPは、強制解除手段Qb3に対応する強制解除ステップをマイクロプロセッサ111に実行させる。
【0126】
図17は、タスクT1の実行終了時にタスク間排他命令Lock(1)によって排他制御のロック状態にある場合に排他制御のロック状態を強制的に解除する排他制御の一例を時系列的に示す概念図である。なお、図17において、「斜線」は、データDへのアクセスの排他制御のロック状態を表しており、「二重線」は、タスクT1の実行終了を表している。また、図18は、図10に示す排他制御の処理のフローチャートに対して、タスク実行終了時でのロック状態の強制的な解除の処理を加えたフローチャートである。
【0127】
図18に示すフローチャートは、図10に示すフローチャートにおいて、処理S18の後に、処理S19,S20を設けたものである。なお、図18において、図10と同一処理には、同じ参照符号を付し、説明を省略する。
【0128】
図18に示す排他制御の処理において、処理S19では、一のタスク(例えばT1)について、タスク間排他命令(例えばLock(1))によって排他制御のロック状態にあるか否かを判断し、排他制御のロック状態にない場合には(処理S19:No)、そのままタスク(例えばT1)を終了する。一方、排他制御のロック状態にある場合には(処理S19:Yes)(図17参照)、排他制御のロック状態を強制的に解除し(処理S20)、処理を終了する。なお、タスク実行終了時にロック状態にあるか否かに拘わらず、排他制御のロック状態を強制的に解除してもよい。この場合、図18のフローチャートにおいて、処理S19を省略して処理S18の後に、処理S20を設けることができる。
【0129】
このような排他制御では、タスク(例えばT1)の実行終了時にタスク間排他命令(例えばUnlock(1))によって排他制御のロック状態が継続している場合には、排他制御のロック状態を強制的に解除するので、例えば、ユーザが複数のユーザプログラムP1〜Pjのうち、何れかのユーザプログラム(例えばP2)の誤りにより、タスク間排他解除命令(例えばUnlock(1))を入れ忘れたり、ロジック上の不都合があったりしても、次のタスク(例えばT2)以降では排他制御のロック状態が解除された状態となり、ユーザによるユーザプログラム(例えばP2)の誤りを補填することが可能となる。
【符号の説明】
【0130】
1〜m ロック番号(識別符号の一例)
100 プログラマブルコントローラ
200 ユーザプログラム開発支援装置
300 プログラマブルコントローラシステム
BP プログラム開発支援用プログラム
D データ
D1〜Dm データ
Lock(i) タスク間排他命令
M 記録媒体
P ユーザプログラム
P1〜Pn ユーザプログラム
Qa 変換手段
Qb1 排他制御手段
Qb2 排他制御解除手段
Qb3 強制解除手段
T1〜Tn タスク
Unlock(i) タスク間排他解除命令

【特許請求の範囲】
【請求項1】
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの制御方法であって、
前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令によって前記排他制御のロックを開始する排他制御ステップと、
前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令によって前記排他制御のロック状態を解除する排他制御解除ステップと
を実施する
ことを特徴とするプログラマブルコントローラの制御方法。
【請求項2】
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する変換手段を備えたユーザプログラム開発支援装置であって、
前記ユーザプログラムは、
前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令と、
前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令と
を含み、
前記変換手段は、前記タスク間排他命令及び前記タスク間排他解除命令を含む前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する
ことを特徴とするユーザプログラム開発支援装置。
【請求項3】
請求項2に記載のユーザプログラム開発支援装置であって、
前記データは、複数のデータとされており、
前記タスク間排他命令及び前記タスク間排他解除命令は、前記複数のデータへのそれぞれのアクセスの前記排他制御のロック及びロック状態の解除を指示するものであり、
前記タスク間排他命令及び前記タスク間排他解除命令には、前記複数のデータに対応させて識別符号が付されている
ことを特徴とするユーザプログラム開発支援装置。
【請求項4】
請求項3に記載のユーザプログラム開発支援装置であって、
前記タスク間排他命令及び前記タスク間排他解除命令は、対応関係にある前記タスク間排他命令及び前記タスク間排他解除命令の間に、他の対応関係にある前記タスク間排他命令及び前記タスク間排他解除命令が入るネスティング構造を構成する
ことを特徴とするユーザプログラム開発支援装置。
【請求項5】
請求項4に記載のユーザプログラム開発支援装置であって、
前記タスク間排他命令及び前記タスク間排他解除命令は、同一の前記識別符号に対して、前記ネスティング構造を構成する
ことを特徴とするユーザプログラム開発支援装置。
【請求項6】
ユーザプログラム開発支援装置における制御部を、複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラの前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する変換手段として機能させるユーザプログラム開発支援用プログラムであって、
前記ユーザプログラムは、
前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令と、
前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令と
を含み、
前記変換手段は、前記タスク間排他命令及び前記タスク間排他解除命令を含む前記ユーザプログラムを前記プログラマブルコントローラで実行可能なコードに変換する
ことを特徴とするユーザプログラム開発支援用プログラム。
【請求項7】
請求項6に記載のユーザプログラム開発支援用プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項8】
請求項2から請求項5までの何れか一つに記載のユーザプログラム開発支援装置と、前記プログラマブルコントローラとを備えた
ことを特徴とするプログラマブルコントローラシステム。
【請求項9】
複数のタスク間で共有するデータに対してアクセスする構成とされたユーザプログラムを実行するプログラマブルコントローラであって、
前記複数のタスクのうち、一のタスクのユーザプログラムが前記データにアクセスを開始する前に、他のタスクのユーザプログラムの実行を排他する排他制御のロックを指示するタスク間排他命令によって前記排他制御のロックを開始する排他制御手段と、
前記一のタスクのユーザプログラムが前記データへのアクセスを終了した後に前記排他制御のロック状態の解除を指示するタスク間排他解除命令によって前記排他制御のロック状態を解除する排他制御解除手段と
を備える
ことを特徴とするプログラマブルコントローラ。
【請求項10】
請求項9に記載のプログラマブルコントローラであって、
前記一のタスクの実行終了時に前記排他制御のロック状態を強制的に解除する強制解除手段を備える
ことを特徴とするプログラマブルコントローラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2012−208933(P2012−208933A)
【公開日】平成24年10月25日(2012.10.25)
【国際特許分類】
【出願番号】特願2012−58925(P2012−58925)
【出願日】平成24年3月15日(2012.3.15)
【出願人】(000002945)オムロン株式会社 (3,542)
【Fターム(参考)】