本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
<A.システム構成>
本実施の形態に係るPLCは、機械や設備などの制御対象を制御する。本実施の形態に係るPLCは、その構成要素としてCPUユニットを含む。CPUユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、制御プログラムおよびプログラムの実行を制御するシステムプログラムの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび記入力データを受信する。まず、図1を参照して、本実施の形態に係るPLC1のシステム構成について説明する。
図1は、本発明の実施の形態に係るPLCシステムの概略構成を示す模式図である。図1を参照して、PLCシステムSYSは、PLC1と、PLC1とフィールドネットワーク2を介して接続されるサーボモータドライバ3およびリモートIOターミナル5と、フィールド機器である検出スイッチ6およびリレー7とを含む。また、PLC1には、接続
ケーブル10などを介してPLCサポート装置8が接続される。
PLC1は、主たる演算処理を実行するCPUユニット13と、1つ以上のIOユニット14と、特殊ユニット15とを含む。これらのユニットは、PLCシステムバス11を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット12によって適切な電圧の電源が供給される。なお、PLC1として構成される各ユニットは、PLCメーカーが提供するものであるので、PLCシステムバス11は、一般にPLCメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク2については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
CPUユニット13の詳細については、図2を参照して後述する。
IOユニット14は、一般的な入出力処理に関するユニットであり、オン/オフといった2値化されたデータの入出力を司る。すなわち、IOユニット14は、検出スイッチ6などのセンサが何らかの対象物を検出している状態(オン)および何らの対象物も検出していない状態(オフ)のいずれであるかという情報を収集する。また、IOユニット14は、リレー7やアクチュエータといった出力先に対して、活性化するための指令(オン)および不活性化するための指令(オフ)のいずれかを出力する。
特殊ユニット15は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、IOユニット14ではサポートしない機能を有する。
フィールドネットワーク2は、CPUユニット13と遣り取りされる各種データを伝送する。フィールドネットワーク2としては、典型的には、各種の産業用イーサネット(登録商標)を用いることができる。産業用イーサネット(登録商標)としては、たとえば、EtherCAT(登録商標)、Profinet IRT、MECHATROLINK(登録商標)−III、Powerlink、SERCOS(登録商標)−III、CIP Motionなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット(登録商標)以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、DeviceNet、CompoNet/IP(登録商標)などを用いてもよい。本実施の形態に係るPLCシステムSYSでは、典型的に、本実施の形態においては、産業用イーサネット(登録商標)であるEtherCAT(登録商標)をフィールドネットワーク2として採用する場合の構成について例示する。
なお、図1には、PLCシステムバス11およびフィールドネットワーク2の両方を有するPLCシステムSYSを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク2ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク2を使用せずに、サーボモータドライバ3をPLCシステムバス11に直接接続してもよい。さらに、フィールドネットワーク2の通信ユニットをPLCシステムバス11に接続し、CPUユニット13から当該通信ユニット経由で、フィールドネットワーク2に接続された機器との間の通信を行うようにしてもよい。
なお、PLC1は、CPUユニット13にIOユニット14の機能やサーボモータドライバ3の機能を持たせることにより、IOユニット14やサーボモータドライバ3などを介さずにCPUユニット13が直接制御対象を制御する構成でもよい。
サーボモータドライバ3は、フィールドネットワーク2を介してCPUユニット13と接続されるとともに、CPUユニット13からの指令値に従ってサーボモータ4を駆動する。より具体的には、サーボモータドライバ3は、PLC1から一定周期で、位置指令値
、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ3は、サーボモータ4の軸に接続されている位置センサ(ロータリーエンコーダ)やトルクセンサといった検出器から、位置、速度(典型的には、今回位置と前回位置との差から算出される)、トルクといったサーボモータ4の動作に係る実測値を取得する。そして、サーボモータドライバ3は、CPUユニット13からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ3は、実測値が目標値に近づくようにサーボモータ4を駆動するための電流を調整する。なお、サーボモータドライバ3は、サーボモータアンプと称されることもある。
また、図1には、サーボモータ4とサーボモータドライバ3とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
図1に示すPLCシステムSYSのフィールドネットワーク2には、さらに、リモートIOターミナル5が接続されている。リモートIOターミナル5は、基本的には、IOユニット14と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートIOターミナル5は、フィールドネットワーク2でのデータ伝送に係る処理を行うための通信カプラ52と、1つ以上のIOユニット53とを含む。これらのユニットは、リモートIOターミナルバス51を介して、データを互いに遣り取りできるように構成される。
PLCサポート装置8については後述する。
<B.CPUユニットのハードウェア構成>
次に、図2を参照して、CPUユニット13のハードウェア構成について説明する。図2は、本発明の実施の形態に係るCPUユニット13のハードウェア構成を示す模式図である。図2を参照して、CPUユニット13は、マイクロプロセッサ100と、チップセット102と、メインメモリ104と、不揮発性メモリ106と、システムタイマ108と、PLCシステムバスコントローラ120と、フィールドネットワークコントローラ140と、USBコネクタ110とを含む。チップセット102と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
マイクロプロセッサ100およびチップセット102は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ100は、チップセット102から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット102は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ100に必要な命令コードを生成する。さらに、チップセット102は、マイクロプロセッサ100での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
マイクロプロセッサ100は、以下に説明する実施の形態1〜7においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が2以上の場合を意味する(コア数が2の場合も含む)。
CPUユニット13は、記憶手段として、メインメモリ104および不揮発性メモリ106を有する。
メインメモリ104は、揮発性の記憶領域(RAM)であり、CPUユニット13への電源投入後にマイクロプロセッサ100で実行されるべき各種プログラムを保持する。また、メインメモリ104は、マイクロプロセッサ100による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ104としては、DRAM(
Dynamic Random Access Memory)やSRAM(Static Random Access Memory)といった
デバイスが用いられる。
一方、不揮発性メモリ106は、リアルタイムOS(Operating System)、PLC1のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ100がアクセスできるようにメインメモリ104にコピーされる。このような不揮発性メモリ106としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、DVD−RAM(Digital Versatile Disk Random Access Memory)のような光学記録媒
体などを用いることもできる。
システムタイマ108は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ100に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、OS(Operating System)やBIOS(Basic Input Output System)などによって、任意の周期で割り込み信号を発生するよ
うに設定することもできる。このシステムタイマ108が発生する割り込み信号を利用して、後述するような制御サイクルごとの制御動作が実現される。
CPUユニット13は、通信回路として、PLCシステムバスコントローラ120およびフィールドネットワークコントローラ140を有する。これらの通信回路は、出力データの送信および入力データの受信を行う。
なお、CPUユニット13自体にIOユニット14やサーボモータドライバ3の機能を持たせる場合は、通信回路による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてCPUユニット13の内部で行われる送信および受信となる。
PLCシステムバスコントローラ120は、PLCシステムバス11を介したデータの遣り取りを制御する。より具体的には、PLCシステムバスコントローラ120は、DMA(Dynamic Memory Access)制御回路122と、PLCシステムバス制御回路124と
、バッファメモリ126とを含む。なお、PLCシステムバスコントローラ120は、PLCシステムバスコネクタ130を介してPLCシステムバス11と内部的に接続される。
バッファメモリ126は、PLCシステムバス11を介して他のユニットへ出力されるデータ(以下「出力データ」とも称す。)の送信バッファ、および、PLCシステムバス11を介して他のユニットから入力されるデータ(以下「入力データ」とも称す。)の受信バッファとして機能する。なお、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ126に一次的に保持される。また、他のユニットから転送された入力データは、バッファメモリ126に一次的に保持された後、メインメモリ104に移される。
DMA制御回路122は、メインメモリ104からバッファメモリ126への出力データの転送、および、バッファメモリ126からメインメモリ104への入力データの転送を行う。
PLCシステムバス制御回路124は、PLCシステムバス11に接続される他のユニットとの間で、バッファメモリ126の出力データを送信する処理および入力データを受
信してバッファメモリ126に格納する処理を行う。典型的には、PLCシステムバス制御回路124は、PLCシステムバス11における物理層およびデータリンク層の機能を提供する。
フィールドネットワークコントローラ140は、フィールドネットワーク2を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ140は、用いられるフィールドネットワーク2の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはEtherCAT(登録商標)規格に従うフィールドネットワーク2が採用されるので、通常のイーサネット(登録商標)通信を行うためのハードウェアを含む、フィールドネットワークコントローラ140が用いられる。EtherCAT(登録商標)規格では、通常のイーサネット(登録商標)規格に従う通信プロトコルを実現する一般的なイーサネット(登録商標)コントローラを利用できる。但し、フィールドネットワーク2として採用される産業用イーサネット(登録商標)の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット(登録商標)コントローラが用いられる。また、産業用イーサネット(登録商標)以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
バッファメモリ146は、フィールドネットワーク2を介して他の装置などへ出力されるデータ(このデータについても、以下「出力データ」と称す。)の送信バッファ、および、フィールドネットワーク2を介して他の装置などから入力されるデータ(このデータについても、以下「入力データ」とも称す。)の受信バッファとして機能する。上述したように、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定の装置へ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ146に一次的に保持される。また、他の装置から転送された入力データは、バッファメモリ146に一次的に保持された後、メインメモリ104に移される。
DMA制御回路142は、メインメモリ104からバッファメモリ146への出力データの転送、および、バッファメモリ146からメインメモリ104への入力データの転送を行う。
フィールドネットワーク制御回路144は、フィールドネットワーク2に接続される他の装置との間で、バッファメモリ146の出力データを送信する処理および入力データを受信してバッファメモリ146に格納する処理を行う。典型的には、フィールドネットワーク制御回路144は、フィールドネットワーク2における物理層およびデータリンク層の機能を提供する。
USBコネクタ110は、PLCサポート装置8とCPUユニット13とを接続するためのインターフェイスである。典型的には、PLCサポート装置8から転送される、CPUユニット13のマイクロプロセッサ100で実行可能なプログラムなどは、USBコネクタ110を介してPLC1に取込まれる。
<C.CPUユニットのソフトウェア構成>
次に、図3を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、CPUユニット13のマイクロプロセッサ100によって実行される。
図3は、本発明の実施の形態に係るCPUユニット13で実行されるソフトウェア構成を示す模式図である。図3を参照して、CPUユニット13で実行されるソフトウェアと
しては、リアルタイムOS200と、システムプログラム210と、ユーザプログラム236との3階層になっている。
リアルタイムOS200は、CPUユニット13のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ100がシステムプログラム210およびユーザプログラム236を実行するための基本的な実行環境を提供する。このリアルタイムOSは、典型的には、PLCのメーカーあるいは専門のソフトウェア会社などによって提供される。
システムプログラム210は、PLC1としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム210は、スケジューラプログラム212と、出力処理プログラム214と、入力処理プログラム216と、シーケンス命令演算プログラム232と、モーション演算プログラム234と、その他のシステムプログラム220とを含む。なお、一般には出力処理プログラム214および入力処理プログラム216は、連続的(一体として)に実行されるので、これらのプログラムを、IO処理プログラム218と総称する場合もある。
ユーザプログラム236は、ユーザにおける制御目的に応じて作成される。すなわち、PLCシステムSYSを用いて制御する対象のライン(プロセス)などに応じて、任意に設計されるプログラムである。
後述するように、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム236、シーケンス命令演算プログラム232、およびモーション演算プログラム234を、制御プログラム230と総称する場合もある。
このように、CPUユニット13のマイクロプロセッサ100は、記憶手段に格納されたシステムプログラム210およびユーザプログラム236を実行する。
以下、各プログラムについてより詳細に説明する。
ユーザプログラム236は、上述したように、ユーザにおける制御目的(たとえば、対象のラインやプロセス)に応じて作成される。ユーザプログラム236は、典型的には、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム236は、PLCサポート装置8などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム236は、PLCサポート装置8から接続ケーブル10を介してCPUユニット13へ転送され、不揮発性メモリ106などに格納される。
スケジューラプログラム212は、出力処理プログラム214、入力処理プログラム216、および制御プログラム230について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム212は、ユーザプログラム236およびモーション演算プログラム234の実行を制御する。
本実施の形態に係るCPUユニット13では、モーション演算プログラム234に適した一定周期の実行サイクル(制御サイクル)を処理全体の共通サイクルとして採用する。そのため、1つの制御サイクル内で、すべての処理を完了することは難しいので、実行す
べき処理の優先度などに応じて、各制御サイクルにおいて実行を完了すべき処理と、複数の制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム212は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム212は、各制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
出力処理プログラム214および入力処理プログラム216については、図4を参照して後に詳述する。
シーケンス命令演算プログラム232は、ユーザプログラム236で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。
モーション演算プログラム234は、ユーザプログラム236による指示に従って実行され、サーボモータドライバ3やパルスモータドライバといったモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。
その他のシステムプログラム220は、図3に個別に示したプログラム以外の、PLC1の各種機能を実現するためのプログラム群をまとめて示したものである。
リアルタイムOS200は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。本実施の形態に係るPLC1においては、CPUユニット13のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力(送信)するためのイベント(割り込み)として、制御サイクル開始の割り込みが初期設定される。リアルタイムOS200は、制御サイクル開始の割り込みが発生すると、マイクロプロセッサ100での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム212に切り替える。なお、リアルタイムOS200は、スケジューラプログラム212およびスケジューラプログラム212がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム210に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、CPUユニット13とPLCサポート装置8との間の接続ケーブル10(USB)などを介した通信処理に関するものが含まれる。
なお、制御プログラム230およびスケジューラプログラム212は、記憶手段であるメインメモリ104および不揮発性メモリ106に格納される。
<D.メインメモリ構成>
次に、図4を参照して、CPUユニット13のメインメモリ104に構成される記憶領域について説明する。
図4は、本発明の実施の形態に係るCPUユニット13のメインメモリ104の領域構成を示す模式図である。図4を参照して、メインメモリ104には、各種のプログラム領域1041と、制御プログラムの作業領域1042と、PLCシステムバス送信バッファ1043と、PLCシステムバス受信バッファ1044と、フィールドネットワーク送信バッファ1045と、フィールドネットワーク受信バッファ1046とが形成される。
制御プログラムの作業領域1042には、各出力データに対応する出力同期バッファが生成される出力同期バッファ領域1042a、および、各入力データに対応する入力同期バッファが生成される入力同期バッファ領域1042bが、システムプログラム210によって生成される。
また、PLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045(以下、両者を「送信バッファ」と総称する)、ならびに、PLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046(以下、両者を「受信バッファ」と総称する)についても、システムプログラム210によって生成される。
出力処理プログラム214(図3)は、ユーザプログラム236の実行によって生成された出力データを出力同期バッファから送信バッファにコピーする。すなわち、出力処理プログラム214は、出力コピー命令を含む。
具体的には、出力処理プログラム214は、PLCシステムバス11へ送信する出力データを出力同期バッファからPLCシステムバス送信バッファにコピーする。その際、PLCシステムバス送信バッファ1043において送信先のユニットごとにまとめて配置する形式になるように出力データを再配置する。
また、出力処理プログラム214は、フィールドネットワーク2へ送信する出力データを出力同期バッファからフィールドネットワーク送信バッファ1045にコピーする。その際、フィールドネットワーク送信バッファ1045においてシリアルフレームとして送信できる形式に出力データを再配置する。
出力処理プログラム214は、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140が、マイクロプロセッサ100からの送信実行指示を必要とする場合は、そのような指示を発行する。それらの通信コントローラがシステムタイマ108や自己の有するタイマを利用するなどして自律的に送信を実行する場合には、マイクロプロセッサ100が送信実行指示を発行する必要はない。
入力処理プログラム216は、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140が受信して受信バッファに格納した入力データを入力同期バッファにコピーする。すなわち、入力処理プログラム216は、入力コピー命令を含む。
具体的には、入力処理プログラム216は、PLCシステムバスコントローラ120が受信してPLCシステムバス受信バッファ1044格納した入力データ、および/または、フィールドネットワークコントローラ140が受信してフィールドネットワーク受信バッファ1046に格納した入力データを、入力同期バッファにコピーする。その際、制御プログラム230が使用するのに適した形式に入力データを再配置する。
入力処理プログラム216は、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140が、マイクロプロセッサ100からの受信実行指示を必要とする場合は、そのような指示を発行する。それらの通信コントローラがシステムタイマ108や自己の有するタイマを利用するなどして自律的に受信を実行する場合には、マイクロプロセッサ100からの受信実行指示を発行する必要はない。
フィールドネットワーク2としてEtherCAT(登録商標)を用いる場合には、フィールドネットワークコントローラ140から送信されたフレームが、スレーブ機器とデータ交換をしながら、スレーブ機器を一巡して戻ってくる。フィールドネットワークコントローラ140は戻ってきたフレームを自動的に受信するので、マイクロプロセッサ100が受信実行指示を発行する必要はない。
PLCシステムバスコントローラ120のDMA制御回路122は、PLCシステムバス送信バッファ1043に格納されている出力データをPLCシステムバスコントローラ120のバッファメモリ146へ転送するとともに、バッファメモリ146に格納されている入力データをPLCシステムバス受信バッファ1044へ転送する。この転送された入力データは、PLCシステムバス受信バッファ1044に格納される。
フィールドネットワークコントローラ140のDMA制御回路142は、フィールドネットワーク送信バッファ1045に格納されている出力データをフィールドネットワークコントローラ140のバッファメモリ146へ転送するとともに、バッファメモリ146に格納されている入力データをフィールドネットワーク受信バッファ1046へ転送する。この転送された入力データは、フィールドネットワーク受信バッファ1046に格納される。
制御プログラムの作業領域1042、PLCシステムバス送信バッファ1043、PLCシステムバス受信バッファ1044、フィールドネットワーク送信バッファ1045、および、フィールドネットワーク受信バッファ1046は、それぞれのアクセスを互いに独立に制御できるように構成されている。そのため、たとえば、以下に示す(1)〜(3)といった複数の動作を並列実行することができる。
(1) マイクロプロセッサ100が行う、ユーザプログラム236実行に伴う制御プログラムの作業領域1042へのアクセス。
(2) PLCシステムバスコントローラ120のDMA制御回路122が行う、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044とPLCシステムバスコントローラ120内のバッファメモリ126との間のデータ転送のための、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044へのアクセス。
(3) フィールドネットワークコントローラ140のDMA制御回路142が行う、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046とフィールドネットワークコントローラ140内のバッファメモリ146との間のデータ転送のための、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046へのアクセス。
<E.システムプログラムの全体処理動作>
次に、システムプログラム210の全体処理動作について説明する。
システムプログラム210は、入力データの入力に関する基本的な処理(命令)として以下を含む。すなわち、システムプログラム210の実行段階では、PLC1の制御動作の実行準備処理およびPLC1の制御動作の実行制御処理が順次実行される。より具体的には、システムプログラム210は、PLC1の制御動作の実行準備処理として、以下の(1)および(2)の処理を含む。
(1) 受信された入力データを格納する受信バッファをメインメモリ104(記憶手段)内に生成する処理。
(2) 制御プログラム230から参照される入力データごとに、その制御プログラム230が入力データの参照先とする入力同期バッファをメインメモリ104(記憶手段)
内(入力同期バッファ領域1042b)に生成する処理。
また、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(3)および(4)の処理を含む。
(3) 受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理。
(4) 制御プログラム230を実行開始させる制御プログラム開始処理。
また、制御プログラム230が複数ある場合、入力同期バッファは、各制御プログラムについて、その制御プログラムから参照される入力データごとに生成される。
さらに、システムプログラム210は、出力データの出力に関する基本的な処理(命令)として以下を含む。すなわち、システムプログラム210の実行段階では、PLC1の制御動作の実行準備処理およびPLC1の制御動作の実行制御処理が順次実行される。より具体的には、システムプログラム210は、PLC1の制御動作の実行準備処理として、さらに以下の(5)および(6)の処理を含んでもよい。
(5) 送信されるべき出力データを格納する送信バッファをメインメモリ104(記憶手段)内(出力同期バッファ領域1042a)に生成する処理。
(6) 送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとにメインメモリ104(記憶手段)内に生成する処理。
また、システムプログラム210は、PLC1の制御動作の実行制御処理として、さらに以下の(7)の処理を含んでもよい。
(7) 出力データを出力同期バッファから送信バッファにコピーする出力コピー処理。
さらに、制御プログラム230の実行準備処理は、具体的な実装形態に応じたその他の実行準備処理を含みうる。制御動作の実行準備処理に含まれる各処理の実行順序は、適宜設計される。
また、制御プログラム230の実行制御処理は、具体的な実装形態に応じたその他の実行制御処理を含みうる。制御動作の実行制御処理に含まれる各処理は、制御プログラム230を繰り返し実行するのに伴い繰り返し実行されるものであり、その実行順序は具体的な実施形態に依存する。
図5は、本発明の実施の形態に係るCPUユニットにおけるシステムプログラムの全体処理を示すフローチャートである。図5に示すように、まず、PLC1の制御動作の実行準備処理が実行され(ステップS1)、続いて、PLC1の制御動作の実行制御処理が実行される(ステップS2)。制御プログラム230の実行準備処理(ステップS1)に含まれる各処理の実行順序は、適宜設計される。同様に、制御プログラム230の実行制御処理(ステップS2)に含まれる各処理は、制御プログラム230を繰り返し実行するのに伴い繰り返し実行されるものであり、その実行順序は具体的な実装形態に依存する。
以下、具体的な実装形態の典型例として、実施の形態1〜13について説明する。
<F.単一バッファ方式(実施の形態1)>
(f1:概要)
実施の形態1においては、複数の制御プログラムが時分割的に実行される場合を想定する。特に、それぞれの制御プログラムから参照される入力データごとに、入力同期バッファがそれぞれ設けられ、かつ、それぞれの制御プログラムが出力データを格納する出力同期バッファがそれぞれ設けられる構成について説明する。
(f2:シーケンス図)
図6は、実施の形態1に係る入力方向の動作を示すシーケンス図である。図7は、図6に示す制御サイクル1および2について拡大して示すシーケンス図である。一方、図8は、実施の形態1に係る出力方向の動作を示すシーケンス図である。図9は、図8に示す制御サイクル1および2について拡大して示すシーケンス図である。
図6〜図9には、2つの制御プログラム(制御プログラム1および2)が時分割的に実行される例を示す。この例において、制御プログラム1および2から参照される入力データごとに、入力同期バッファ1および2がそれぞれ設けられ、かつ、それぞれの制御プログラム1および2が出力データを格納する出力同期バッファ1および2がそれぞれ設けられている。なお、入力同期バッファ1および2には、受信バッファを介して、入力データがそれぞれ転送され、また、出力同期バッファ1および2からは、それぞれ出力データが送信バッファへ転送される。
なお、図6〜図9においては、説明を簡略化する観点から、2つの制御プログラムが時分割的に実行される例を示すが、時分割的に実行される制御プログラムの数は任意に設定できる。この点は、本実施の形態に限られず、後述する他の実施の形態についても同様である。したがって、説明の便宜上、実行される制御プログラムを1つしか示していない実施の形態であっても、本実施の形態に係る説明(特に、図6〜図9)を参考にすれば、複数の制御プログラムが時分割的に実行される動作を容易に理解できるであろう。
図6〜図9の制御プログラム1および2のそれぞれの時間軸に沿って示した破線の角丸の矩形は、対応する制御プログラムの実行サイクルを示す。たとえば、制御プログラム1は、1回分の制御サイクルを実行サイクルとしており、同様に、制御プログラム2は、2回分の制御サイクルを実行サイクルとしている。なお、以下、説明に用いるシーケンス図においては同様の方法で実行サイクルを表す。
図6および図8に示すシステムプログラムの実行時間は、制御サイクルの開始から、その制御サイクルで最初に実行開始される制御プログラムの実行開始までの期間に対応している。この期間において、システムプログラムは、出力データの送信、受信バッファから入力同期バッファへの入力データのコピー(入力データの受信は通信コントローラが行う)、制御プログラムの実行開始の実行制御を行う。この期間における処理内容は、実施の形態によって異なることがある。
図7および図9に示す拡大図では、制御プログラムの実行終了後にもシステムプログラムの実行時間があることを示している。この期間において、システムプログラムは、出力同期バッファから送信バッファへの出力データのコピー、次に実行開始すべき制御プログラムがある場合はその実行開始の制御を行う。システムプログラムが実行されるこの微小な時間は、説明の便宜上、図6および8、ならびに他の実施の形態に係るシーケンス図では図示を省略している。
制御サイクル開始割込みがあれば、リアルタイムOSは、制御プログラムの実行を中断し、システムプログラムを実行する。
いずれの実施の形態においても、制御サイクルの周期が一定であることは、入力データ
の受信周期および出力データの送信周期を一定にしやすいという観点から好ましいが、必須ではない。たとえば、制御プログラムが設定された実行サイクル内に終了しない場合に、実行サイクル内における最後の制御サイクル時間を延長することにより実行サイクル時間を延長するようにしてもよい。
図6〜図9には、制御プログラム1および2のそれぞれの時間軸に沿って、その制御プログラムの実行状態を示す。より具体的には、制御プログラム1および2は、予め定められた処理を実行すべき実行サイクル内において、未だ処理を開始していない状態である「実行前」、当該実行サイクル内において処理が行なわれている「実行中」、および、当該実行サイクル内においては既に処理が完了している「実行終了」のいずれかの実行状態にある。
このような実行状態は、実行状態記録領域に各制御プログラムの実行状態を記録することよって表される。実行状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。実行状態の記録の態様は、適宜定めることができる。たとえば、実行状態ごとにその実行状態にある制御プログラムを特定する情報(制御プログラムの名称や識別番号など)を記録する態様、制御プログラムごとに実行状態を表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。実行状態フラグは、たとえば、「実行前フラグ」がオンなら「実行前」状態、「実行中フラグ」がオンなら「実行中」状態、などのように用いる。このような実行状態変数としては、たとえば、状態変数の値が「1」なら「実行前」、「2」なら「実行中」、などのように設定することができる。以下、説明する他の実施の形態における制御プログラムの実行状態の管理についても同様である。
通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)による入力データの受信後、1つの制御プログラムが複数の入力データの使用を要求する場合、それらの入力データについての、受信バッファから対応する入力同期バッファへのコピーは一括して行われる。入力同期バッファは、そのように一括してコピーが行われる単位でグループ化される。入力同期バッファの書込禁止状態は、同じグループの入力同期バッファに共通に設定される。入力同期バッファの状態が、そのような同じグループの入力同期バッファに共通して設定されることは、以下、説明する他の実施の形態における、「参照先」状態、「書込先」状態、「待機」状態、「最新」状態のいずれについても同様である。入力データを、2つまたは3つの入力同期バッファからなる入力同期バッファの組にコピーする場合は、1回の一括コピーでコピー先になるのは組の中の1つの入力同期バッファであるから、同じ組に属する2つまたは3つの入力同期バッファはそれぞれ異なるグループに属することになる。
実施の形態1においては、出力同期バッファの状態は設定されていないが、以下、説明する他の実施の形態において出力同期バッファの状態が設定される場合は、入力同期バッファの状態が設定される場合と同様、出力データが送信バッファに一括してコピーされる単位で出力同期バッファはグループ化される。出力同期バッファの状態は、同じグループに属する出力同期バッファに共通に設定される。
このような、入力同期バッファの書込禁止状態は、書込禁止状態記録領域に入力同期バッファが「書込禁止」状態であることを記録することよって表される。書込禁止状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。入力同期バッファが「書込禁止」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力
同期バッファのグループのうち「書込禁止」状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに「書込禁止」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。
実施の形態1においては、出力同期バッファは、出力データごとに1つ生成され、「書込禁止」状態への設定も行われない。したがって、制御プログラム230が出力データを格納する通常の変数領域を出力同期バッファとして使用してもよい。
図6に示す受信タイミング、および/または、図8に示した送信タイミングとは異なるタイミングで、追加の受信および/または送信を行うようにしてもよい。このような場合には、そのような追加の受信で扱われる入力データ、および/または、追加の送信で扱われる出力データ、に関係する追加の入力同期バッファおよび/または出力同期バッファを設け、それを使用して、追加の制御プログラムをマイクロプロセッサ100の空き時間で実行するようにしてもよい。
図6に示すシーケンス図では、制御サイクル2における入力データの受信直後は入力同期バッファ2が「書込禁止」状態になっているので、入力同期バッファ2への入力データのコピーが行われない。それにより、制御サイクル1において実行開始した制御プログラム2は、制御サイクル2において実行を再開した後も、更新されていない入力データを入力同期バッファ2から読み出すことになるので、実行開始から実行終了まで一貫性のある入力データを用いて処理を実行することができる。
また、制御サイクル3におけるように、制御プログラム2が短時間で実行終了した場合は、制御サイクル4ですでに入力同期バッファ2の書込禁止状態が解除されているので、制御サイクル4における入力同期バッファ2へのコピーが行われる。
(f3:フローチャート)
図10は、実施の形態1に係る実行動作を示すフローチャートである。図10を参照して、マイクロプロセッサ100は、システムプログラム210における、PLC1の制御動作の実行準備処理を実行する(ステップS1)。続いて、マイクロプロセッサ100は、システムプログラム210における、PLC1の制御動作の実行制御処理を実行する(図5に示すステップS2)。このPLC1の制御動作の実行制御処理の詳細な一例がステップS200〜S238に相当する。
まず、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を待つ(ステップS200)。制御サイクル開始の割り込み信号を受けると(ステップS200においてYES)、マイクロプロセッサ100は、現在の制御サイクルから開始する制御プログラムを「実行前」状態に設定するとともに、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)に対して送信実行を指示する(ステップS202)。すなわち、制御プログラム1の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム1を「実行前」状態に設定する。同様に、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム2を「実行前」状態に設定する。
また、送信実行の指示に応答して、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)に格納されているデータが他のユニットなどへ送信される。
その後、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ1
20および/またはフィールドネットワークコントローラ140)からの受信完了通知を待つ(ステップS204)。
通信回路は、入力データをメインメモリ104の受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納した後、受信完了通知を発行する。通信回路からの受信完了通知を受けると(ステップS204においてYES)、マイクロプロセッサ100は、受信バッファに格納されている入力データを、入力同期バッファ1および入力同期バッファ2にコピーする(ステップS206)。但し、入力同期バッファ1および入力同期バッファ2のうち、「書込禁止」状態になっている入力同期バッファには入力データのコピーは行われない。
その後、マイクロプロセッサ100は、制御プログラム1の実行状態を判断する(ステップS210)。制御プログラム1が「実行前」状態である場合(ステップS210において「実行前」)には、マイクロプロセッサ100は、入力同期バッファ1の実行状態を「書込禁止」に設定し、制御プログラム1の実行状態を「実行中」状態に設定し、さらに制御プログラム1の実行を開始する(ステップS212)。
制御プログラム1が「実行中」状態である場合(ステップS210において「実行中」)には、マイクロプロセッサ100は、制御プログラム1の未実行の部分の実行を開始する(ステップS214)。なお、入力同期バッファ1の実行状態「書込禁止」については変更せず、そのまま維持する。
制御プログラム1が「実行終了」状態である場合(ステップS210において「実行終了」)には、処理はステップS230へ進む。
ステップS212またはS214において、制御プログラム1の実行を開始(または、再開)すると、マイクロプロセッサ100は、制御プログラム1の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS216)。なお、ステップS212またはS214において、制御プログラム1の実行が開始(または、再開)されることで、マイクロプロセッサ100で実行される処理は、システムプログラムによる処理から制御プログラム1による処理に切り替わる。すなわち、制御プログラム1の実行開始から実行終了するまでの間は、マイクロプロセッサ100は、システムプログラムを実行しない。そして、制御プログラム1の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムOS200が、マイクロプロセッサ100での制御プログラム1の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム1の実行が終了した通知(制御プログラム1の実行終了通知)があれば、マイクロプロセッサ100における実行対象は、制御プログラム1からシステムプログラムへ戻る。
制御プログラム1の実行終了通知を受けると(ステップS216において「実行終了通知」)、マイクロプロセッサ100は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーし、入力同期バッファ1の「書込禁止」状態を解除する(ステップS218)。そして、処理はステップS230へ進む。
一方、制御プログラム1の実行終了通知までに次の制御サイクル開始の割り込みを受けると(ステップS216において「制御サイクル開始」)、マイクロプロセッサ100で実行中の制御プログラム1は中断され、マイクロプロセッサ100は、ステップS202以下の処理を再度実行する。ただし、図6〜9は、制御プログラム1の実行サイクルが制御サイクルに等しく、制御プログラム1が制御サイクル内に実行終了する処理量しか含ま
ないようにプログラムされている場合を示している。制御プログラム1の実行が制御サイクル内に終了しなければ、制御プログラム1の実行サイクルが延長される。すなわち、制御プログラム1の実行が中断されて、次の制御サイクルにおいて制御プログラム1の未実行の部分が実行される。あるいは、制御プログラム1の実行が制御サイクル(実行サイクル)内に終了しなかった段階で、エラー発生と判断してエラー処理を行うようにしてもよい。図6〜9の制御プログラム2や、他の実施の形態についても、制御プログラムが実行サイクル内に終了しなかった場合には、同様に、実行サイクルの延長またはエラー処理が行われる。
ステップS230において、マイクロプロセッサ100は、制御プログラム2の実行状態を判断する(ステップS230)。制御プログラム2が「実行前」状態である場合(ステップS220において「実行前」)には、マイクロプロセッサ100は、入力同期バッファ2の実行状態を「書込禁止」に設定し、制御プログラム2の実行状態を「実行中」状態に設定し、さらに制御プログラム2の実行を開始する(ステップS232)。
制御プログラム2が「実行中」状態である場合(ステップS230において「実行中」)には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始する(ステップS234)。なお、入力同期バッファ2の実行状態「書込禁止」については変更せず、そのまま維持する。
制御プログラム2が「実行終了」状態である場合(ステップS230において「実行終了」)には、処理はステップS200へ進む。すなわち、次の制御サイクル開始の割り込み信号を待つ。
ステップS232またはS234において、制御プログラム2の実行を開始(または、再開)すると、マイクロプロセッサ100は、制御プログラム2の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS236)。なお、ステップS232またはS234において、制御プログラム2の実行が開始(または、再開)されることで、マイクロプロセッサ100で実行される処理は、システムプログラムによる処理から制御プログラム2による処理に切り替わる。すなわち、制御プログラム2の実行開始から実行終了するまでの間は、マイクロプロセッサ100は、システムプログラムを実行しない。そして、制御プログラム2の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムOS200が、マイクロプロセッサ100での制御プログラム2の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム2の実行が終了した通知(制御プログラム2の実行終了通知)があれば、マイクロプロセッサ100における実行対象は、制御プログラム2からシステムプログラムへ戻る。
制御プログラム2の実行終了通知を受けると(ステップS236において「実行終了通知」)、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定し、出力同期バッファ2に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーし、入力同期バッファ2の「書込禁止」状態を解除する(ステップS238)。そして、処理はステップS200へ進む。すなわち、次の制御サイクル開始の割り込み信号を待つ。
一方、制御プログラム2の実行終了通知までに次の制御サイクル開始の割り込みを受けると(ステップS236において「制御サイクル開始」)、マイクロプロセッサ100で実行中の制御プログラム2は中断され、マイクロプロセッサ100は、ステップS202以下の処理を再度実行する。
(f4:まとめ)
上述したように、実施の形態1においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)および(b)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図10に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする1つの入力同期バッファ(図6および図7に示す入力同期バッファ1および2)をメインメモリ104(記憶手段)内(図4に示す入力同期バッファ領域1042b)に生成する処理(図10に示すステップS1)。
また、実施の形態1においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(c)〜(e)の処理を含む。
(c) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファに、コピー先の入力同期バッファが「書込禁止」状態でないことを条件として、コピーする入力コピー処理(図10に示すステップS206)。
(d) 実行開始させる制御プログラムが参照する入力同期バッファを「書込禁止」状態した後に、制御プログラムを実行開始させる制御プログラム開始処理(図10に示すステップS212およびS232)。
(e) 制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理(図10に示すステップS218およびS238)。
上述のような実施の形態1に係る入力データに関する処理方式によれば、入力同期バッファへの「書込禁止」状態の期間が存在したとしても、たとえば入出力処理と各制御プログラムとに共通の制御サイクルの中で、実行の優先度制御がなされているような場合には、制御プログラムは、その実行開始時における最新の入力データを参照できる。すなわち、このような場合には、制御プログラムにおいて参照すべき入力データは、「書込禁止」状態の期間中以外の期間における入力コピー処理によって取得することができる。
また、実施の形態1に係る入力データに関する処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが単一に設けられているので、入力データの数および/または制御プログラムの数が多くても、入力同期バッファが占めるメモリサイズが小さくて済む。また、入力同期バッファが単一である点において、アルゴリズムが単純であるので、システムプログラムの設計を容易化できる。
一方、実施の形態1においては、システムプログラム210は、出力データの出力に関する処理を含めると、PLC1の制御動作の実行準備処理として、以下の(α)〜(γ)の処理を含む。
(α) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)および送
信されるべき出力データを格納する送信バッファ(図4に示すPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045)をメインメモリ104(記憶手段)内に生成する処理(図10に示すステップS1)。
(β) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする1つの入力同期バッファ(図6および図7に示す入力同期バッファ1および2)をメインメモリ104(記憶手段)内(図4に示す入力同期バッファ領域1042b)に生成する処理(図10に示すステップS1)。
(γ) 送信バッファにコピーされる出力データが格納される出力同期バッファ(図8および図9に示す出力同期バッファ1および2)をメインメモリ104(記憶手段)内(図4に示す出力同期バッファ領域1042a)に生成する処理(図10に示すステップS1)。
また、実施の形態1においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(δ)〜(ζ)の処理を含む。
(δ) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図10に示すステップS206)。
(ε) 制御プログラムを実行開始させる制御プログラム開始処理(図10に示すステップS212およびS232)。
(ζ) 制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを出力同期バッファから送信バッファにコピーする出力コピー処理(図10に示すステップS218およびS238)。
上述のような実施の形態1に係る出力データに関する処理方式によれば、出力同期バッファは、出力データごとに1つで足りる。
また、実施の形態1に係る出力データに関する処理方式によれば、制御プログラムの実行が終了することをもって、出力データは出力同期バッファから送信バッファにコピーされる。したがって、制御プログラムの実行中のまだ確定していない出力データが送信されることを回避できる。また、制御プログラムの実行サイクル中であるかどうかにかかわらず、送信バッファへのコピー後の最初の送信タイミングで出力データが送信されるので、確定した出力データを迅速に送信することができる。
<G.2入力同期バッファへの順次コピー方式(実施の形態2)>
(g1:概要)
上述の実施の形態1においては、制御プログラムの実行中は入力同期バッファを「書込禁止」状態とし、「書込禁止」状態になっている入力同期バッファには、入力データはコピーされない構成を採用した例を示す。これに対して、制御プログラムの実行状態にかかわらず、受信バッファに格納されている入力データを入力同期バッファにコピーできる構成について説明する。
より具体的には、実施の形態2においては、入力同期バッファとして、制御プログラムから参照される入力データごとに、2つの入力同期バッファを入力同期バッファの組として生成する。
(g2:シーケンス図)
図11は、実施の形態2に係る入力方向の動作を示すシーケンス図である。図11には、2つの制御プログラム(制御プログラム1および2)が時分割的に実行される例を示す。この例において、制御プログラム1から参照される入力データについて、一組の入力同期バッファ(入力同期バッファ1Aおよび1B)が設けられ、同様に、制御プログラム2から参照される入力データについて、一組の入力同期バッファ(入力同期バッファ2Aおよび2B)が設けられる。
なお、実施の形態2に係る出力方向の動作(出力データに関する処理)は、上述の実施の形態1における動作(図8に示すシーケンス図に記載の処理)と同様であるので、ここでは、その詳細な説明は繰り返さない。
実施の形態2では、受信バッファからの入力データのコピーは、一組の入力同期バッファのうち常に特定の一方(入力同期バッファ1Aまたは2A)に対して行われる。入力データは、制御プログラムの実行開始前に入力同期バッファの一方(入力同期バッファ1Aまたは2A)から他方(入力同期バッファ1Bまたは2B)にコピーされる。他方の入力同期バッファ(入力同期バッファ1Bまたは2B)に格納された入力データが制御プログラムから参照される。
すなわち、一組の入力同期バッファのうち、一方の入力同期バッファに対しては、制御プログラムの実行状態にかわらず、常に受信バッファから入力データをコピーできる。他方の入力同期バッファに対しては、受信バッファからの入力データのコピー動作にかかわらず、制御プログラムが当該入力同期バッファに格納されている入力データを参照できる。
(g3:フローチャート)
図12は、実施の形態2に係る実行動作を示すフローチャートである。図12のフローチャートにおいては、図10に示すフローチャートと同一の処理を実行するステップについては、図10と同一のステップ番号を付与している。
図12に示すフローチャートは、図10に示すフローチャートと比較して、ステップS206,S212,S218,S232,S238に代えて、それぞれステップS206A,S212A,S218A,S232A,S238Aの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
通信回路からの受信完了通知を受けると(ステップS204においてYES)、マイクロプロセッサ100は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、入力同期バッファ1Aおよび入力同期バッファ2Aにコピーする(ステップS206A)。入力同期バッファ1Aおよび2Aは、「書込禁止」状態には設定されないので、入力データのコピーは制限されない。
制御プログラム1が「実行前」状態である場合(ステップS210において「実行前」)に実行されるステップS212Aにおいては、マイクロプロセッサ100は、入力同期バッファ1Aに格納されている入力データを入力同期バッファ1Bにコピーし、制御プログラム1の実行状態を「実行中」状態に設定し、さらに制御プログラム1の実行を開始する(ステップS212A)。
なお、制御プログラム1が「実行中」状態である場合(ステップS210において「実行中」)に実行されるステップS214においては、入力同期バッファ1Aに格納されている入力データの入力同期バッファ1Bへのコピーは、行われない。
制御プログラム1の実行終了通知を受けた場合(ステップS216において「実行終了通知」)に実行されるステップS218Aにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS218A)。
制御プログラム2が「実行前」状態である場合(ステップS230において「実行前」)に実行されるステップS232Aにおいては、マイクロプロセッサ100は、入力同期バッファ2Aに格納されている入力データを入力同期バッファ2Bにコピーし、制御プログラム2の実行状態を「実行中」状態に設定し、さらに制御プログラム2の実行を開始する(ステップS232A)。
なお、制御プログラム2が「実行中」状態である場合(ステップS230において「実行中」)に実行されるステップS234においては、入力同期バッファ2Aに格納されている入力データの入力同期バッファ2Bへのコピーは、行われない。
制御プログラム2の実行終了通知を受けた場合(ステップS236において「実行終了通知」)に実行されるステップS238Aにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定し、出力同期バッファ2に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS238A)。
(g4:まとめ)
上述したように、実施の形態2においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)および(b)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図10に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、第1入力同期バッファ(図11に示す入力同期バッファ1A,2A)および第2入力同期バッファ(図11に示す入力同期バッファ1B,2B)を同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図10に示すステップS1)。ここで、第2入力同期バッファは、制御プログラムが入力データの参照先とする入力同期バッファである。
また、実施の形態2においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(c)および(d)の処理を含む。
(c) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する第1入力同期バッファ(図11に示す入力同期バッファ1A,2A)にコピーする入力コピー処理(図12に示すステップS206A)。
(d) 第1入力同期バッファ(図11に示す入力同期バッファ1A,2A)に格納さ
れているデータを第2入力同期バッファ(図11に示す入力同期バッファ1B,2B)にコピーした後に、制御プログラムを実行開始させる制御プログラム開始処理(図12に示すステップS212AおよびS232A)。
上述のような実施の形態2に係る処理方式によれば、受信バッファから第1入力同期バッファへの入力データのコピーを行うことが常に可能であり、さらに制御プログラムの実行開始時に第1入力同期バッファから第2入力同期バッファへのコピーを行うので、制御プログラムは、その実行開始時における最新の入力データを参照することができる。
また、実施の形態2に係る処理方式によれば、第1入力同期バッファへの入力データのコピーの際にコピー先の入力同期バッファの状態についての判断をする必要がない点で、アルゴリズムが単純であるので、システムプログラムの設計を容易化できる。
<H.2入力同期バッファの選択利用方式(実施の形態3)>
(h1:概要)
実施の形態2においては、2つの入力同期バッファを使用して入力データを順送りする形態について例示した。これに対して、実施の形態3においては、複数(典型的には、2つ)の入力同期バッファを選択的に利用することで、入力データを書き込むことのできる入力同期バッファを常に少なくとも1つは確保することができる構成について説明する。
(h2:シーケンス図)
図13は、実施の形態3に係る入力方向の動作を示すシーケンス図である。図13には、典型的に、複数のコアを有するマルチコア(具体的には、デュアルコア)のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア1がシステムプログラムを実行し、コア2が制御プログラム1を実行するものとする。但し、実施の形態3に係る方式は、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
より具体的には、図13に示す実施の形態3に係る方式においては、システムプログラムと制御プログラム1とが並列実行される。制御プログラム1は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム1もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム1の実行が開始されることを基本としている。
図13に示すとおり、制御プログラム1から参照される入力データについて、一組の入力同期バッファ(入力同期バッファ1Aおよび1B)が設けられる。入力同期バッファの状態には、書込禁止状態、参照先状態、最新状態(最新データを格納している状態)がある。入力同期バッファの状態は、書込禁止状態記録領域、参照先状態記録領域、最新状態記録領域に、それぞれの入力同期バッファが書込禁止状態、参照先状態、最新状態であることを記録することよって表される。これらの各記録領域は、システムプログラム210の「PLC1の制御動作の制御プログラムの実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成される。入力同期バッファが書込禁止状態、参照先状態、最新状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち書込禁止状態、参照先状態、最新状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに書込禁止状態、参照先状態、最新状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。
なお、実施の形態3に係る出力方向の動作(出力データに関する処理)は、上述の実施の形態1における動作(図8に示すシーケンス図に記載の処理)と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
(h3:フローチャート)
図14は、実施の形態3に係る実行動作を示すフローチャートである。図14を参照して、マイクロプロセッサ100(コア1)は、システムプログラムにおける、PLC1の制御動作の実行準備処理を実行する(ステップS1)。続いて、マイクロプロセッサ100(コア1)は、システムプログラム210における、PLC1の制御動作の実行制御処理を実行する(図5に示すステップS2)。このPLC1の制御動作の実行制御処理の詳細な一例がステップS250〜S274に相当する。
まず、マイクロプロセッサ100(コア1)は、制御サイクル開始の割り込み信号を待つ(ステップS250)。制御サイクル開始の割り込み信号を受けると(ステップS250においてYES)、マイクロプロセッサ100(コア1)は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)に対して送信実行を指示する(ステップS252)。送信実行の指示に応答して、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)に格納されているデータが他のユニットなどへ送信される。
続いて、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)からの受信完了通知、または、制御プログラム1の実行終了通知を待つ(ステップS254)。
制御プログラム1の実行終了通知を受けると(ステップS254において「実行終了通知」)、処理はステップS270へ進む。
一方、通信回路からの受信完了通知を受けると(ステップS254において「受信完了通知」)、マイクロプロセッサ100(コア1)は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、前回入力データを書き込んだのと同じ入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)にコピーするとともに、入力データを書き込んだ入力同期バッファ1を「最新」状態に設定する(ステップS256)。但し、前回入力データを書き込んだのと同じ入力同期バッファ1が「書込禁止」状態に設定されている場合には、他方の入力同期バッファ1に入力データがコピーされる。
その後、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を判断する(ステップS260)。制御プログラム1が「実行終了」状態である場合(ステップS260において「実行終了」)には、マイクロプロセッサ100(コア1)は、「最新」状態に設定されている入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「参照先」状態に設定するとともに「書込禁止」状態にも設定し、さらに、制御プログラム1の実行状態を「実行中」状態に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS262)。そして、処理はステップS266へ進む。
制御プログラム1が「実行中」状態または「継続実行中」状態である場合(ステップS260において「実行中」/「継続実行中」)には、マイクロプロセッサ100(コア1
)は、制御プログラム1の実行状態を「継続実行中」状態に設定する(ステップS264)。このとき、対応する入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)の「参照先」状態および「書込禁止」状態はいずれも維持されて、制御プログラム1の実行が継続される。そして、処理はステップS266へ進む。
ステップS262またはS264において、制御プログラム1の実行を開始(または、再開)させると、マイクロプロセッサ100(コア1)は、制御プログラム1の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS266)。
制御プログラム1の実行終了通知までに次の制御サイクル開始の割り込みを受けると(ステップS266において「制御サイクル開始」)、マイクロプロセッサ100(コア1)は、ステップS252以下の処理を再度実行する。
一方、制御プログラム1の実行終了通知を受けると(ステップS266において「実行終了通知」)、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を判断する(ステップS270)。
制御プログラム1が「実行中」状態である場合(ステップS270において「実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーし、「参照先」状態である入力同期バッファ1の「書込禁止」状態を解除する(ステップS272)。そして、処理はステップS270以前に実行されていた処理(ステップS254またはS266)の続きへ戻る。ステップS266の続きへ戻った後は、ステップS250へ進む。
一方、制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーし、「参照先」状態である入力同期バッファ1の「書込禁止」状態を解除し、「最新」状態に設定されている入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「参照先」状態に設定するとともに「書込禁止」状態にも設定し、その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS274)。そして、処理はステップS270以前に実行していた処理(ステップS254またはS266)の続きへ戻る。ステップS266の続きへ戻った後は、ステップS250へ進む。
(h4:まとめ)
上述したように、実施の形態3においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)〜(c)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図14に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第1入力同期バッファ(図13に示す入力同期バッファ1A)および第2入力同期バッファ(図13に示す入力同期バッファ1B)を同期バッファの組とし
てメインメモリ104(記憶手段)内に生成する処理(図14に示すステップS1)。
(c) 最新状態記録領域をメインメモリ104(記憶手段)内に生成する処理(図14に示すステップS1)。
また、実施の形態3においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(d)〜(f)の処理を含む。
(d) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する第1入力同期バッファ(図13に示す入力同期バッファ1A)および第2入力同期バッファ(図13に示す入力同期バッファ1B)のうち「書込禁止」状態ではないいずれかの入力同期バッファをコピー先としてコピーし、さらに、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理(図14に示すステップS256)。
(e) 制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参照する「参照先」状態とし、かつ、当該入力同期バッファを「書込禁止」状態とする制御プログラム開始処理(図14に示すステップS262)。
(f) 制御プログラムの実行が終了すると、入力同期バッファの「書込禁止」状態を解除する書込禁止解除処理(図14に示すステップS274)。
上述のような実施の形態3に係る入力データに関する処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが2つ設けられており、常に少なくとも1つの入力同期バッファに入力データを書込可能である。そのため、いつでも入力データのコピーが可能である。さらに、制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
なお、「書込禁止」状態を採用することにおいて共通する実施の形態1と比較すると、実施の形態3においては、たとえば、図13中に円で囲って示すように、一方の入力同期バッファの「書込禁止」状態の期間中に入力データのコピーを行うべきタイミングが到来し場合でも、他方の入力同期バッファに対してコピーを実行したうえで、そのコピーした入力データを後に制御プログラムが参照することが可能である。したがって、入力データのコピーのタイミングが「書込禁止」状態の期間中に到来したために、その入力データを制御プログラムが参照できなくなるという事態を回避できる。特に、マルチコアのマイクロプロセッサでシステムプログラムと制御プログラムとを並列実行する場合には、一方の入力同期バッファの「書込禁止」状態の期間中に他方の入力同期バッファにコピーした入力データを制御プログラムが参照するということが発生するので、実施の形態3はより有利となる。
<I.更新フラグ型の2入力同期バッファ入替方式(実施の形態4)>
(i1:概要)
上述の実施の形態3においては、少なくとも1つの「書込禁止」状態ではない入力同期バッファが存在するようにすることで、いつでも入力データのコピーを可能にする構成を説明した。これに対して、実施の形態4および5では、入力同期バッファに対して「書込先」状態と「参照先」状態とを排他的に設定し、これらの状態を入れ替えることにより、
いつでも入力データのコピーを可能にする構成が採用される。特に、実施の形態4においては、最新入力データ更新フラグを利用して入力同期バッファの状態の入れ替えを制御する構成について例示する。
(i2:シーケンス図)
図15は、実施の形態4および5に係る入力方向の動作を示すシーケンス図である。実施の形態4および後述する実施の形態5について、図15に示すシーケンス図を共通的に参照しつつ、その詳細について説明する。より具体的には、後述する実施の形態5においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う構成について説明する。
そのため、図15を参照して、実施の形態4について説明する場合には、「最新入力データ更新フラグ1」についてのみ着目し、入力同期バッファ1Aおよび1Bの時間軸に沿って示した「最新」状態の識別は不要である。一方、図15を参照して、実施の形態5について説明する場合には、入力同期バッファ1Aおよび1Bの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ1」は不要となる。
また、図15に示すシーケンス図においては、「書込先」状態および「参照先」状態を、単に、「書込先」および「参照先」と記述する。
図15には、典型的に、複数のコアを有するマルチコア(具体的には、デュアルコア)のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア1がシステムプログラムを実行し、コア2が制御プログラム1を実行するものとする。但し、実施の形態4および5に係る方式は、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
より具体的には、図15に示す実施の形態4および5に係る方式においては、システムプログラムと制御プログラム1とが並列実行される。制御プログラム1は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム1もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム1の実行が開始されることを基本としている。
なお、実施の形態4および5に係る出力方向の動作(出力データに関する処理)は、上述の実施の形態1における動作(図7に示すシーケンス図に記載の処理)と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
このような、入力同期バッファの「書込先」状態および「参照先」状態は、書込先状態記録領域および参照先状態記録領域に入力同期バッファが「書込先」状態および「参照先」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。入力同期バッファが「書込先」状態/「参照先」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態および/または「参照先」状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態/「参照先」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録
する態様、などを採用することができる。特に、本実施の形態においては、1つの入力同期バッファに対して、「書込先」状態または「参照先」状態が互いに重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、1つのフラグまたは状態変数によって「書込先」状態か「参照先」状態かを表してもよい。
なお、実施の形態4に係るシーケンス図(図15)に表されている最新入力データ更新フラグ1の垂直線(時間軸に沿った線)のうち、太い線の部分は最新入力データ更新フラグ1がオンであることを表す。この最新入力データ更新フラグ1は、システムプログラムが「PLC1の制御動作の実行準備処理」において、メインメモリ104内の制御プログラムの作業領域1042に生成する。ここで、最新入力データ更新フラグ1は、一括してコピーが行われるときのコピー先となる入力同期バッファの組の集合ごとに設けられる。
(i3:フローチャート)
図16は、実施の形態4に係る実行動作を示すフローチャートである。図16のフローチャートにおいては、図14に示すフローチャートと同一の処理を実行するステップについては、図14と同一のステップ番号を付与している。
図16に示すフローチャートは、図14に示すフローチャートと比較して、ステップS256,S262,S272,S274に代えて、それぞれステップS256A,S262A,S272A,S274Aの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
通信回路からの受信完了通知を受けた場合(ステップS254において「受信完了通知」)に実行されるステップS256Aにおいて、マイクロプロセッサ100(コア1)は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)にコピーするとともに、最新入力データ更新フラグ1をオンに設定する(ステップS256A)。
制御プログラム1が「実行終了」状態である場合(ステップS260において「実行終了」)において実行されるステップS262Aにおいて、最新入力データ更新フラグ1がオンに設定されていれば、「書込先」状態であった入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「書込先」状態に設定した上で、最新入力データ更新フラグ1をオンからオフに変更する(ステップS262A)。さらに、ステップS262Aにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行中」状態に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS262A)。
なお、制御プログラム1が「実行中」状態または「継続実行中」状態である場合(ステップS260において「実行中」/「継続実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「継続実行中」状態に設定する(ステップS264)。このとき、対応する入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)の「参照先」状態および「書込先」状態はいずれも維持されて、制御プログラム1の実行が継続される。
制御プログラム1が「実行中」状態である場合(ステップS270において「実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PL
Cシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS272A)。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)において実行されるステップS274Aにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS274A)。さらに、ステップS274Aにおいては、マイクロプロセッサ100(コア1)は、最新入力データ更新フラグ1がオンに設定されていれば、「書込先」状態であった入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「書込先」状態に設定した上で、最新入力データ更新フラグ1をオンからオフに変更する。このとき、最新入力データ更新フラグ1がオフであれば、入力同期バッファ1の「書込先」状態および「参照先」状態は変更されず、最新入力データ更新フラグ1はオフのまま維持される。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる。
(i4:まとめ)
上述したように、実施の形態4においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)〜(c)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図16に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第1入力同期バッファ(図15に示す入力同期バッファ1A)および第2入力同期バッファ(図15に示す入力同期バッファ1B)を同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図16に示すステップS1)。
(c) 制御プログラムごとに最新入力データ更新フラグをメインメモリ104(記憶手段)内に生成する処理(図16に示すステップS1)。第1入力同期バッファおよび第2入力同期バッファには、受信バッファ(図4に示すPLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)から入力データをコピー可能な状態である「書込先」状態、および、制御プログラムから参照可能な状態である「参照先」状態、のいずれかの状態が重複せずに付与される。
また、実施の形態4においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(d)および(e)の処理を含む。
(d) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、当該入力コピーに関連する最新入力データ更新フラグをオンにする入力コピー処理(図16に示すステップS256A)。
(e) 制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入
力同期バッファについて、最新データを格納している入力同期バッファが「書込先」状態であることを条件として(すなわち、実行開始させる制御プログラムの入力同期バッファに関連する最新入力データ更新フラグがオンであることを条件として)、「書込先」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「書込先」状態と「参照先」状態とを入れ替える第3入替処理を実行し、かつ、当該オン状態であった最新入力データ更新フラグをオフにする制御プログラム開始処理(図16に示すステップS274A)。
上述のような実施の形態4に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが2つ設けられており、制御プログラム開始処理において入力同期バッファの書込先状態と参照先状態との入替(第3入替処理)をしている間の短い時間を除き、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、最新入力データ更新フラグの状態に基づいて、コピーされた最新データが格納されている入力同期バッファを「参照先」状態に設定することにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
<J.最新データ型の2入力同期バッファ入替方式(実施の形態5)>
(j1:概要)
上述したように、実施の形態5においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。
(j2:シーケンス図)
実施の形態5に係る入力方向の動作は、上述した図15のシーケンス図に示す。但し、図15は、上述の実施の形態4と共通的に説明するためのシーケンス図であり、実施の形態5においては、入力同期バッファ1Aおよび2Bの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ」は不要となる。
このような、入力同期バッファの「書込先」状態、「参照先」状態および「最新」状態は、書込先状態記録領域、参照先状態記録領域および最新状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態および「最新」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。入力同期バッファが「書込先」状態/「参照先」状態/「最新」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、および/または「最新」状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態/「参照先」状態/「最新」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、1つの入力同期バッファに対して、「書込先」状態または「参照先」状態が互いに重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、1つのフラグまたは状態変数によって「書込先」状態か「参照先」状態かを表してもよい。
(j3:フローチャート)
図17は、実施の形態5に係る実行動作を示すフローチャートである。図17のフローチャートにおいては、図16に示すフローチャートと同一の処理を実行するステップについては、図16と同一のステップ番号を付与している。
図17に示すフローチャートは、図16に示すフローチャートと比較して、ステップS256A,S262A,S274Aに代えて、それぞれステップS256B,S262B,S274Bの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
通信回路からの受信完了通知を受けた場合(ステップS254において「受信完了通知」)に実行されるステップS256Bにおいて、マイクロプロセッサ100(コア1)は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)にコピーするとともに、入力データを書き込んだ入力同期バッファ1を「最新」状態に設定する(ステップS256B)。
制御プログラム1が「実行終了」状態である場合(ステップS260において「実行終了」)において実行されるステップS262Bにおいて、「最新」状態に設定されている入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)を「参照先」状態に設定するとともに、他方の入力同期バッファ1を「書込先」状態に設定した上で、制御プログラム1の実行状態を「実行中」状態に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS262B)。
なお、制御プログラム1が「実行中」状態または「継続実行中」状態である場合(ステップS260において「実行中」/「継続実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「継続実行中」状態に設定する(ステップS264)。このとき、対応する入力同期バッファ1(入力同期バッファ1Aまたは入力同期バッファ1B)の「参照先」状態および「書込先」状態はいずれも維持されて、制御プログラム1の実行が継続される。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)において実行されるステップS274Bにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS274B)。
(j4:まとめ)
上述したように、実施の形態5においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)〜(c)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図17に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第1入力同期バッファ(図15に示す入力同期バッファ1A)および第2入力同期バッファ(図15に示す入力同期バッファ1B)を同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図17に示すステップS1)。
(c) 最新状態記録領域をメインメモリ104(記憶手段)内に生成する処理(図17に示すステップS1)。第1入力同期バッファおよび第2入力同期バッファには、受信バッファ(図4に示すPLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)から入力データをコピー可能な状態である「書込先」状態、および、制御プログラムから参照可能な状態である「参照先」状態、のいずれかの状態が重複せずに付与される。
また、実施の形態5においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(d)および(e)の処理を含む。
(d) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理(図17に示すステップS256B)。
(e) 制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファが「書込先」状態であることを条件として、「書込先」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「書込先」状態と「参照先」状態とを入れ替える第3入替処理を含む制御プログラム開始処理(図17に示すステップS262B)。
なお、制御プログラム開始処理については、以下のように表現することもできる。
(e’) 制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参照する「参照先」状態とし、かつ、「参照先」状態とする入力同期バッファと同じ組に属する他方の入力同期バッファを「書込先」状態とする処理を含む制御プログラム開始処理(図17に示すステップS262B)。
上述のような実施の形態5に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが2つ設けられており、制御プログラム開始処理において入力同期バッファの「書込先」状態と「参照先」状態との入替(第3入替処理)をしている間の短い時間を除き、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
<K:更新フラグ型の3入力同期バッファ入替方式(実施の形態6)>
(k1:概要)
上述の実施の形態4および5においては、2つの入力同期バッファを利用する構成について例示したが、実施の形態6および後述する実施の形態7においては、3つの同期バッファを利用する構成について例示する。すなわち、実施の形態6は、実施の形態4の構成を3つの入力同期バッファに拡張した構成に相当し、後述する実施の形態7は、実施の形態5の構成を3つの入力同期バッファに拡張した構成に相当する。
(k2:シーケンス図)
図18は、実施の形態6および7に係る入力方向の動作を示すシーケンス図である。実施の形態6および後述する実施の形態7について、図18に示すシーケンス図を共通的に
参照しつつ、その詳細について説明する。より具体的には、後述する実施の形態7においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う構成について説明する。
そのため、図18を参照して、実施の形態6について説明する場合には、「最新入力データ更新フラグ1」についてのみ着目し、入力同期バッファ1A,1B,1Cの時間軸に沿って示した「最新」状態の識別は不要である。一方、図18を参照して、実施の形態7について説明する場合には、入力同期バッファ1A,1B,1Cの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ1」は不要となる。
また、図18に示すシーケンス図においては、「書込先」状態および「参照先」状態を、単に、「書込先」および「参照先」と記述する。
図18には、典型的に、複数のコアを有するマルチコア(具体的には、デュアルコア)のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア1がシステムプログラムを実行し、コア2が制御プログラム1を実行するものとする。但し、実施の形態6および7に係る方式は、上述の実施の形態4および5と同様に、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
より具体的には、図18に示す実施の形態6および7に係る方式においては、システムプログラムと制御プログラム1とが並列実行される。制御プログラム1は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム1もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム1の実行が開始されることを基本としている。
なお、実施の形態6および7に係る出力方向の動作(出力データに関する処理)は、上述の実施の形態1における動作(図7に示すシーケンス図に記載の処理)と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
このような、入力同期バッファの「書込先」状態、「参照先」状態、および「待機」状態は、書込先状態記録領域、参照先状態記録領域および待機状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態、および「待機」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。入力同期バッファが「書込先」状態/「参照先」状態/「待機」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、および/または「待機」状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態/「参照先」状態/「待機」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、1つの入力同期バッファに対して、「書込先」状態、「参照先」状態、または「待機」状態が互いに重複しないように付与されるので、これらの記録領域を分けずに共通の状態記録領域を生成し、1組のフラグまたは1つの状態変数によっていずれの状態であるかを表してもよい。
なお、実施の形態6に係るシーケンス図(図18)に表されている最新入力データ更新フラグ1の垂直線(時間軸に沿った線)のうち、太い線の部分は最新入力データ更新フラグ1がオンであることを表す。この最新入力データ更新フラグ1は、システムプログラムが「PLC1の制御動作の実行準備処理」において、メインメモリ104内の制御プログラムの作業領域1042に生成する。ここで、最新入力データ更新フラグ1は、一括してコピーが行われるときのコピー先となる入力同期バッファの組の集合ごとに設けられる。
(k3:フローチャート)
図19は、実施の形態6に係る実行動作を示すフローチャートである。図19のフローチャートにおいては、図16に示すフローチャートと同一の処理を実行するステップについては、図16と同一のステップ番号を付与している。
図19に示すフローチャートは、図16に示すフローチャートと比較して、ステップS256A,S262A,S274Aに代えて、それぞれステップS256C,S262C,S274Cの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
通信回路からの受信完了通知を受けた場合(ステップS254において「受信完了通知」)に実行されるステップS256Cにおいて、マイクロプロセッサ100(コア1)は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)にコピーし、さらに、「書込先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定するとともに、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「書込先」状態に設定した上で、最新入力データ更新フラグ1をオフからオンに変更する(ステップS256C)。
制御プログラム1が「実行終了」状態である場合(ステップS260において「実行終了」)において実行されるステップS262Cにおいて、最新入力データ更新フラグ1がオンに設定されていれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定した上で、最新入力データ更新フラグ1をオンからオフに変更する(ステップS262C)。さらに、ステップS262Cにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行中」状態に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS262C)。
なお、制御プログラム1が「実行中」状態または「継続実行中」状態である場合(ステップS260において「実行中」/「継続実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「継続実行中」状態に設定する(ステップS264)。このとき、対応する入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)の「参照先」状態および「待機」状態はいずれも維持されて、制御プログラム1の実行が継続される。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)において実行されるステップS274Cにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステ
ップS274C)。さらに、ステップS274Cにおいては、マイクロプロセッサ100(コア1)は、最新入力データ更新フラグ1がオンに設定されていれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定した上で、最新入力データ更新フラグ1をオンからオフに変更する。このとき、最新入力データ更新フラグ1がオフであれば、入力同期バッファ1の「待機」状態および「参照先」状態は変更されず、最新入力データ更新フラグ1はオフのまま維持される。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる。
(k4:まとめ)
上述したように、実施の形態6においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)〜(c)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図19に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第1入力同期バッファ、第2入力同期バッファおよび第3入力同期バッファ(図18に示す入力同期バッファ1A,1B,1C)を入力同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図19に示すステップS1)。
(c) 制御プログラムごとに最新入力データ更新フラグをメインメモリ104(記憶手段)内に生成する処理(図19に示すステップS1)。第1入力同期バッファ、第2入力同期バッファおよび第3入力同期バッファには、受信バッファ(図4に示すPLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態6においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(d)および(e)の処理を含む。
(d) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第1入替処理を実行し、かつ、当該入力コピーに関連する最新入力データ更新フラグをオンにする入力コピー処理(図19に示すステップS256C)。
(e) 制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが「待機」状態であることを条件として(すなわち、実行開始させる制御プログラムの入力同期バッファに関連する最新入力データ更新フラグがオンであることを条件として)、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第2入替処理を実行し、かつ、当該オン状態であった最新入力データ更新フラグをオフにする制御プログラム開始処理(図19に示すステ
ップS274C)。
上述のような実施の形態6に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが3つ設けられており、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
実施の形態6によれば、制御プログラムの実行開始時にコピーされた最新データが格納されている入力同期バッファを参照先とする手段として、入力コピー処理において入力同期バッファの「書込先」状態と「待機状態」との入替を行い、制御プログラム開始処理において、最新入力データ更新フラグの状態に基づいて、入力同期バッファの「待機」状態と「参照先」状態の入替を行う。たとえば、受信バッファからコピーが行われたときに「書込先」状態であった入力同期バッファは、「待機」状態を経て「参照先」状態となる。
入力データの数が多い場合には、受信バッファから入力同期バッファへの入力データのコピーには、ある程度の時間を要する。上述の実施の形態4の場合には、制御プログラム開始処理における入力同期バッファの「書込先」状態と「参照先」状態との入替処理(第3入替処理)と受信バッファから入力同期バッファへのコピーとを同時に行うことができず、いずれかの処理の終了を待って他方の処理を行う必要があったが、実施の形態6の場合には、制御プログラム開始処理における入力同期バッファの「待機」状態と「参照先」状態との入替処理(第2入替処理)と受信バッファから「書込先」状態の入力同期バッファへのコピーとを並行して実行するように設計することが可能であり、より有利となる。
<L.最新データ型の3入力同期バッファ入替方式(実施の形態7)>
(l1:概要)
上述したように、実施の形態7においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。但し、入力同期バッファは、3個に拡張されている。
(l2:シーケンス図)
実施の形態7に係る入力方向の動作は、上述した図18のシーケンス図に示す。但し、図18は、上述の実施の形態6と共通的に説明するためのシーケンス図であり、実施の形態7においては、入力同期バッファ1A,1B,1Cの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ1」は不要となる。
このような、入力同期バッファの「書込先」状態、「参照先」状態、「待機」状態、および「最新」状態は、書込先状態記録領域、参照先状態記録領域、待機状態記録領域、および最新状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態、「待機」状態、および「最新」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム210が「PLC1の制御動作の実行準備処理」(図5に示すステップS1)において、メインメモリ104内の制御プログラムの作業領域1042に生成する。入力同期バッファが「書込先」状態/「参照先」状態/「待機」状態/「最新」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、「待機」状態、および/または「最新」状態であるものを特定する情報(入力同期バッファのグループの識別番号など)を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態/「参照先」状態/「待機」状態/「最新」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは
状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、1つの入力同期バッファに対して、「書込先」状態、「参照先」状態、または「待機」状態が互いに重複しないように付与されるので、書込先状態記録領域、参照先状態記録領域、および待機状態記録領域を分けずに共通の状態記録領域を生成し、1組のフラグまたは1つの状態変数によって「書込先」状態、「参照先」状態、および「待機」状態のうちどの状態であるかを表してもよい。
(l3:フローチャート)
図20は、実施の形態7に係る実行動作を示すフローチャートである。図20のフローチャートにおいては、図17に示すフローチャートと同一の処理を実行するステップについては、図17と同一のステップ番号を付与している。
図20に示すフローチャートは、図17に示すフローチャートと比較して、ステップS256B,S262B,S274Bに代えて、それぞれステップS256D,S262D,S274Dの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
通信回路からの受信完了通知を受けた場合(ステップS254において「受信完了通知」)に実行されるステップS256Dにおいて、マイクロプロセッサ100(コア1)は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)にコピーし、さらに、「書込先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「書込先」状態に設定する(ステップS256D)。
制御プログラム1が「実行終了」状態である場合(ステップS260において「実行終了」)において実行されるステップS262Dにおいて、「最新」状態の入力同期バッファ1が「待機」状態であれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定した上で、制御プログラム1の実行状態を「実行中」状態に設定するとともに、コア2に制御プログラム1の実行を開始させる(ステップS262D)。
なお、制御プログラム1が「実行中」状態または「継続実行中」状態である場合(ステップS260において「実行中」/「継続実行中」)には、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「継続実行中」状態に設定する(ステップS264)。このとき、対応する入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)の「参照先」状態および「待機」状態はいずれも維持されて、制御プログラム1の実行が継続される。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)において実行されるステップS274Dにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS274D)。さらに、ステップS274Dにおいては、マイクロプロセッサ100(コア1)は、「最新」状態の入力同期バッファ1が「待機」状態であれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参
照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定する。このとき、「最新」状態の入力同期バッファ1が「参照先」状態であれば、入力同期バッファ1の「待機」状態および「参照先」状態は変更されない。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる。
(l4:まとめ)
上述したように、実施の形態7においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)〜(c)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図20に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第1入力同期バッファ、第2入力同期バッファおよび第3入力同期バッファ(図18に示す入力同期バッファ1A,1B,1C)を入力同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図20に示すステップS1)。
(c) 最新状態記録領域をメインメモリ104(記憶手段)内に生成する処理(図20に示すステップS1)。第1入力同期バッファ、第2入力同期バッファ、および第3入力同期バッファは、受信バッファ(図4に示すPLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態7においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(d)および(e)の処理を含む。
(d) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第1入替処理を実行し、かつ、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理(図20に示すステップS256D)。
(e) 制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファが「待機」状態であることを条件として、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第2入替処理を含む制御プログラム開始処理(図20に示すステップS262D)。
なお、制御プログラム開始処理については、以下のように表現することもできる。
(e’) 制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参
照する「参照先」状態とし、かつ、「参照先」状態とする入力同期バッファと同じ組に属する入力同期バッファであって、「書込先」状態でない入力同期バッファを「待機」状態とする処理を含む制御プログラム開始処理(図20に示すステップS262D)。
上述のような実施の形態7に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが3つ設けられており、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
実施の形態7によれば、制御プログラムの実行開始時にコピーされた最新データが格納されている入力同期バッファを参照先とする手段として、入力コピー処理において入力同期バッファの「書込先」状態と「待機」状態の入替を行い、制御プログラム開始処理において、最新状態記録領域の内容に基づいて、入力同期バッファの「待機」状態と「参照先」状態との入替を行う。たとえば、受信バッファからコピーが行われたときに「書込先」状態であった入力同期バッファは、「待機」状態を経て「参照先」状態となる。
入力データの数が多い場合には、受信バッファから入力同期バッファへの入力データのコピーには、ある程度の時間を要する。上述の実施の形態5の場合には、制御プログラム開始処理における入力同期バッファの「書込先」状態と「参照先」状態との入替処理(第3入替処理)と受信バッファから入力同期バッファへのコピーとを同時に行うことができず、いずれかの処理の終了を待って他方の処理を行う必要があったが、実施の形態7の場合には、制御プログラム開始処理における入力同期バッファの「待機」状態と「参照先」状態との入替処理(第2入替処理)と受信バッファから「書込先」状態の入力同期バッファへのコピーとを並行して実行するように設計することが可能であり、より有利となる。
<M.更新フラグ型の3出力同期バッファ入替方式(実施の形態8)>
(m1:概要)
上述の実施の形態6および7においては、3つの入力同期バッファを利用する構成について例示したが、実施の形態8および後述する実施の形態9においては、これらの実施の形態における3バッファ入替方式を出力同期バッファに応用したものである。
特に、実施の形態8および実施の形態9においては、出力同期バッファとは別に、出力データごとに演算用バッファが生成される。そして、制御プログラムは、この演算用バッファに出力データを格納する。これは以下のような理由による。すなわち、実施の形態8および実施の形態9においては、3つの出力同期バッファが存在しており、書込先となる出力同期バッファが順次変更されるため、制御プログラムが出力データを出力同期バッファに格納したとすると、以前に格納した出力データを制御プログラムが参照することが困難になる。そこで、演算用バッファを設けて制御プログラムがこの演算用バッファに出力データを格納することにより、制御プログラムが以前に格納した出力データを演算バッファから取得できるように構成している。
なお、実施の形態8および実施の形態9に係る出力データの出力方式は、上述した実施の形態1〜7のうち、いずれの入力データの入力方式とも任意に組み合わせて実施することができる。
(m2:シーケンス図)
図21は、実施の形態8および9に係る出力方向の動作を示すシーケンス図である。図21には、実施の形態8および後述する実施の形態9について、図21に示すシーケンス
図を共通的に参照しつつ、その詳細について説明する。より具体的には、図21を参照して、実施の形態8について説明する場合には、「最新出力データ更新フラグ1」についてのみ着目し、出力同期バッファ1D,1E,1Fの時間軸に沿って示した「最新」状態の識別は不要である。一方、図21を参照して、実施の形態9について説明する場合には、出力同期バッファ1D,1E,1Fの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新出力データ更新フラグ1」は不要となる。
本実施の形態においては、出力同期バッファの各々には、「書込先」状態、「参照先」状態、および「待機」状態のいずれかが設定される。これらの状態の記録方法は、上述の実施の形態6において説明した入力同期バッファの場合と同様である。最新出力データ更新フラグの状態の記録方法についても、上述の実施の形態6において説明した最新入力データ更新フラグの場合と同様である。
(m3:フローチャート)
図22は、実施の形態8に係る実行動作を示すフローチャートである。図22のフローチャートにおいては、図19に示すフローチャートと同一の処理を実行するステップについては、図19と同一のステップ番号を付与している。
図22に示すフローチャートは、図19に示すフローチャートと比較して、ステップS251Eの処理が追加され、かつ、ステップS272およびS274Cに代えて、それぞれステップS272EおよびS274Eの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
制御サイクル開始の割り込み信号を受けた場合(ステップS250においてYES)に実行されるステップS251Eにおいて、マイクロプロセッサ100(コア1)は、最新出力データ更新フラグ1がオンに設定されていれば、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定した上で、最新出力データ更新フラグ1をオンからオフに変更する(ステップS251E)。
なお、最新出力データ更新フラグ1がオンに設定されていなければ(最新出力データ更新フラグ1がオフに設定されていれば)、出力同期バッファ1の「待機」状態および「参照先」状態については変更せず、最新出力データ更新フラグ1についてもオフのまま維持する。
さらに、ステップS251Eにおいては、マイクロプロセッサ100(コア1)は、「参照先」状態である出力同期バッファ1に格納されている出力データを、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする。
制御プログラム1が「実行中」状態である場合(ステップS270において「実行中」)において実行されるS272Eにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、演算用バッファ1に格納されている出力データを、「書込先」状態の出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「書込先」状態に設定した上で、最新出力データ更新フラグ1をオフからオンに変更する(ステップS272E)。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続実行中」)において実行されるステップS274Eにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、演算用バッファ1に格納されている出力データを、「書込先」状態の出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「書込先」状態に設定した上で、最新出力データ更新フラグ1をオフからオンに変更する(ステップS274E)。
さらに、ステップS274Eにおいては、最新入力データ更新フラグ1がオンに設定されていれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定した上で、最新入力データ更新フラグ1をオンからオフに変更する。このとき、最新入力データ更新フラグ1がオフであれば、入力同期バッファ1の「待機」状態および「参照先」状態は変更されず、最新入力データ更新フラグ1はオフのまま維持される。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる。
(m4:まとめ)
上述したように、実施の形態8においては、システムプログラム210は、PLC1の制御動作の実行準備処理として、以下の(a)〜(e)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)および送信されるべき出力データを格納する送信バッファ(図4に示すPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045)をメインメモリ104(記憶手段)内に生成する処理(図22に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ(任意の1または複数の入力同期バッファ)をメインメモリ104(記憶手段)内に生成する処理(図22に示すステップS1)。
(c) 制御プログラムが出力データを格納する演算用バッファ(図21に示す演算用バッファ1)をメインメモリ104(記憶手段)内に生成する処理(図22に示すステップS1)。
(d) 送信バッファにコピーされる出力データが格納される、第1出力同期バッファ、第2出力同期バッファおよび第3出力同期バッファ(図21に示す出力同期バッファ1E,1F,1G)を出力同期バッファの組として、出力データごとにメインメモリ104(記憶手段)内に生成する処理(図22に示すステップS1)。
(e) 制御プログラムごとに最新出力データ更新フラグをメインメモリ104(記憶手段)内に生成する処理(図22に示すステップS1)。第1出力同期バッファ、第2出力同期バッファおよび第3出力同期バッファには、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態8においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(f)〜(i)の処理を含む。
(f) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図22に示すステップS256C)。
(g) 制御プログラムを実行開始させる制御プログラム開始処理(図22に示すステップS262C)。
(h) 制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第4入替処理を実行し、かつ、当該出力コピーに関連する最新出力データ更新フラグをオンにする出力同期バッファ格納処理(図22に示すステップS272E)。
(i) 最新データを格納している出力同期バッファが「待機」状態であることを条件として(すなわち、実行開始させる制御プログラムの出力同期バッファに関連する最新出力データ更新フラグがオンであることを条件として)、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第5入替処理を実行し、当該オン状態であった最新出力データ更新フラグをオフにし、および出力データを「参照先」状態となった出力同期バッファから送信バッファにコピーする出力コピー処理(図22に示すステップS251E)。
上述のような実施の形態8に係る処理方式によれば、各制御プログラムについて、その制御プログラムが生成する出力データごとに出力同期バッファが3つ設けられており、常にいずれかの出力同期バッファが「書込先」状態となっている。そのため、いつでも演算バッファから出力同期バッファに出力データをコピーできる。
また、実施の形態8に係る処理方式によれば、制御プログラムの実行終了時に演算バッファからコピーされた最新データが格納されている出力同期バッファを参照先(送信バッファへのコピー元)とする手段として、出力同期バッファ格納処理において出力同期バッファの「書込先」状態と「待機」状態の入替(第4入替処理)を行い、出力コピー処理において、最新出力データ更新フラグの状態に基づいて、出力同期バッファの「待機」状態と「参照先」状態の入替(第5入替処理)を行う。たとえば、演算バッファからコピーが行われたときに「書込先」状態であった出力同期バッファは、「待機」状態を経て、「参照先」状態となる。
出力データの数が多い場合には、演算バッファから出力同期バッファへの出力データのコピー、および、出力同期バッファから送信バッファへの出力データのコピーには、それぞれある程度の時間を要する。実施の形態8の場合には、それらのコピーの実行時期が重なった場合に並行してコピーを実行するように設計することが可能であり、より有利となる。
なお、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理は、送信実行の直前に実行するのが好ましい。たとえば、図21のように各制御サイクルの冒頭近くで送信する場合であれば、制御サイクル開始後、まず出力コピー処理を実行し、
続いて送信が実行されるようにするとよい。
<N.最新データ型の3出力同期バッファ入替方式(実施の形態9)>
(n1:概要)
上述したように、実施の形態9においては、コピーされた最新データが格納されている同期バッファを「最新」状態として識別するための情報を扱う。
(n2:シーケンス図)
実施の形態9に係る出力方向の動作は、上述した図21のシーケンス図に示す。但し、図21は、上述の実施の形態8と共通的に説明するためのシーケンス図であり、実施の形態9においては、出力同期バッファ1D,1E,1Fの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新出力データ更新フラグ1」は不要となる。
(n3:フローチャート)
図23は、実施の形態9に係る実行動作を示すフローチャートである。図23のフローチャートにおいては、図22に示すフローチャートと同一の処理を実行するステップについては、図22と同一のステップ番号を付与している。
図23に示すフローチャートは、図22に示すフローチャートと比較して、ステップS251E,S272EおよびS274Eに代えて、それぞれステップS251F,S272FおよびS274Fの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
制御サイクル開始の割り込み信号を受けた場合(ステップS250においてYES)に実行されるステップS251Fにおいて、マイクロプロセッサ100(コア1)は、「最新」状態の出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)が「待機」状態に設定されていれば、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定する(ステップS251F)。
なお、「最新」状態の出力同期バッファ1が「参照先」状態に設定されていれば、出力同期バッファ1の「待機」状態および「参照先」状態については変更せず、そのまま維持する。
さらに、ステップS251Fにおいては、マイクロプロセッサ100(コア1)は、「参照先」状態である出力同期バッファ1に格納されている出力データを、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする。
制御プログラム1が「実行中」状態である場合(ステップS270において「実行中」)において実行されるS272Fにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、演算用バッファ1に格納されている出力データを、「書込先」状態の出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「書込先」状態に設定する(ステップS272F)。
制御プログラム1が「継続実行中」状態である場合(ステップS270において「継続
実行中」)において実行されるステップS274Fにおいては、マイクロプロセッサ100(コア1)は、制御プログラム1の実行状態を「実行終了」に設定し、演算用バッファ1に格納されている出力データを、「書込先」状態の出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった出力同期バッファ1(出力同期バッファ1D,1E,1Fのいずれか)を「書込先」状態に設定する(ステップS274F)。
さらに、ステップS274Fにおいては、「最新」状態の入力同期バッファ1が「待機」状態に設定されていれば、「待機」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ1(入力同期バッファ1A,1B,1Cのいずれか)を「待機」状態に設定する。このとき、「最新」状態の入力同期バッファ1が「参照先」状態に設定されていなければ、入力同期バッファ1の「待機」状態および「待機」状態は変更されず、そのまま維持する。その後、制御プログラム1の実行状態を「実行中」に設定するとともに、コア2に制御プログラム1の実行を開始させる。
(m4:まとめ)
上述したように、実施の形態9においては、システムプログラム210は、PLC1の制御動作の実行準備処理として、以下の(a)〜(e)の処理を含む。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)および送信されるべき出力データを格納する送信バッファ(図4に示すPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045)をメインメモリ104(記憶手段)内に生成する処理(図23に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ(任意の1または複数の入力同期バッファ)をメインメモリ104(記憶手段)内に生成する処理(図23に示すステップS1)。
(c) 制御プログラムが出力データを格納する演算用バッファ(図21に示す演算用バッファ1)をメインメモリ104(記憶手段)内に生成する処理(図23に示すステップS1)。
(d) 送信バッファにコピーされる出力データが格納される、第1出力同期バッファ、第2出力同期バッファおよび第3出力同期バッファ(図21に示す出力同期バッファ1E,1F,1G)を出力同期バッファの組として、出力データごとにメインメモリ104(記憶手段)内に生成する処理(図23に示すステップS1)。
(e) 最新状態記録領域をメインメモリ104(記憶手段)内に生成する処理(図23に示すステップS1)。第1出力同期バッファ、第2出力同期バッファおよび第3出力同期バッファには、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態9においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(f)〜(i)の処理を含む。
(f) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図23に示すステップS256D)。
(g) 制御プログラムを実行開始させる制御プログラム開始処理(図23に示すステップS262D)。
(h) 制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第4入替処理を実行し、かつ、コピー先の出力同期バッファが最新状態であることを最新状態記録領域に記録する出力同期バッファ格納処理(図23に示すステップS272F)。
(i) 最新状態記録領域の内容によって特定される「最新」状態である出力同期バッファが「待機」状態であることを条件として、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第5入替処理を実行し、出力データを「参照先」状態となった出力同期バッファから送信バッファにコピーする出力コピー処理(図23に示すステップS251F)。
上述のような実施の形態9に係る処理方式によれば、各制御プログラムについて、その制御プログラムが生成する出力データごとに出力同期バッファが3つ設けられており、常にいずれかの出力同期バッファが「書込先」状態となっている。そのため、いつでも演算バッファから出力同期バッファに出力データをコピーできる。
また、実施の形態9に係る処理方式によれば、制御プログラムの実行終了時に演算バッファからコピーされた最新データが格納されている出力同期バッファを参照先(送信バッファへのコピー元)とする手段として、出力同期バッファ格納処理において出力同期バッファの「書込先」状態と「待機」状態の入替(第4入替処理)を行い、出力コピー処理において、出力同期バッファの最新状態に基づいて、出力同期バッファの「待機」状態と「参照先」状態の入替(第5入替処理)を行う。たとえば、演算バッファからコピーが行われたときに「書込先」状態であった出力同期バッファは、「待機」状態を経て、「参照先」状態となる。
出力データの数が多い場合には、演算バッファから出力同期バッファへの出力データのコピー、および、出力同期バッファから送信バッファへの出力データのコピーには、それぞれある程度の時間を要する。実施の形態9の場合には、それらのコピーの実行時期が重なった場合に並行してコピーを実行するように設計することが可能であり、より有利となる。
なお、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理は、送信実行の直前に実行するのが好ましい。たとえば、図21のように各制御サイクルの冒頭近くで送信する場合であれば、制御サイクル開始後、まず出力コピー処理を実行し、続いて送信が実行されるようにするとよい。
(m5:さらなる拡張)
上述の実施の形態8および9についての説明により、実施の形態6および7の入力方式
を出力方式にも応用できることが必然的に理解されよう。ここでは、その詳細な説明は行わないが、実施の形態2〜5に係る入力方式についても、それぞれ出力方式に応用することができる。さらに、それぞれの入力方式とそれぞれの出力方式とは任意に組み合わせて実施することができる。
<O.実行サイクル同期型単一バッファ式(実施の形態10)>
(o1:概要)
制御プログラムの実行サイクルが複数の制御サイクルにわたる場合であって、他に実行優先度のより高い制御プログラムが存在する場合には、実行サイクル内の最初の制御サイクルから制御プログラムの実行を開始できないということが起こりうる。上述の実施の形態1〜9では、そのような場合に、実際に制御プログラムの実行を開始する制御サイクルと関係する受信タイミングに受信した最新の入力データを使用することが可能である。
しかし、そうする代わりに、制御プログラムの実行に使用する入力データを、制御プログラムの実行サイクルが開始する制御サイクルと関係する受信タイミングにおいて受信した入力データに統一することにより、入力データの実効的な更新周期を一定にしたい場合がある。実施の形態10の入力方式によれば、このような要求を満たすことができる。
なお、上記の「制御サイクルと関係する受信タイミング」とは、以下のようなタイミングを意味する。すなわち、制御サイクル内で入力データの受信後に制御プログラムを実行するスケジューリングを採用している場合には、当該制御サイクルにおける受信のタイミングである。また、制御サイクル内で制御プログラムの実行後に入力データの受信をするスケジューリングを採用している場合には、当該制御サイクルの直前の制御サイクルにおける受信のタイミングである。
また、別の状況として、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合は、実行サイクル内の最後の制御サイクルが開始するより前に制御プログラムの実行が終了し、出力データが生成されているということが起こりうる。上述の実施の形態1〜9では、そのような場合に、最後の制御サイクルと関係する送信タイミングを待たずに更新された出力データを送信することが可能である。
しかし、そうする代わりに、更新された出力データの送信タイミングを実行サイクル内の最後の制御サイクルと関係する送信タイミングに統一することにより、送信される出力データの実効的な更新周期を一定にしたい場合がある。実施の形態10の出力方式によれば、このような要求を満たすことができる。
なお、上記「制御サイクルと関係する送信タイミング」とは、以下のようなタイミングを意味する。すなわち、制御サイクル内で出力データの送信後に制御プログラムを実行するスケジューリングを採用している場合には、当該制御サイクルの直後の制御サイクルにおける送信のタイミングである。また、制御サイクル内で制御プログラムの実行後に出力データの送信をするスケジューリングを採用している場合には、当該制御サイクルにおける送信のタイミングである。
(o2:シーケンス図)
図24は、実施の形態10に係る入力方向の動作を示すシーケンス図である。図25は、実施の形態10に係る出力方向の動作を示すシーケンス図である。
実施の形態10に係る入力方向/出力方向の動作については、上述の実施の形態1における動作と共通する点も多いので、主として両者の間の相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
まず、図24を参照して、実施の形態10に係る入力方式について説明する。入力方式について、実施の形態1では、制御プログラムが実行中の間、入力同期バッファが「書込禁止」状態とされ、受信バッファから入力同期バッファへの入力データのコピーは、コピー先の入力同期バッファが「書込禁止」状態である場合を除き、毎制御サイクルにおいて行われる。
これに対し、実施の形態10では、受信バッファから入力同期バッファへの入力データのコピーは、制御プログラムの実行サイクルが開始した制御サイクルにおいてのみ行われる。このコピー制御は、現在の制御サイクルが実行サイクルの最初の制御サイクルに該当するかどうかを監視することによって行う。そうする代わりに、入力同期バッファへのコピーを行えばその入力同期バッファを「書込禁止」状態とし、制御プログラムの実行サイクルが終了すれば「書込禁止」状態を解除することにより、入力同期バッファへのコピーを実行サイクルが開始した最初の制御サイクルにおいてのみ実行するようにしてもよい。
次に、図25を参照して、実施の形態10に係る出力方式について説明する。出力方式について、実施の形態1では、制御プログラムの実行が終了すると、出力同期バッファから送信バッファへの出力データのコピーが行われる。その後、次の制御サイクルが開始すると、送信バッファから出力データが送信される。
これに対し、実施の形態10では、制御プログラムの実行サイクルが開始すると、出力同期バッファから送信バッファへの出力データのコピーが行われる。その後、送信バッファから出力データが送信される。
(o3:フローチャート)
図26は、実施の形態10に係る実行動作を示すフローチャートである。図26を参照して、マイクロプロセッサ100は、システムプログラム210における、PLC1の制御動作の実行準備処理を実行する(ステップS1)。続いて、マイクロプロセッサ100は、システムプログラム210における、PLC1の制御動作の実行制御処理を実行する(図5に示すステップS2)。このPLC1の制御動作の実行制御処理の詳細な一例がステップS300〜S348に相当する。
まず、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を待つ(ステップS300)。制御サイクル開始の割り込み信号を受けると(ステップS300においてYES)、マイクロプロセッサ100は、制御プログラム1の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム1の実行状態を「実行前」状態に設定するとともに、出力同期バッファ1に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS302)。
続いて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム2の実行状態を「実行前」状態に設定するとともに、出力同期バッファ2に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS304)。
続いて、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)に対して送信実行を指示する(ステップS306)。送信実行の指示に応答して、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ104
5)に格納されているデータが他のユニットなどへ送信される。
その後、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)からの受信完了通知を待つ(ステップS308)。
通信回路からの受信完了通知を受けると(ステップS308においてYES)、マイクロプロセッサ100は、制御プログラム1の実行サイクルが現在の制御サイクルから開始する場合には、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、入力同期バッファ1にコピーし(ステップS310)、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、入力同期バッファ2にコピーする(ステップS312)。
続いて、マイクロプロセッサ100は、制御プログラム1の実行状態を判断する(ステップS320)。
制御プログラム1が「実行前」状態である場合(ステップS320において「実行前」)には、マイクロプロセッサ100は、制御プログラム1の実行状態を「実行中」に設定し、制御プログラム1の実行を開始する(ステップS322)。そして、処理はステップS326へ進む。
制御プログラム1が「実行中」状態である場合(ステップS320において「実行中」)には、マイクロプロセッサ100は、制御プログラム1の未実行の部分の実行を開始する(ステップS324)。そして、処理はステップS326へ進む。
制御プログラム1が「実行終了」状態である場合(ステップS320において「実行終了」)には、処理はステップS340へ進む。
ステップS322またはS334において、制御プログラム1の実行を開始(または、再開)すると、マイクロプロセッサ100は、制御プログラム1の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS326)。なお、ステップS232またはS234において、制御プログラム1の実行が開始(または、再開)されることで、マイクロプロセッサ100で実行される処理は、システムプログラムによる処理から制御プログラム1による処理に切り替わる。すなわち、制御プログラム1の実行開始から実行終了するまでの間は、マイクロプロセッサ100は、システムプログラムを実行しない。そして、制御プログラム1の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムOS200が、マイクロプロセッサ100での制御プログラム1の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム1の実行が終了した通知(制御プログラム1の実行終了通知)があれば、マイクロプロセッサ100における実行対象は、制御プログラム2からシステムプログラムへ戻る。
制御プログラム1の実行終了通知を受けると(ステップS336において「実行終了通知」)、マイクロプロセッサ100は、制御プログラム1の実行状態を「実行終了」に設定する(ステップS328)。そして、処理はステップS340へ進む。
一方、制御プログラム1の実行終了通知までに次の制御サイクル開始の割り込みを受けると(ステップS336において「制御サイクル開始」)、マイクロプロセッサ100で実行中の制御プログラム1は中断され、マイクロプロセッサ100は、ステップS302
以下の処理を再度実行する。
ステップS340において、マイクロプロセッサ100は、制御プログラム2の実行状態を判断する(ステップS340)。
制御プログラム2が「実行前」状態である場合(ステップS340において「実行前」)には、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行中」に設定し、制御プログラム2の実行を開始する(ステップS342)。そして、処理はステップS346へ進む。
制御プログラム2が「実行中」状態である場合(ステップS340において「実行中」)には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始する(ステップS344)。そして、処理はステップS346へ進む。
制御プログラム2が「実行終了」状態である場合(ステップS340において「実行終了」)には、処理はステップS300へ進む。
ステップS342またはS344において、制御プログラム2の実行を開始(または、再開)すると、マイクロプロセッサ100は、制御プログラム2の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS346)。
制御プログラム2の実行終了通知を受けると(ステップS346において「実行終了通知」)、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定する(ステップS348)。そして、処理はステップS300へ進む。
一方、制御プログラム2の実行終了通知までに次の制御サイクル開始の割り込みを受けると(ステップS346において「制御サイクル開始」)、マイクロプロセッサ100で実行中の制御プログラム2は中断され、マイクロプロセッサ100は、ステップS302以下の処理を再度実行する。
(o4:まとめ)
上述したように、実施の形態10においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)および(b)の処理を含む。なお、入力データの受信は制御サイクルごとに実行される。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図26に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする1つの入力同期バッファ(図24に示す入力同期バッファ1および2)をメインメモリ104(記憶手段)内(図4に示す入力同期バッファ領域1042b)に生成する処理(図26に示すステップS1)。
また、実施の形態10においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(c)または(d)の処理を含む。
(c) 受信された入力データを、当該入力データが制御プログラムの実行サイクルが開始した制御サイクルと関係する受信タイミングにおいて受信されたことを条件として、受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネ
ットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図26に示すステップS310またはS312)。
(d) 制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる制御プログラム開始処理(図26に示すステップS322またはS342)。
上述のような実施の形態10に係る入力データに関する処理方式によれば、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合に、制御プログラムの実行に使用する入力データを、制御プログラムの実行サイクルが開始する制御サイクルと関係する受信タイミングにおいて受信した入力データに統一することができる。
なお、上述の「制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる」とは、実行サイクル時間が変動する場合を排除する意味ではなく、たとえば、制御プログラムがその実行サイクル内に終了しない場合に、1制御サイクル時間ずつ、実行サイクルを延長する場合を含んでいる。
一方、実施の形態10においては、システムプログラム210は、出力データの出力に関する処理を含めると、PLC1の制御動作の実行準備処理として、以下の(α)〜(γ)の処理を含む。
(α) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)および送信されるべき出力データを格納する送信バッファ(図4に示すPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045)をメインメモリ104(記憶手段)内に生成する処理(図26に示すステップS1)。
(β) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする1つの入力同期バッファ(図24に示す入力同期バッファ1および2)をメインメモリ104(記憶手段)内(図4に示す入力同期バッファ領域1042b)に生成する処理(図26に示すステップS1)。
(γ) 送信バッファにコピーされる出力データが格納される出力同期バッファ(図25に示す出力同期バッファ1および2)を出力データごとにメインメモリ104(記憶手段)内(図4に示す出力同期バッファ領域1042a)に生成する処理(図26に示すステップS1)。
また、実施の形態10においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(δ)〜(ζ)の処理を含む。
(δ) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図26に示すステップS310またはS312)。
(ε) 制御プログラムを実行開始させる制御プログラム開始処理(図26に示すステップS322またはS342)。
(ζ) 出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいてその出力データが送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーす
る出力コピー処理(図26に示すステップS302またはS304)。
上述のような実施の形態10に係る出力データに関する処理方式によれば、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合に、更新された出力データの送信タイミングを実行サイクル内の最後の制御サイクルと関係する送信タイミングに統一することができる。
なお、出力データの送信が制御サイクルごとに行われる場合は、制御プログラムの実行サイクル内の最後の制御サイクルと関係する送信タイミング以外の送信タイミングにおいては、それ以前に更新されて送信バッファに格納されている出力データが繰り返し送信される。
<P.実行サイクル同期型更新フラグ型3バッファ入替方式(実施の形態11)>
(p1:概要)
実施の形態11ならびに後述する実施の形態12および13は、上述の実施の形態10と同様に、実施の形態6〜9において説明した3バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
(p2:シーケンス図)
図27は、実施の形態11に係る入力方向の動作を示すシーケンス図である。図28は、実施の形態11に係る出力方向の動作を示すシーケンス図である。実施の形態11における制御プログラム1および2は、実施の形態10の図24および図25における制御プログラム1および2と同じプログラムであり、同様のスケジュールで実行されるが、図27および図28においては制御プログラム2のみを示し、制御プログラム1は図示しない。
実施の形態11に係る入力方向/出力方向の動作については、上述の実施の形態6および8における動作と共通する点も多いので、主として相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
まず、図27を参照して、実施の形態11に係る入力方式について説明する。入力方式について、実施の形態6では、「制御プログラムの実行開始前に」、最新入力データ更新フラグがオンであれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新入力データ更新フラグをオフにする。
これに対し、実施の形態11では、「受信バッファから入力同期バッファに入力データをコピーした後に、制御プログラムの実行サイクル内の最初の制御サイクルであることを条件として」、最新入力データ更新フラグがオンであれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新入力データ更新フラグをオフにする。
次に、図28を参照して、実施の形態11に係る出力方式について説明する。出力方式について、出力方式について、実施の形態8では、「制御サイクルが開始すると」、最新出力データ更新フラグがオンであれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新出力データ更新フラグをオフにする。
これに対し、実施の形態11では、「制御プログラムの実行サイクルが開始すると」、最新出力データ更新フラグがオンであれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新出力データ更新フラグをオフにする。
(p3:フローチャート)
図29は、実施の形態11に係る実行動作を示すフローチャートである。図29においては、制御プログラム1に関する処理については記載しない。図29を参照して、マイクロプロセッサ100は、システムプログラムにおける、PLC1の制御動作の実行準備処理を実行する(ステップS1)。続いて、マイクロプロセッサ100は、システムプログラム210における、PLC1の制御動作の実行制御処理を実行する(図5に示すステップS2)。このPLC1の制御動作の実行制御処理の詳細な一例がステップS350〜S376に相当する。
まず、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を待つ(ステップS350)。制御サイクル開始の割り込み信号を受けると(ステップS350においてYES)、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム2の実行状態を「実行前」状態に設定する(ステップS352)。
続いて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、最新出力データ更新フラグ1がオンに設定されていれば、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定した上で、最新出力データ更新フラグ2をオンからオフに変更する(ステップS354)。このとき、最新出力データ更新フラグ2がオフであれば、出力同期バッファ2の「待機」状態および「参照先」状態は変更されず、最新出力データ更新フラグ2はオフのまま維持される。
マイクロプロセッサ100は、「参照先」状態の出力同期バッファ2に格納されている出力データを送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)にコピーする(ステップS356)。
続いて、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)に対して送信実行を指示する(ステップS358)。送信実行の指示に応答して、送信バッファ(PLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045)に格納されているデータが他のユニットなどへ送信される。
その後、マイクロプロセッサ100は、通信回路(PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140)からの受信完了通知を待つ(ステップS360)。
通信回路からの受信完了通知を受けると(ステップS360においてYES)、マイクロプロセッサ100は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)にコピーするとともに、「書込先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定するとともに、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「書込先」状態に設定した上で、最新入力データ更新フラグ2をオフからオンに変更する(ステップS362)。
続いて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、最新入力データ更新フラグ1がオンに設定されていれば
、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定した上で、最新入力データ更新フラグ2をオンからオフに変更する(ステップS364)。このとき、制御プログラム2の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ2の「参照先」状態および「待機」状態は変更されず、最新入力データ更新フラグ2はオフのまま維持される。
その後、マイクロプロセッサ100は、制御プログラム1についての処理を実行する(ステップS366)。ステップS366においてマイクロプロセッサ100が制御プログラム1の実行を開始することで、マイクロプロセッサ100で実行される処理は、システムプログラムによる処理から制御プログラム1による処理に切り替わる。すなわち、制御プログラム1の実行開始から実行終了するまでの間は、マイクロプロセッサ100は、システムプログラムを実行しない。そして、制御プログラム1の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムOS200が、マイクロプロセッサ100での制御プログラム1の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム1の実行が終了した通知(制御プログラム1の実行終了通知)を受けて、制御プログラム1についての所定の処理を実行した後、処理はステップS368へ進む。
ステップS368において、マイクロプロセッサ100は、制御プログラム2の実行状態を判断する(ステップS368)。
制御プログラム2が「実行前」状態である場合(ステップS368において「実行前」)には、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行中」に設定し、制御プログラム2の実行を開始する(ステップS370)。そして、処理はステップS374へ進む。
制御プログラム2が「実行中」状態である場合(ステップS368において「実行中」)には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始する(ステップS372)。そして、処理はステップS374へ進む。
制御プログラム2が「実行終了」状態である場合(ステップS368において「実行終了」)には、処理はステップS350へ進む。
ステップS370またはS372において、制御プログラム2の実行を開始(または、再開)すると、マイクロプロセッサ100は、制御プログラム2の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ(ステップS374)。
制御プログラム2の実行終了通知を受けると(ステップS374において「実行終了通知」)、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定し、演算用バッファ2に格納されている出力データを、「書込先」状態の出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「書込先」状態に設定した上で、最新出力データ更新フラグ2をオフからオンに変更する(ステップS376)。そして、処理はステップS350へ進む。
一方、制御プログラム2の実行終了通知までに次の制御サイクル開始の割り込みを受け
ると(ステップS374において「制御サイクル開始」)、マイクロプロセッサ100で実行中の制御プログラム2は中断され、マイクロプロセッサ100は、ステップS352以下の処理を再度実行する。
(p4:まとめ)
実施の形態11によれば、PLCのシステムプログラムが実施の形態6〜9に示す3バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
<Q.実行サイクル同期型最新データ型3バッファ入替方式(実施の形態12)>
(q1:概要)
上述したように、実施の形態12は、実施の形態6〜9において説明した3バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
(q2:シーケンス図)
実施の形態12に係る入力方向/出力方向の動作については、上述の実施の形態7および9における動作と共通する点も多いので、主として相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
まず、図27を参照して、実施の形態12に係る入力方式について説明する。入力方式について、実施の形態7では、「制御プログラムの実行開始前に」、「最新」状態の入力同期バッファが「待機」状態であれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替える。
これに対し、実施の形態11では、「受信バッファから入力同期バッファに入力データをコピーした後に、制御プログラムの実行サイクル内の最初の制御サイクルであることを条件として」、「最新」状態の入力同期バッファが「待機」状態であれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替える。
次に、図28を参照して、実施の形態12に係る出力方式について説明する。出力方式について、実施の形態9では、「制御サイクルが開始すると」、「最新」状態の出力同期バッファが「待機」状態であれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替える。
これに対し、実施の形態11では、「制御プログラムの実行サイクルが開始すると」、「最新」状態の出力同期バッファが「待機」状態であれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替える。
(q3:フローチャート)
図30は、実施の形態12に係る実行動作を示すフローチャートである。図30においても、制御プログラム1に関する処理については記載しない。
図30に示すフローチャートは、図29に示すフローチャートと比較して、ステップS354,S362,S364,S376に代えて、それぞれステップS354A,S362A,S364A,S376Aの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
ステップS352に続いて実行されるステップS354Aにおいて、マイクロプロセッ
サ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、「最新」状態の出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)が「待機」状態に設定されていれば、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定する(ステップS354A)。
このとき、「最新」状態の出力同期バッファ2が「参照先」状態であれば、出力同期バッファ2の「待機」状態および「参照先」状態は変更されず、そのまま維持される。
通信回路からの受信完了通知を受けた場合(ステップS360においてYES)に実行されるステップS362Aにおいて、マイクロプロセッサ100は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)にコピーするとともに、「書込先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定するとともに「最新」状態にも設定し、さらに、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「書込先」状態に設定する(ステップS362A)。
ステップS362Aに続いて実行されるステップS364Aにおいて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、「最新」状態の出力同期バッファ2が「待機」状態に設定されていれば、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定する(ステップS364A)。このとき、制御プログラム2の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ2の「参照先」状態および「待機」状態は変更されず、そのまま維持される。
制御プログラム2の実行終了通知を受けた場合(ステップS374において「実行終了通知」)において実行させるステップS376Aにおいて、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定し、演算用バッファ2に格納されている出力データを、「書込先」状態の出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定するとともに「最新」状態にも設定し、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「書込先」状態に設定する(ステップS376A)。
(q4:まとめ)
実施の形態12によれば、PLCのシステムプログラムが実施の形態6〜9に示す3バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
<R.実行サイクル同期型更新確認省略型3バッファ入替方式(実施の形態13)>
(r1:概要)
上述したように、実施の形態13は、実施の形態6〜9において説明した3バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
(r2:シーケンス図)
実施の形態13に係る入力方向の動作を示すシーケンス図は、上述の実施の形態11に係る入力方向の動作を示す図27と実質的に同一である。また、実施の形態13に係る出力方向の動作を示すシーケンス図は、上述の実施の形態11に係る出力方向の動作を示す図28と実質的に同一である。
上述の実施の形態11においては、最新入力データ更新フラグおよび最新出力データ更新フラグを用いて、入力データおよび出力データの更新をそれぞれ確認する。また、上述の実施の形態12においては、入力同期バッファおよび出力同期バッファのそれぞれの最新状態を用いて、入力データおよび出力データの更新をそれぞれ確認する。
しかしながら、少なくとも、制御プログラムの実行サイクル内の最初の制御サイクルにおいて入力データの受信と入力同期バッファへのコピーとが確実に行われるのであれば、入力データの更新確認は省略できる。また、制御プログラムの実行サイクルごとに出力データの生成と出力同期バッファへのコピーとが確実に行われるのであれば、出力データの更新は省略できる。
そこで、実施の形態13においては、入力データおよび出力データの更新確認を省略する形態を採用している。
なお、実行サイクル冒頭の制御サイクルで必ず入力データの受信があり、かつ、実行サイクル中(実行サイクルの延長中含む)に必ず出力データが生成される、という前提が必ずしも成り立たない場合には、実施の形態11または12に示すような、入力データおよび出力データの更新確認を行う形態が有用である。
(r3:フローチャート)
図31は、実施の形態13に係る実行動作を示すフローチャートである。図31においても、制御プログラム1に関する処理については記載しない。
図31に示すフローチャートは、図29に示すフローチャートと比較して、ステップS354,S362,S364,S376に代えて、それぞれステップS354B,S362B,S364B,S376Bの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
ステップS352に続いて実行されるステップS354Bにおいて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定する(ステップS354B)。
通信回路からの受信完了通知を受けた場合(ステップS360においてYES)に実行されるステップS362Bにおいて、マイクロプロセッサ100は、受信バッファ(PLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)に格納されている入力データを、「書込先」状態の入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)にコピーするとともに、「書込先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定し、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「書込先」状態に設定する(ステップS362B)。
ステップS362Bに続いて実行されるステップS364Bにおいて、マイクロプロセッサ100は、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、「待機」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ2(入力同期バッファ2A,2B,2Cのいずれか)を「待機」状態に設定する(ステップS364B)。このとき、制御プログラム2の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ2の「参照先」状態および「待機」状態は変更されず、そのまま維持される。
制御プログラム2の実行終了通知を受けた場合(ステップS374において「実行終了通知」)において実行させるステップS376Bにおいて、マイクロプロセッサ100は、制御プログラム2の実行状態を「実行終了」に設定し、演算用バッファ2に格納されている出力データを、「書込先」状態の出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)にコピーした上で、「書込先」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ2(出力同期バッファ2D,2E,2Fのいずれか)を「書込先」状態に設定する(ステップS376B)。
(r4:まとめ)
上述したように、実施の形態13においては、システムプログラム210は、入力データの入力に関するPLC1の制御動作の実行準備処理として、以下の(a)および(b)の処理を含む。なお、入力データの受信は制御サイクルごとに実行される。
(a) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)をメインメモリ104(記憶手段)内に生成する処理(図31に示すステップS1)。
(b) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第1入力同期バッファ、第2入力同期バッファおよび第3入力同期バッファ(図27に示す入力同期バッファ2A,2B,2C)を入力同期バッファの組としてメインメモリ104(記憶手段)内に生成する処理(図31に示すステップS1)。第1入力同期バッファ、第2入力同期バッファ、および第3入力同期バッファは、受信バッファ(図4に示すPLCシステムバス受信バッファ1044および/またはフィールドネットワーク受信バッファ1046)から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態13においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(c)〜(e)の処理を含む。
(c) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第1入替処理を実行する入力コピー処理(図31に示すステップS362B)。
(d) 制御プログラムの実行サイクルが開始した制御サイクルであることを条件とし
て、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第2入替処理を実行する実行サイクル入力初期処理(図31に示すステップS364B)。
(e) 制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる制御プログラム開始処理(図31に示すステップS370)。
一方、実施の形態13においては、システムプログラム210は、出力データの出力に関する処理を含めると、PLC1の制御動作の実行準備処理として、以下の(α)〜(γ)の処理を含む。
(α) 受信された入力データを格納する受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)および送信されるべき出力データを格納する送信バッファ(図4に示すPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045)をメインメモリ104(記憶手段)内に生成する処理(図31に示すステップS1)。
(β) 制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ(図27に示す入力同期バッファ2A,2B,2C)をメインメモリ104(記憶手段)内(図4に示す入力同期バッファ領域1042b)に生成する処理(図31に示すステップS1)。
(γ) 送信バッファにコピーされる出力データが格納される、第1出力同期バッファ、第2出力同期バッファおよび第3出力同期バッファ(図28に示す出力同期バッファ2D,2E,2F)を出力同期バッファの組としてメインメモリ104(記憶手段)内(図4に示す出力同期バッファ領域1042a)に生成する処理(図31に示すステップS1)。第1出力同期バッファ、第2出力同期バッファ、および第3出力同期バッファは、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
また、実施の形態13においては、システムプログラム210は、PLC1の制御動作の実行制御処理として、以下の(δ)〜(ζ)の処理を含む。
(δ) 受信された入力データを受信バッファ(図4に示すPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046)からその入力データに対応する入力同期バッファにコピーする入力コピー処理(図31に示すステップS362B)。
(ε) 制御プログラムを実行開始させる制御プログラム開始処理(図31に示すステップS370)。
(ζ) 制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第4入替処理を実行する出力同期バッファ格納処理(図31に示すステップS376B)。
(η) 各制御サイクルの開始後、送信バッファからの出力データの送信までの間に、
出力データを「参照先」状態である出力同期バッファから送信バッファにコピーし、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、送信バッファへのコピーを実行するより前に、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第5入替処理を実行し、それにより、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいて送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする、出力コピー処理(図31に示すステップS354BおよびS356)。
実施の形態13によれば、PLCのシステムプログラムが実施の形態6〜9に示す3バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
<S.サポート装置>
次に、PLC1で実行されるプログラムの作成およびPLC1のメンテナンスなどを行うためのPLCサポート装置8について説明する。
図32は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のハードウェア構成を示す模式図である。図32を参照して、PLCサポート装置8は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
図32を参照して、PLCサポート装置8は、OSを含む各種プログラムを実行するCPU81と、BIOSや各種データを格納するROM(Read Only Memory)82と、CPU81でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリRAM83と、CPU81で実行されるプログラムなどを不揮発的に格納するハードディスク(HDD)84とを含む。
PLCサポート装置8は、さらに、ユーザからの操作を受付けるキーボード85およびマウス86と、情報をユーザに提示するためのモニタ87とを含む。さらに、PLCサポート装置8は、PLC1(CPUユニット13)などと通信するための通信インターフェイス(IF)89を含む。
後述するように、PLCサポート装置8で実行される各種プログラムは、CD−ROM9に格納されて流通する。このCD−ROM9に格納されたプログラムは、CD−ROM(Compact Disk-Read Only Memory)ドライブ88によって読取られ、ハードディスク(
HDD)84などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
上述したように、PLCサポート装置8は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。
図33は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のソフトウェア構成を示す模式図である。図33を参照して、PLCサポート装置8ではOS310が実行され、PLCサポートプログラム320に含まれる各種のプログラムを実行可能な環境が提供される。
PLCサポートプログラム320は、エディタプログラム321と、コンパイラプログ
ラム322と、デバッガプログラム323と、シミュレーション用シーケンス命令演算プログラム324と、シミュレーション用モーション演算プログラム325と、通信プログラム326とを含む。PLCサポートプログラム320に含まれるそれぞれのプログラムは、典型的には、CD−ROM9に格納された状態で流通して、PLCサポート装置8にインストールされる。
エディタプログラム321は、ユーザプログラム236を作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム321は、ユーザがキーボード85やマウス86を操作してユーザプログラム236のソースプログラム330を作成する機能に加えて、作成したソースプログラム330の保存機能および編集機能を提供する。また、エディタプログラム321は、外部からの制御プログラム230(その中でも特に、ユーザプログラム236)のソースプログラムを入力し、またユーザの操作により既存の制御プログラム230のソースプログラムを編集する。
コンパイラプログラム322は、制御プログラム230のソースプログラムをコンパイルして、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式のユーザプログラム236を生成する機能を提供する。また、コンパイラプログラム322は、ソースプログラム330をコンパイルして、PLCサポート装置8のCPU81で実行可能なオブジェクトプログラム形式のユーザプログラム340を生成する機能を提供する。このユーザプログラム340は、PLCサポート装置8によってPLC1の動作をシミュレート(模擬)するために使用される、シミュレーション用のオブジェクトプログラムである。
デバッガプログラム323は、制御プログラム230のソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。
デバッガプログラム323は、さらに、制御プログラム230のシミュレーション用のオブジェクトプログラムを実行する機能を提供する。このシミュレーション時には、CPUユニット13のシステムプログラムに含まれるシーケンス命令演算プログラム232およびモーション演算プログラム234に代えて、PLCサポートプログラム320に含まれるシミュレーション用シーケンス命令演算プログラム324およびシミュレーション用モーション演算プログラム325が用いられる。
通信プログラム326は、PLC1のCPUユニット13へ制御プログラム230のCPUユニット13用のオブジェクトプログラムを転送する機能を提供する。
一般的には、PLC1に実装されるシステムプログラム210は、CPUユニット13の製造段階でCPUユニット13の不揮発性メモリ106へ格納される。但し、CD−ROM9にシステムプログラム210を格納しておけば、ユーザは、CD−ROM9のシステムプログラム210をPLCサポート装置8にコピーし、通信プログラム326が提供する機能を利用してコピーしたシステムプログラム210をCPUユニット13へ転送することもできる。さらに、CD−ROM9に、PLC1のCPUユニット13で実行されるリアルタイムOS200を格納しておけば、リアルタイムOS200についてもユーザ操作によってPLC1へ再インストールできる。
<T.その他の形態>
上述した図13,15,18,21に示すシーケンス図は、PLCにマルチコアのマイクロプロセッサを用いた場合の動作態様の一例を示す。
例えば、第1コアおよび第2コアを有するマイクロプロセッサを用いると、第1コアが実行する入出力処理と第2コアが実行する制御プログラムとを並列実行することが実装上は可能となる。しかしながら、PLCで実行される制御プログラムは、受信された入力データを使用し、送信すべき出力データを生成するから、入出力処理と制御プログラムとは交互に実行されることが基本的な動作態様である。また、入出力処理は、制御サイクルごとになるべく一定の周期で実行することが好ましい。
このようなPLCで実行される制御プログラムに関する制約は、マルチコアのマイクロプロセッサを用いた場合でも変わらない。そのため、マルチコアのマイクロプロセッサを用いた場合であっても、第1コアが実行する入出力処理と第2コアが実行する制御プログラムとを常に並列実行すると、制御動作に役立たない無駄な動作が多くなる。
一方、制御プログラムの実行時間は、入力データの内容などの条件によって変動するので、制御サイクルの周期が制御プログラムの平均実行時間より少し長い程度に設定されていると、入出力処理の終了後に実行開始した制御プログラムが次の入出力処理の開始までに終了しないことがある。
このような場合に、シングルコアのマイクロプロセッサを用いる場合は、以下のような対処が考えられる。
・制御プログラムの実行が終了するまでその制御サイクルを延長する(この場合、入出力処理の周期が乱れる)。
・制御プログラムの実行を中断して入出力処理を行い、その後に、制御プログラムの実行を再開する(再開した制御サイクルで新たに実行開始されるはずであった制御プログラムの実行はキャンセルされる)。
これに対して、マルチコアのマイクロプロセッサを用いる場合は、入出力処理と制御プログラムとを並列実行が可能であることを利用して、制御サイクル内に制御プログラムの実行が終了しなくてもそのまま実行を継続し、次の制御サイクルにおいて実行が終了すれば、引き続き、制御プログラムの新たな実行を開始することが可能である。このような思想を具現化したものが、図13などに示す動作態様である。
このような動作態様を有するPLCは、以下のように表現することができる。すなわち、制御対象を制御するPLCのCPUユニットであって、マイクロプロセッサと、記憶手段と、通信回路とを含む。このPLCのCPUユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられる。マイクロプロセッサは、少なくとも、第1コアおよび第2コアを有する。通信回路は、出力データを送信し、および、入力データを受信する。システムプログラムは、マイクロプロセッサのいずれかのコアにおいて実行される。システムプログラムは、第1コアおよび第2コアを以下のように動作させるための処理を含む。すなわち、第1コアが、制御サイクルごとに、制御プログラムが生成した出力データを送信可能にし、および受信された入力データを制御プログラムが利用することを可能にすることを含む入出力処理の実行を制御する。第2コアが、(1)第1制御サイクルにおける入出力処理の実行終了後に制御プログラムの第1実行を開始し、(2)第1制御サイクルの次の第2制御サイクルにおける入出力処理の実行終了までに制御プログラムの第1実行が終了すれば、第2制御サイクルにおける入出力処理の実行終了後に制御プログラムの第2実行を開始し、(3)第2制御サイクルにおける入出力処理の実行
終了までに制御プログラムの第1実行が終了しなければ、制御プログラムの第1実行の終了後に、第2制御サイクルの次の第3制御サイクルにおける入出力処理の実行終了を待つことなく制御プログラムの第2実行を開始する。
このようなPLCによれば、第1制御サイクルで第1実行を開始した制御プログラムの実行が第2制御サイクルにおける入出力処理の開始までに終了しなくても、その入出力処理の終了までに制御プログラムの第1実行が終了する可能性がある。その場合には、その入出力処理の終了を待って新たに実行開始する制御プログラムは新たな入力データを使用することができる。
また、第1制御サイクルで第1実行を開始した制御プログラムの実行が第2制御サイクルにおける入出力処理の終了までに終了しない場合には、制御プログラムの第2実行の開始が遅れるが、制御プログラムの平均実行時間が入出力処理の終了から次回の開始までの時間より短ければ、数回の制御サイクルの間に、入出力処理の終了に続いて制御プログラムの実行を開始するという状態に戻ることができる可能性が高い。それまでの間も、PLCは、可能な限り新しく受信された入力データが制御プログラムに使用され、可能な限り新しく生成された出力データが送信される状態で動作することができる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。