(57)【特許請求の範囲】
【請求項１】
制御対象を制御するＰＬＣのＣＰＵユニットであって、
マイクロプロセッサと、
記憶手段と、
通信回路とを備え、
前記ＰＬＣのＣＰＵユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されており、
前記記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられ、
前記マイクロプロセッサは、少なくとも、第１コアおよび第２コアを有しており、
前記通信回路は、前記出力データを送信し、および、前記入力データを受信するように構成されており、
前記システムプログラムは、前記マイクロプロセッサのいずれかのコアにおいて実行されて、前記第１コアおよび前記第２コアに以下の動作を実行させ、当該以下の動作は、
前記第１コアが、制御サイクルごとに、前記制御プログラムが生成した出力データを送信可能にすること、および、受信された入力データを前記制御プログラムが利用することを可能にすることを含む、入出力処理の実行を制御する動作と、
前記第２コアが、
第１制御サイクルにおける前記入出力処理の実行終了後に前記制御プログラムの第１実行を開始し、
前記第１制御サイクルの次の第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの第１実行が終了すれば、第２制御サイクルにおける入出力処理の実行終了後に制御プログラムの第２実行を開始し、
前記第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの前記第１実行が終了しなければ、前記制御プログラムの第１実行の終了後に、前記制御プログラムが参照するバッファを書込禁止にして、前記第２制御サイクルの次の第３制御サイクルにおける前記入出力処理の実行終了を待つことなく前記制御プログラムの第２実行を開始する、動作とを含む、ＰＬＣのＣＰＵユニット。
【請求項２】
マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されたＰＬＣのＣＰＵユニットにおい
て、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムであって、
前記記憶手段は、前記制御プログラムおよび前記システムプログラムの格納に用いられ、
前記マイクロプロセッサは、少なくとも、第１コアおよび第２コアを有しており、
前記通信回路は、前記出力データを送信し、および、前記入力データを受信するように構成されており、
前記システムプログラムは、前記マイクロプロセッサのいずれかのコアにおいて実行されて、前記第１コアおよび前記第２コアに以下の動作を実行させ、当該以下の動作は、
前記第１コアが、制御サイクルごとに、前記制御プログラムが生成した出力データを送信可能にすること、および、受信された入力データを前記制御プログラムが利用することを可能にすることを含む、入出力処理の実行を制御する動作と、
前記第２コアが、
第１制御サイクルにおける前記入出力処理の実行終了後に前記制御プログラムの第１実行を開始し、
前記第１制御サイクルの次の第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの第１実行が終了すれば、第２制御サイクルにおける入出力処理の実行終了後に制御プログラムの第２実行を開始し、
前記第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの前記第１実行が終了しなければ、前記制御プログラムの第１実行の終了後に、前記制御プログラムが参照するバッファを書込禁止にして、前記第２制御サイクルの次の第３制御サイクルにおける前記入出力処理の実行終了を待つことなく前記制御プログラムの第２実行を開始する、動作とを含む、ＰＬＣ用のシステムプログラム。
【請求項３】
マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されたＰＬＣのＣＰＵユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体であって、
前記記憶手段は、前記制御プログラムおよび前記システムプログラムの格納に用いられ、
前記マイクロプロセッサは、少なくとも、第１コアおよび第２コアを有しており、
前記通信回路は、前記出力データを送信し、および、前記入力データを受信するように構成されており、
前記システムプログラムは、前記マイクロプロセッサのいずれかのコアにおいて実行されて、前記第１コアおよび前記第２コアに以下の動作を実行させ、当該以下の動作は、
前記第１コアが、制御サイクルごとに、前記制御プログラムが生成した出力データを送信可能にすること、および、受信された入力データを前記制御プログラムが利用することを可能にすることを含む、入出力処理の実行を制御する動作と、
前記第２コアが、
第１制御サイクルにおける前記入出力処理の実行終了後に前記制御プログラムの第１実行を開始し、
前記第１制御サイクルの次の第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの第１実行が終了すれば、第２制御サイクルにおける入出力処理の実行終了後に制御プログラムの第２実行を開始し、
前記第２制御サイクルにおける前記入出力処理の実行終了までに前記制御プログラムの前記第１実行が終了しなければ、前記制御プログラムの第１実行の終了後に、前記制御プログラムが参照するバッファを書込禁止にして、前記第２制御サイクルの次の第３制御サイクルにおける前記入出力処理の実行終了を待つことなく前記制御プログラムの第２実行を開始する、動作とを含む、ＰＬＣ用のシステムプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械、設備などの動作を制御するために用いられるＰＬＣ（Programmable Logic Controller。プログラマブルコントローラともよばれる。）において、入出力処理
と制御プログラムとの間で行われるデータの受け渡しに関する。
【背景技術】
【０００２】
ＰＬＣは、たとえば、制御プログラムを実行するマイクロプロセッサを備えるＣＰＵ（Central Processing Unit）ユニット、外部のスイッチやセンサからの信号入力および外
部のリレーやアクチュエータへの信号出力を担当するＩＯ（Input Output）ユニットなどの複数のユニットで構成される。ＣＰＵユニットは、他のユニットへの出力データの送信と、他のユニットからの入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する。制御プログラムは、ユーザにおける制御目的に応じて作成されるユーザプログラムを含む。制御プログラムは、ユーザプログラムの中で実行が指示されるモーション演算プログラムを含んでいてもよい。
【０００３】
特許文献１（特開２０００−１０５６０４号公報）に示されるように、従来のＰＬＣにおいては、各制御サイクルの中で、１つのシーケンスプログラム（制御プログラム）と１組の出力リフレッシュおよび入力リフレッシュを実行する。この場合には、制御サイクルと制御プログラムの実行サイクルとは等しい。
【０００４】
ＰＬＣにおいて、複数の制御プログラムを時分割で実行することも知られている。
特許文献２（特開２００７−１４０６５５号公報）には、モータを制御するモーション制御機能とシーケンス演算を実行するＰＬＣ機能とを１つのＣＰＵで処理する装置において、基本クロックの１サイクルごとに、「定周期モーション制御処理および各軸処理」と「高速シーケンス処理」とを実行し、さらに各基本クロックサイクル内の残りの時間において、「低速シーケンス処理」または「非定周期モーション制御処理」を実行することが記載されている。また、低速シーケンス処理が基本クロックサイクル内に終了しない場合は、所定の基本クロック回数分の時間の停止後に残りの処理を実行することが記載されている（例えば、段落０００４）。
【０００５】
特許文献３（特開２０００−２９３２１０号公報）には、制御装置の動作に関し、周期タスク（制御プログラム）とは別に入力処理および出力処理を行うリフレッシュブロックをそれぞれ複数用意し、各制御サイクルにおいていくつかのリフレッシュブロックといくつかの周期タスクをそれぞれ選択的に実行することが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１０５６０４号公報
【特許文献２】特開２００７−１４０６５５号公報
【特許文献３】特開２０００−２９３２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の、各制御サイクルの中で１組の入出力処理と１つの制御プログラムとを実行するＰＬＣにおいては、入出力処理と制御プログラムとが１対１に対応しているため、それら
の間での入力データおよび出力データの受け渡しは簡単である。しかしながら、入出力処理の実行周期と制御プログラムの実行周期とが異なる場合や、１組の入出力処理に複数の制御プログラムが関係する場合や、１つの制御プログラムに複数組の入出力処理が関係する場合のように、入出力処理と制御プログラムとが１対１に対応しない場合がある。このような場合には、制御プログラムの作成者が制御プログラムの実行と入出力処理の実行とに関するシステムの実行制御態様（スケジューリング）を熟知した上で、入出力処理と制御プログラムとの間での入力データと出力データとの受け渡しが適切に行われるように配慮してプログラミングする必要がある。そのため、制御プログラム作成者の負担が大きかった。
【０００８】
特に、同じ入力データを複数の制御プログラムが利用する場合には、その入力データへの複数の制御プログラムからのアクセスが競合することがあった。また、制御プログラムの実行中における他の制御プログラムの実行、または、新たな入力データの受信、などによって、使用中の入力データが上書きされることがあった。これらのことを防ぐために、その入力データを制御プログラム自身が自己のローカル変数にコピーしてから使用するような処理が必要であった。
【０００９】
本発明は、入出力処理と制御プログラムとが１対１に対応していない場合であっても、少なくとも受信された入力データを制御プログラムが利用可能にすることを、そのための制御プログラム自身による処理を必要とせずに、適切に行うことができるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明のある局面によれば、制御対象を制御するＰＬＣのＣＰＵユニットを提供する。ＰＬＣのＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。ＰＬＣのＣＰＵユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信および入力データを受信する。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段内に生成する処理と、制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラムを実行開始させる制御プログラム開始処理とを含む。
【００１１】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファおよび第２入力同期バッファは、受信バッファから入力データをコピー可能な状態である書込先状態、および、制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、書込先状態である入力同期バッファにコピーする処理である。
【００１２】
さらに好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファと、第２入力同期バッファと、第３入力同期バッファとを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、書込先状態、参照先状態、待機状
態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが待機状態であることを条件として、待機状態である入力同期バッファおよび参照先状態である入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００１３】
さらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムごとに最新入力データ更新フラグを記憶手段内に生成する処理を含む。入力コピー処理は、さらに、当該入力コピーに関連する最新入力データ更新フラグをオンにする処理を含む。制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファに関連する最新入力データ更新フラグがオンであることを条件として、第２入替処理および当該最新入力データ更新フラグをオフにする処理を含み、それにより、最新データを格納している入力同期バッファが待機状態であることを条件として実行する第２入替処理を実現する。
【００１４】
あるいはさらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。入力コピー処理は、さらに、コピー先の入力同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。制御プログラム開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である入力同期バッファが待機状態であることを条件として実行される第２入替処理を含む。
【００１５】
あるいは好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが書込先状態であることを条件として、書込先状態である入力同期バッファおよび参照先状態である入力同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００１６】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。入力コピー処理は、さらに、コピー先の入力同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。制御プログラム開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である入力同期バッファをその制御プログラムの実行において参照する参照先状態とする処理を含む。
【００１７】
好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムが参照する入力同期バッファを書込禁止状態とする処理を含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。入力コピー処理は、コピー先の入力同期バッファが書込禁止状態でないことを条件として行う処理である。
【００１８】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。第２入力同期バッファは、制御プログラムが入力データを参照するときに参照先とする入力同期バッファである。入力コピー処理は、第１入力同期バッファにコピーする処理である。制御プログラム開始処理は、さらに、制御プログラムを実
行開始させる前に第１入力同期バッファに格納されているデータを第２入力同期バッファにコピーする処理を含む。
【００１９】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００２０】
さらに好ましくは、出力コピー処理は、制御プログラムの実行が終了すると出力データをコピーする処理である。
【００２１】
あるいはさらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、および待機状態のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、最新データを格納している出力同期バッファが待機状態であることを条件として、待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、かつ、出力データを参照先状態となった出力同期バッファから送信バッファにコピーする処理である。
【００２２】
好ましくは、入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、受信された入力データを、当該入力データが制御プログラムの実行サイクルが開始した制御サイクルと関係する受信タイミングにおいて受信されたことを条件として、受信バッファからその入力データに対応する入力同期バッファにコピーする処理である。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００２３】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、受信バッファから入力データをコピー可能な状態である書込先状態、制御プログラムから参照可能な状態である参照先状態、および、待機状態、のいずれかの状態が重複せずに付与されるものである。入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、書込先状態である入力同期バッファにコピーし、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を実行する処理である。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、待機状態である入力同期バッファおよび参照先状態で
ある入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を実行する実行サイクル入力初期処理を含む。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００２４】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいてその出力データが送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００２５】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、各制御サイクルの開始後、送信バッファからの出力データの送信までの間に、出力データを参照先状態である出力同期バッファから送信バッファにコピーし、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、送信バッファへのコピーを実行するより前に待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、それにより、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいて送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする処理である。
【００２６】
この発明の別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを含み、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを提供する。記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段内に生成する処理と、制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラムを実行開始させる制御プログラム開始処理とを実行させる。
【００２７】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファおよび第２入力同期バッファは、受信バッファから入力データをコピー可能な状態である書込先状態、および、制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、書込先状態である入力同期バッファにコピーする処理である。
【００２８】
さらに好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファと、第２入力同期バッファと、第３入力同期バッファとを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが待機状態であることを条件として、待機状態である入力同期バッファおよび参照先状態である入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００２９】
あるいはさらに好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが書込先状態であることを条件として、書込先状態である入力同期バッファおよび参照先状態である入力同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００３０】
あるいは好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。入力コピー処理は、さらに、コピー先の入力同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。制御プログラム開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である入力同期バッファをその制御プログラムの実行において参照する参照先状態とする処理を含む。
【００３１】
あるいは好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムが参照する入力同期バッファを書込禁止状態とする処理を含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。入力コピー処理は、コピー先の入力同期バッファが書込禁止状態でないことを条件として行う処理である。
【００３２】
あるいは好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。第２入力同期バッファは、制御プログラムが入力データを参照するときに参照先とする入力同期バッファである。入力コピー処理は、第１入力同期バッファにコピーする処理である。制御プログラム開始処理は、さらに、制御プログラムを実行開始させる前に第１入力同期バッファに格納されているデータを第２入力同期バッファにコピーする処理を含む。
【００３３】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００３４】
さらに好ましくは、出力コピー処理は、制御プログラムの実行が終了すると出力データをコピーする処理である。
【００３５】
あるいはさらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、および待機状態のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、最新データを格納している出力同期バッファが待機状態であることを条件として、待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、かつ、出力データを参照先状態となった出力同期バッファから送信バッファにコピーする処理である。
【００３６】
好ましくは、入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、受信された入力データを、当該入力データが制御プログラムの実行サイクルが開始した制御サイクルと関係する受信タイミングにおいて受信されたことを条件として、受信バッファからその入力データに対応する入力同期バッファにコピーする処理である。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００３７】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、受信バッファから入力データをコピー可能な状態である書込先状態、制御プログラムから参照可能な状態である参照先状態、および、待機状態、のいずれかの状態が重複せずに付与されるものである。入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、書込先状態である入力同期バッファにコピーし、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を実行する処理である。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、待機状態である入力同期バッファおよび参照先状態である入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を実行する実行サイクル入力初期処理を含む。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００３８】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいてその出力データが送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００３９】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、各制御サイクルの開始後、送信バッファからの出力データの送信までの間に、出力データを参照先状態である出力同期バッファから送信バッファにコピーし、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、送信バッファへのコピーを実行するより前に待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、それにより、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいて送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする処理である。
【００４０】
この発明のさらに別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを含み、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体を提供する。記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段内に生成する処理と、制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラムを実行開始させる制御プログラム開始処理とを実行させる。
【００４１】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファおよび第２入力同期バッファは、受
信バッファから入力データをコピー可能な状態である書込先状態、および、制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、書込先状態である入力同期バッファにコピーする処理である。
【００４２】
さらに好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファと、第２入力同期バッファと、第３入力同期バッファとを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。入力コピー処理は、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが待機状態であることを条件として、待機状態である入力同期バッファおよび参照先状態である入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００４３】
あるいはさらに好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが書込先状態であることを条件として、書込先状態である入力同期バッファおよび参照先状態である入力同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００４４】
あるいは好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。入力コピー処理は、さらに、コピー先の入力同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。制御プログラム開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である入力同期バッファをその制御プログラムの実行において参照する参照先状態とする処理を含む。
【００４５】
あるいは好ましくは、制御プログラム開始処理は、さらに、実行開始させる制御プログラムが参照する入力同期バッファを書込禁止状態とする処理を含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。入力コピー処理は、コピー先の入力同期バッファが書込禁止状態でないことを条件として行う処理である。
【００４６】
あるいは好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファおよび第２入力同期バッファを同期バッファの組として生成する処理である。第２入力同期バッファは、制御プログラムが入力データを参照するときに参照先とする入力同期バッファである。入力コピー処理は、第１入力同期バッファにコピーする処理である。制御プログラム開始処理は、さらに、制御プログラムを実行開始させる前に第１入力同期バッファに格納されているデータを第２入力同期バッファにコピーする処理を含む。
【００４７】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに
記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００４８】
さらに好ましくは、出力コピー処理は、制御プログラムの実行が終了すると出力データをコピーする処理である。
【００４９】
あるいはさらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、および待機状態のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、最新データを格納している出力同期バッファが待機状態であることを条件として、待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、かつ、出力データを参照先状態となった出力同期バッファから送信バッファにコピーする処理である。
【００５０】
好ましくは、入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、受信された入力データを、当該入力データが制御プログラムの実行サイクルが開始した制御サイクルと関係する受信タイミングにおいて受信されたことを条件として、受信バッファからその入力データに対応する入力同期バッファにコピーする処理である。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００５１】
好ましくは、入力同期バッファを生成する処理は、制御プログラムから参照される入力データごとに、第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファを入力同期バッファの組として生成する処理である。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファは、受信バッファから入力データをコピー可能な状態である書込先状態、制御プログラムから参照可能な状態である参照先状態、および、待機状態、のいずれかの状態が重複せずに付与されるものである。入力データの受信は、制御サイクルごとに実行される。入力コピー処理は、書込先状態である入力同期バッファにコピーし、さらに、コピー先となった書込先状態である入力同期バッファおよびその入力同期バッファと同じ組の中で待機状態である入力同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を実行する処理である。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、待機状態である入力同期バッファおよび参照先状態である入力同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を実行する実行サイクル入力初期処理を含む。制御プログラム開始処理は、制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる処理である。
【００５２】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送
信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含む。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいてその出力データが送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする出力コピー処理を含む。
【００５３】
好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、制御プログラムが出力データを格納する演算用バッファを記憶手段内に生成する処理を含む。出力同期バッファを生成する処理は、出力データごとに、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファを出力同期バッファの組として生成する処理である。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である書込先状態、送信バッファにコピーするための参照が可能な状態である参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。システムプログラムは、ＰＬＣの制御動作の実行制御処理として、さらに、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから書込先状態である出力同期バッファにコピーし、さらに、コピー先となった書込先状態である出力同期バッファおよびその出力同期バッファと同じ組の中で待機状態である出力同期バッファの書込先状態と待機状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理を含む。出力コピー処理は、各制御サイクルの開始後、送信バッファからの出力データの送信までの間に、出力データを参照先状態である出力同期バッファから送信バッファにコピーし、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、送信バッファへのコピーを実行するより前に待機状態である出力同期バッファおよび参照先状態である出力同期バッファの待機状態と参照先状態とを入れ替える第５入替処理を実行し、それにより、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいて送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする処理である。
【００５４】
この明細書における（日本語の）「命令」は、ある機能を実現するための、プログラムのソースリストに表れる個々の命令に限らず、それら個々の命令や関数等の集合をも意味しており、たとえば英語ではinstructionsのように複数形で表記されるべきものである。
【発明の効果】
【００５５】
本発明によれば、ＰＬＣにおいて、入出力処理と制御プログラムとが１対１に対応していない場合であっても、受信された入力データを制御プログラムが利用可能にすることを、そのための制御プログラム自身による処理を必要とせずに、行うことができる。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。
【図２】本発明の実施の形態に係るＣＰＵユニットのハードウェア構成を示す模式図である。
【図３】本発明の実施の形態に係るＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。
【図４】本発明の実施の形態に係るＣＰＵユニットのメインメモリの領域構成を示す模式図である。
【図５】本発明の実施の形態に係るＣＰＵユニットにおけるシステムプログラムの全体処理を示すフローチャートである。
【図６】実施の形態１に係る入力方向の動作を示すシーケンス図である。
【図７】図６に示す制御サイクル１および２について拡大して示すシーケンス図である。
【図８】実施の形態１に係る出力方向の動作を示すシーケンス図である。
【図９】図８に示す制御サイクル１および２について拡大して示すシーケンス図である。
【図１０】実施の形態１に係る実行動作を示すフローチャートである。
【図１１】実施の形態２に係る入力方向の動作を示すシーケンス図である。
【図１２】実施の形態２に係る実行動作を示すフローチャートである。
【図１３】実施の形態３に係る入力方向の動作を示すシーケンス図である。
【図１４】実施の形態３に係る実行動作を示すフローチャートである。
【図１５】実施の形態４および５に係る入力方向の動作を示すシーケンス図である。
【図１６】実施の形態４に係る実行動作を示すフローチャートである。
【図１７】実施の形態５に係る実行動作を示すフローチャートである。
【図１８】実施の形態６および７に係る入力方向の動作を示すシーケンス図である。
【図１９】実施の形態６に係る実行動作を示すフローチャートである。
【図２０】実施の形態７に係る実行動作を示すフローチャートである。
【図２１】実施の形態８および９に係る出力方向の動作を示すシーケンス図である。
【図２２】実施の形態８に係る実行動作を示すフローチャートである。
【図２３】実施の形態９に係る実行動作を示すフローチャートである。
【図２４】実施の形態１０に係る入力方向の動作を示すシーケンス図である。
【図２５】実施の形態１０に係る出力方向の動作を示すシーケンス図である。
【図２６】実施の形態１０に係る実行動作を示すフローチャートである。
【図２７】実施の形態１１、１２および１３に係る入力方向の動作を示すシーケンス図である。
【図２８】実施の形態１１、１２および１３に係る出力方向の動作を示すシーケンス図である。
【図２９】実施の形態１１に係る実行動作を示すフローチャートである。
【図３０】実施の形態１２に係る実行動作を示すフローチャートである。
【図３１】実施の形態１３に係る実行動作を示すフローチャートである。
【図３２】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のハードウェア構成を示す模式図である。
【図３３】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のソフトウェア構成を示す模式図である。
【発明を実施するための形態】
【００５７】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００５８】
＜Ａ．システム構成＞
本実施の形態に係るＰＬＣは、機械や設備などの制御対象を制御する。本実施の形態に係るＰＬＣは、その構成要素としてＣＰＵユニットを含む。ＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、制御プログラムおよびプログラムの実行を制御するシステムプログラムの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび記入力データを受信する。まず、図１を参照して、本実施の形態に係るＰＬＣ１のシステム構成について説明する。
【００５９】
図１は、本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。図１を参照して、ＰＬＣシステムＳＹＳは、ＰＬＣ１と、ＰＬＣ１とフィールドネットワーク２を介して接続されるサーボモータドライバ３およびリモートＩＯターミナル５と、フィールド機器である検出スイッチ６およびリレー７とを含む。また、ＰＬＣ１には、接続
ケーブル１０などを介してＰＬＣサポート装置８が接続される。
【００６０】
ＰＬＣ１は、主たる演算処理を実行するＣＰＵユニット１３と、１つ以上のＩＯユニット１４と、特殊ユニット１５とを含む。これらのユニットは、ＰＬＣシステムバス１１を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット１２によって適切な電圧の電源が供給される。なお、ＰＬＣ１として構成される各ユニットは、ＰＬＣメーカーが提供するものであるので、ＰＬＣシステムバス１１は、一般にＰＬＣメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク２については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
【００６１】
ＣＰＵユニット１３の詳細については、図２を参照して後述する。
ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット１４は、検出スイッチ６などのセンサが何らかの対象物を検出している状態（オン）および何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１４は、リレー７やアクチュエータといった出力先に対して、活性化するための指令（オン）および不活性化するための指令（オフ）のいずれかを出力する。
【００６２】
特殊ユニット１５は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００６３】
フィールドネットワーク２は、ＣＰＵユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。本実施の形態に係るＰＬＣシステムＳＹＳでは、典型的に、本実施の形態においては、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク２として採用する場合の構成について例示する。
【００６４】
なお、図１には、ＰＬＣシステムバス１１およびフィールドネットワーク２の両方を有するＰＬＣシステムＳＹＳを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク２ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク２を使用せずに、サーボモータドライバ３をＰＬＣシステムバス１１に直接接続してもよい。さらに、フィールドネットワーク２の通信ユニットをＰＬＣシステムバス１１に接続し、ＣＰＵユニット１３から当該通信ユニット経由で、フィールドネットワーク２に接続された機器との間の通信を行うようにしてもよい。
【００６５】
なお、ＰＬＣ１は、ＣＰＵユニット１３にＩＯユニット１４の機能やサーボモータドライバ３の機能を持たせることにより、ＩＯユニット１４やサーボモータドライバ３などを介さずにＣＰＵユニット１３が直接制御対象を制御する構成でもよい。
【００６６】
サーボモータドライバ３は、フィールドネットワーク２を介してＣＰＵユニット１３と接続されるとともに、ＣＰＵユニット１３からの指令値に従ってサーボモータ４を駆動する。より具体的には、サーボモータドライバ３は、ＰＬＣ１から一定周期で、位置指令値
、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ３は、サーボモータ４の軸に接続されている位置センサ（ロータリーエンコーダ）やトルクセンサといった検出器から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ４の動作に係る実測値を取得する。そして、サーボモータドライバ３は、ＣＰＵユニット１３からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ３は、実測値が目標値に近づくようにサーボモータ４を駆動するための電流を調整する。なお、サーボモータドライバ３は、サーボモータアンプと称されることもある。
【００６７】
また、図１には、サーボモータ４とサーボモータドライバ３とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００６８】
図１に示すＰＬＣシステムＳＹＳのフィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送に係る処理を行うための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
【００６９】
ＰＬＣサポート装置８については後述する。
＜Ｂ．ＣＰＵユニットのハードウェア構成＞
次に、図２を参照して、ＣＰＵユニット１３のハードウェア構成について説明する。図２は、本発明の実施の形態に係るＣＰＵユニット１３のハードウェア構成を示す模式図である。図２を参照して、ＣＰＵユニット１３は、マイクロプロセッサ１００と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、ＰＬＣシステムバスコントローラ１２０と、フィールドネットワークコントローラ１４０と、ＵＳＢコネクタ１１０とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００７０】
マイクロプロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００７１】
マイクロプロセッサ１００は、以下に説明する実施の形態１〜７においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が２以上の場合を意味する（コア数が２の場合も含む）。
【００７２】
ＣＰＵユニット１３は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００７３】
メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１３への電源投入後にマイクロプロセッサ１００で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（
Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）といった
デバイスが用いられる。
【００７４】
一方、不揮発性メモリ１０６は、リアルタイムＯＳ（Operating System）、ＰＬＣ１のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ１００がアクセスできるようにメインメモリ１０４にコピーされる。このような不揮発性メモリ１０６としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒
体などを用いることもできる。
【００７５】
システムタイマ１０８は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ１００に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、ＯＳ（Operating System）やＢＩＯＳ（Basic Input Output System）などによって、任意の周期で割り込み信号を発生するよ
うに設定することもできる。このシステムタイマ１０８が発生する割り込み信号を利用して、後述するような制御サイクルごとの制御動作が実現される。
【００７６】
ＣＰＵユニット１３は、通信回路として、ＰＬＣシステムバスコントローラ１２０およびフィールドネットワークコントローラ１４０を有する。これらの通信回路は、出力データの送信および入力データの受信を行う。
【００７７】
なお、ＣＰＵユニット１３自体にＩＯユニット１４やサーボモータドライバ３の機能を持たせる場合は、通信回路による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてＣＰＵユニット１３の内部で行われる送信および受信となる。
【００７８】
ＰＬＣシステムバスコントローラ１２０は、ＰＬＣシステムバス１１を介したデータの遣り取りを制御する。より具体的には、ＰＬＣシステムバスコントローラ１２０は、ＤＭＡ（Dynamic Memory Access）制御回路１２２と、ＰＬＣシステムバス制御回路１２４と
、バッファメモリ１２６とを含む。なお、ＰＬＣシステムバスコントローラ１２０は、ＰＬＣシステムバスコネクタ１３０を介してＰＬＣシステムバス１１と内部的に接続される。
【００７９】
バッファメモリ１２６は、ＰＬＣシステムバス１１を介して他のユニットへ出力されるデータ（以下「出力データ」とも称す。）の送信バッファ、および、ＰＬＣシステムバス１１を介して他のユニットから入力されるデータ（以下「入力データ」とも称す。）の受信バッファとして機能する。なお、マイクロプロセッサ１００による演算処理によって作成された出力データは、原始的にはメインメモリ１０４に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ１０４から読み出されて、バッファメモリ１２６に一次的に保持される。また、他のユニットから転送された入力データは、バッファメモリ１２６に一次的に保持された後、メインメモリ１０４に移される。
【００８０】
ＤＭＡ制御回路１２２は、メインメモリ１０４からバッファメモリ１２６への出力データの転送、および、バッファメモリ１２６からメインメモリ１０４への入力データの転送を行う。
【００８１】
ＰＬＣシステムバス制御回路１２４は、ＰＬＣシステムバス１１に接続される他のユニットとの間で、バッファメモリ１２６の出力データを送信する処理および入力データを受
信してバッファメモリ１２６に格納する処理を行う。典型的には、ＰＬＣシステムバス制御回路１２４は、ＰＬＣシステムバス１１における物理層およびデータリンク層の機能を提供する。
【００８２】
フィールドネットワークコントローラ１４０は、フィールドネットワーク２を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ１４０は、用いられるフィールドネットワーク２の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはＥｔｈｅｒＣＡＴ（登録商標）規格に従うフィールドネットワーク２が採用されるので、通常のイーサネット（登録商標）通信を行うためのハードウェアを含む、フィールドネットワークコントローラ１４０が用いられる。ＥｔｈｅｒＣＡＴ（登録商標）規格では、通常のイーサネット（登録商標）規格に従う通信プロトコルを実現する一般的なイーサネット（登録商標）コントローラを利用できる。但し、フィールドネットワーク２として採用される産業用イーサネット（登録商標）の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット（登録商標）コントローラが用いられる。また、産業用イーサネット（登録商標）以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
【００８３】
バッファメモリ１４６は、フィールドネットワーク２を介して他の装置などへ出力されるデータ（このデータについても、以下「出力データ」と称す。）の送信バッファ、および、フィールドネットワーク２を介して他の装置などから入力されるデータ（このデータについても、以下「入力データ」とも称す。）の受信バッファとして機能する。上述したように、マイクロプロセッサ１００による演算処理によって作成された出力データは、原始的にはメインメモリ１０４に格納される。そして、特定の装置へ転送されるべき出力データは、メインメモリ１０４から読み出されて、バッファメモリ１４６に一次的に保持される。また、他の装置から転送された入力データは、バッファメモリ１４６に一次的に保持された後、メインメモリ１０４に移される。
【００８４】
ＤＭＡ制御回路１４２は、メインメモリ１０４からバッファメモリ１４６への出力データの転送、および、バッファメモリ１４６からメインメモリ１０４への入力データの転送を行う。
【００８５】
フィールドネットワーク制御回路１４４は、フィールドネットワーク２に接続される他の装置との間で、バッファメモリ１４６の出力データを送信する処理および入力データを受信してバッファメモリ１４６に格納する処理を行う。典型的には、フィールドネットワーク制御回路１４４は、フィールドネットワーク２における物理層およびデータリンク層の機能を提供する。
【００８６】
ＵＳＢコネクタ１１０は、ＰＬＣサポート装置８とＣＰＵユニット１３とを接続するためのインターフェイスである。典型的には、ＰＬＣサポート装置８から転送される、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なプログラムなどは、ＵＳＢコネクタ１１０を介してＰＬＣ１に取込まれる。
【００８７】
＜Ｃ．ＣＰＵユニットのソフトウェア構成＞
次に、図３を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、ＣＰＵユニット１３のマイクロプロセッサ１００によって実行される。
【００８８】
図３は、本発明の実施の形態に係るＣＰＵユニット１３で実行されるソフトウェア構成を示す模式図である。図３を参照して、ＣＰＵユニット１３で実行されるソフトウェアと
しては、リアルタイムＯＳ２００と、システムプログラム２１０と、ユーザプログラム２３６との３階層になっている。
【００８９】
リアルタイムＯＳ２００は、ＣＰＵユニット１３のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ１００がシステムプログラム２１０およびユーザプログラム２３６を実行するための基本的な実行環境を提供する。このリアルタイムＯＳは、典型的には、ＰＬＣのメーカーあるいは専門のソフトウェア会社などによって提供される。
【００９０】
システムプログラム２１０は、ＰＬＣ１としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム２１０は、スケジューラプログラム２１２と、出力処理プログラム２１４と、入力処理プログラム２１６と、シーケンス命令演算プログラム２３２と、モーション演算プログラム２３４と、その他のシステムプログラム２２０とを含む。なお、一般には出力処理プログラム２１４および入力処理プログラム２１６は、連続的（一体として）に実行されるので、これらのプログラムを、ＩＯ処理プログラム２１８と総称する場合もある。
【００９１】
ユーザプログラム２３６は、ユーザにおける制御目的に応じて作成される。すなわち、ＰＬＣシステムＳＹＳを用いて制御する対象のライン（プロセス）などに応じて、任意に設計されるプログラムである。
【００９２】
後述するように、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム２３６、シーケンス命令演算プログラム２３２、およびモーション演算プログラム２３４を、制御プログラム２３０と総称する場合もある。
【００９３】
このように、ＣＰＵユニット１３のマイクロプロセッサ１００は、記憶手段に格納されたシステムプログラム２１０およびユーザプログラム２３６を実行する。
【００９４】
以下、各プログラムについてより詳細に説明する。
ユーザプログラム２３６は、上述したように、ユーザにおける制御目的（たとえば、対象のラインやプロセス）に応じて作成される。ユーザプログラム２３６は、典型的には、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム２３６は、ＰＬＣサポート装置８などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム２３６は、ＰＬＣサポート装置８から接続ケーブル１０を介してＣＰＵユニット１３へ転送され、不揮発性メモリ１０６などに格納される。
【００９５】
スケジューラプログラム２１２は、出力処理プログラム２１４、入力処理プログラム２１６、および制御プログラム２３０について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム２１２は、ユーザプログラム２３６およびモーション演算プログラム２３４の実行を制御する。
【００９６】
本実施の形態に係るＣＰＵユニット１３では、モーション演算プログラム２３４に適した一定周期の実行サイクル（制御サイクル）を処理全体の共通サイクルとして採用する。そのため、１つの制御サイクル内で、すべての処理を完了することは難しいので、実行す
べき処理の優先度などに応じて、各制御サイクルにおいて実行を完了すべき処理と、複数の制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム２１２は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム２１２は、各制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
【００９７】
出力処理プログラム２１４および入力処理プログラム２１６については、図４を参照して後に詳述する。
【００９８】
シーケンス命令演算プログラム２３２は、ユーザプログラム２３６で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。
【００９９】
モーション演算プログラム２３４は、ユーザプログラム２３６による指示に従って実行され、サーボモータドライバ３やパルスモータドライバといったモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。
【０１００】
その他のシステムプログラム２２０は、図３に個別に示したプログラム以外の、ＰＬＣ１の各種機能を実現するためのプログラム群をまとめて示したものである。
【０１０１】
リアルタイムＯＳ２００は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。本実施の形態に係るＰＬＣ１においては、ＣＰＵユニット１３のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力（送信）するためのイベント（割り込み）として、制御サイクル開始の割り込みが初期設定される。リアルタイムＯＳ２００は、制御サイクル開始の割り込みが発生すると、マイクロプロセッサ１００での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム２１２に切り替える。なお、リアルタイムＯＳ２００は、スケジューラプログラム２１２およびスケジューラプログラム２１２がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム２１０に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、ＣＰＵユニット１３とＰＬＣサポート装置８との間の接続ケーブル１０（ＵＳＢ）などを介した通信処理に関するものが含まれる。
【０１０２】
なお、制御プログラム２３０およびスケジューラプログラム２１２は、記憶手段であるメインメモリ１０４および不揮発性メモリ１０６に格納される。
【０１０３】
＜Ｄ．メインメモリ構成＞
次に、図４を参照して、ＣＰＵユニット１３のメインメモリ１０４に構成される記憶領域について説明する。
【０１０４】
図４は、本発明の実施の形態に係るＣＰＵユニット１３のメインメモリ１０４の領域構成を示す模式図である。図４を参照して、メインメモリ１０４には、各種のプログラム領域１０４１と、制御プログラムの作業領域１０４２と、ＰＬＣシステムバス送信バッファ１０４３と、ＰＬＣシステムバス受信バッファ１０４４と、フィールドネットワーク送信バッファ１０４５と、フィールドネットワーク受信バッファ１０４６とが形成される。
【０１０５】
制御プログラムの作業領域１０４２には、各出力データに対応する出力同期バッファが生成される出力同期バッファ領域１０４２ａ、および、各入力データに対応する入力同期バッファが生成される入力同期バッファ領域１０４２ｂが、システムプログラム２１０によって生成される。
【０１０６】
また、ＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５（以下、両者を「送信バッファ」と総称する）、ならびに、ＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６（以下、両者を「受信バッファ」と総称する）についても、システムプログラム２１０によって生成される。
【０１０７】
出力処理プログラム２１４（図３）は、ユーザプログラム２３６の実行によって生成された出力データを出力同期バッファから送信バッファにコピーする。すなわち、出力処理プログラム２１４は、出力コピー命令を含む。
【０１０８】
具体的には、出力処理プログラム２１４は、ＰＬＣシステムバス１１へ送信する出力データを出力同期バッファからＰＬＣシステムバス送信バッファにコピーする。その際、ＰＬＣシステムバス送信バッファ１０４３において送信先のユニットごとにまとめて配置する形式になるように出力データを再配置する。
【０１０９】
また、出力処理プログラム２１４は、フィールドネットワーク２へ送信する出力データを出力同期バッファからフィールドネットワーク送信バッファ１０４５にコピーする。その際、フィールドネットワーク送信バッファ１０４５においてシリアルフレームとして送信できる形式に出力データを再配置する。
【０１１０】
出力処理プログラム２１４は、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０が、マイクロプロセッサ１００からの送信実行指示を必要とする場合は、そのような指示を発行する。それらの通信コントローラがシステムタイマ１０８や自己の有するタイマを利用するなどして自律的に送信を実行する場合には、マイクロプロセッサ１００が送信実行指示を発行する必要はない。
【０１１１】
入力処理プログラム２１６は、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０が受信して受信バッファに格納した入力データを入力同期バッファにコピーする。すなわち、入力処理プログラム２１６は、入力コピー命令を含む。
【０１１２】
具体的には、入力処理プログラム２１６は、ＰＬＣシステムバスコントローラ１２０が受信してＰＬＣシステムバス受信バッファ１０４４格納した入力データ、および／または、フィールドネットワークコントローラ１４０が受信してフィールドネットワーク受信バッファ１０４６に格納した入力データを、入力同期バッファにコピーする。その際、制御プログラム２３０が使用するのに適した形式に入力データを再配置する。
【０１１３】
入力処理プログラム２１６は、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０が、マイクロプロセッサ１００からの受信実行指示を必要とする場合は、そのような指示を発行する。それらの通信コントローラがシステムタイマ１０８や自己の有するタイマを利用するなどして自律的に受信を実行する場合には、マイクロプロセッサ１００からの受信実行指示を発行する必要はない。
【０１１４】
フィールドネットワーク２としてＥｔｈｅｒＣＡＴ（登録商標）を用いる場合には、フィールドネットワークコントローラ１４０から送信されたフレームが、スレーブ機器とデータ交換をしながら、スレーブ機器を一巡して戻ってくる。フィールドネットワークコントローラ１４０は戻ってきたフレームを自動的に受信するので、マイクロプロセッサ１００が受信実行指示を発行する必要はない。
【０１１５】
ＰＬＣシステムバスコントローラ１２０のＤＭＡ制御回路１２２は、ＰＬＣシステムバス送信バッファ１０４３に格納されている出力データをＰＬＣシステムバスコントローラ１２０のバッファメモリ１４６へ転送するとともに、バッファメモリ１４６に格納されている入力データをＰＬＣシステムバス受信バッファ１０４４へ転送する。この転送された入力データは、ＰＬＣシステムバス受信バッファ１０４４に格納される。
【０１１６】
フィールドネットワークコントローラ１４０のＤＭＡ制御回路１４２は、フィールドネットワーク送信バッファ１０４５に格納されている出力データをフィールドネットワークコントローラ１４０のバッファメモリ１４６へ転送するとともに、バッファメモリ１４６に格納されている入力データをフィールドネットワーク受信バッファ１０４６へ転送する。この転送された入力データは、フィールドネットワーク受信バッファ１０４６に格納される。
【０１１７】
制御プログラムの作業領域１０４２、ＰＬＣシステムバス送信バッファ１０４３、ＰＬＣシステムバス受信バッファ１０４４、フィールドネットワーク送信バッファ１０４５、および、フィールドネットワーク受信バッファ１０４６は、それぞれのアクセスを互いに独立に制御できるように構成されている。そのため、たとえば、以下に示す（１）〜（３）といった複数の動作を並列実行することができる。
【０１１８】
（１）  マイクロプロセッサ１００が行う、ユーザプログラム２３６実行に伴う制御プログラムの作業領域１０４２へのアクセス。
【０１１９】
（２）  ＰＬＣシステムバスコントローラ１２０のＤＭＡ制御回路１２２が行う、メインメモリ１０４上のＰＬＣシステムバス送信バッファ１０４３および／またはＰＬＣシステムバス受信バッファ１０４４とＰＬＣシステムバスコントローラ１２０内のバッファメモリ１２６との間のデータ転送のための、メインメモリ１０４上のＰＬＣシステムバス送信バッファ１０４３および／またはＰＬＣシステムバス受信バッファ１０４４へのアクセス。
【０１２０】
（３）  フィールドネットワークコントローラ１４０のＤＭＡ制御回路１４２が行う、メインメモリ１０４上のフィールドネットワーク送信バッファ１０４５および／またはフィールドネットワーク受信バッファ１０４６とフィールドネットワークコントローラ１４０内のバッファメモリ１４６との間のデータ転送のための、メインメモリ１０４上のフィールドネットワーク送信バッファ１０４５および／またはフィールドネットワーク受信バッファ１０４６へのアクセス。
【０１２１】
＜Ｅ．システムプログラムの全体処理動作＞
次に、システムプログラム２１０の全体処理動作について説明する。
【０１２２】
システムプログラム２１０は、入力データの入力に関する基本的な処理（命令）として以下を含む。すなわち、システムプログラム２１０の実行段階では、ＰＬＣ１の制御動作の実行準備処理およびＰＬＣ１の制御動作の実行制御処理が順次実行される。より具体的には、システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、以下の（１）および（２）の処理を含む。
【０１２３】
（１）  受信された入力データを格納する受信バッファをメインメモリ１０４（記憶手段）内に生成する処理。
【０１２４】
（２）  制御プログラム２３０から参照される入力データごとに、その制御プログラム２３０が入力データの参照先とする入力同期バッファをメインメモリ１０４（記憶手段）
内（入力同期バッファ領域１０４２ｂ）に生成する処理。
【０１２５】
また、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（３）および（４）の処理を含む。
【０１２６】
（３）  受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理。
【０１２７】
（４）  制御プログラム２３０を実行開始させる制御プログラム開始処理。
また、制御プログラム２３０が複数ある場合、入力同期バッファは、各制御プログラムについて、その制御プログラムから参照される入力データごとに生成される。
【０１２８】
さらに、システムプログラム２１０は、出力データの出力に関する基本的な処理（命令）として以下を含む。すなわち、システムプログラム２１０の実行段階では、ＰＬＣ１の制御動作の実行準備処理およびＰＬＣ１の制御動作の実行制御処理が順次実行される。より具体的には、システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、さらに以下の（５）および（６）の処理を含んでもよい。
【０１２９】
（５）  送信されるべき出力データを格納する送信バッファをメインメモリ１０４（記憶手段）内（出力同期バッファ領域１０４２ａ）に生成する処理。
【０１３０】
（６）  送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとにメインメモリ１０４（記憶手段）内に生成する処理。
【０１３１】
また、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、さらに以下の（７）の処理を含んでもよい。
【０１３２】
（７）  出力データを出力同期バッファから送信バッファにコピーする出力コピー処理。
【０１３３】
さらに、制御プログラム２３０の実行準備処理は、具体的な実装形態に応じたその他の実行準備処理を含みうる。制御動作の実行準備処理に含まれる各処理の実行順序は、適宜設計される。
【０１３４】
また、制御プログラム２３０の実行制御処理は、具体的な実装形態に応じたその他の実行制御処理を含みうる。制御動作の実行制御処理に含まれる各処理は、制御プログラム２３０を繰り返し実行するのに伴い繰り返し実行されるものであり、その実行順序は具体的な実施形態に依存する。
【０１３５】
図５は、本発明の実施の形態に係るＣＰＵユニットにおけるシステムプログラムの全体処理を示すフローチャートである。図５に示すように、まず、ＰＬＣ１の制御動作の実行準備処理が実行され（ステップＳ１）、続いて、ＰＬＣ１の制御動作の実行制御処理が実行される（ステップＳ２）。制御プログラム２３０の実行準備処理（ステップＳ１）に含まれる各処理の実行順序は、適宜設計される。同様に、制御プログラム２３０の実行制御処理（ステップＳ２）に含まれる各処理は、制御プログラム２３０を繰り返し実行するのに伴い繰り返し実行されるものであり、その実行順序は具体的な実装形態に依存する。
【０１３６】
以下、具体的な実装形態の典型例として、実施の形態１〜１３について説明する。
＜Ｆ．単一バッファ方式（実施の形態１）＞
（ｆ１：概要）
実施の形態１においては、複数の制御プログラムが時分割的に実行される場合を想定する。特に、それぞれの制御プログラムから参照される入力データごとに、入力同期バッファがそれぞれ設けられ、かつ、それぞれの制御プログラムが出力データを格納する出力同期バッファがそれぞれ設けられる構成について説明する。
【０１３７】
（ｆ２：シーケンス図）
図６は、実施の形態１に係る入力方向の動作を示すシーケンス図である。図７は、図６に示す制御サイクル１および２について拡大して示すシーケンス図である。一方、図８は、実施の形態１に係る出力方向の動作を示すシーケンス図である。図９は、図８に示す制御サイクル１および２について拡大して示すシーケンス図である。
【０１３８】
図６〜図９には、２つの制御プログラム（制御プログラム１および２）が時分割的に実行される例を示す。この例において、制御プログラム１および２から参照される入力データごとに、入力同期バッファ１および２がそれぞれ設けられ、かつ、それぞれの制御プログラム１および２が出力データを格納する出力同期バッファ１および２がそれぞれ設けられている。なお、入力同期バッファ１および２には、受信バッファを介して、入力データがそれぞれ転送され、また、出力同期バッファ１および２からは、それぞれ出力データが送信バッファへ転送される。
【０１３９】
なお、図６〜図９においては、説明を簡略化する観点から、２つの制御プログラムが時分割的に実行される例を示すが、時分割的に実行される制御プログラムの数は任意に設定できる。この点は、本実施の形態に限られず、後述する他の実施の形態についても同様である。したがって、説明の便宜上、実行される制御プログラムを１つしか示していない実施の形態であっても、本実施の形態に係る説明（特に、図６〜図９）を参考にすれば、複数の制御プログラムが時分割的に実行される動作を容易に理解できるであろう。
【０１４０】
図６〜図９の制御プログラム１および２のそれぞれの時間軸に沿って示した破線の角丸の矩形は、対応する制御プログラムの実行サイクルを示す。たとえば、制御プログラム１は、１回分の制御サイクルを実行サイクルとしており、同様に、制御プログラム２は、２回分の制御サイクルを実行サイクルとしている。なお、以下、説明に用いるシーケンス図においては同様の方法で実行サイクルを表す。
【０１４１】
図６および図８に示すシステムプログラムの実行時間は、制御サイクルの開始から、その制御サイクルで最初に実行開始される制御プログラムの実行開始までの期間に対応している。この期間において、システムプログラムは、出力データの送信、受信バッファから入力同期バッファへの入力データのコピー（入力データの受信は通信コントローラが行う）、制御プログラムの実行開始の実行制御を行う。この期間における処理内容は、実施の形態によって異なることがある。
【０１４２】
図７および図９に示す拡大図では、制御プログラムの実行終了後にもシステムプログラムの実行時間があることを示している。この期間において、システムプログラムは、出力同期バッファから送信バッファへの出力データのコピー、次に実行開始すべき制御プログラムがある場合はその実行開始の制御を行う。システムプログラムが実行されるこの微小な時間は、説明の便宜上、図６および８、ならびに他の実施の形態に係るシーケンス図では図示を省略している。
【０１４３】
制御サイクル開始割込みがあれば、リアルタイムＯＳは、制御プログラムの実行を中断し、システムプログラムを実行する。
【０１４４】
いずれの実施の形態においても、制御サイクルの周期が一定であることは、入力データ
の受信周期および出力データの送信周期を一定にしやすいという観点から好ましいが、必須ではない。たとえば、制御プログラムが設定された実行サイクル内に終了しない場合に、実行サイクル内における最後の制御サイクル時間を延長することにより実行サイクル時間を延長するようにしてもよい。
【０１４５】
図６〜図９には、制御プログラム１および２のそれぞれの時間軸に沿って、その制御プログラムの実行状態を示す。より具体的には、制御プログラム１および２は、予め定められた処理を実行すべき実行サイクル内において、未だ処理を開始していない状態である「実行前」、当該実行サイクル内において処理が行なわれている「実行中」、および、当該実行サイクル内においては既に処理が完了している「実行終了」のいずれかの実行状態にある。
【０１４６】
このような実行状態は、実行状態記録領域に各制御プログラムの実行状態を記録することよって表される。実行状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。実行状態の記録の態様は、適宜定めることができる。たとえば、実行状態ごとにその実行状態にある制御プログラムを特定する情報（制御プログラムの名称や識別番号など）を記録する態様、制御プログラムごとに実行状態を表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。実行状態フラグは、たとえば、「実行前フラグ」がオンなら「実行前」状態、「実行中フラグ」がオンなら「実行中」状態、などのように用いる。このような実行状態変数としては、たとえば、状態変数の値が「１」なら「実行前」、「２」なら「実行中」、などのように設定することができる。以下、説明する他の実施の形態における制御プログラムの実行状態の管理についても同様である。
【０１４７】
通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）による入力データの受信後、１つの制御プログラムが複数の入力データの使用を要求する場合、それらの入力データについての、受信バッファから対応する入力同期バッファへのコピーは一括して行われる。入力同期バッファは、そのように一括してコピーが行われる単位でグループ化される。入力同期バッファの書込禁止状態は、同じグループの入力同期バッファに共通に設定される。入力同期バッファの状態が、そのような同じグループの入力同期バッファに共通して設定されることは、以下、説明する他の実施の形態における、「参照先」状態、「書込先」状態、「待機」状態、「最新」状態のいずれについても同様である。入力データを、２つまたは３つの入力同期バッファからなる入力同期バッファの組にコピーする場合は、１回の一括コピーでコピー先になるのは組の中の１つの入力同期バッファであるから、同じ組に属する２つまたは３つの入力同期バッファはそれぞれ異なるグループに属することになる。
【０１４８】
実施の形態１においては、出力同期バッファの状態は設定されていないが、以下、説明する他の実施の形態において出力同期バッファの状態が設定される場合は、入力同期バッファの状態が設定される場合と同様、出力データが送信バッファに一括してコピーされる単位で出力同期バッファはグループ化される。出力同期バッファの状態は、同じグループに属する出力同期バッファに共通に設定される。
【０１４９】
このような、入力同期バッファの書込禁止状態は、書込禁止状態記録領域に入力同期バッファが「書込禁止」状態であることを記録することよって表される。書込禁止状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。入力同期バッファが「書込禁止」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力
同期バッファのグループのうち「書込禁止」状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに「書込禁止」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。
【０１５０】
実施の形態１においては、出力同期バッファは、出力データごとに１つ生成され、「書込禁止」状態への設定も行われない。したがって、制御プログラム２３０が出力データを格納する通常の変数領域を出力同期バッファとして使用してもよい。
【０１５１】
図６に示す受信タイミング、および／または、図８に示した送信タイミングとは異なるタイミングで、追加の受信および／または送信を行うようにしてもよい。このような場合には、そのような追加の受信で扱われる入力データ、および／または、追加の送信で扱われる出力データ、に関係する追加の入力同期バッファおよび／または出力同期バッファを設け、それを使用して、追加の制御プログラムをマイクロプロセッサ１００の空き時間で実行するようにしてもよい。
【０１５２】
図６に示すシーケンス図では、制御サイクル２における入力データの受信直後は入力同期バッファ２が「書込禁止」状態になっているので、入力同期バッファ２への入力データのコピーが行われない。それにより、制御サイクル１において実行開始した制御プログラム２は、制御サイクル２において実行を再開した後も、更新されていない入力データを入力同期バッファ２から読み出すことになるので、実行開始から実行終了まで一貫性のある入力データを用いて処理を実行することができる。
【０１５３】
また、制御サイクル３におけるように、制御プログラム２が短時間で実行終了した場合は、制御サイクル４ですでに入力同期バッファ２の書込禁止状態が解除されているので、制御サイクル４における入力同期バッファ２へのコピーが行われる。
【０１５４】
（ｆ３：フローチャート）
図１０は、実施の形態１に係る実行動作を示すフローチャートである。図１０を参照して、マイクロプロセッサ１００は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行準備処理を実行する（ステップＳ１）。続いて、マイクロプロセッサ１００は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行制御処理を実行する（図５に示すステップＳ２）。このＰＬＣ１の制御動作の実行制御処理の詳細な一例がステップＳ２００〜Ｓ２３８に相当する。
【０１５５】
まず、マイクロプロセッサ１００は、制御サイクル開始の割り込み信号を待つ（ステップＳ２００）。制御サイクル開始の割り込み信号を受けると（ステップＳ２００においてＹＥＳ）、マイクロプロセッサ１００は、現在の制御サイクルから開始する制御プログラムを「実行前」状態に設定するとともに、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）に対して送信実行を指示する（ステップＳ２０２）。すなわち、制御プログラム１の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム１を「実行前」状態に設定する。同様に、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム２を「実行前」状態に設定する。
【０１５６】
また、送信実行の指示に応答して、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）に格納されているデータが他のユニットなどへ送信される。
【０１５７】
その後、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１
２０および／またはフィールドネットワークコントローラ１４０）からの受信完了通知を待つ（ステップＳ２０４）。
【０１５８】
通信回路は、入力データをメインメモリ１０４の受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納した後、受信完了通知を発行する。通信回路からの受信完了通知を受けると（ステップＳ２０４においてＹＥＳ）、マイクロプロセッサ１００は、受信バッファに格納されている入力データを、入力同期バッファ１および入力同期バッファ２にコピーする（ステップＳ２０６）。但し、入力同期バッファ１および入力同期バッファ２のうち、「書込禁止」状態になっている入力同期バッファには入力データのコピーは行われない。
【０１５９】
その後、マイクロプロセッサ１００は、制御プログラム１の実行状態を判断する（ステップＳ２１０）。制御プログラム１が「実行前」状態である場合（ステップＳ２１０において「実行前」）には、マイクロプロセッサ１００は、入力同期バッファ１の実行状態を「書込禁止」に設定し、制御プログラム１の実行状態を「実行中」状態に設定し、さらに制御プログラム１の実行を開始する（ステップＳ２１２）。
【０１６０】
制御プログラム１が「実行中」状態である場合（ステップＳ２１０において「実行中」）には、マイクロプロセッサ１００は、制御プログラム１の未実行の部分の実行を開始する（ステップＳ２１４）。なお、入力同期バッファ１の実行状態「書込禁止」については変更せず、そのまま維持する。
【０１６１】
制御プログラム１が「実行終了」状態である場合（ステップＳ２１０において「実行終了」）には、処理はステップＳ２３０へ進む。
【０１６２】
ステップＳ２１２またはＳ２１４において、制御プログラム１の実行を開始（または、再開）すると、マイクロプロセッサ１００は、制御プログラム１の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ２１６）。なお、ステップＳ２１２またはＳ２１４において、制御プログラム１の実行が開始（または、再開）されることで、マイクロプロセッサ１００で実行される処理は、システムプログラムによる処理から制御プログラム１による処理に切り替わる。すなわち、制御プログラム１の実行開始から実行終了するまでの間は、マイクロプロセッサ１００は、システムプログラムを実行しない。そして、制御プログラム１の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムＯＳ２００が、マイクロプロセッサ１００での制御プログラム１の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム１の実行が終了した通知（制御プログラム１の実行終了通知）があれば、マイクロプロセッサ１００における実行対象は、制御プログラム１からシステムプログラムへ戻る。
【０１６３】
制御プログラム１の実行終了通知を受けると（ステップＳ２１６において「実行終了通知」）、マイクロプロセッサ１００は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーし、入力同期バッファ１の「書込禁止」状態を解除する（ステップＳ２１８）。そして、処理はステップＳ２３０へ進む。
【０１６４】
一方、制御プログラム１の実行終了通知までに次の制御サイクル開始の割り込みを受けると（ステップＳ２１６において「制御サイクル開始」）、マイクロプロセッサ１００で実行中の制御プログラム１は中断され、マイクロプロセッサ１００は、ステップＳ２０２以下の処理を再度実行する。ただし、図６〜９は、制御プログラム１の実行サイクルが制御サイクルに等しく、制御プログラム１が制御サイクル内に実行終了する処理量しか含ま
ないようにプログラムされている場合を示している。制御プログラム１の実行が制御サイクル内に終了しなければ、制御プログラム１の実行サイクルが延長される。すなわち、制御プログラム１の実行が中断されて、次の制御サイクルにおいて制御プログラム１の未実行の部分が実行される。あるいは、制御プログラム１の実行が制御サイクル（実行サイクル）内に終了しなかった段階で、エラー発生と判断してエラー処理を行うようにしてもよい。図６〜９の制御プログラム２や、他の実施の形態についても、制御プログラムが実行サイクル内に終了しなかった場合には、同様に、実行サイクルの延長またはエラー処理が行われる。
【０１６５】
ステップＳ２３０において、マイクロプロセッサ１００は、制御プログラム２の実行状態を判断する（ステップＳ２３０）。制御プログラム２が「実行前」状態である場合（ステップＳ２２０において「実行前」）には、マイクロプロセッサ１００は、入力同期バッファ２の実行状態を「書込禁止」に設定し、制御プログラム２の実行状態を「実行中」状態に設定し、さらに制御プログラム２の実行を開始する（ステップＳ２３２）。
【０１６６】
制御プログラム２が「実行中」状態である場合（ステップＳ２３０において「実行中」）には、マイクロプロセッサ１００は、制御プログラム２の未実行の部分の実行を開始する（ステップＳ２３４）。なお、入力同期バッファ２の実行状態「書込禁止」については変更せず、そのまま維持する。
【０１６７】
制御プログラム２が「実行終了」状態である場合（ステップＳ２３０において「実行終了」）には、処理はステップＳ２００へ進む。すなわち、次の制御サイクル開始の割り込み信号を待つ。
【０１６８】
ステップＳ２３２またはＳ２３４において、制御プログラム２の実行を開始（または、再開）すると、マイクロプロセッサ１００は、制御プログラム２の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ２３６）。なお、ステップＳ２３２またはＳ２３４において、制御プログラム２の実行が開始（または、再開）されることで、マイクロプロセッサ１００で実行される処理は、システムプログラムによる処理から制御プログラム２による処理に切り替わる。すなわち、制御プログラム２の実行開始から実行終了するまでの間は、マイクロプロセッサ１００は、システムプログラムを実行しない。そして、制御プログラム２の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムＯＳ２００が、マイクロプロセッサ１００での制御プログラム２の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム２の実行が終了した通知（制御プログラム２の実行終了通知）があれば、マイクロプロセッサ１００における実行対象は、制御プログラム２からシステムプログラムへ戻る。
【０１６９】
制御プログラム２の実行終了通知を受けると（ステップＳ２３６において「実行終了通知」）、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定し、出力同期バッファ２に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーし、入力同期バッファ２の「書込禁止」状態を解除する（ステップＳ２３８）。そして、処理はステップＳ２００へ進む。すなわち、次の制御サイクル開始の割り込み信号を待つ。
【０１７０】
一方、制御プログラム２の実行終了通知までに次の制御サイクル開始の割り込みを受けると（ステップＳ２３６において「制御サイクル開始」）、マイクロプロセッサ１００で実行中の制御プログラム２は中断され、マイクロプロセッサ１００は、ステップＳ２０２以下の処理を再度実行する。
【０１７１】
（ｆ４：まとめ）
上述したように、実施の形態１においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）および（ｂ）の処理を含む。
【０１７２】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１０に示すステップＳ１）。
【０１７３】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする１つの入力同期バッファ（図６および図７に示す入力同期バッファ１および２）をメインメモリ１０４（記憶手段）内（図４に示す入力同期バッファ領域１０４２ｂ）に生成する処理（図１０に示すステップＳ１）。
【０１７４】
また、実施の形態１においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｃ）〜（ｅ）の処理を含む。
【０１７５】
（ｃ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファに、コピー先の入力同期バッファが「書込禁止」状態でないことを条件として、コピーする入力コピー処理（図１０に示すステップＳ２０６）。
【０１７６】
（ｄ）  実行開始させる制御プログラムが参照する入力同期バッファを「書込禁止」状態した後に、制御プログラムを実行開始させる制御プログラム開始処理（図１０に示すステップＳ２１２およびＳ２３２）。
【０１７７】
（ｅ）  制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理（図１０に示すステップＳ２１８およびＳ２３８）。
【０１７８】
上述のような実施の形態１に係る入力データに関する処理方式によれば、入力同期バッファへの「書込禁止」状態の期間が存在したとしても、たとえば入出力処理と各制御プログラムとに共通の制御サイクルの中で、実行の優先度制御がなされているような場合には、制御プログラムは、その実行開始時における最新の入力データを参照できる。すなわち、このような場合には、制御プログラムにおいて参照すべき入力データは、「書込禁止」状態の期間中以外の期間における入力コピー処理によって取得することができる。
【０１７９】
また、実施の形態１に係る入力データに関する処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが単一に設けられているので、入力データの数および／または制御プログラムの数が多くても、入力同期バッファが占めるメモリサイズが小さくて済む。また、入力同期バッファが単一である点において、アルゴリズムが単純であるので、システムプログラムの設計を容易化できる。
【０１８０】
一方、実施の形態１においては、システムプログラム２１０は、出力データの出力に関する処理を含めると、ＰＬＣ１の制御動作の実行準備処理として、以下の（α）〜（γ）の処理を含む。
【０１８１】
（α）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）および送
信されるべき出力データを格納する送信バッファ（図４に示すＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５）をメインメモリ１０４（記憶手段）内に生成する処理（図１０に示すステップＳ１）。
【０１８２】
（β）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする１つの入力同期バッファ（図６および図７に示す入力同期バッファ１および２）をメインメモリ１０４（記憶手段）内（図４に示す入力同期バッファ領域１０４２ｂ）に生成する処理（図１０に示すステップＳ１）。
【０１８３】
（γ）  送信バッファにコピーされる出力データが格納される出力同期バッファ（図８および図９に示す出力同期バッファ１および２）をメインメモリ１０４（記憶手段）内（図４に示す出力同期バッファ領域１０４２ａ）に生成する処理（図１０に示すステップＳ１）。
【０１８４】
また、実施の形態１においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（δ）〜（ζ）の処理を含む。
【０１８５】
（δ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図１０に示すステップＳ２０６）。
【０１８６】
（ε）  制御プログラムを実行開始させる制御プログラム開始処理（図１０に示すステップＳ２１２およびＳ２３２）。
【０１８７】
（ζ）  制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを出力同期バッファから送信バッファにコピーする出力コピー処理（図１０に示すステップＳ２１８およびＳ２３８）。
【０１８８】
上述のような実施の形態１に係る出力データに関する処理方式によれば、出力同期バッファは、出力データごとに１つで足りる。
【０１８９】
また、実施の形態１に係る出力データに関する処理方式によれば、制御プログラムの実行が終了することをもって、出力データは出力同期バッファから送信バッファにコピーされる。したがって、制御プログラムの実行中のまだ確定していない出力データが送信されることを回避できる。また、制御プログラムの実行サイクル中であるかどうかにかかわらず、送信バッファへのコピー後の最初の送信タイミングで出力データが送信されるので、確定した出力データを迅速に送信することができる。
【０１９０】
＜Ｇ．２入力同期バッファへの順次コピー方式（実施の形態２）＞
（ｇ１：概要）
上述の実施の形態１においては、制御プログラムの実行中は入力同期バッファを「書込禁止」状態とし、「書込禁止」状態になっている入力同期バッファには、入力データはコピーされない構成を採用した例を示す。これに対して、制御プログラムの実行状態にかかわらず、受信バッファに格納されている入力データを入力同期バッファにコピーできる構成について説明する。
【０１９１】
より具体的には、実施の形態２においては、入力同期バッファとして、制御プログラムから参照される入力データごとに、２つの入力同期バッファを入力同期バッファの組として生成する。
【０１９２】
（ｇ２：シーケンス図）
図１１は、実施の形態２に係る入力方向の動作を示すシーケンス図である。図１１には、２つの制御プログラム（制御プログラム１および２）が時分割的に実行される例を示す。この例において、制御プログラム１から参照される入力データについて、一組の入力同期バッファ（入力同期バッファ１Ａおよび１Ｂ）が設けられ、同様に、制御プログラム２から参照される入力データについて、一組の入力同期バッファ（入力同期バッファ２Ａおよび２Ｂ）が設けられる。
【０１９３】
なお、実施の形態２に係る出力方向の動作（出力データに関する処理）は、上述の実施の形態１における動作（図８に示すシーケンス図に記載の処理）と同様であるので、ここでは、その詳細な説明は繰り返さない。
【０１９４】
実施の形態２では、受信バッファからの入力データのコピーは、一組の入力同期バッファのうち常に特定の一方（入力同期バッファ１Ａまたは２Ａ）に対して行われる。入力データは、制御プログラムの実行開始前に入力同期バッファの一方（入力同期バッファ１Ａまたは２Ａ）から他方（入力同期バッファ１Ｂまたは２Ｂ）にコピーされる。他方の入力同期バッファ（入力同期バッファ１Ｂまたは２Ｂ）に格納された入力データが制御プログラムから参照される。
【０１９５】
すなわち、一組の入力同期バッファのうち、一方の入力同期バッファに対しては、制御プログラムの実行状態にかわらず、常に受信バッファから入力データをコピーできる。他方の入力同期バッファに対しては、受信バッファからの入力データのコピー動作にかかわらず、制御プログラムが当該入力同期バッファに格納されている入力データを参照できる。
【０１９６】
（ｇ３：フローチャート）
図１２は、実施の形態２に係る実行動作を示すフローチャートである。図１２のフローチャートにおいては、図１０に示すフローチャートと同一の処理を実行するステップについては、図１０と同一のステップ番号を付与している。
【０１９７】
図１２に示すフローチャートは、図１０に示すフローチャートと比較して、ステップＳ２０６，Ｓ２１２，Ｓ２１８，Ｓ２３２，Ｓ２３８に代えて、それぞれステップＳ２０６Ａ，Ｓ２１２Ａ，Ｓ２１８Ａ，Ｓ２３２Ａ，Ｓ２３８Ａの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０１９８】
通信回路からの受信完了通知を受けると（ステップＳ２０４においてＹＥＳ）、マイクロプロセッサ１００は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、入力同期バッファ１Ａおよび入力同期バッファ２Ａにコピーする（ステップＳ２０６Ａ）。入力同期バッファ１Ａおよび２Ａは、「書込禁止」状態には設定されないので、入力データのコピーは制限されない。
【０１９９】
制御プログラム１が「実行前」状態である場合（ステップＳ２１０において「実行前」）に実行されるステップＳ２１２Ａにおいては、マイクロプロセッサ１００は、入力同期バッファ１Ａに格納されている入力データを入力同期バッファ１Ｂにコピーし、制御プログラム１の実行状態を「実行中」状態に設定し、さらに制御プログラム１の実行を開始する（ステップＳ２１２Ａ）。
【０２００】
なお、制御プログラム１が「実行中」状態である場合（ステップＳ２１０において「実行中」）に実行されるステップＳ２１４においては、入力同期バッファ１Ａに格納されている入力データの入力同期バッファ１Ｂへのコピーは、行われない。
【０２０１】
制御プログラム１の実行終了通知を受けた場合（ステップＳ２１６において「実行終了通知」）に実行されるステップＳ２１８Ａにおいては、マイクロプロセッサ１００は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ２１８Ａ）。
【０２０２】
制御プログラム２が「実行前」状態である場合（ステップＳ２３０において「実行前」）に実行されるステップＳ２３２Ａにおいては、マイクロプロセッサ１００は、入力同期バッファ２Ａに格納されている入力データを入力同期バッファ２Ｂにコピーし、制御プログラム２の実行状態を「実行中」状態に設定し、さらに制御プログラム２の実行を開始する（ステップＳ２３２Ａ）。
【０２０３】
なお、制御プログラム２が「実行中」状態である場合（ステップＳ２３０において「実行中」）に実行されるステップＳ２３４においては、入力同期バッファ２Ａに格納されている入力データの入力同期バッファ２Ｂへのコピーは、行われない。
【０２０４】
制御プログラム２の実行終了通知を受けた場合（ステップＳ２３６において「実行終了通知」）に実行されるステップＳ２３８Ａにおいては、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定し、出力同期バッファ２に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ２３８Ａ）。
【０２０５】
（ｇ４：まとめ）
上述したように、実施の形態２においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）および（ｂ）の処理を含む。
【０２０６】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１０に示すステップＳ１）。
【０２０７】
（ｂ）  制御プログラムから参照される入力データごとに、第１入力同期バッファ（図１１に示す入力同期バッファ１Ａ，２Ａ）および第２入力同期バッファ（図１１に示す入力同期バッファ１Ｂ，２Ｂ）を同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図１０に示すステップＳ１）。ここで、第２入力同期バッファは、制御プログラムが入力データの参照先とする入力同期バッファである。
【０２０８】
また、実施の形態２においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｃ）および（ｄ）の処理を含む。
【０２０９】
（ｃ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する第１入力同期バッファ（図１１に示す入力同期バッファ１Ａ，２Ａ）にコピーする入力コピー処理（図１２に示すステップＳ２０６Ａ）。
【０２１０】
（ｄ）  第１入力同期バッファ（図１１に示す入力同期バッファ１Ａ，２Ａ）に格納さ
れているデータを第２入力同期バッファ（図１１に示す入力同期バッファ１Ｂ，２Ｂ）にコピーした後に、制御プログラムを実行開始させる制御プログラム開始処理（図１２に示すステップＳ２１２ＡおよびＳ２３２Ａ）。
【０２１１】
上述のような実施の形態２に係る処理方式によれば、受信バッファから第１入力同期バッファへの入力データのコピーを行うことが常に可能であり、さらに制御プログラムの実行開始時に第１入力同期バッファから第２入力同期バッファへのコピーを行うので、制御プログラムは、その実行開始時における最新の入力データを参照することができる。
【０２１２】
また、実施の形態２に係る処理方式によれば、第１入力同期バッファへの入力データのコピーの際にコピー先の入力同期バッファの状態についての判断をする必要がない点で、アルゴリズムが単純であるので、システムプログラムの設計を容易化できる。
【０２１３】
＜Ｈ．２入力同期バッファの選択利用方式（実施の形態３）＞
（ｈ１：概要）
実施の形態２においては、２つの入力同期バッファを使用して入力データを順送りする形態について例示した。これに対して、実施の形態３においては、複数（典型的には、２つ）の入力同期バッファを選択的に利用することで、入力データを書き込むことのできる入力同期バッファを常に少なくとも１つは確保することができる構成について説明する。
【０２１４】
（ｈ２：シーケンス図）
図１３は、実施の形態３に係る入力方向の動作を示すシーケンス図である。図１３には、典型的に、複数のコアを有するマルチコア（具体的には、デュアルコア）のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア１がシステムプログラムを実行し、コア２が制御プログラム１を実行するものとする。但し、実施の形態３に係る方式は、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
【０２１５】
より具体的には、図１３に示す実施の形態３に係る方式においては、システムプログラムと制御プログラム１とが並列実行される。制御プログラム１は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム１もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム１の実行が開始されることを基本としている。
【０２１６】
図１３に示すとおり、制御プログラム１から参照される入力データについて、一組の入力同期バッファ（入力同期バッファ１Ａおよび１Ｂ）が設けられる。入力同期バッファの状態には、書込禁止状態、参照先状態、最新状態（最新データを格納している状態）がある。入力同期バッファの状態は、書込禁止状態記録領域、参照先状態記録領域、最新状態記録領域に、それぞれの入力同期バッファが書込禁止状態、参照先状態、最新状態であることを記録することよって表される。これらの各記録領域は、システムプログラム２１０の「ＰＬＣ１の制御動作の制御プログラムの実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成される。入力同期バッファが書込禁止状態、参照先状態、最新状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち書込禁止状態、参照先状態、最新状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに書込禁止状態、参照先状態、最新状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。
【０２１７】
なお、実施の形態３に係る出力方向の動作（出力データに関する処理）は、上述の実施の形態１における動作（図８に示すシーケンス図に記載の処理）と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
【０２１８】
（ｈ３：フローチャート）
図１４は、実施の形態３に係る実行動作を示すフローチャートである。図１４を参照して、マイクロプロセッサ１００（コア１）は、システムプログラムにおける、ＰＬＣ１の制御動作の実行準備処理を実行する（ステップＳ１）。続いて、マイクロプロセッサ１００（コア１）は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行制御処理を実行する（図５に示すステップＳ２）。このＰＬＣ１の制御動作の実行制御処理の詳細な一例がステップＳ２５０〜Ｓ２７４に相当する。
【０２１９】
まず、マイクロプロセッサ１００（コア１）は、制御サイクル開始の割り込み信号を待つ（ステップＳ２５０）。制御サイクル開始の割り込み信号を受けると（ステップＳ２５０においてＹＥＳ）、マイクロプロセッサ１００（コア１）は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）に対して送信実行を指示する（ステップＳ２５２）。送信実行の指示に応答して、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）に格納されているデータが他のユニットなどへ送信される。
【０２２０】
続いて、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）からの受信完了通知、または、制御プログラム１の実行終了通知を待つ（ステップＳ２５４）。
【０２２１】
制御プログラム１の実行終了通知を受けると（ステップＳ２５４において「実行終了通知」）、処理はステップＳ２７０へ進む。
【０２２２】
一方、通信回路からの受信完了通知を受けると（ステップＳ２５４において「受信完了通知」）、マイクロプロセッサ１００（コア１）は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、前回入力データを書き込んだのと同じ入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）にコピーするとともに、入力データを書き込んだ入力同期バッファ１を「最新」状態に設定する（ステップＳ２５６）。但し、前回入力データを書き込んだのと同じ入力同期バッファ１が「書込禁止」状態に設定されている場合には、他方の入力同期バッファ１に入力データがコピーされる。
【０２２３】
その後、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を判断する（ステップＳ２６０）。制御プログラム１が「実行終了」状態である場合（ステップＳ２６０において「実行終了」）には、マイクロプロセッサ１００（コア１）は、「最新」状態に設定されている入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「参照先」状態に設定するとともに「書込禁止」状態にも設定し、さらに、制御プログラム１の実行状態を「実行中」状態に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２６２）。そして、処理はステップＳ２６６へ進む。
【０２２４】
制御プログラム１が「実行中」状態または「継続実行中」状態である場合（ステップＳ２６０において「実行中」／「継続実行中」）には、マイクロプロセッサ１００（コア１
）は、制御プログラム１の実行状態を「継続実行中」状態に設定する（ステップＳ２６４）。このとき、対応する入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）の「参照先」状態および「書込禁止」状態はいずれも維持されて、制御プログラム１の実行が継続される。そして、処理はステップＳ２６６へ進む。
【０２２５】
ステップＳ２６２またはＳ２６４において、制御プログラム１の実行を開始（または、再開）させると、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ２６６）。
【０２２６】
制御プログラム１の実行終了通知までに次の制御サイクル開始の割り込みを受けると（ステップＳ２６６において「制御サイクル開始」）、マイクロプロセッサ１００（コア１）は、ステップＳ２５２以下の処理を再度実行する。
【０２２７】
一方、制御プログラム１の実行終了通知を受けると（ステップＳ２６６において「実行終了通知」）、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を判断する（ステップＳ２７０）。
【０２２８】
制御プログラム１が「実行中」状態である場合（ステップＳ２７０において「実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーし、「参照先」状態である入力同期バッファ１の「書込禁止」状態を解除する（ステップＳ２７２）。そして、処理はステップＳ２７０以前に実行されていた処理（ステップＳ２５４またはＳ２６６）の続きへ戻る。ステップＳ２６６の続きへ戻った後は、ステップＳ２５０へ進む。
【０２２９】
一方、制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーし、「参照先」状態である入力同期バッファ１の「書込禁止」状態を解除し、「最新」状態に設定されている入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「参照先」状態に設定するとともに「書込禁止」状態にも設定し、その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２７４）。そして、処理はステップＳ２７０以前に実行していた処理（ステップＳ２５４またはＳ２６６）の続きへ戻る。ステップＳ２６６の続きへ戻った後は、ステップＳ２５０へ進む。
【０２３０】
（ｈ４：まとめ）
上述したように、実施の形態３においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｃ）の処理を含む。
【０２３１】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１４に示すステップＳ１）。
【０２３２】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第１入力同期バッファ（図１３に示す入力同期バッファ１Ａ）および第２入力同期バッファ（図１３に示す入力同期バッファ１Ｂ）を同期バッファの組とし
てメインメモリ１０４（記憶手段）内に生成する処理（図１４に示すステップＳ１）。
【０２３３】
（ｃ）  最新状態記録領域をメインメモリ１０４（記憶手段）内に生成する処理（図１４に示すステップＳ１）。
【０２３４】
また、実施の形態３においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｄ）〜（ｆ）の処理を含む。
【０２３５】
（ｄ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する第１入力同期バッファ（図１３に示す入力同期バッファ１Ａ）および第２入力同期バッファ（図１３に示す入力同期バッファ１Ｂ）のうち「書込禁止」状態ではないいずれかの入力同期バッファをコピー先としてコピーし、さらに、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理（図１４に示すステップＳ２５６）。
【０２３６】
（ｅ）  制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参照する「参照先」状態とし、かつ、当該入力同期バッファを「書込禁止」状態とする制御プログラム開始処理（図１４に示すステップＳ２６２）。
【０２３７】
（ｆ）  制御プログラムの実行が終了すると、入力同期バッファの「書込禁止」状態を解除する書込禁止解除処理（図１４に示すステップＳ２７４）。
【０２３８】
上述のような実施の形態３に係る入力データに関する処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが２つ設けられており、常に少なくとも１つの入力同期バッファに入力データを書込可能である。そのため、いつでも入力データのコピーが可能である。さらに、制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
【０２３９】
なお、「書込禁止」状態を採用することにおいて共通する実施の形態１と比較すると、実施の形態３においては、たとえば、図１３中に円で囲って示すように、一方の入力同期バッファの「書込禁止」状態の期間中に入力データのコピーを行うべきタイミングが到来し場合でも、他方の入力同期バッファに対してコピーを実行したうえで、そのコピーした入力データを後に制御プログラムが参照することが可能である。したがって、入力データのコピーのタイミングが「書込禁止」状態の期間中に到来したために、その入力データを制御プログラムが参照できなくなるという事態を回避できる。特に、マルチコアのマイクロプロセッサでシステムプログラムと制御プログラムとを並列実行する場合には、一方の入力同期バッファの「書込禁止」状態の期間中に他方の入力同期バッファにコピーした入力データを制御プログラムが参照するということが発生するので、実施の形態３はより有利となる。
【０２４０】
＜Ｉ．更新フラグ型の２入力同期バッファ入替方式（実施の形態４）＞
（ｉ１：概要）
上述の実施の形態３においては、少なくとも１つの「書込禁止」状態ではない入力同期バッファが存在するようにすることで、いつでも入力データのコピーを可能にする構成を説明した。これに対して、実施の形態４および５では、入力同期バッファに対して「書込先」状態と「参照先」状態とを排他的に設定し、これらの状態を入れ替えることにより、
いつでも入力データのコピーを可能にする構成が採用される。特に、実施の形態４においては、最新入力データ更新フラグを利用して入力同期バッファの状態の入れ替えを制御する構成について例示する。
【０２４１】
（ｉ２：シーケンス図）
図１５は、実施の形態４および５に係る入力方向の動作を示すシーケンス図である。実施の形態４および後述する実施の形態５について、図１５に示すシーケンス図を共通的に参照しつつ、その詳細について説明する。より具体的には、後述する実施の形態５においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う構成について説明する。
【０２４２】
そのため、図１５を参照して、実施の形態４について説明する場合には、「最新入力データ更新フラグ１」についてのみ着目し、入力同期バッファ１Ａおよび１Ｂの時間軸に沿って示した「最新」状態の識別は不要である。一方、図１５を参照して、実施の形態５について説明する場合には、入力同期バッファ１Ａおよび１Ｂの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ１」は不要となる。
【０２４３】
また、図１５に示すシーケンス図においては、「書込先」状態および「参照先」状態を、単に、「書込先」および「参照先」と記述する。
【０２４４】
図１５には、典型的に、複数のコアを有するマルチコア（具体的には、デュアルコア）のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア１がシステムプログラムを実行し、コア２が制御プログラム１を実行するものとする。但し、実施の形態４および５に係る方式は、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
【０２４５】
より具体的には、図１５に示す実施の形態４および５に係る方式においては、システムプログラムと制御プログラム１とが並列実行される。制御プログラム１は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム１もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム１の実行が開始されることを基本としている。
【０２４６】
なお、実施の形態４および５に係る出力方向の動作（出力データに関する処理）は、上述の実施の形態１における動作（図７に示すシーケンス図に記載の処理）と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
【０２４７】
このような、入力同期バッファの「書込先」状態および「参照先」状態は、書込先状態記録領域および参照先状態記録領域に入力同期バッファが「書込先」状態および「参照先」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。入力同期バッファが「書込先」状態／「参照先」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態および／または「参照先」状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態／「参照先」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録
する態様、などを採用することができる。特に、本実施の形態においては、１つの入力同期バッファに対して、「書込先」状態または「参照先」状態が互いに重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、１つのフラグまたは状態変数によって「書込先」状態か「参照先」状態かを表してもよい。
【０２４８】
なお、実施の形態４に係るシーケンス図（図１５）に表されている最新入力データ更新フラグ１の垂直線（時間軸に沿った線）のうち、太い線の部分は最新入力データ更新フラグ１がオンであることを表す。この最新入力データ更新フラグ１は、システムプログラムが「ＰＬＣ１の制御動作の実行準備処理」において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。ここで、最新入力データ更新フラグ１は、一括してコピーが行われるときのコピー先となる入力同期バッファの組の集合ごとに設けられる。
【０２４９】
（ｉ３：フローチャート）
図１６は、実施の形態４に係る実行動作を示すフローチャートである。図１６のフローチャートにおいては、図１４に示すフローチャートと同一の処理を実行するステップについては、図１４と同一のステップ番号を付与している。
【０２５０】
図１６に示すフローチャートは、図１４に示すフローチャートと比較して、ステップＳ２５６，Ｓ２６２，Ｓ２７２，Ｓ２７４に代えて、それぞれステップＳ２５６Ａ，Ｓ２６２Ａ，Ｓ２７２Ａ，Ｓ２７４Ａの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０２５１】
通信回路からの受信完了通知を受けた場合（ステップＳ２５４において「受信完了通知」）に実行されるステップＳ２５６Ａにおいて、マイクロプロセッサ１００（コア１）は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）にコピーするとともに、最新入力データ更新フラグ１をオンに設定する（ステップＳ２５６Ａ）。
【０２５２】
制御プログラム１が「実行終了」状態である場合（ステップＳ２６０において「実行終了」）において実行されるステップＳ２６２Ａにおいて、最新入力データ更新フラグ１がオンに設定されていれば、「書込先」状態であった入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「書込先」状態に設定した上で、最新入力データ更新フラグ１をオンからオフに変更する（ステップＳ２６２Ａ）。さらに、ステップＳ２６２Ａにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行中」状態に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２６２Ａ）。
【０２５３】
なお、制御プログラム１が「実行中」状態または「継続実行中」状態である場合（ステップＳ２６０において「実行中」／「継続実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「継続実行中」状態に設定する（ステップＳ２６４）。このとき、対応する入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）の「参照先」状態および「書込先」状態はいずれも維持されて、制御プログラム１の実行が継続される。
【０２５４】
制御プログラム１が「実行中」状態である場合（ステップＳ２７０において「実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬ
Ｃシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ２７２Ａ）。
【０２５５】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）において実行されるステップＳ２７４Ａにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ２７４Ａ）。さらに、ステップＳ２７４Ａにおいては、マイクロプロセッサ１００（コア１）は、最新入力データ更新フラグ１がオンに設定されていれば、「書込先」状態であった入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「書込先」状態に設定した上で、最新入力データ更新フラグ１をオンからオフに変更する。このとき、最新入力データ更新フラグ１がオフであれば、入力同期バッファ１の「書込先」状態および「参照先」状態は変更されず、最新入力データ更新フラグ１はオフのまま維持される。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる。
【０２５６】
（ｉ４：まとめ）
上述したように、実施の形態４においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｃ）の処理を含む。
【０２５７】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１６に示すステップＳ１）。
【０２５８】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第１入力同期バッファ（図１５に示す入力同期バッファ１Ａ）および第２入力同期バッファ（図１５に示す入力同期バッファ１Ｂ）を同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図１６に示すステップＳ１）。
【０２５９】
（ｃ）  制御プログラムごとに最新入力データ更新フラグをメインメモリ１０４（記憶手段）内に生成する処理（図１６に示すステップＳ１）。第１入力同期バッファおよび第２入力同期バッファには、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）から入力データをコピー可能な状態である「書込先」状態、および、制御プログラムから参照可能な状態である「参照先」状態、のいずれかの状態が重複せずに付与される。
【０２６０】
また、実施の形態４においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｄ）および（ｅ）の処理を含む。
【０２６１】
（ｄ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、当該入力コピーに関連する最新入力データ更新フラグをオンにする入力コピー処理（図１６に示すステップＳ２５６Ａ）。
【０２６２】
（ｅ）  制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入
力同期バッファについて、最新データを格納している入力同期バッファが「書込先」状態であることを条件として（すなわち、実行開始させる制御プログラムの入力同期バッファに関連する最新入力データ更新フラグがオンであることを条件として）、「書込先」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「書込先」状態と「参照先」状態とを入れ替える第３入替処理を実行し、かつ、当該オン状態であった最新入力データ更新フラグをオフにする制御プログラム開始処理（図１６に示すステップＳ２７４Ａ）。
【０２６３】
上述のような実施の形態４に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが２つ設けられており、制御プログラム開始処理において入力同期バッファの書込先状態と参照先状態との入替（第３入替処理）をしている間の短い時間を除き、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、最新入力データ更新フラグの状態に基づいて、コピーされた最新データが格納されている入力同期バッファを「参照先」状態に設定することにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
【０２６４】
＜Ｊ．最新データ型の２入力同期バッファ入替方式（実施の形態５）＞
（ｊ１：概要）
上述したように、実施の形態５においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。
【０２６５】
（ｊ２：シーケンス図）
実施の形態５に係る入力方向の動作は、上述した図１５のシーケンス図に示す。但し、図１５は、上述の実施の形態４と共通的に説明するためのシーケンス図であり、実施の形態５においては、入力同期バッファ１Ａおよび２Ｂの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ」は不要となる。
【０２６６】
このような、入力同期バッファの「書込先」状態、「参照先」状態および「最新」状態は、書込先状態記録領域、参照先状態記録領域および最新状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態および「最新」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。入力同期バッファが「書込先」状態／「参照先」状態／「最新」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、および／または「最新」状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態／「参照先」状態／「最新」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、１つの入力同期バッファに対して、「書込先」状態または「参照先」状態が互いに重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、１つのフラグまたは状態変数によって「書込先」状態か「参照先」状態かを表してもよい。
【０２６７】
（ｊ３：フローチャート）
図１７は、実施の形態５に係る実行動作を示すフローチャートである。図１７のフローチャートにおいては、図１６に示すフローチャートと同一の処理を実行するステップについては、図１６と同一のステップ番号を付与している。
【０２６８】
図１７に示すフローチャートは、図１６に示すフローチャートと比較して、ステップＳ２５６Ａ，Ｓ２６２Ａ，Ｓ２７４Ａに代えて、それぞれステップＳ２５６Ｂ，Ｓ２６２Ｂ，Ｓ２７４Ｂの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０２６９】
通信回路からの受信完了通知を受けた場合（ステップＳ２５４において「受信完了通知」）に実行されるステップＳ２５６Ｂにおいて、マイクロプロセッサ１００（コア１）は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）にコピーするとともに、入力データを書き込んだ入力同期バッファ１を「最新」状態に設定する（ステップＳ２５６Ｂ）。
【０２７０】
制御プログラム１が「実行終了」状態である場合（ステップＳ２６０において「実行終了」）において実行されるステップＳ２６２Ｂにおいて、「最新」状態に設定されている入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）を「参照先」状態に設定するとともに、他方の入力同期バッファ１を「書込先」状態に設定した上で、制御プログラム１の実行状態を「実行中」状態に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２６２Ｂ）。
【０２７１】
なお、制御プログラム１が「実行中」状態または「継続実行中」状態である場合（ステップＳ２６０において「実行中」／「継続実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「継続実行中」状態に設定する（ステップＳ２６４）。このとき、対応する入力同期バッファ１（入力同期バッファ１Ａまたは入力同期バッファ１Ｂ）の「参照先」状態および「書込先」状態はいずれも維持されて、制御プログラム１の実行が継続される。
【０２７２】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）において実行されるステップＳ２７４Ｂにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２７４Ｂ）。
【０２７３】
（ｊ４：まとめ）
上述したように、実施の形態５においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｃ）の処理を含む。
【０２７４】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１７に示すステップＳ１）。
【０２７５】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第１入力同期バッファ（図１５に示す入力同期バッファ１Ａ）および第２入力同期バッファ（図１５に示す入力同期バッファ１Ｂ）を同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図１７に示すステップＳ１）。
【０２７６】
（ｃ）  最新状態記録領域をメインメモリ１０４（記憶手段）内に生成する処理（図１７に示すステップＳ１）。第１入力同期バッファおよび第２入力同期バッファには、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）から入力データをコピー可能な状態である「書込先」状態、および、制御プログラムから参照可能な状態である「参照先」状態、のいずれかの状態が重複せずに付与される。
【０２７７】
また、実施の形態５においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｄ）および（ｅ）の処理を含む。
【０２７８】
（ｄ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理（図１７に示すステップＳ２５６Ｂ）。
【０２７９】
（ｅ）  制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファが「書込先」状態であることを条件として、「書込先」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「書込先」状態と「参照先」状態とを入れ替える第３入替処理を含む制御プログラム開始処理（図１７に示すステップＳ２６２Ｂ）。
【０２８０】
なお、制御プログラム開始処理については、以下のように表現することもできる。
（ｅ’）  制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参照する「参照先」状態とし、かつ、「参照先」状態とする入力同期バッファと同じ組に属する他方の入力同期バッファを「書込先」状態とする処理を含む制御プログラム開始処理（図１７に示すステップＳ２６２Ｂ）。
【０２８１】
上述のような実施の形態５に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが２つ設けられており、制御プログラム開始処理において入力同期バッファの「書込先」状態と「参照先」状態との入替（第３入替処理）をしている間の短い時間を除き、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
【０２８２】
＜Ｋ：更新フラグ型の３入力同期バッファ入替方式（実施の形態６）＞
（ｋ１：概要）
上述の実施の形態４および５においては、２つの入力同期バッファを利用する構成について例示したが、実施の形態６および後述する実施の形態７においては、３つの同期バッファを利用する構成について例示する。すなわち、実施の形態６は、実施の形態４の構成を３つの入力同期バッファに拡張した構成に相当し、後述する実施の形態７は、実施の形態５の構成を３つの入力同期バッファに拡張した構成に相当する。
【０２８３】
（ｋ２：シーケンス図）
図１８は、実施の形態６および７に係る入力方向の動作を示すシーケンス図である。実施の形態６および後述する実施の形態７について、図１８に示すシーケンス図を共通的に
参照しつつ、その詳細について説明する。より具体的には、後述する実施の形態７においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う構成について説明する。
【０２８４】
そのため、図１８を参照して、実施の形態６について説明する場合には、「最新入力データ更新フラグ１」についてのみ着目し、入力同期バッファ１Ａ，１Ｂ，１Ｃの時間軸に沿って示した「最新」状態の識別は不要である。一方、図１８を参照して、実施の形態７について説明する場合には、入力同期バッファ１Ａ，１Ｂ，１Ｃの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ１」は不要となる。
【０２８５】
また、図１８に示すシーケンス図においては、「書込先」状態および「参照先」状態を、単に、「書込先」および「参照先」と記述する。
【０２８６】
図１８には、典型的に、複数のコアを有するマルチコア（具体的には、デュアルコア）のマイクロプロセッサを用いた場合の処理を示す。すなわち、コア１がシステムプログラムを実行し、コア２が制御プログラム１を実行するものとする。但し、実施の形態６および７に係る方式は、上述の実施の形態４および５と同様に、単一のコアのみを有するシングルコアのマイクロプロセッサを用いた場合でも実行可能である。
【０２８７】
より具体的には、図１８に示す実施の形態６および７に係る方式においては、システムプログラムと制御プログラム１とが並列実行される。制御プログラム１は、コアの資源利用上はいつでも実行可能であるが、ここでは制御プログラム１もシステムプログラムの出力処理と入力処理とを利用する想定であるため、各制御サイクル冒頭の出力処理と入力処理との終了を待って、制御プログラム１の実行が開始されることを基本としている。
【０２８８】
なお、実施の形態６および７に係る出力方向の動作（出力データに関する処理）は、上述の実施の形態１における動作（図７に示すシーケンス図に記載の処理）と同様である。すなわち、制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データは、出力同期バッファから送信バッファにコピーされる。また、制御サイクルが開始すると、送信バッファから出力データが送信される。ここでは、これ以上の詳細な説明は繰り返さない。
【０２８９】
このような、入力同期バッファの「書込先」状態、「参照先」状態、および「待機」状態は、書込先状態記録領域、参照先状態記録領域および待機状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態、および「待機」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。入力同期バッファが「書込先」状態／「参照先」状態／「待機」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、および／または「待機」状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態／「参照先」状態／「待機」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、１つの入力同期バッファに対して、「書込先」状態、「参照先」状態、または「待機」状態が互いに重複しないように付与されるので、これらの記録領域を分けずに共通の状態記録領域を生成し、１組のフラグまたは１つの状態変数によっていずれの状態であるかを表してもよい。
【０２９０】
なお、実施の形態６に係るシーケンス図（図１８）に表されている最新入力データ更新フラグ１の垂直線（時間軸に沿った線）のうち、太い線の部分は最新入力データ更新フラグ１がオンであることを表す。この最新入力データ更新フラグ１は、システムプログラムが「ＰＬＣ１の制御動作の実行準備処理」において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。ここで、最新入力データ更新フラグ１は、一括してコピーが行われるときのコピー先となる入力同期バッファの組の集合ごとに設けられる。
【０２９１】
（ｋ３：フローチャート）
図１９は、実施の形態６に係る実行動作を示すフローチャートである。図１９のフローチャートにおいては、図１６に示すフローチャートと同一の処理を実行するステップについては、図１６と同一のステップ番号を付与している。
【０２９２】
図１９に示すフローチャートは、図１６に示すフローチャートと比較して、ステップＳ２５６Ａ，Ｓ２６２Ａ，Ｓ２７４Ａに代えて、それぞれステップＳ２５６Ｃ，Ｓ２６２Ｃ，Ｓ２７４Ｃの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０２９３】
通信回路からの受信完了通知を受けた場合（ステップＳ２５４において「受信完了通知」）に実行されるステップＳ２５６Ｃにおいて、マイクロプロセッサ１００（コア１）は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）にコピーし、さらに、「書込先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定するとともに、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「書込先」状態に設定した上で、最新入力データ更新フラグ１をオフからオンに変更する（ステップＳ２５６Ｃ）。
【０２９４】
制御プログラム１が「実行終了」状態である場合（ステップＳ２６０において「実行終了」）において実行されるステップＳ２６２Ｃにおいて、最新入力データ更新フラグ１がオンに設定されていれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定した上で、最新入力データ更新フラグ１をオンからオフに変更する（ステップＳ２６２Ｃ）。さらに、ステップＳ２６２Ｃにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行中」状態に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２６２Ｃ）。
【０２９５】
なお、制御プログラム１が「実行中」状態または「継続実行中」状態である場合（ステップＳ２６０において「実行中」／「継続実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「継続実行中」状態に設定する（ステップＳ２６４）。このとき、対応する入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）の「参照先」状態および「待機」状態はいずれも維持されて、制御プログラム１の実行が継続される。
【０２９６】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）において実行されるステップＳ２７４Ｃにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステ
ップＳ２７４Ｃ）。さらに、ステップＳ２７４Ｃにおいては、マイクロプロセッサ１００（コア１）は、最新入力データ更新フラグ１がオンに設定されていれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定した上で、最新入力データ更新フラグ１をオンからオフに変更する。このとき、最新入力データ更新フラグ１がオフであれば、入力同期バッファ１の「待機」状態および「参照先」状態は変更されず、最新入力データ更新フラグ１はオフのまま維持される。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる。
【０２９７】
（ｋ４：まとめ）
上述したように、実施の形態６においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｃ）の処理を含む。
【０２９８】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図１９に示すステップＳ１）。
【０２９９】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファ（図１８に示す入力同期バッファ１Ａ，１Ｂ，１Ｃ）を入力同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図１９に示すステップＳ１）。
【０３００】
（ｃ）  制御プログラムごとに最新入力データ更新フラグをメインメモリ１０４（記憶手段）内に生成する処理（図１９に示すステップＳ１）。第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファには、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
【０３０１】
また、実施の形態６においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｄ）および（ｅ）の処理を含む。
【０３０２】
（ｄ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第１入替処理を実行し、かつ、当該入力コピーに関連する最新入力データ更新フラグをオンにする入力コピー処理（図１９に示すステップＳ２５６Ｃ）。
【０３０３】
（ｅ）  制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新データを格納している入力同期バッファが「待機」状態であることを条件として（すなわち、実行開始させる制御プログラムの入力同期バッファに関連する最新入力データ更新フラグがオンであることを条件として）、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第２入替処理を実行し、かつ、当該オン状態であった最新入力データ更新フラグをオフにする制御プログラム開始処理（図１９に示すステ
ップＳ２７４Ｃ）。
【０３０４】
上述のような実施の形態６に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが３つ設けられており、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
【０３０５】
実施の形態６によれば、制御プログラムの実行開始時にコピーされた最新データが格納されている入力同期バッファを参照先とする手段として、入力コピー処理において入力同期バッファの「書込先」状態と「待機状態」との入替を行い、制御プログラム開始処理において、最新入力データ更新フラグの状態に基づいて、入力同期バッファの「待機」状態と「参照先」状態の入替を行う。たとえば、受信バッファからコピーが行われたときに「書込先」状態であった入力同期バッファは、「待機」状態を経て「参照先」状態となる。
【０３０６】
入力データの数が多い場合には、受信バッファから入力同期バッファへの入力データのコピーには、ある程度の時間を要する。上述の実施の形態４の場合には、制御プログラム開始処理における入力同期バッファの「書込先」状態と「参照先」状態との入替処理（第３入替処理）と受信バッファから入力同期バッファへのコピーとを同時に行うことができず、いずれかの処理の終了を待って他方の処理を行う必要があったが、実施の形態６の場合には、制御プログラム開始処理における入力同期バッファの「待機」状態と「参照先」状態との入替処理（第２入替処理）と受信バッファから「書込先」状態の入力同期バッファへのコピーとを並行して実行するように設計することが可能であり、より有利となる。
【０３０７】
＜Ｌ．最新データ型の３入力同期バッファ入替方式（実施の形態７）＞
（ｌ１：概要）
上述したように、実施の形態７においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。但し、入力同期バッファは、３個に拡張されている。
【０３０８】
（ｌ２：シーケンス図）
実施の形態７に係る入力方向の動作は、上述した図１８のシーケンス図に示す。但し、図１８は、上述の実施の形態６と共通的に説明するためのシーケンス図であり、実施の形態７においては、入力同期バッファ１Ａ，１Ｂ，１Ｃの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新入力データ更新フラグ１」は不要となる。
【０３０９】
このような、入力同期バッファの「書込先」状態、「参照先」状態、「待機」状態、および「最新」状態は、書込先状態記録領域、参照先状態記録領域、待機状態記録領域、および最新状態記録領域に入力同期バッファが「書込先」状態、「参照先」状態、「待機」状態、および「最新」状態であることをそれぞれ記録することよって表される。これらの各状態記録領域は、システムプログラム２１０が「ＰＬＣ１の制御動作の実行準備処理」（図５に示すステップＳ１）において、メインメモリ１０４内の制御プログラムの作業領域１０４２に生成する。入力同期バッファが「書込先」状態／「参照先」状態／「待機」状態／「最新」状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された入力同期バッファのグループのうち「書込先」状態、「参照先」状態、「待機」状態、および／または「最新」状態であるものを特定する情報（入力同期バッファのグループの識別番号など）を記録する態様、そのような入力同期バッファのグループごとに「書込先」状態／「参照先」状態／「待機」状態／「最新」状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは
状態変数の値を用いて記録する態様、などを採用することができる。特に、本実施の形態においては、１つの入力同期バッファに対して、「書込先」状態、「参照先」状態、または「待機」状態が互いに重複しないように付与されるので、書込先状態記録領域、参照先状態記録領域、および待機状態記録領域を分けずに共通の状態記録領域を生成し、１組のフラグまたは１つの状態変数によって「書込先」状態、「参照先」状態、および「待機」状態のうちどの状態であるかを表してもよい。
【０３１０】
（ｌ３：フローチャート）
図２０は、実施の形態７に係る実行動作を示すフローチャートである。図２０のフローチャートにおいては、図１７に示すフローチャートと同一の処理を実行するステップについては、図１７と同一のステップ番号を付与している。
【０３１１】
図２０に示すフローチャートは、図１７に示すフローチャートと比較して、ステップＳ２５６Ｂ，Ｓ２６２Ｂ，Ｓ２７４Ｂに代えて、それぞれステップＳ２５６Ｄ，Ｓ２６２Ｄ，Ｓ２７４Ｄの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０３１２】
通信回路からの受信完了通知を受けた場合（ステップＳ２５４において「受信完了通知」）に実行されるステップＳ２５６Ｄにおいて、マイクロプロセッサ１００（コア１）は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）にコピーし、さらに、「書込先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「書込先」状態に設定する（ステップＳ２５６Ｄ）。
【０３１３】
制御プログラム１が「実行終了」状態である場合（ステップＳ２６０において「実行終了」）において実行されるステップＳ２６２Ｄにおいて、「最新」状態の入力同期バッファ１が「待機」状態であれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定した上で、制御プログラム１の実行状態を「実行中」状態に設定するとともに、コア２に制御プログラム１の実行を開始させる（ステップＳ２６２Ｄ）。
【０３１４】
なお、制御プログラム１が「実行中」状態または「継続実行中」状態である場合（ステップＳ２６０において「実行中」／「継続実行中」）には、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「継続実行中」状態に設定する（ステップＳ２６４）。このとき、対応する入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）の「参照先」状態および「待機」状態はいずれも維持されて、制御プログラム１の実行が継続される。
【０３１５】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）において実行されるステップＳ２７４Ｄにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ２７４Ｄ）。さらに、ステップＳ２７４Ｄにおいては、マイクロプロセッサ１００（コア１）は、「最新」状態の入力同期バッファ１が「待機」状態であれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参
照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定する。このとき、「最新」状態の入力同期バッファ１が「参照先」状態であれば、入力同期バッファ１の「待機」状態および「参照先」状態は変更されない。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる。
【０３１６】
（ｌ４：まとめ）
上述したように、実施の形態７においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｃ）の処理を含む。
【０３１７】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図２０に示すステップＳ１）。
【０３１８】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファ（図１８に示す入力同期バッファ１Ａ，１Ｂ，１Ｃ）を入力同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図２０に示すステップＳ１）。
【０３１９】
（ｃ）  最新状態記録領域をメインメモリ１０４（記憶手段）内に生成する処理（図２０に示すステップＳ１）。第１入力同期バッファ、第２入力同期バッファ、および第３入力同期バッファは、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
【０３２０】
また、実施の形態７においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｄ）および（ｅ）の処理を含む。
【０３２１】
（ｄ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第１入替処理を実行し、かつ、コピー先の入力同期バッファが「最新」状態であることを最新状態記録領域に記録する入力コピー処理（図２０に示すステップＳ２５６Ｄ）。
【０３２２】
（ｅ）  制御プログラムを実行開始させ、さらに、実行開始させる制御プログラムの入力同期バッファについて、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファが「待機」状態であることを条件として、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第２入替処理を含む制御プログラム開始処理（図２０に示すステップＳ２６２Ｄ）。
【０３２３】
なお、制御プログラム開始処理については、以下のように表現することもできる。
（ｅ’）  制御プログラムを実行開始させ、さらに、最新状態記録領域の内容によって特定される「最新」状態である入力同期バッファをその制御プログラムの実行において参
照する「参照先」状態とし、かつ、「参照先」状態とする入力同期バッファと同じ組に属する入力同期バッファであって、「書込先」状態でない入力同期バッファを「待機」状態とする処理を含む制御プログラム開始処理（図２０に示すステップＳ２６２Ｄ）。
【０３２４】
上述のような実施の形態７に係る処理方式によれば、各制御プログラムについて、その制御プログラムから参照される入力データごとに入力同期バッファが３つ設けられており、常にいずれかの入力同期バッファが「書込先」状態となっている。そのため、いつでも入力データをコピーできる。さらに、制御プログラムの実行開始時に、コピーされた最新データが格納されている入力同期バッファを参照先とすることにより、制御プログラムはその実行開始時における最新の入力データを参照することができる。
【０３２５】
実施の形態７によれば、制御プログラムの実行開始時にコピーされた最新データが格納されている入力同期バッファを参照先とする手段として、入力コピー処理において入力同期バッファの「書込先」状態と「待機」状態の入替を行い、制御プログラム開始処理において、最新状態記録領域の内容に基づいて、入力同期バッファの「待機」状態と「参照先」状態との入替を行う。たとえば、受信バッファからコピーが行われたときに「書込先」状態であった入力同期バッファは、「待機」状態を経て「参照先」状態となる。
【０３２６】
入力データの数が多い場合には、受信バッファから入力同期バッファへの入力データのコピーには、ある程度の時間を要する。上述の実施の形態５の場合には、制御プログラム開始処理における入力同期バッファの「書込先」状態と「参照先」状態との入替処理（第３入替処理）と受信バッファから入力同期バッファへのコピーとを同時に行うことができず、いずれかの処理の終了を待って他方の処理を行う必要があったが、実施の形態７の場合には、制御プログラム開始処理における入力同期バッファの「待機」状態と「参照先」状態との入替処理（第２入替処理）と受信バッファから「書込先」状態の入力同期バッファへのコピーとを並行して実行するように設計することが可能であり、より有利となる。
【０３２７】
＜Ｍ．更新フラグ型の３出力同期バッファ入替方式（実施の形態８）＞
（ｍ１：概要）
上述の実施の形態６および７においては、３つの入力同期バッファを利用する構成について例示したが、実施の形態８および後述する実施の形態９においては、これらの実施の形態における３バッファ入替方式を出力同期バッファに応用したものである。
【０３２８】
特に、実施の形態８および実施の形態９においては、出力同期バッファとは別に、出力データごとに演算用バッファが生成される。そして、制御プログラムは、この演算用バッファに出力データを格納する。これは以下のような理由による。すなわち、実施の形態８および実施の形態９においては、３つの出力同期バッファが存在しており、書込先となる出力同期バッファが順次変更されるため、制御プログラムが出力データを出力同期バッファに格納したとすると、以前に格納した出力データを制御プログラムが参照することが困難になる。そこで、演算用バッファを設けて制御プログラムがこの演算用バッファに出力データを格納することにより、制御プログラムが以前に格納した出力データを演算バッファから取得できるように構成している。
【０３２９】
なお、実施の形態８および実施の形態９に係る出力データの出力方式は、上述した実施の形態１〜７のうち、いずれの入力データの入力方式とも任意に組み合わせて実施することができる。
【０３３０】
（ｍ２：シーケンス図）
図２１は、実施の形態８および９に係る出力方向の動作を示すシーケンス図である。図２１には、実施の形態８および後述する実施の形態９について、図２１に示すシーケンス
図を共通的に参照しつつ、その詳細について説明する。より具体的には、図２１を参照して、実施の形態８について説明する場合には、「最新出力データ更新フラグ１」についてのみ着目し、出力同期バッファ１Ｄ，１Ｅ，１Ｆの時間軸に沿って示した「最新」状態の識別は不要である。一方、図２１を参照して、実施の形態９について説明する場合には、出力同期バッファ１Ｄ，１Ｅ，１Ｆの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新出力データ更新フラグ１」は不要となる。
【０３３１】
本実施の形態においては、出力同期バッファの各々には、「書込先」状態、「参照先」状態、および「待機」状態のいずれかが設定される。これらの状態の記録方法は、上述の実施の形態６において説明した入力同期バッファの場合と同様である。最新出力データ更新フラグの状態の記録方法についても、上述の実施の形態６において説明した最新入力データ更新フラグの場合と同様である。
【０３３２】
（ｍ３：フローチャート）
図２２は、実施の形態８に係る実行動作を示すフローチャートである。図２２のフローチャートにおいては、図１９に示すフローチャートと同一の処理を実行するステップについては、図１９と同一のステップ番号を付与している。
【０３３３】
図２２に示すフローチャートは、図１９に示すフローチャートと比較して、ステップＳ２５１Ｅの処理が追加され、かつ、ステップＳ２７２およびＳ２７４Ｃに代えて、それぞれステップＳ２７２ＥおよびＳ２７４Ｅの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０３３４】
制御サイクル開始の割り込み信号を受けた場合（ステップＳ２５０においてＹＥＳ）に実行されるステップＳ２５１Ｅにおいて、マイクロプロセッサ１００（コア１）は、最新出力データ更新フラグ１がオンに設定されていれば、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定した上で、最新出力データ更新フラグ１をオンからオフに変更する（ステップＳ２５１Ｅ）。
【０３３５】
なお、最新出力データ更新フラグ１がオンに設定されていなければ（最新出力データ更新フラグ１がオフに設定されていれば）、出力同期バッファ１の「待機」状態および「参照先」状態については変更せず、最新出力データ更新フラグ１についてもオフのまま維持する。
【０３３６】
さらに、ステップＳ２５１Ｅにおいては、マイクロプロセッサ１００（コア１）は、「参照先」状態である出力同期バッファ１に格納されている出力データを、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする。
【０３３７】
制御プログラム１が「実行中」状態である場合（ステップＳ２７０において「実行中」）において実行されるＳ２７２Ｅにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、演算用バッファ１に格納されている出力データを、「書込先」状態の出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「書込先」状態に設定した上で、最新出力データ更新フラグ１をオフからオンに変更する（ステップＳ２７２Ｅ）。
【０３３８】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続実行中」）において実行されるステップＳ２７４Ｅにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、演算用バッファ１に格納されている出力データを、「書込先」状態の出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「書込先」状態に設定した上で、最新出力データ更新フラグ１をオフからオンに変更する（ステップＳ２７４Ｅ）。
【０３３９】
さらに、ステップＳ２７４Ｅにおいては、最新入力データ更新フラグ１がオンに設定されていれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定した上で、最新入力データ更新フラグ１をオンからオフに変更する。このとき、最新入力データ更新フラグ１がオフであれば、入力同期バッファ１の「待機」状態および「参照先」状態は変更されず、最新入力データ更新フラグ１はオフのまま維持される。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる。
【０３４０】
（ｍ４：まとめ）
上述したように、実施の形態８においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｅ）の処理を含む。
【０３４１】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）および送信されるべき出力データを格納する送信バッファ（図４に示すＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５）をメインメモリ１０４（記憶手段）内に生成する処理（図２２に示すステップＳ１）。
【０３４２】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ（任意の１または複数の入力同期バッファ）をメインメモリ１０４（記憶手段）内に生成する処理（図２２に示すステップＳ１）。
【０３４３】
（ｃ）  制御プログラムが出力データを格納する演算用バッファ（図２１に示す演算用バッファ１）をメインメモリ１０４（記憶手段）内に生成する処理（図２２に示すステップＳ１）。
【０３４４】
（ｄ）  送信バッファにコピーされる出力データが格納される、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファ（図２１に示す出力同期バッファ１Ｅ，１Ｆ，１Ｇ）を出力同期バッファの組として、出力データごとにメインメモリ１０４（記憶手段）内に生成する処理（図２２に示すステップＳ１）。
【０３４５】
（ｅ）  制御プログラムごとに最新出力データ更新フラグをメインメモリ１０４（記憶手段）内に生成する処理（図２２に示すステップＳ１）。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファには、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
【０３４６】
また、実施の形態８においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｆ）〜（ｉ）の処理を含む。
【０３４７】
（ｆ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図２２に示すステップＳ２５６Ｃ）。
【０３４８】
（ｇ）  制御プログラムを実行開始させる制御プログラム開始処理（図２２に示すステップＳ２６２Ｃ）。
【０３４９】
（ｈ）  制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第４入替処理を実行し、かつ、当該出力コピーに関連する最新出力データ更新フラグをオンにする出力同期バッファ格納処理（図２２に示すステップＳ２７２Ｅ）。
【０３５０】
（ｉ）  最新データを格納している出力同期バッファが「待機」状態であることを条件として（すなわち、実行開始させる制御プログラムの出力同期バッファに関連する最新出力データ更新フラグがオンであることを条件として）、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第５入替処理を実行し、当該オン状態であった最新出力データ更新フラグをオフにし、および出力データを「参照先」状態となった出力同期バッファから送信バッファにコピーする出力コピー処理（図２２に示すステップＳ２５１Ｅ）。
【０３５１】
上述のような実施の形態８に係る処理方式によれば、各制御プログラムについて、その制御プログラムが生成する出力データごとに出力同期バッファが３つ設けられており、常にいずれかの出力同期バッファが「書込先」状態となっている。そのため、いつでも演算バッファから出力同期バッファに出力データをコピーできる。
【０３５２】
また、実施の形態８に係る処理方式によれば、制御プログラムの実行終了時に演算バッファからコピーされた最新データが格納されている出力同期バッファを参照先（送信バッファへのコピー元）とする手段として、出力同期バッファ格納処理において出力同期バッファの「書込先」状態と「待機」状態の入替（第４入替処理）を行い、出力コピー処理において、最新出力データ更新フラグの状態に基づいて、出力同期バッファの「待機」状態と「参照先」状態の入替（第５入替処理）を行う。たとえば、演算バッファからコピーが行われたときに「書込先」状態であった出力同期バッファは、「待機」状態を経て、「参照先」状態となる。
【０３５３】
出力データの数が多い場合には、演算バッファから出力同期バッファへの出力データのコピー、および、出力同期バッファから送信バッファへの出力データのコピーには、それぞれある程度の時間を要する。実施の形態８の場合には、それらのコピーの実行時期が重なった場合に並行してコピーを実行するように設計することが可能であり、より有利となる。
【０３５４】
なお、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理は、送信実行の直前に実行するのが好ましい。たとえば、図２１のように各制御サイクルの冒頭近くで送信する場合であれば、制御サイクル開始後、まず出力コピー処理を実行し、
続いて送信が実行されるようにするとよい。
【０３５５】
＜Ｎ．最新データ型の３出力同期バッファ入替方式（実施の形態９）＞
（ｎ１：概要）
上述したように、実施の形態９においては、コピーされた最新データが格納されている同期バッファを「最新」状態として識別するための情報を扱う。
【０３５６】
（ｎ２：シーケンス図）
実施の形態９に係る出力方向の動作は、上述した図２１のシーケンス図に示す。但し、図２１は、上述の実施の形態８と共通的に説明するためのシーケンス図であり、実施の形態９においては、出力同期バッファ１Ｄ，１Ｅ，１Ｆの時間軸に沿って示した「最新」状態の識別についてのみ着目し、「最新出力データ更新フラグ１」は不要となる。
【０３５７】
（ｎ３：フローチャート）
図２３は、実施の形態９に係る実行動作を示すフローチャートである。図２３のフローチャートにおいては、図２２に示すフローチャートと同一の処理を実行するステップについては、図２２と同一のステップ番号を付与している。
【０３５８】
図２３に示すフローチャートは、図２２に示すフローチャートと比較して、ステップＳ２５１Ｅ，Ｓ２７２ＥおよびＳ２７４Ｅに代えて、それぞれステップＳ２５１Ｆ，Ｓ２７２ＦおよびＳ２７４Ｆの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０３５９】
制御サイクル開始の割り込み信号を受けた場合（ステップＳ２５０においてＹＥＳ）に実行されるステップＳ２５１Ｆにおいて、マイクロプロセッサ１００（コア１）は、「最新」状態の出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）が「待機」状態に設定されていれば、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定する（ステップＳ２５１Ｆ）。
【０３６０】
なお、「最新」状態の出力同期バッファ１が「参照先」状態に設定されていれば、出力同期バッファ１の「待機」状態および「参照先」状態については変更せず、そのまま維持する。
【０３６１】
さらに、ステップＳ２５１Ｆにおいては、マイクロプロセッサ１００（コア１）は、「参照先」状態である出力同期バッファ１に格納されている出力データを、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする。
【０３６２】
制御プログラム１が「実行中」状態である場合（ステップＳ２７０において「実行中」）において実行されるＳ２７２Ｆにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、演算用バッファ１に格納されている出力データを、「書込先」状態の出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「書込先」状態に設定する（ステップＳ２７２Ｆ）。
【０３６３】
制御プログラム１が「継続実行中」状態である場合（ステップＳ２７０において「継続
実行中」）において実行されるステップＳ２７４Ｆにおいては、マイクロプロセッサ１００（コア１）は、制御プログラム１の実行状態を「実行終了」に設定し、演算用バッファ１に格納されている出力データを、「書込先」状態の出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「待機」状態に設定するとともに、「最新」状態にも設定し、「待機」状態であった出力同期バッファ１（出力同期バッファ１Ｄ，１Ｅ，１Ｆのいずれか）を「書込先」状態に設定する（ステップＳ２７４Ｆ）。
【０３６４】
さらに、ステップＳ２７４Ｆにおいては、「最新」状態の入力同期バッファ１が「待機」状態に設定されていれば、「待機」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ１（入力同期バッファ１Ａ，１Ｂ，１Ｃのいずれか）を「待機」状態に設定する。このとき、「最新」状態の入力同期バッファ１が「参照先」状態に設定されていなければ、入力同期バッファ１の「待機」状態および「待機」状態は変更されず、そのまま維持する。その後、制御プログラム１の実行状態を「実行中」に設定するとともに、コア２に制御プログラム１の実行を開始させる。
【０３６５】
（ｍ４：まとめ）
上述したように、実施の形態９においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）〜（ｅ）の処理を含む。
【０３６６】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）および送信されるべき出力データを格納する送信バッファ（図４に示すＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５）をメインメモリ１０４（記憶手段）内に生成する処理（図２３に示すステップＳ１）。
【０３６７】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ（任意の１または複数の入力同期バッファ）をメインメモリ１０４（記憶手段）内に生成する処理（図２３に示すステップＳ１）。
【０３６８】
（ｃ）  制御プログラムが出力データを格納する演算用バッファ（図２１に示す演算用バッファ１）をメインメモリ１０４（記憶手段）内に生成する処理（図２３に示すステップＳ１）。
【０３６９】
（ｄ）  送信バッファにコピーされる出力データが格納される、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファ（図２１に示す出力同期バッファ１Ｅ，１Ｆ，１Ｇ）を出力同期バッファの組として、出力データごとにメインメモリ１０４（記憶手段）内に生成する処理（図２３に示すステップＳ１）。
【０３７０】
（ｅ）  最新状態記録領域をメインメモリ１０４（記憶手段）内に生成する処理（図２３に示すステップＳ１）。第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファには、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、「待機」状態のいずれかの状態が重複せずに付与される。
【０３７１】
また、実施の形態９においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｆ）〜（ｉ）の処理を含む。
【０３７２】
（ｆ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図２３に示すステップＳ２５６Ｄ）。
【０３７３】
（ｇ）  制御プログラムを実行開始させる制御プログラム開始処理（図２３に示すステップＳ２６２Ｄ）。
【０３７４】
（ｈ）  制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第４入替処理を実行し、かつ、コピー先の出力同期バッファが最新状態であることを最新状態記録領域に記録する出力同期バッファ格納処理（図２３に示すステップＳ２７２Ｆ）。
【０３７５】
（ｉ）    最新状態記録領域の内容によって特定される「最新」状態である出力同期バッファが「待機」状態であることを条件として、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第５入替処理を実行し、出力データを「参照先」状態となった出力同期バッファから送信バッファにコピーする出力コピー処理（図２３に示すステップＳ２５１Ｆ）。
【０３７６】
上述のような実施の形態９に係る処理方式によれば、各制御プログラムについて、その制御プログラムが生成する出力データごとに出力同期バッファが３つ設けられており、常にいずれかの出力同期バッファが「書込先」状態となっている。そのため、いつでも演算バッファから出力同期バッファに出力データをコピーできる。
【０３７７】
また、実施の形態９に係る処理方式によれば、制御プログラムの実行終了時に演算バッファからコピーされた最新データが格納されている出力同期バッファを参照先（送信バッファへのコピー元）とする手段として、出力同期バッファ格納処理において出力同期バッファの「書込先」状態と「待機」状態の入替（第４入替処理）を行い、出力コピー処理において、出力同期バッファの最新状態に基づいて、出力同期バッファの「待機」状態と「参照先」状態の入替（第５入替処理）を行う。たとえば、演算バッファからコピーが行われたときに「書込先」状態であった出力同期バッファは、「待機」状態を経て、「参照先」状態となる。
【０３７８】
出力データの数が多い場合には、演算バッファから出力同期バッファへの出力データのコピー、および、出力同期バッファから送信バッファへの出力データのコピーには、それぞれある程度の時間を要する。実施の形態９の場合には、それらのコピーの実行時期が重なった場合に並行してコピーを実行するように設計することが可能であり、より有利となる。
【０３７９】
なお、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理は、送信実行の直前に実行するのが好ましい。たとえば、図２１のように各制御サイクルの冒頭近くで送信する場合であれば、制御サイクル開始後、まず出力コピー処理を実行し、続いて送信が実行されるようにするとよい。
【０３８０】
（ｍ５：さらなる拡張）
上述の実施の形態８および９についての説明により、実施の形態６および７の入力方式
を出力方式にも応用できることが必然的に理解されよう。ここでは、その詳細な説明は行わないが、実施の形態２〜５に係る入力方式についても、それぞれ出力方式に応用することができる。さらに、それぞれの入力方式とそれぞれの出力方式とは任意に組み合わせて実施することができる。
【０３８１】
＜Ｏ．実行サイクル同期型単一バッファ式（実施の形態１０）＞
（ｏ１：概要）
制御プログラムの実行サイクルが複数の制御サイクルにわたる場合であって、他に実行優先度のより高い制御プログラムが存在する場合には、実行サイクル内の最初の制御サイクルから制御プログラムの実行を開始できないということが起こりうる。上述の実施の形態１〜９では、そのような場合に、実際に制御プログラムの実行を開始する制御サイクルと関係する受信タイミングに受信した最新の入力データを使用することが可能である。
【０３８２】
しかし、そうする代わりに、制御プログラムの実行に使用する入力データを、制御プログラムの実行サイクルが開始する制御サイクルと関係する受信タイミングにおいて受信した入力データに統一することにより、入力データの実効的な更新周期を一定にしたい場合がある。実施の形態１０の入力方式によれば、このような要求を満たすことができる。
【０３８３】
なお、上記の「制御サイクルと関係する受信タイミング」とは、以下のようなタイミングを意味する。すなわち、制御サイクル内で入力データの受信後に制御プログラムを実行するスケジューリングを採用している場合には、当該制御サイクルにおける受信のタイミングである。また、制御サイクル内で制御プログラムの実行後に入力データの受信をするスケジューリングを採用している場合には、当該制御サイクルの直前の制御サイクルにおける受信のタイミングである。
【０３８４】
また、別の状況として、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合は、実行サイクル内の最後の制御サイクルが開始するより前に制御プログラムの実行が終了し、出力データが生成されているということが起こりうる。上述の実施の形態１〜９では、そのような場合に、最後の制御サイクルと関係する送信タイミングを待たずに更新された出力データを送信することが可能である。
【０３８５】
しかし、そうする代わりに、更新された出力データの送信タイミングを実行サイクル内の最後の制御サイクルと関係する送信タイミングに統一することにより、送信される出力データの実効的な更新周期を一定にしたい場合がある。実施の形態１０の出力方式によれば、このような要求を満たすことができる。
【０３８６】
なお、上記「制御サイクルと関係する送信タイミング」とは、以下のようなタイミングを意味する。すなわち、制御サイクル内で出力データの送信後に制御プログラムを実行するスケジューリングを採用している場合には、当該制御サイクルの直後の制御サイクルにおける送信のタイミングである。また、制御サイクル内で制御プログラムの実行後に出力データの送信をするスケジューリングを採用している場合には、当該制御サイクルにおける送信のタイミングである。
【０３８７】
（ｏ２：シーケンス図）
図２４は、実施の形態１０に係る入力方向の動作を示すシーケンス図である。図２５は、実施の形態１０に係る出力方向の動作を示すシーケンス図である。
【０３８８】
実施の形態１０に係る入力方向／出力方向の動作については、上述の実施の形態１における動作と共通する点も多いので、主として両者の間の相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
【０３８９】
まず、図２４を参照して、実施の形態１０に係る入力方式について説明する。入力方式について、実施の形態１では、制御プログラムが実行中の間、入力同期バッファが「書込禁止」状態とされ、受信バッファから入力同期バッファへの入力データのコピーは、コピー先の入力同期バッファが「書込禁止」状態である場合を除き、毎制御サイクルにおいて行われる。
【０３９０】
これに対し、実施の形態１０では、受信バッファから入力同期バッファへの入力データのコピーは、制御プログラムの実行サイクルが開始した制御サイクルにおいてのみ行われる。このコピー制御は、現在の制御サイクルが実行サイクルの最初の制御サイクルに該当するかどうかを監視することによって行う。そうする代わりに、入力同期バッファへのコピーを行えばその入力同期バッファを「書込禁止」状態とし、制御プログラムの実行サイクルが終了すれば「書込禁止」状態を解除することにより、入力同期バッファへのコピーを実行サイクルが開始した最初の制御サイクルにおいてのみ実行するようにしてもよい。
【０３９１】
次に、図２５を参照して、実施の形態１０に係る出力方式について説明する。出力方式について、実施の形態１では、制御プログラムの実行が終了すると、出力同期バッファから送信バッファへの出力データのコピーが行われる。その後、次の制御サイクルが開始すると、送信バッファから出力データが送信される。
【０３９２】
これに対し、実施の形態１０では、制御プログラムの実行サイクルが開始すると、出力同期バッファから送信バッファへの出力データのコピーが行われる。その後、送信バッファから出力データが送信される。
【０３９３】
（ｏ３：フローチャート）
図２６は、実施の形態１０に係る実行動作を示すフローチャートである。図２６を参照して、マイクロプロセッサ１００は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行準備処理を実行する（ステップＳ１）。続いて、マイクロプロセッサ１００は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行制御処理を実行する（図５に示すステップＳ２）。このＰＬＣ１の制御動作の実行制御処理の詳細な一例がステップＳ３００〜Ｓ３４８に相当する。
【０３９４】
まず、マイクロプロセッサ１００は、制御サイクル開始の割り込み信号を待つ（ステップＳ３００）。制御サイクル開始の割り込み信号を受けると（ステップＳ３００においてＹＥＳ）、マイクロプロセッサ１００は、制御プログラム１の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム１の実行状態を「実行前」状態に設定するとともに、出力同期バッファ１に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ３０２）。
【０３９５】
続いて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム２の実行状態を「実行前」状態に設定するとともに、出力同期バッファ２に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ３０４）。
【０３９６】
続いて、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）に対して送信実行を指示する（ステップＳ３０６）。送信実行の指示に応答して、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４
５）に格納されているデータが他のユニットなどへ送信される。
【０３９７】
その後、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）からの受信完了通知を待つ（ステップＳ３０８）。
【０３９８】
通信回路からの受信完了通知を受けると（ステップＳ３０８においてＹＥＳ）、マイクロプロセッサ１００は、制御プログラム１の実行サイクルが現在の制御サイクルから開始する場合には、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、入力同期バッファ１にコピーし（ステップＳ３１０）、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、入力同期バッファ２にコピーする（ステップＳ３１２）。
【０３９９】
続いて、マイクロプロセッサ１００は、制御プログラム１の実行状態を判断する（ステップＳ３２０）。
【０４００】
制御プログラム１が「実行前」状態である場合（ステップＳ３２０において「実行前」）には、マイクロプロセッサ１００は、制御プログラム１の実行状態を「実行中」に設定し、制御プログラム１の実行を開始する（ステップＳ３２２）。そして、処理はステップＳ３２６へ進む。
【０４０１】
制御プログラム１が「実行中」状態である場合（ステップＳ３２０において「実行中」）には、マイクロプロセッサ１００は、制御プログラム１の未実行の部分の実行を開始する（ステップＳ３２４）。そして、処理はステップＳ３２６へ進む。
【０４０２】
制御プログラム１が「実行終了」状態である場合（ステップＳ３２０において「実行終了」）には、処理はステップＳ３４０へ進む。
【０４０３】
ステップＳ３２２またはＳ３３４において、制御プログラム１の実行を開始（または、再開）すると、マイクロプロセッサ１００は、制御プログラム１の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ３２６）。なお、ステップＳ２３２またはＳ２３４において、制御プログラム１の実行が開始（または、再開）されることで、マイクロプロセッサ１００で実行される処理は、システムプログラムによる処理から制御プログラム１による処理に切り替わる。すなわち、制御プログラム１の実行開始から実行終了するまでの間は、マイクロプロセッサ１００は、システムプログラムを実行しない。そして、制御プログラム１の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムＯＳ２００が、マイクロプロセッサ１００での制御プログラム１の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム１の実行が終了した通知（制御プログラム１の実行終了通知）があれば、マイクロプロセッサ１００における実行対象は、制御プログラム２からシステムプログラムへ戻る。
【０４０４】
制御プログラム１の実行終了通知を受けると（ステップＳ３３６において「実行終了通知」）、マイクロプロセッサ１００は、制御プログラム１の実行状態を「実行終了」に設定する（ステップＳ３２８）。そして、処理はステップＳ３４０へ進む。
【０４０５】
一方、制御プログラム１の実行終了通知までに次の制御サイクル開始の割り込みを受けると（ステップＳ３３６において「制御サイクル開始」）、マイクロプロセッサ１００で実行中の制御プログラム１は中断され、マイクロプロセッサ１００は、ステップＳ３０２
以下の処理を再度実行する。
【０４０６】
ステップＳ３４０において、マイクロプロセッサ１００は、制御プログラム２の実行状態を判断する（ステップＳ３４０）。
【０４０７】
制御プログラム２が「実行前」状態である場合（ステップＳ３４０において「実行前」）には、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行中」に設定し、制御プログラム２の実行を開始する（ステップＳ３４２）。そして、処理はステップＳ３４６へ進む。
【０４０８】
制御プログラム２が「実行中」状態である場合（ステップＳ３４０において「実行中」）には、マイクロプロセッサ１００は、制御プログラム２の未実行の部分の実行を開始する（ステップＳ３４４）。そして、処理はステップＳ３４６へ進む。
【０４０９】
制御プログラム２が「実行終了」状態である場合（ステップＳ３４０において「実行終了」）には、処理はステップＳ３００へ進む。
【０４１０】
ステップＳ３４２またはＳ３４４において、制御プログラム２の実行を開始（または、再開）すると、マイクロプロセッサ１００は、制御プログラム２の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ３４６）。
【０４１１】
制御プログラム２の実行終了通知を受けると（ステップＳ３４６において「実行終了通知」）、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定する（ステップＳ３４８）。そして、処理はステップＳ３００へ進む。
【０４１２】
一方、制御プログラム２の実行終了通知までに次の制御サイクル開始の割り込みを受けると（ステップＳ３４６において「制御サイクル開始」）、マイクロプロセッサ１００で実行中の制御プログラム２は中断され、マイクロプロセッサ１００は、ステップＳ３０２以下の処理を再度実行する。
【０４１３】
（ｏ４：まとめ）
上述したように、実施の形態１０においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）および（ｂ）の処理を含む。なお、入力データの受信は制御サイクルごとに実行される。
【０４１４】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図２６に示すステップＳ１）。
【０４１５】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする１つの入力同期バッファ（図２４に示す入力同期バッファ１および２）をメインメモリ１０４（記憶手段）内（図４に示す入力同期バッファ領域１０４２ｂ）に生成する処理（図２６に示すステップＳ１）。
【０４１６】
また、実施の形態１０においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｃ）または（ｄ）の処理を含む。
【０４１７】
（ｃ）  受信された入力データを、当該入力データが制御プログラムの実行サイクルが開始した制御サイクルと関係する受信タイミングにおいて受信されたことを条件として、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネ
ットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図２６に示すステップＳ３１０またはＳ３１２）。
【０４１８】
（ｄ）  制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる制御プログラム開始処理（図２６に示すステップＳ３２２またはＳ３４２）。
【０４１９】
上述のような実施の形態１０に係る入力データに関する処理方式によれば、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合に、制御プログラムの実行に使用する入力データを、制御プログラムの実行サイクルが開始する制御サイクルと関係する受信タイミングにおいて受信した入力データに統一することができる。
【０４２０】
なお、上述の「制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる」とは、実行サイクル時間が変動する場合を排除する意味ではなく、たとえば、制御プログラムがその実行サイクル内に終了しない場合に、１制御サイクル時間ずつ、実行サイクルを延長する場合を含んでいる。
【０４２１】
一方、実施の形態１０においては、システムプログラム２１０は、出力データの出力に関する処理を含めると、ＰＬＣ１の制御動作の実行準備処理として、以下の（α）〜（γ）の処理を含む。
【０４２２】
（α）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）および送信されるべき出力データを格納する送信バッファ（図４に示すＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５）をメインメモリ１０４（記憶手段）内に生成する処理（図２６に示すステップＳ１）。
【０４２３】
（β）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする１つの入力同期バッファ（図２４に示す入力同期バッファ１および２）をメインメモリ１０４（記憶手段）内（図４に示す入力同期バッファ領域１０４２ｂ）に生成する処理（図２６に示すステップＳ１）。
【０４２４】
（γ）  送信バッファにコピーされる出力データが格納される出力同期バッファ（図２５に示す出力同期バッファ１および２）を出力データごとにメインメモリ１０４（記憶手段）内（図４に示す出力同期バッファ領域１０４２ａ）に生成する処理（図２６に示すステップＳ１）。
【０４２５】
また、実施の形態１０においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（δ）〜（ζ）の処理を含む。
【０４２６】
（δ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図２６に示すステップＳ３１０またはＳ３１２）。
【０４２７】
（ε）  制御プログラムを実行開始させる制御プログラム開始処理（図２６に示すステップＳ３２２またはＳ３４２）。
【０４２８】
（ζ）  出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいてその出力データが送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーす
る出力コピー処理（図２６に示すステップＳ３０２またはＳ３０４）。
【０４２９】
上述のような実施の形態１０に係る出力データに関する処理方式によれば、制御プログラムの実行サイクルが複数の制御サイクルにわたる場合に、更新された出力データの送信タイミングを実行サイクル内の最後の制御サイクルと関係する送信タイミングに統一することができる。
【０４３０】
なお、出力データの送信が制御サイクルごとに行われる場合は、制御プログラムの実行サイクル内の最後の制御サイクルと関係する送信タイミング以外の送信タイミングにおいては、それ以前に更新されて送信バッファに格納されている出力データが繰り返し送信される。
【０４３１】
＜Ｐ．実行サイクル同期型更新フラグ型３バッファ入替方式（実施の形態１１）＞
（ｐ１：概要）
実施の形態１１ならびに後述する実施の形態１２および１３は、上述の実施の形態１０と同様に、実施の形態６〜９において説明した３バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
【０４３２】
（ｐ２：シーケンス図）
図２７は、実施の形態１１に係る入力方向の動作を示すシーケンス図である。図２８は、実施の形態１１に係る出力方向の動作を示すシーケンス図である。実施の形態１１における制御プログラム１および２は、実施の形態１０の図２４および図２５における制御プログラム１および２と同じプログラムであり、同様のスケジュールで実行されるが、図２７および図２８においては制御プログラム２のみを示し、制御プログラム１は図示しない。
【０４３３】
実施の形態１１に係る入力方向／出力方向の動作については、上述の実施の形態６および８における動作と共通する点も多いので、主として相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
【０４３４】
まず、図２７を参照して、実施の形態１１に係る入力方式について説明する。入力方式について、実施の形態６では、「制御プログラムの実行開始前に」、最新入力データ更新フラグがオンであれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新入力データ更新フラグをオフにする。
【０４３５】
これに対し、実施の形態１１では、「受信バッファから入力同期バッファに入力データをコピーした後に、制御プログラムの実行サイクル内の最初の制御サイクルであることを条件として」、最新入力データ更新フラグがオンであれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新入力データ更新フラグをオフにする。
【０４３６】
次に、図２８を参照して、実施の形態１１に係る出力方式について説明する。出力方式について、出力方式について、実施の形態８では、「制御サイクルが開始すると」、最新出力データ更新フラグがオンであれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新出力データ更新フラグをオフにする。
【０４３７】
これに対し、実施の形態１１では、「制御プログラムの実行サイクルが開始すると」、最新出力データ更新フラグがオンであれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替え、最新出力データ更新フラグをオフにする。
【０４３８】
（ｐ３：フローチャート）
図２９は、実施の形態１１に係る実行動作を示すフローチャートである。図２９においては、制御プログラム１に関する処理については記載しない。図２９を参照して、マイクロプロセッサ１００は、システムプログラムにおける、ＰＬＣ１の制御動作の実行準備処理を実行する（ステップＳ１）。続いて、マイクロプロセッサ１００は、システムプログラム２１０における、ＰＬＣ１の制御動作の実行制御処理を実行する（図５に示すステップＳ２）。このＰＬＣ１の制御動作の実行制御処理の詳細な一例がステップＳ３５０〜Ｓ３７６に相当する。
【０４３９】
まず、マイクロプロセッサ１００は、制御サイクル開始の割り込み信号を待つ（ステップＳ３５０）。制御サイクル開始の割り込み信号を受けると（ステップＳ３５０においてＹＥＳ）、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム２の実行状態を「実行前」状態に設定する（ステップＳ３５２）。
【０４４０】
続いて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、最新出力データ更新フラグ１がオンに設定されていれば、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定した上で、最新出力データ更新フラグ２をオンからオフに変更する（ステップＳ３５４）。このとき、最新出力データ更新フラグ２がオフであれば、出力同期バッファ２の「待機」状態および「参照先」状態は変更されず、最新出力データ更新フラグ２はオフのまま維持される。
【０４４１】
マイクロプロセッサ１００は、「参照先」状態の出力同期バッファ２に格納されている出力データを送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）にコピーする（ステップＳ３５６）。
【０４４２】
続いて、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）に対して送信実行を指示する（ステップＳ３５８）。送信実行の指示に応答して、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）に格納されているデータが他のユニットなどへ送信される。
【０４４３】
その後、マイクロプロセッサ１００は、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）からの受信完了通知を待つ（ステップＳ３６０）。
【０４４４】
通信回路からの受信完了通知を受けると（ステップＳ３６０においてＹＥＳ）、マイクロプロセッサ１００は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）にコピーするとともに、「書込先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定するとともに、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「書込先」状態に設定した上で、最新入力データ更新フラグ２をオフからオンに変更する（ステップＳ３６２）。
【０４４５】
続いて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、最新入力データ更新フラグ１がオンに設定されていれば
、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定した上で、最新入力データ更新フラグ２をオンからオフに変更する（ステップＳ３６４）。このとき、制御プログラム２の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ２の「参照先」状態および「待機」状態は変更されず、最新入力データ更新フラグ２はオフのまま維持される。
【０４４６】
その後、マイクロプロセッサ１００は、制御プログラム１についての処理を実行する（ステップＳ３６６）。ステップＳ３６６においてマイクロプロセッサ１００が制御プログラム１の実行を開始することで、マイクロプロセッサ１００で実行される処理は、システムプログラムによる処理から制御プログラム１による処理に切り替わる。すなわち、制御プログラム１の実行開始から実行終了するまでの間は、マイクロプロセッサ１００は、システムプログラムを実行しない。そして、制御プログラム１の実行が終了するまでに次の制御サイクル開始の割り込みがあれば、リアルタイムＯＳ２００が、マイクロプロセッサ１００での制御プログラム１の実行を中断させ、システムプログラムの実行を再開させる。あるいは、制御プログラム１の実行が終了した通知（制御プログラム１の実行終了通知）を受けて、制御プログラム１についての所定の処理を実行した後、処理はステップＳ３６８へ進む。
【０４４７】
ステップＳ３６８において、マイクロプロセッサ１００は、制御プログラム２の実行状態を判断する（ステップＳ３６８）。
【０４４８】
制御プログラム２が「実行前」状態である場合（ステップＳ３６８において「実行前」）には、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行中」に設定し、制御プログラム２の実行を開始する（ステップＳ３７０）。そして、処理はステップＳ３７４へ進む。
【０４４９】
制御プログラム２が「実行中」状態である場合（ステップＳ３６８において「実行中」）には、マイクロプロセッサ１００は、制御プログラム２の未実行の部分の実行を開始する（ステップＳ３７２）。そして、処理はステップＳ３７４へ進む。
【０４５０】
制御プログラム２が「実行終了」状態である場合（ステップＳ３６８において「実行終了」）には、処理はステップＳ３５０へ進む。
【０４５１】
ステップＳ３７０またはＳ３７２において、制御プログラム２の実行を開始（または、再開）すると、マイクロプロセッサ１００は、制御プログラム２の実行終了通知、または、次の制御サイクル開始の割り込み信号を待つ（ステップＳ３７４）。
【０４５２】
制御プログラム２の実行終了通知を受けると（ステップＳ３７４において「実行終了通知」）、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定し、演算用バッファ２に格納されている出力データを、「書込先」状態の出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「書込先」状態に設定した上で、最新出力データ更新フラグ２をオフからオンに変更する（ステップＳ３７６）。そして、処理はステップＳ３５０へ進む。
【０４５３】
一方、制御プログラム２の実行終了通知までに次の制御サイクル開始の割り込みを受け
ると（ステップＳ３７４において「制御サイクル開始」）、マイクロプロセッサ１００で実行中の制御プログラム２は中断され、マイクロプロセッサ１００は、ステップＳ３５２以下の処理を再度実行する。
【０４５４】
（ｐ４：まとめ）
実施の形態１１によれば、ＰＬＣのシステムプログラムが実施の形態６〜９に示す３バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
【０４５５】
＜Ｑ．実行サイクル同期型最新データ型３バッファ入替方式（実施の形態１２）＞
（ｑ１：概要）
上述したように、実施の形態１２は、実施の形態６〜９において説明した３バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
【０４５６】
（ｑ２：シーケンス図）
実施の形態１２に係る入力方向／出力方向の動作については、上述の実施の形態７および９における動作と共通する点も多いので、主として相違点について説明し、その他の共通な部分についての詳細な説明は繰り返さない。
【０４５７】
まず、図２７を参照して、実施の形態１２に係る入力方式について説明する。入力方式について、実施の形態７では、「制御プログラムの実行開始前に」、「最新」状態の入力同期バッファが「待機」状態であれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替える。
【０４５８】
これに対し、実施の形態１１では、「受信バッファから入力同期バッファに入力データをコピーした後に、制御プログラムの実行サイクル内の最初の制御サイクルであることを条件として」、「最新」状態の入力同期バッファが「待機」状態であれば、入力同期バッファの「待機」状態と「参照」状態とを入れ替える。
【０４５９】
次に、図２８を参照して、実施の形態１２に係る出力方式について説明する。出力方式について、実施の形態９では、「制御サイクルが開始すると」、「最新」状態の出力同期バッファが「待機」状態であれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替える。
【０４６０】
これに対し、実施の形態１１では、「制御プログラムの実行サイクルが開始すると」、「最新」状態の出力同期バッファが「待機」状態であれば、出力同期バッファの「待機」状態と「参照」状態とを入れ替える。
【０４６１】
（ｑ３：フローチャート）
図３０は、実施の形態１２に係る実行動作を示すフローチャートである。図３０においても、制御プログラム１に関する処理については記載しない。
【０４６２】
図３０に示すフローチャートは、図２９に示すフローチャートと比較して、ステップＳ３５４，Ｓ３６２，Ｓ３６４，Ｓ３７６に代えて、それぞれステップＳ３５４Ａ，Ｓ３６２Ａ，Ｓ３６４Ａ，Ｓ３７６Ａの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０４６３】
ステップＳ３５２に続いて実行されるステップＳ３５４Ａにおいて、マイクロプロセッ
サ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、「最新」状態の出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）が「待機」状態に設定されていれば、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定する（ステップＳ３５４Ａ）。
【０４６４】
このとき、「最新」状態の出力同期バッファ２が「参照先」状態であれば、出力同期バッファ２の「待機」状態および「参照先」状態は変更されず、そのまま維持される。
【０４６５】
通信回路からの受信完了通知を受けた場合（ステップＳ３６０においてＹＥＳ）に実行されるステップＳ３６２Ａにおいて、マイクロプロセッサ１００は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）にコピーするとともに、「書込先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定するとともに「最新」状態にも設定し、さらに、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「書込先」状態に設定する（ステップＳ３６２Ａ）。
【０４６６】
ステップＳ３６２Ａに続いて実行されるステップＳ３６４Ａにおいて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、「最新」状態の出力同期バッファ２が「待機」状態に設定されていれば、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定する（ステップＳ３６４Ａ）。このとき、制御プログラム２の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ２の「参照先」状態および「待機」状態は変更されず、そのまま維持される。
【０４６７】
制御プログラム２の実行終了通知を受けた場合（ステップＳ３７４において「実行終了通知」）において実行させるステップＳ３７６Ａにおいて、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定し、演算用バッファ２に格納されている出力データを、「書込先」状態の出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定するとともに「最新」状態にも設定し、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「書込先」状態に設定する（ステップＳ３７６Ａ）。
【０４６８】
（ｑ４：まとめ）
実施の形態１２によれば、ＰＬＣのシステムプログラムが実施の形態６〜９に示す３バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
【０４６９】
＜Ｒ．実行サイクル同期型更新確認省略型３バッファ入替方式（実施の形態１３）＞
（ｒ１：概要）
上述したように、実施の形態１３は、実施の形態６〜９において説明した３バッファ入替方式を応用して、制御プログラムの実行サイクルに同期して実効的な入力データの受信および出力データの送信を実現する形態である。
【０４７０】
（ｒ２：シーケンス図）
実施の形態１３に係る入力方向の動作を示すシーケンス図は、上述の実施の形態１１に係る入力方向の動作を示す図２７と実質的に同一である。また、実施の形態１３に係る出力方向の動作を示すシーケンス図は、上述の実施の形態１１に係る出力方向の動作を示す図２８と実質的に同一である。
【０４７１】
上述の実施の形態１１においては、最新入力データ更新フラグおよび最新出力データ更新フラグを用いて、入力データおよび出力データの更新をそれぞれ確認する。また、上述の実施の形態１２においては、入力同期バッファおよび出力同期バッファのそれぞれの最新状態を用いて、入力データおよび出力データの更新をそれぞれ確認する。
【０４７２】
しかしながら、少なくとも、制御プログラムの実行サイクル内の最初の制御サイクルにおいて入力データの受信と入力同期バッファへのコピーとが確実に行われるのであれば、入力データの更新確認は省略できる。また、制御プログラムの実行サイクルごとに出力データの生成と出力同期バッファへのコピーとが確実に行われるのであれば、出力データの更新は省略できる。
【０４７３】
そこで、実施の形態１３においては、入力データおよび出力データの更新確認を省略する形態を採用している。
【０４７４】
なお、実行サイクル冒頭の制御サイクルで必ず入力データの受信があり、かつ、実行サイクル中（実行サイクルの延長中含む）に必ず出力データが生成される、という前提が必ずしも成り立たない場合には、実施の形態１１または１２に示すような、入力データおよび出力データの更新確認を行う形態が有用である。
【０４７５】
（ｒ３：フローチャート）
図３１は、実施の形態１３に係る実行動作を示すフローチャートである。図３１においても、制御プログラム１に関する処理については記載しない。
【０４７６】
図３１に示すフローチャートは、図２９に示すフローチャートと比較して、ステップＳ３５４，Ｓ３６２，Ｓ３６４，Ｓ３７６に代えて、それぞれステップＳ３５４Ｂ，Ｓ３６２Ｂ，Ｓ３６４Ｂ，Ｓ３７６Ｂの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。
【０４７７】
ステップＳ３５２に続いて実行されるステップＳ３５４Ｂにおいて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定する（ステップＳ３５４Ｂ）。
【０４７８】
通信回路からの受信完了通知を受けた場合（ステップＳ３６０においてＹＥＳ）に実行されるステップＳ３６２Ｂにおいて、マイクロプロセッサ１００は、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）に格納されている入力データを、「書込先」状態の入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）にコピーするとともに、「書込先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定し、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「書込先」状態に設定する（ステップＳ３６２Ｂ）。
【０４７９】
ステップＳ３６２Ｂに続いて実行されるステップＳ３６４Ｂにおいて、マイクロプロセッサ１００は、制御プログラム２の実行サイクルが現在の制御サイクルから開始する場合には、「待機」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「参照先」状態に設定するとともに、「参照先」状態であった入力同期バッファ２（入力同期バッファ２Ａ，２Ｂ，２Ｃのいずれか）を「待機」状態に設定する（ステップＳ３６４Ｂ）。このとき、制御プログラム２の実行サイクルが現在の制御サイクルから開始していなければ、入力同期バッファ２の「参照先」状態および「待機」状態は変更されず、そのまま維持される。
【０４８０】
制御プログラム２の実行終了通知を受けた場合（ステップＳ３７４において「実行終了通知」）において実行させるステップＳ３７６Ｂにおいて、マイクロプロセッサ１００は、制御プログラム２の実行状態を「実行終了」に設定し、演算用バッファ２に格納されている出力データを、「書込先」状態の出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）にコピーした上で、「書込先」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「待機」状態に設定するとともに、「待機」状態であった出力同期バッファ２（出力同期バッファ２Ｄ，２Ｅ，２Ｆのいずれか）を「書込先」状態に設定する（ステップＳ３７６Ｂ）。
【０４８１】
（ｒ４：まとめ）
上述したように、実施の形態１３においては、システムプログラム２１０は、入力データの入力に関するＰＬＣ１の制御動作の実行準備処理として、以下の（ａ）および（ｂ）の処理を含む。なお、入力データの受信は制御サイクルごとに実行される。
【０４８２】
（ａ）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）をメインメモリ１０４（記憶手段）内に生成する処理（図３１に示すステップＳ１）。
【０４８３】
（ｂ）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする、第１入力同期バッファ、第２入力同期バッファおよび第３入力同期バッファ（図２７に示す入力同期バッファ２Ａ，２Ｂ，２Ｃ）を入力同期バッファの組としてメインメモリ１０４（記憶手段）内に生成する処理（図３１に示すステップＳ１）。第１入力同期バッファ、第２入力同期バッファ、および第３入力同期バッファは、受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４および／またはフィールドネットワーク受信バッファ１０４６）から入力データをコピー可能な状態である「書込先」状態、制御プログラムから参照可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
【０４８４】
また、実施の形態１３においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（ｃ）〜（ｅ）の処理を含む。
【０４８５】
（ｃ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する「書込先」状態である入力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である入力同期バッファ、および、その入力同期バッファと同じ組の中で「待機」状態である入力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第１入替処理を実行する入力コピー処理（図３１に示すステップＳ３６２Ｂ）。
【０４８６】
（ｄ）  制御プログラムの実行サイクルが開始した制御サイクルであることを条件とし
て、「待機」状態である入力同期バッファ、および、「参照先」状態である入力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第２入替処理を実行する実行サイクル入力初期処理（図３１に示すステップＳ３６４Ｂ）。
【０４８７】
（ｅ）  制御プログラムを制御サイクルの整数倍の実行サイクルごとに実行開始させる制御プログラム開始処理（図３１に示すステップＳ３７０）。
【０４８８】
一方、実施の形態１３においては、システムプログラム２１０は、出力データの出力に関する処理を含めると、ＰＬＣ１の制御動作の実行準備処理として、以下の（α）〜（γ）の処理を含む。
【０４８９】
（α）  受信された入力データを格納する受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）および送信されるべき出力データを格納する送信バッファ（図４に示すＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５）をメインメモリ１０４（記憶手段）内に生成する処理（図３１に示すステップＳ１）。
【０４９０】
（β）  制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファ（図２７に示す入力同期バッファ２Ａ，２Ｂ，２Ｃ）をメインメモリ１０４（記憶手段）内（図４に示す入力同期バッファ領域１０４２ｂ）に生成する処理（図３１に示すステップＳ１）。
【０４９１】
（γ）  送信バッファにコピーされる出力データが格納される、第１出力同期バッファ、第２出力同期バッファおよび第３出力同期バッファ（図２８に示す出力同期バッファ２Ｄ，２Ｅ，２Ｆ）を出力同期バッファの組としてメインメモリ１０４（記憶手段）内（図４に示す出力同期バッファ領域１０４２ａ）に生成する処理（図３１に示すステップＳ１）。第１出力同期バッファ、第２出力同期バッファ、および第３出力同期バッファは、演算用バッファから出力データをコピー可能な状態である「書込先」状態、送信バッファにコピーするための参照が可能な状態である「参照先」状態、および、「待機」状態のいずれかの状態が重複せずに付与される。
【０４９２】
また、実施の形態１３においては、システムプログラム２１０は、ＰＬＣ１の制御動作の実行制御処理として、以下の（δ）〜（ζ）の処理を含む。
【０４９３】
（δ）  受信された入力データを受信バッファ（図４に示すＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６）からその入力データに対応する入力同期バッファにコピーする入力コピー処理（図３１に示すステップＳ３６２Ｂ）。
【０４９４】
（ε）  制御プログラムを実行開始させる制御プログラム開始処理（図３１に示すステップＳ３７０）。
【０４９５】
（ζ）  制御プログラムの実行が終了すると、その制御プログラムの実行により生成された出力データを演算用バッファから「書込先」状態である出力同期バッファにコピーし、さらに、コピー先となった「書込先」状態である出力同期バッファ、および、その出力同期バッファと同じ組の中で「待機」状態である出力同期バッファについて、「書込先」状態と「待機」状態とを入れ替える第４入替処理を実行する出力同期バッファ格納処理（図３１に示すステップＳ３７６Ｂ）。
【０４９６】
（η）  各制御サイクルの開始後、送信バッファからの出力データの送信までの間に、
出力データを「参照先」状態である出力同期バッファから送信バッファにコピーし、さらに、制御プログラムの実行サイクルが開始した制御サイクルであることを条件として、送信バッファへのコピーを実行するより前に、「待機」状態である出力同期バッファ、および、「参照先」状態である出力同期バッファについて、「待機」状態と「参照先」状態とを入れ替える第５入替処理を実行し、それにより、出力データを、その出力データを生成した制御プログラムが実行された実行サイクルの次の実行サイクルの最初の制御サイクルにおいて送信バッファから送信されることになるタイミングで、出力同期バッファから送信バッファにコピーする、出力コピー処理（図３１に示すステップＳ３５４ＢおよびＳ３５６）。
【０４９７】
実施の形態１３によれば、ＰＬＣのシステムプログラムが実施の形態６〜９に示す３バッファ方式を採用している場合に、アルゴリズムのわずかな変更で、制御プログラムの実行サイクルに同期した入力データの受信および出力データの送信を実現することができる。
【０４９８】
＜Ｓ．サポート装置＞
次に、ＰＬＣ１で実行されるプログラムの作成およびＰＬＣ１のメンテナンスなどを行うためのＰＬＣサポート装置８について説明する。
【０４９９】
図３２は、本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置８のハードウェア構成を示す模式図である。図３２を参照して、ＰＬＣサポート装置８は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
【０５００】
図３２を参照して、ＰＬＣサポート装置８は、ＯＳを含む各種プログラムを実行するＣＰＵ８１と、ＢＩＯＳや各種データを格納するＲＯＭ（Read Only Memory）８２と、ＣＰＵ８１でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリＲＡＭ８３と、ＣＰＵ８１で実行されるプログラムなどを不揮発的に格納するハードディスク（ＨＤＤ）８４とを含む。
【０５０１】
ＰＬＣサポート装置８は、さらに、ユーザからの操作を受付けるキーボード８５およびマウス８６と、情報をユーザに提示するためのモニタ８７とを含む。さらに、ＰＬＣサポート装置８は、ＰＬＣ１（ＣＰＵユニット１３）などと通信するための通信インターフェイス（ＩＦ）８９を含む。
【０５０２】
後述するように、ＰＬＣサポート装置８で実行される各種プログラムは、ＣＤ−ＲＯＭ９に格納されて流通する。このＣＤ−ＲＯＭ９に格納されたプログラムは、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）ドライブ８８によって読取られ、ハードディスク（
ＨＤＤ）８４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【０５０３】
上述したように、ＰＬＣサポート装置８は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。
【０５０４】
図３３は、本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置８のソフトウェア構成を示す模式図である。図３３を参照して、ＰＬＣサポート装置８ではＯＳ３１０が実行され、ＰＬＣサポートプログラム３２０に含まれる各種のプログラムを実行可能な環境が提供される。
【０５０５】
ＰＬＣサポートプログラム３２０は、エディタプログラム３２１と、コンパイラプログ
ラム３２２と、デバッガプログラム３２３と、シミュレーション用シーケンス命令演算プログラム３２４と、シミュレーション用モーション演算プログラム３２５と、通信プログラム３２６とを含む。ＰＬＣサポートプログラム３２０に含まれるそれぞれのプログラムは、典型的には、ＣＤ−ＲＯＭ９に格納された状態で流通して、ＰＬＣサポート装置８にインストールされる。
【０５０６】
エディタプログラム３２１は、ユーザプログラム２３６を作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム３２１は、ユーザがキーボード８５やマウス８６を操作してユーザプログラム２３６のソースプログラム３３０を作成する機能に加えて、作成したソースプログラム３３０の保存機能および編集機能を提供する。また、エディタプログラム３２１は、外部からの制御プログラム２３０（その中でも特に、ユーザプログラム２３６）のソースプログラムを入力し、またユーザの操作により既存の制御プログラム２３０のソースプログラムを編集する。
【０５０７】
コンパイラプログラム３２２は、制御プログラム２３０のソースプログラムをコンパイルして、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式のユーザプログラム２３６を生成する機能を提供する。また、コンパイラプログラム３２２は、ソースプログラム３３０をコンパイルして、ＰＬＣサポート装置８のＣＰＵ８１で実行可能なオブジェクトプログラム形式のユーザプログラム３４０を生成する機能を提供する。このユーザプログラム３４０は、ＰＬＣサポート装置８によってＰＬＣ１の動作をシミュレート（模擬）するために使用される、シミュレーション用のオブジェクトプログラムである。
【０５０８】
デバッガプログラム３２３は、制御プログラム２３０のソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。
【０５０９】
デバッガプログラム３２３は、さらに、制御プログラム２３０のシミュレーション用のオブジェクトプログラムを実行する機能を提供する。このシミュレーション時には、ＣＰＵユニット１３のシステムプログラムに含まれるシーケンス命令演算プログラム２３２およびモーション演算プログラム２３４に代えて、ＰＬＣサポートプログラム３２０に含まれるシミュレーション用シーケンス命令演算プログラム３２４およびシミュレーション用モーション演算プログラム３２５が用いられる。
【０５１０】
通信プログラム３２６は、ＰＬＣ１のＣＰＵユニット１３へ制御プログラム２３０のＣＰＵユニット１３用のオブジェクトプログラムを転送する機能を提供する。
【０５１１】
一般的には、ＰＬＣ１に実装されるシステムプログラム２１０は、ＣＰＵユニット１３の製造段階でＣＰＵユニット１３の不揮発性メモリ１０６へ格納される。但し、ＣＤ−ＲＯＭ９にシステムプログラム２１０を格納しておけば、ユーザは、ＣＤ−ＲＯＭ９のシステムプログラム２１０をＰＬＣサポート装置８にコピーし、通信プログラム３２６が提供する機能を利用してコピーしたシステムプログラム２１０をＣＰＵユニット１３へ転送することもできる。さらに、ＣＤ−ＲＯＭ９に、ＰＬＣ１のＣＰＵユニット１３で実行されるリアルタイムＯＳ２００を格納しておけば、リアルタイムＯＳ２００についてもユーザ操作によってＰＬＣ１へ再インストールできる。
【０５１２】
＜Ｔ．その他の形態＞
上述した図１３，１５，１８，２１に示すシーケンス図は、ＰＬＣにマルチコアのマイクロプロセッサを用いた場合の動作態様の一例を示す。
【０５１３】
例えば、第１コアおよび第２コアを有するマイクロプロセッサを用いると、第１コアが実行する入出力処理と第２コアが実行する制御プログラムとを並列実行することが実装上は可能となる。しかしながら、ＰＬＣで実行される制御プログラムは、受信された入力データを使用し、送信すべき出力データを生成するから、入出力処理と制御プログラムとは交互に実行されることが基本的な動作態様である。また、入出力処理は、制御サイクルごとになるべく一定の周期で実行することが好ましい。
【０５１４】
このようなＰＬＣで実行される制御プログラムに関する制約は、マルチコアのマイクロプロセッサを用いた場合でも変わらない。そのため、マルチコアのマイクロプロセッサを用いた場合であっても、第１コアが実行する入出力処理と第２コアが実行する制御プログラムとを常に並列実行すると、制御動作に役立たない無駄な動作が多くなる。
【０５１５】
一方、制御プログラムの実行時間は、入力データの内容などの条件によって変動するので、制御サイクルの周期が制御プログラムの平均実行時間より少し長い程度に設定されていると、入出力処理の終了後に実行開始した制御プログラムが次の入出力処理の開始までに終了しないことがある。
【０５１６】
このような場合に、シングルコアのマイクロプロセッサを用いる場合は、以下のような対処が考えられる。
【０５１７】
・制御プログラムの実行が終了するまでその制御サイクルを延長する（この場合、入出力処理の周期が乱れる）。
【０５１８】
・制御プログラムの実行を中断して入出力処理を行い、その後に、制御プログラムの実行を再開する（再開した制御サイクルで新たに実行開始されるはずであった制御プログラムの実行はキャンセルされる）。
【０５１９】
これに対して、マルチコアのマイクロプロセッサを用いる場合は、入出力処理と制御プログラムとを並列実行が可能であることを利用して、制御サイクル内に制御プログラムの実行が終了しなくてもそのまま実行を継続し、次の制御サイクルにおいて実行が終了すれば、引き続き、制御プログラムの新たな実行を開始することが可能である。このような思想を具現化したものが、図１３などに示す動作態様である。
【０５２０】
このような動作態様を有するＰＬＣは、以下のように表現することができる。すなわち、制御対象を制御するＰＬＣのＣＰＵユニットであって、マイクロプロセッサと、記憶手段と、通信回路とを含む。このＰＬＣのＣＰＵユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。記憶手段は、制御プログラムおよびシステムプログラムの格納に用いられる。マイクロプロセッサは、少なくとも、第１コアおよび第２コアを有する。通信回路は、出力データを送信し、および、入力データを受信する。システムプログラムは、マイクロプロセッサのいずれかのコアにおいて実行される。システムプログラムは、第１コアおよび第２コアを以下のように動作させるための処理を含む。すなわち、第１コアが、制御サイクルごとに、制御プログラムが生成した出力データを送信可能にし、および受信された入力データを制御プログラムが利用することを可能にすることを含む入出力処理の実行を制御する。第２コアが、（１）第１制御サイクルにおける入出力処理の実行終了後に制御プログラムの第１実行を開始し、（２）第１制御サイクルの次の第２制御サイクルにおける入出力処理の実行終了までに制御プログラムの第１実行が終了すれば、第２制御サイクルにおける入出力処理の実行終了後に制御プログラムの第２実行を開始し、（３）第２制御サイクルにおける入出力処理の実行
終了までに制御プログラムの第１実行が終了しなければ、制御プログラムの第１実行の終了後に、第２制御サイクルの次の第３制御サイクルにおける入出力処理の実行終了を待つことなく制御プログラムの第２実行を開始する。
【０５２１】
このようなＰＬＣによれば、第１制御サイクルで第１実行を開始した制御プログラムの実行が第２制御サイクルにおける入出力処理の開始までに終了しなくても、その入出力処理の終了までに制御プログラムの第１実行が終了する可能性がある。その場合には、その入出力処理の終了を待って新たに実行開始する制御プログラムは新たな入力データを使用することができる。
【０５２２】
また、第１制御サイクルで第１実行を開始した制御プログラムの実行が第２制御サイクルにおける入出力処理の終了までに終了しない場合には、制御プログラムの第２実行の開始が遅れるが、制御プログラムの平均実行時間が入出力処理の終了から次回の開始までの時間より短ければ、数回の制御サイクルの間に、入出力処理の終了に続いて制御プログラムの実行を開始するという状態に戻ることができる可能性が高い。それまでの間も、ＰＬＣは、可能な限り新しく受信された入力データが制御プログラムに使用され、可能な限り新しく生成された出力データが送信される状態で動作することができる。
【０５２３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０５２４】
１  ＰＬＣ、２  フィールドネットワーク、３  サーボモータドライバ、４  サーボモータ、５  リモートＩＯターミナル、６  検出スイッチ、７  リレー、８  ＰＬＣサポート装置、９  ＣＤ−ＲＯＭ、１０  接続ケーブル、１１  ＰＬＣシステムバス、１２  電源ユニット、１３  ＣＰＵユニット、１４，５３  ＩＯユニット、１５  特殊ユニット、５１  ターミナルバス、５２  通信カプラ、８１  ＣＰＵ、８３  ＲＡＭ、８５  キーボード、８６  マウス、８７  モニタ、８８  ドライブ、１００  マイクロプロセッサ、１０２  チップセット、１０４  メインメモリ、１０６  不揮発性メモリ、１０８  システムタイマ、１１０  ＵＳＢコネクタ、１２０  ＰＬＣシステムバスコントローラ、１２２
ＤＭＡ制御回路、１２４  ＰＬＣシステムバス制御回路、１２６，１４６  バッファメモリ、１３０  コネクタ、１４０  フィールドネットワークコントローラ、１４２  ＤＭＡ制御回路、１４４  フィールドネットワーク制御回路、２００  リアルタイムＯＳ、２１０，２２０  システムプログラム、２１２  スケジューラプログラム、２１４  出力処理プログラム、２１６  入力処理プログラム、２１８  ＩＯ処理プログラム、２３０  制御プログラム、２３２  シーケンス命令演算プログラム、２３４  モーション演算プログラム、２３６，３４０  ユーザプログラム、３２０  サポートプログラム、３２１  エディタプログラム、３２２  コンパイラプログラム、３２３  デバッガプログラム、３２４
シミュレーション用シーケンス命令演算プログラム、３２５  シミュレーション用モーション演算プログラム、３２６  通信プログラム、３３０  ソースプログラム、１０４１
プログラム領域、１０４２  制御プログラムの作業領域、１０４２ａ  出力同期バッファ領域、１０４２ｂ  入力同期バッファ領域、１０４３  ＰＬＣシステムバス送信バッファ、１０４４  ＰＬＣシステムバス受信バッファ、１０４５  フィールドネットワーク送信バッファ、１０４６  フィールドネットワーク受信バッファ、ＳＹＳ  システム。
【図１】
0005845629.tif 000002
【図２】
0005845629.tif 000003
【図３】
0005845629.tif 000004
【図４】
0005845629.tif 000005
【図５】
0005845629.tif 000006
【図６】
0005845629.tif 000007
【図７】
0005845629.tif 000008
【図８】
0005845629.tif 000009
【図９】
0005845629.tif 000010
【図１０】
0005845629.tif 000011
【図１１】
0005845629.tif 000012
【図１２】
0005845629.tif 000013
【図１３】
0005845629.tif 000014
【図１４】
0005845629.tif 000015
【図１５】
0005845629.tif 000016
【図１６】
0005845629.tif 000017
【図１７】
0005845629.tif 000018
【図１８】
0005845629.tif 000019
【図１９】
0005845629.tif 000020
【図２０】
0005845629.tif 000021
【図２１】
0005845629.tif 000022
【図２２】
0005845629.tif 000023
【図２３】
0005845629.tif 000024
【図２４】
0005845629.tif 000025
【図２５】
0005845629.tif 000026
【図２６】
0005845629.tif 000027
【図２７】
0005845629.tif 000028
【図２８】
0005845629.tif 000029
【図２９】
0005845629.tif 000030
【図３０】
0005845629.tif 000031
【図３１】
0005845629.tif 000032
【図３２】
0005845629.tif 000033
【図３３】
0005845629.tif 000034