(57)【要約】【課題】ＰＬＣにおいて、グローバル変数の一貫性を確保するための手続の処理を制御プログラム自身が行うことを必要とせず、複数の制御プログラムの並行実行が妨げられることもなく、複数の制御プログラムが一貫性の確保されたグローバル変数を参照できるようにする。【解決手段】システムプログラムは、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを含む。【選択図】図５
2012194666.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御するＰＬＣのＣＰＵユニットであって、
マイクロプロセッサと、
記憶手段と、
通信回路と、を備え、
前記ＰＬＣのＣＰＵユニットは、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって前記制御対象を制御するように構成されており、
前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御するシステムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、
前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、
前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、
前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、
前記システムプログラムは、前記制御プログラムの実行準備処理として、
グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、
各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを含み、
前記システムプログラムは、前記制御プログラムの実行制御処理として、
オーナー側制御プログラムを実行開始させるオーナー側開始処理と、
オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、
リファラ側制御プログラムを実行開始させるリファラ側開始処理とを含む、ＰＬＣのＣＰＵユニット。
【請求項２】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第１同期バッファおよび前記第２同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項１に記載のＰＬＣのＣＰＵユニット。
【請求項３】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第１同期バッファと、前記第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理であり、
前記第１同期バッファ、前記第２同期バッファおよび前記第３同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含み、
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む、請求項２に記載のＰＬＣのＣＰＵユニット。
【請求項４】
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを前記記憶手段内に生成する処理を含み、
前記コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含み、
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、前記第２入替処理および当該最新データ更新フラグをオフにする処理を含み、
それにより、最新データを格納している同期バッファが前記待機状態であることを条件として実行する前記第２入替処理を実現する、請求項３に記載のＰＬＣのＣＰＵユニット。
【請求項５】
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、
前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファが前記待機状態であることを条件として実行される前記第２入替処理を含む、請求項３に記載のＰＬＣのＣＰＵユニット。
【請求項６】
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む、請求項２に記載のＰＬＣのＣＰＵユニット。
【請求項７】
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを前記記憶手段内に生成する処理を含み、
前記コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含み、
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、前記第３入替処理および当該最新データ更新フラグをオフにする処理を含み、
それにより、最新データを格納している同期バッファが前記書込先状態であることを条件として実行される前記第３入替処理を実現する、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項８】
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、
前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファが前記書込先状態であることを条件として実行される前記第３入替処理を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項９】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、
前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項１に記載のＰＬＣのＣＰＵユニット。
【請求項１０】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第１同期バッファ、前記第２同期バッファおよび第３同期バッファを同期バッファの組として生成する処理であり、
前記第１同期バッファ、前記第２同期バッファおよび前記第３同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、前記書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含み、
前記リファラ側開始処理は、さらに、前記参照先状態とする同期バッファと同じ組に属する同期バッファであって前記書込先状態でない同期バッファを前記待機状態とする処理を含む、請求項９に記載のＰＬＣのＣＰＵユニット。
【請求項１１】
前記第１同期バッファおよび前記第２同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、前記参照先状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、前記書込先状態である同期バッファにコピーする処理であり、
前記リファラ側開始処理は、さらに、前記参照先状態とする同期バッファと同じ組に属する他方の同期バッファを前記書込先状態とする処理を含む、請求項９に記載のＰＬＣのＣＰＵユニット。
【請求項１２】
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファを書込禁止状態とする処理を含み、
前記システムプログラムは、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を含み、
前記コピー処理は、前記第１同期バッファおよび前記第２同期バッファのうち前記書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理である、請求項９に記載のＰＬＣのＣＰＵユニット。
【請求項１３】
前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、
前記システムプログラムは、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を含み、
前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項１に記載のＰＬＣのＣＰＵユニット。
【請求項１４】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、１つの同期バッファを生成する処理である、請求項１３に記載のＰＬＣのＣＰＵユニット。
【請求項１５】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、
前記コピー処理は、前記第１同期バッファおよび第２同期バッファのうち前記書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項１３に記載のＰＬＣのＣＰＵユニット。
【請求項１６】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、
前記コピー処理は、前記第１同期バッファにコピーする処理であり、
前記リファラ側開始処理は、さらに、前記第１同期バッファに格納されているデータを前記第２同期バッファにコピーする処理を含む、請求項１に記載のＰＬＣのＣＰＵユニット。
【請求項１７】
マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムであって、
前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御する前記システムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、
前記マイクロプロセッサは、前記システムプログラムに加えて、前記制御プログラムを実行し、
前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、
前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、
グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、
各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを実行させ、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、
オーナー側制御プログラムを実行開始させるオーナー側開始処理と、
オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、
リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる、ＰＬＣ用のシステムプログラム。
【請求項１８】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第１同期バッファおよび前記第２同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項１７に記載のＰＬＣ用のシステムプログラム。
【請求項１９】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第１同期バッファと、前記第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理であり、
前記第１同期バッファ、前記第２同期バッファおよび前記第３同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含み、
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む、請求項１８に記載のＰＬＣ用のシステムプログラム。
【請求項２０】
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む、請求項１８に記載のＰＬＣ用のシステムプログラム。
【請求項２１】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を実行させ、
前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項１７に記載のＰＬＣ用のシステムプログラム。
【請求項２２】
前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を実行させ、
前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項１７に記載のＰＬＣ用のシステムプログラム。
【請求項２３】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、
前記コピー処理は、前記第１同期バッファにコピーする処理であり、
前記リファラ側開始処理は、さらに、前記第１同期バッファに格納されているデータを前記第２同期バッファにコピーする処理を含む、請求項１７に記載のＰＬＣ用のシステムプログラム。
【請求項２４】
マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体であって、
前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御する前記システムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、
前記マイクロプロセッサは、前記システムプログラムに加えて、前記制御プログラムを実行し、
前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、
前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、
グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、
各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを実行させ、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、
オーナー側制御プログラムを実行開始させるオーナー側開始処理と、
オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、
リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる、ＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２５】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第１同期バッファおよび前記第２同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項２４に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２６】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第１同期バッファと、前記第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理であり、
前記第１同期バッファ、前記第２同期バッファおよび前記第３同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、
前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含み、
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む、請求項２５に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２７】
前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む、請求項２５に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２８】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を実行させ、
前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、
前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項２４に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２９】
前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、
前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を実行させ、
前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項２４に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項３０】
前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理であり、
前記第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、
前記コピー処理は、前記第１同期バッファにコピーする処理であり、
前記リファラ側開始処理は、さらに、前記第１同期バッファに格納されているデータを前記第２同期バッファにコピーする処理を含む、請求項２４に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械、設備などの動作を制御するために用いられるＰＬＣ（Programmable Logic Controller。プログラマブルコントローラともよばれる。）において、複数の制御プログラムを実行する場合のグローバル変数の同期に関する。
【背景技術】
【０００２】
ＰＬＣは、たとえば、制御プログラムを実行するマイクロプロセッサを備えるＣＰＵ（Central Processing Unit）ユニット、外部のスイッチやセンサからの信号入力および外部のリレーやアクチュエータへの信号出力を担当するＩＯ（Input Output）ユニットなどの複数のユニットで構成される。ＣＰＵユニットは、他のユニットへの出力データの送信と、他のユニットからの入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する。制御プログラムは、ユーザにおける制御目的に応じて作成されるユーザプログラムを含む。制御プログラムは、ユーザプログラムの中で実行が指示されるモーション制御プログラムを含んでいてもよい。
【０００３】
ＰＬＣにおいて、複数の制御プログラムを時分割で実行することが知られている。
たとえば、特許文献１（特開２００７−１４０６５５号公報）には、モータを制御するモーション制御機能とシーケンス演算を実行するＰＬＣ機能とを１つのＣＰＵで処理する装置において、基本クロックの１サイクルごとに、「定周期モーション制御処理および各軸処理」と「高速シーケンス処理」とを実行し、さらに各基本クロックサイクル内の残りの時間において、「低速シーケンス処理」または「非定周期モーション制御処理」を実行することが記載されている。また、低速シーケンス処理が基本クロックサイクル内に終了しない場合は、所定の基本クロック回数分の時間の停止後に残りの処理を実行することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１４０６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＰＬＣにおいて複数の制御プログラムを実行する場合に、各制御プログラムが自己の処理のみに使用するローカル変数のほかに、複数の制御プログラムから参照されるグローバル変数が必要となることがある。
【０００６】
１つの制御プログラムが実行を開始してから終了するまでの間、その制御プログラムは、自らグローバル変数の内容を書き換えるのでない限り、同一のグローバル変数を何回参照しても同一の内容を得られるべきである。しかし、その制御プログラムの実行開始から終了までの間に、他の制御プログラムがグローバル変数の内容を書き換えてしまうと、その制御プログラムはグローバル変数を用いた一貫性のある演算ができなくなる。
【０００７】
このような場合に、制御プログラム自身が、グローバル変数を使用する前にグローバル変数の内容を自己のローカル変数にコピーし、実際の演算はローカル変数を参照して行うことが考えられる。あるいは、グローバル変数を書き換えるときは、他の制御プログラムにとって書き換えが不都合でないタイミングまで待ってから書き換えを実行することが考えられる。そうするためには、そのような処理が行われるように、制御プログラムの作成者が、グローバル変数使用上の手続を決めて、それにしたがってプログラミングしなければならず、制御プログラムの作成者にとっての負担となる。
【０００８】
ＰＬＣのシステムプログラムが、グローバル変数を使用する１つの制御プログラムが実行を開始してから終了するまでの間、他の制御プログラムが当該グローバル変数を使用できないようにする排他制御を行えば、制御プログラムの演算の一貫性は確保される。しかし、排他制御を行えば、グローバル変数へのアクセス権を得た制御プログラムが実行終了するまでグローバル変数を使用する他の制御プログラムを実行できなくなるので、リアルタイム性が重視されるＰＬＣにおいて、このような長時間のアクセス制限を伴う排他制御を行うことは現実的でない。
【０００９】
本発明は、ＰＬＣにおいて、グローバル変数の一貫性を確保するための手続の処理を制御プログラム自身が行うことを必要とせず、複数の制御プログラムの並行実行が妨げられることもなく、複数の制御プログラムが一貫性の確保されたグローバル変数を参照できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明のある局面によれば、制御対象を制御するＰＬＣのＣＰＵユニットを提供する。ＰＬＣのＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。ＰＬＣのＣＰＵユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを含む。システムプログラムは、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを含む。
【００１１】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第１同期バッファおよび第２同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。
【００１２】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファと、第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理である。第１同期バッファ、第２同期バッファおよび第３同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００１３】
あるいは好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段内に生成する処理を含む。コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、第２入替処理および当該最新データ更新フラグをオフにする処理を含む。それにより、最新データを格納している同期バッファが待機状態であることを条件として実行する第２入替処理を実現する。
【００１４】
あるいは好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファが待機状態であることを条件として実行される第２入替処理を含む。
【００１５】
あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００１６】
さらに好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段内に生成する処理を含む。コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、第３入替処理および当該最新データ更新フラグをオフにする処理を含む。それにより、最新データを格納している同期バッファが書込先状態であることを条件として実行される第３入替処理を実現する。
【００１７】
あるいはさらに好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファが書込先状態であることを条件として実行される第３入替処理を含む。
【００１８】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。
【００１９】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファ、第２同期バッファおよび第３同期バッファを同期バッファの組として生成する処理である。第１同期バッファ、第２同期バッファおよび第３同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。リファラ側開始処理は、さらに、参照先状態とする同期バッファと同じ組に属する同期バッファであって書込先状態でない同期バッファを待機状態とする処理を含む。
【００２０】
あるいは好ましくは、第１同期バッファおよび第２同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。リファラ側開始処理は、さらに、参照先状態とする同期バッファと同じ組に属する他方の同期バッファを書込先状態とする処理を含む。
【００２１】
あるいは好ましくは、リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファを書込禁止状態とする処理を含む。システムプログラムは、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。コピー処理は、第１同期バッファおよび第２同期バッファのうち書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理である。
【００２２】
好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。
【００２３】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、１つの同期バッファを生成する処理である。
【００２４】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、第１同期バッファおよび第２同期バッファのうち書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。
【００２５】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第１同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第１同期バッファに格納されているデータを第２同期バッファにコピーする処理を含む。
【００２６】
この発明の別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを提供する。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる。
【００２７】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第１同期バッファおよび第２同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。
【００２８】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファと、第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理である。第１同期バッファ、第２同期バッファおよび第３同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００２９】
あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００３０】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を実行させる。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。
【００３１】
好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を実行させる。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。
【００３２】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第１同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第１同期バッファに格納されているデータを第２同期バッファにコピーする処理を含む。
【００３３】
この発明のさらに別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体を提供する。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる。
【００３４】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第１同期バッファおよび第２同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。
【００３５】
さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファと、第２同期バッファと、第３同期バッファとを同期バッファの組として生成する処理である。第１同期バッファ、第２同期バッファおよび第３同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第１入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第２入替処理を含む。
【００３６】
あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第３入替処理を含む。
【００３７】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を実行させる。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。
【００３８】
好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を実行させる。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。
【００３９】
好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第１同期バッファおよび第２同期バッファを同期バッファの組として生成する処理である。第２同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第１同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第１同期バッファに格納されているデータを第２同期バッファにコピーする処理を含む。
【発明の効果】
【００４０】
本発明によれば、ＰＬＣにおいて、複数の制御プログラムが一貫性の確保されたグローバル変数を参照することができる。その際、グローバル変数の一貫性を確保するための手続の処理を制御プログラム自身が行うことを必要としない。また、グローバル変数へのアクセス権の長時間にわたる開放待ちのために複数の制御プログラムの時分割実行または並列実行が妨げられることもない。
【図面の簡単な説明】
【００４１】
【図１】本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。
【図２】本発明の実施の形態に係るＣＰＵユニットのハードウェア構成を示す模式図である。
【図３】本発明の実施の形態に係るＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。
【図４】本発明の実施の形態に係るＣＰＵユニットのメインメモリの領域構成を示す模式図である。
【図５】本発明の実施の形態に係るＣＰＵユニットにおけるシステムプログラムの全体処理を示すフローチャートである。
【図６】実施の形態１に係る実行動作を示すシーケンス図である。
【図７】図６に示す制御サイクル１および２について拡大して示すシーケンス図である。
【図８】実施の形態１に係る実行動作を示すフローチャートである。
【図９】実施の形態１に係る別の実行動作を示すシーケンス図である。
【図１０】実施の形態１に係る別の実行動作を示すフローチャートである。
【図１１】実施の形態２に係る実行動作を示すシーケンス図である。
【図１２】実施の形態２に係る実行動作を示すフローチャートである。
【図１３】実施の形態２に係る別の実行動作を示すシーケンス図である。
【図１４】実施の形態２に係る別の実行動作を示すフローチャートである。
【図１５】実施の形態３に係る実行動作を示すシーケンス図である。
【図１６】実施の形態３に係る実行動作を示すフローチャートである。
【図１７】実施の形態３に係る別の実行動作を示すシーケンス図である。
【図１８】実施の形態３に係る別の実行動作を示すフローチャートである。
【図１９】実施の形態３に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図２０】実施の形態３に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図２１】実施の形態３に係る実行動作を示すフローチャートである。
【図２２】実施の形態３に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。
【図２３】実施の形態３に係る別の実行動作を示すフローチャートである。
【図２４】実施の形態４および５に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図２５】実施の形態４および５に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図２６】実施の形態４に係る実行動作を示すフローチャートである。
【図２７】実施の形態４および５に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。
【図２８】実施の形態４に係る別の実行動作を示すフローチャートである。
【図２９】実施の形態５に係る実行動作を示すフローチャートである。
【図３０】実施の形態５に係る別の実行動作を示すフローチャートである。
【図３１】実施の形態６および７に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図３２】実施の形態６および７に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。
【図３３】実施の形態６に係る実行動作を示すフローチャートである。
【図３４】実施の形態６に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。
【図３５】実施の形態６に係る別の実行動作を示すフローチャートである。
【図３６】実施の形態７に係る実行動作を示すフローチャートである。
【図３７】実施の形態７に係る別の実行動作を示すフローチャートである。
【図３８】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のハードウェア構成を示す模式図である。
【図３９】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のソフトウェア構成を示す模式図である。
【発明を実施するための形態】
【００４２】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００４３】
＜Ａ．システム構成＞
本実施の形態に係るＰＬＣは、機械や設備などの制御対象を制御する。本実施の形態に係るＰＬＣは、その構成要素としてＣＰＵユニットを含む。ＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、制御プログラム、プログラムの実行を制御するシステムプログラム、および制御プログラムが使用する変数についての属性データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび記入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定を含むことが可能である。まず、図１を参照して、本実施の形態に係るＰＬＣ１のシステム構成について説明する。
【００４４】
図１は、本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。図１を参照して、ＰＬＣシステムＳＹＳは、ＰＬＣ１と、ＰＬＣ１とフィールドネットワーク２を介して接続されるサーボモータドライバ３およびリモートＩＯターミナル５と、フィールド機器である検出スイッチ６およびリレー７とを含む。また、ＰＬＣ１には、接続ケーブル１０などを介してＰＬＣサポート装置８が接続される。
【００４５】
ＰＬＣ１は、主たる演算処理を実行するＣＰＵユニット１３と、１つ以上のＩＯユニット１４と、特殊ユニット１５とを含む。これらのユニットは、ＰＬＣシステムバス１１を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット１２によって適切な電圧の電源が供給される。なお、ＰＬＣ１として構成される各ユニットは、ＰＬＣメーカーが提供するものであるので、ＰＬＣシステムバス１１は、一般にＰＬＣメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク２については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
【００４６】
ＣＰＵユニット１３の詳細については、図２を参照して後述する。
ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット１４は、検出スイッチ６などのセンサが何らかの対象物を検出している状態（オン）および何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１４は、リレー７やアクチュエータといった出力先に対して、活性化するための指令（オン）および不活性化するための指令（オフ）のいずれかを出力する。
【００４７】
特殊ユニット１５は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００４８】
フィールドネットワーク２は、ＣＰＵユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。本実施の形態に係るＰＬＣシステムＳＹＳでは、典型的に、本実施の形態においては、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク２として採用する場合の構成について例示する。
【００４９】
なお、図１には、ＰＬＣシステムバス１１およびフィールドネットワーク２の両方を有するＰＬＣシステムＳＹＳを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク２ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク２を使用せずに、サーボモータドライバ３をＰＬＣシステムバス１１に直接接続してもよい。さらに、フィールドネットワーク２の通信ユニットをＰＬＣシステムバス１１に接続し、ＣＰＵユニット１３から当該通信ユニット経由で、フィールドネットワーク２に接続された機器との間の通信を行うようにしてもよい。
【００５０】
なお、ＰＬＣ１は、ＣＰＵユニット１３にＩＯユニット１４の機能やサーボモータドライバ３の機能を持たせることにより、ＩＯユニット１４やサーボモータドライバ３などを介さずにＣＰＵユニット１３が直接制御対象を制御する構成でもよい。
【００５１】
サーボモータドライバ３は、フィールドネットワーク２を介してＣＰＵユニット１３と接続されるとともに、ＣＰＵユニット１３からの指令値に従ってサーボモータ４を駆動する。より具体的には、サーボモータドライバ３は、ＰＬＣ１から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ３は、サーボモータ４の軸に接続されている位置センサ（ロータリーエンコーダ）やトルクセンサといった検出器から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ４の動作に係る実測値を取得する。そして、サーボモータドライバ３は、ＣＰＵユニット１３からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ３は、実測値が目標値に近づくようにサーボモータ４を駆動するための電流を調整する。なお、サーボモータドライバ３は、サーボモータアンプと称されることもある。
【００５２】
また、図１には、サーボモータ４とサーボモータドライバ３とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００５３】
図１に示すＰＬＣシステムＳＹＳのフィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送に係る処理を行うための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
【００５４】
ＰＬＣサポート装置８については後述する。
＜Ｂ．ＣＰＵユニットのハードウェア構成＞
次に、図２を参照して、ＣＰＵユニット１３のハードウェア構成について説明する。図２は、本発明の実施の形態に係るＣＰＵユニット１３のハードウェア構成を示す模式図である。図２を参照して、ＣＰＵユニット１３は、マイクロプロセッサ１００と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、ＰＬＣシステムバスコントローラ１２０と、フィールドネットワークコントローラ１４０と、ＵＳＢコネクタ１１０とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００５５】
マイクロプロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００５６】
マイクロプロセッサ１００は、以下に説明する実施の形態１〜７においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が２以上の場合を意味する（コア数が２の場合も含む）。
【００５７】
ＣＰＵユニット１３は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００５８】
メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１３への電源投入後にマイクロプロセッサ１００で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（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）ドライブ８８によって読取られ、ハードディスク（ＨＤＤ）８４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【０３６４】
上述したように、ＰＬＣサポート装置８は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。
【０３６５】
図３９は、本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置８のソフトウェア構成を示す模式図である。図３９を参照して、ＰＬＣサポート装置８ではＯＳ３１０が実行され、ＰＬＣサポートプログラム３２０に含まれる各種のプログラムを実行可能な環境が提供される。
【０３６６】
ＰＬＣサポートプログラム３２０は、エディタプログラム３２１と、コンパイラプログラム３２２と、デバッガプログラム３２３と、シミュレーション用シーケンス命令演算プログラム３２４と、シミュレーション用モーション演算プログラム３２５と、通信プログラム３２６とを含む。ＰＬＣサポートプログラム３２０に含まれるそれぞれのプログラムは、典型的には、ＣＤ−ＲＯＭ９に格納された状態で流通して、ＰＬＣサポート装置８にインストールされる。
【０３６７】
エディタプログラム３２１は、ユーザプログラム２３６を作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム３２１は、ユーザがキーボード８５やマウス８６を操作してユーザプログラム２３６のソースプログラム３３０を作成する機能に加えて、作成したソースプログラム３３０の保存機能および編集機能を提供する。また、エディタプログラム３２１は、外部からの制御プログラム２３０（その中でも特に、ユーザプログラム２３６）のソースプログラムを入力し、またユーザの操作により既存の制御プログラム２３０のソースプログラムを編集する。エディタプログラム３２１は、さらに、制御プログラム２３０が使用する変数についての属性データの入力および編集も行う。
【０３６８】
コンパイラプログラム３２２は、制御プログラム２３０のソースプログラムをコンパイルして、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式のユーザプログラム２３６を生成する機能を提供する。また、コンパイラプログラム３２２は、ソースプログラム３３０をコンパイルして、ＰＬＣサポート装置８のＣＰＵ８１で実行可能なオブジェクトプログラム形式のユーザプログラム３４０を生成する機能を提供する。このユーザプログラム３４０は、ＰＬＣサポート装置８によってＰＬＣ１の動作をシミュレート（模擬）するために使用される、シミュレーション用のオブジェクトプログラムである。
【０３６９】
デバッガプログラム３２３は、制御プログラム２３０のソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。
【０３７０】
デバッガプログラム３２３は、さらに、制御プログラム２３０のシミュレーション用のオブジェクトプログラムを実行する機能を提供する。このシミュレーション時には、ＣＰＵユニット１３のシステムプログラムに含まれるシーケンス命令演算プログラム２３２およびモーション演算プログラム２３４に代えて、ＰＬＣサポートプログラム３２０に含まれるシミュレーション用シーケンス命令演算プログラム３２４およびシミュレーション用モーション演算プログラム３２５が用いられる。
【０３７１】
通信プログラム３２６は、ＰＬＣ１のＣＰＵユニット１３へ制御プログラム２３０のＣＰＵユニット１３用のオブジェクトプログラムと変数の属性データとを転送する機能を提供する。
【０３７２】
一般的には、ＰＬＣ１に実装されるシステムプログラム２１０は、ＣＰＵユニット１３の製造段階でＣＰＵユニット１３の不揮発性メモリ１０６へ格納される。但し、ＣＤ−ＲＯＭ９にシステムプログラム２１０を格納しておけば、ユーザは、ＣＤ−ＲＯＭ９のシステムプログラム２１０をＰＬＣサポート装置８へコピーし、通信プログラム３２６が提供する機能を利用してコピーしたシステムプログラム２１０をＣＰＵユニット１３へ転送することもできる。さらに、ＣＤ−ＲＯＭ９に、ＰＬＣ１のＣＰＵユニット１３で実行されるリアルタイムＯＳ２００を格納しておけば、リアルタイムＯＳ２００についてもユーザ操作によってＰＬＣ１へ再インストールできる。
【０３７３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０３７４】
１  ＰＬＣ、２  フィールドネットワーク、３  サーボモータドライバ、４  サーボモータ、５  ターミナル、６  検出スイッチ、７  リレー、８  ＰＬＣサポート装置、９  ＣＤ−ＲＯＭ、１０  接続ケーブル、１１  ＰＬＣシステムバス、１２  電源ユニット、１３  ＣＰＵユニット、１４，５３  ＩＯユニット、１５  特殊ユニット、５１  ターミナルバス、５２  通信カプラ、８１  ＣＰＵ、８３  ＲＡＭ、８５  キーボード、８６  マウス、８７  モニタ、８８  ＣＤ−ＲＯＭドライブ、１００  マイクロプロセッサ、１０２  チップセット、１０４  メインメモリ、１０６  不揮発性メモリ、１０８  システムタイマ、１１０  ＵＳＢコネクタ、１２０  ＰＬＣシステムバスコントローラ、１２２  ＤＭＡ制御回路、１２４  ＰＬＣシステムバス制御回路、１２６，１４６  バッファメモリ、１３０  ＰＬＣシステムバスコネクタ、１４０  フィールドネットワークコントローラ、１４２  ＤＭＡ制御回路、１４４  フィールドネットワーク制御回路、２１０，２２０  システムプログラム、２１２  スケジューラプログラム、２１４  出力処理プログラム、２１６  入力処理プログラム、２１８  ＩＯ処理プログラム、２３０  制御プログラム、２３２  シーケンス命令演算プログラム、２３４  モーション演算プログラム、２３６，３４０  ユーザプログラム、３２０  サポートプログラム、３２１  エディタプログラム、３２２  コンパイラプログラム、３２３  デバッガプログラム、３２４  シミュレーション用シーケンス命令演算プログラム、３２５  シミュレーション用モーション演算プログラム、３２６  通信プログラム、３３０  ソースプログラム、１０４１  プログラム領域、１０４２  制御プログラムの作業領域、１０４２ａ  グローバル変数領域、１０４２ｂ  同期バッファ領域、１０４３  ＰＬＣシステムバス送信バッファ、１０４４  ＰＬＣシステムバス受信バッファ、１０４５  フィールドネットワーク送信バッファ、１０４６  フィールドネットワーク受信バッファ、２００  リアルタイムＯＳ、ＳＹＳ  システム。
【図１】
2012194666.tif 000003
【図２】
2012194666.tif 000004
【図３】
2012194666.tif 000005
【図４】
2012194666.tif 000006
【図５】
2012194666.tif 000007
【図６】
2012194666.tif 000008
【図７】
2012194666.tif 000009
【図８】
2012194666.tif 000010
【図９】
2012194666.tif 000011
【図１０】
2012194666.tif 000012
【図１１】
2012194666.tif 000013
【図１２】
2012194666.tif 000014
【図１３】
2012194666.tif 000015
【図１４】
2012194666.tif 000016
【図１５】
2012194666.tif 000017
【図１６】
2012194666.tif 000018
【図１７】
2012194666.tif 000019
【図１８】
2012194666.tif 000020
【図１９】
2012194666.tif 000021
【図２０】
2012194666.tif 000022
【図２１】
2012194666.tif 000023
【図２２】
2012194666.tif 000024
【図２３】
2012194666.tif 000025
【図２４】
2012194666.tif 000026
【図２５】
2012194666.tif 000027
【図２６】
2012194666.tif 000028
【図２７】
2012194666.tif 000029
【図２８】
2012194666.tif 000030
【図２９】
2012194666.tif 000031
【図３０】
2012194666.tif 000032
【図３１】
2012194666.tif 000033
【図３２】
2012194666.tif 000034
【図３３】
2012194666.tif 000035
【図３４】
2012194666.tif 000036
【図３５】
2012194666.tif 000037
【図３６】
2012194666.tif 000038
【図３７】
2012194666.tif 000039
【図３８】
2012194666.tif 000040
【図３９】
2012194666.tif 000041