"制御対象を制御するPLCのCPUユニットであって、マイクロプロセッサと、記憶手段と、通信回路と、を備え、前記PLCのCPUユニットは、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって前記制御対象を制御するように構成されており、前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御するシステムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、前記システムプログラムは、前記制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを含み、前記システムプログラムは、前記制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを含む、PLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第1同期バッファおよび前記第2同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項1に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第1同期バッファと、前記第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理であり、前記第1同期バッファ、前記第2同期バッファおよび前記第3同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含み、前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む、請求項2に記載のPLCのCPUユニット。前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを前記記憶手段内に生成する処理を含み、前記コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含み、前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、前記第2入替処理および当該最新データ更新フラグをオフにする処理を含み、それにより、最新データを格納している同期バッファが前記待機状態であることを条件として実行する前記第2入替処理を実現する、請求項3に記載のPLCのCPUユニット。前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファが前記待機状態であることを条件として実行される前記第2入替処理を含む、請求項3に記載のPLCのCPUユニット。前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む、請求項2に記載のPLCのCPUユニット。前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを前記記憶手段内に生成する処理を含み、前記コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含み、前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、前記第3入替処理および当該最新データ更新フラグをオフにする処理を含み、それにより、最新データを格納している同期バッファが前記書込先状態であることを条件として実行される前記第3入替処理を実現する、請求項6に記載のPLCのCPUユニット。前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファが前記書込先状態であることを条件として実行される前記第3入替処理を含む、請求項6に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項1に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第1同期バッファ、前記第2同期バッファおよび第3同期バッファを同期バッファの組として生成する処理であり、前記第1同期バッファ、前記第2同期バッファおよび前記第3同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、前記書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含み、前記リファラ側開始処理は、さらに、前記参照先状態とする同期バッファと同じ組に属する同期バッファであって前記書込先状態でない同期バッファを前記待機状態とする処理を含む、請求項9に記載のPLCのCPUユニット。前記第1同期バッファおよび前記第2同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、前記参照先状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、前記書込先状態である同期バッファにコピーする処理であり、前記リファラ側開始処理は、さらに、前記参照先状態とする同期バッファと同じ組に属する他方の同期バッファを前記書込先状態とする処理を含む、請求項9に記載のPLCのCPUユニット。前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファを書込禁止状態とする処理を含み、前記システムプログラムは、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を含み、前記コピー処理は、前記第1同期バッファおよび前記第2同期バッファのうち前記書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理である、請求項9に記載のPLCのCPUユニット。前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、前記システムプログラムは、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を含み、前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項1に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、1つの同期バッファを生成する処理である、請求項13に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記システムプログラムは、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を含み、前記コピー処理は、前記第1同期バッファおよび第2同期バッファのうち前記書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項13に記載のPLCのCPUユニット。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、前記コピー処理は、前記第1同期バッファにコピーする処理であり、前記リファラ側開始処理は、さらに、前記第1同期バッファに格納されているデータを前記第2同期バッファにコピーする処理を含む、請求項1に記載のPLCのCPUユニット。マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するPLCのCPUユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのPLC用のシステムプログラムであって、前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御する前記システムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、前記マイクロプロセッサは、前記システムプログラムに加えて、前記制御プログラムを実行し、前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを実行させ、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる、PLC用のシステムプログラム。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第1同期バッファおよび前記第2同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項17に記載のPLC用のシステムプログラム。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第1同期バッファと、前記第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理であり、前記第1同期バッファ、前記第2同期バッファおよび前記第3同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含み、前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む、請求項18に記載のPLC用のシステムプログラム。前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む、請求項18に記載のPLC用のシステムプログラム。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を実行させ、前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項17に記載のPLC用のシステムプログラム。前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を実行させ、前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項17に記載のPLC用のシステムプログラム。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、前記コピー処理は、前記第1同期バッファにコピーする処理であり、前記リファラ側開始処理は、さらに、前記第1同期バッファに格納されているデータを前記第2同期バッファにコピーする処理を含む、請求項17に記載のPLC用のシステムプログラム。マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、前記入力データを使用して前記出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するPLCのCPUユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのPLC用のシステムプログラムを格納した記録媒体であって、前記記憶手段は、前記制御プログラムと、前記制御プログラムの実行を制御する前記システムプログラムと、前記制御プログラムが使用する変数についての属性データとの格納に用いられ、前記マイクロプロセッサは、前記システムプログラムに加えて、前記制御プログラムを実行し、前記通信回路は、前記出力データを送信しおよび前記入力データを受信し、前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする同期バッファを前記記憶手段内に生成する処理とを実行させ、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる、PLC用のシステムプログラムを格納した記録媒体。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第1同期バッファおよび前記第2同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、前記書込先状態である同期バッファにコピーする処理である、請求項24に記載のPLC用のシステムプログラムを格納した記録媒体。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、前記第1同期バッファと、前記第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理であり、前記第1同期バッファ、前記第2同期バッファおよび前記第3同期バッファは、前記書込先状態、前記参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものであり、前記コピー処理は、さらに、コピー先となった前記書込先状態である同期バッファおよびその同期バッファと同じ組の中で前記待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含み、前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記待機状態であることを条件として、前記待機状態である同期バッファおよび前記参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む、請求項25に記載のPLC用のシステムプログラムを格納した記録媒体。前記リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが前記書込先状態であることを条件として、前記書込先状態である同期バッファおよび前記参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む、請求項25に記載のPLC用のシステムプログラムを格納した記録媒体。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行準備処理として、さらに、最新状態記録領域を前記記憶手段内に生成する処理を実行させ、前記コピー処理は、さらに、コピー先の同期バッファが最新状態であることを前記最新状態記録領域に記録する処理を含み、前記リファラ側開始処理は、さらに、前記最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む、請求項24に記載のPLC用のシステムプログラムを格納した記録媒体。前記リファラ側開始処理は、さらに、その実行において参照する前記同期バッファを書込禁止状態とする処理を含み、前記システムプログラムは、前記マイクロプロセッサに、前記制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、前記書込禁止状態であった同期バッファの前記書込禁止状態を解除する書込禁止解除処理を実行させ、前記コピー処理は、コピー先の前記同期バッファが前記書込禁止状態でないことを条件として実行される処理である、請求項24に記載のPLC用のシステムプログラムを格納した記録媒体。前記同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理であり、前記第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファであり、前記コピー処理は、前記第1同期バッファにコピーする処理であり、前記リファラ側開始処理は、さらに、前記第1同期バッファに格納されているデータを前記第2同期バッファにコピーする処理を含む、請求項24に記載のPLC用のシステムプログラムを格納した記録媒体。PLCにおいて複数の制御プログラムを実行する場合に、各制御プログラムが自己の処理のみに使用するローカル変数のほかに、複数の制御プログラムから参照されるグローバル変数が必要となることがある。1つの制御プログラムが実行を開始してから終了するまでの間、その制御プログラムは、自らグローバル変数の内容を書き換えるのでない限り、同一のグローバル変数を何回参照しても同一の内容を得られるべきである。しかし、その制御プログラムの実行開始から終了までの間に、他の制御プログラムがグローバル変数の内容を書き換えてしまうと、その制御プログラムはグローバル変数を用いた一貫性のある演算ができなくなる。このような場合に、制御プログラム自身が、グローバル変数を使用する前にグローバル変数の内容を自己のローカル変数にコピーし、実際の演算はローカル変数を参照して行うことが考えられる。あるいは、グローバル変数を書き換えるときは、他の制御プログラムにとって書き換えが不都合でないタイミングまで待ってから書き換えを実行することが考えられる。そうするためには、そのような処理が行われるように、制御プログラムの作成者が、グローバル変数使用上の手続を決めて、それにしたがってプログラミングしなければならず、制御プログラムの作成者にとっての負担となる。PLCのシステムプログラムが、グローバル変数を使用する1つの制御プログラムが実行を開始してから終了するまでの間、他の制御プログラムが当該グローバル変数を使用できないようにする排他制御を行えば、制御プログラムの演算の一貫性は確保される。しかし、排他制御を行えば、グローバル変数へのアクセス権を得た制御プログラムが実行終了するまでグローバル変数を使用する他の制御プログラムを実行できなくなるので、リアルタイム性が重視されるPLCにおいて、このような長時間のアクセス制限を伴う排他制御を行うことは現実的でない。本発明は、PLCにおいて、グローバル変数の一貫性を確保するための手続の処理を制御プログラム自身が行うことを必要とせず、複数の制御プログラムの並行実行が妨げられることもなく、複数の制御プログラムが一貫性の確保されたグローバル変数を参照できるようにすることを目的とする。本発明のある局面によれば、制御対象を制御するPLCのCPUユニットを提供する。PLCのCPUユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。PLCのCPUユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを含む。システムプログラムは、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを含む。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第1同期バッファおよび第2同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファと、第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理である。第1同期バッファ、第2同期バッファおよび第3同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む。あるいは好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段内に生成する処理を含む。コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、第2入替処理および当該最新データ更新フラグをオフにする処理を含む。それにより、最新データを格納している同期バッファが待機状態であることを条件として実行する第2入替処理を実現する。あるいは好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファが待機状態であることを条件として実行される第2入替処理を含む。あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む。さらに好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段内に生成する処理を含む。コピー処理は、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、第3入替処理および当該最新データ更新フラグをオフにする処理を含む。それにより、最新データを格納している同期バッファが書込先状態であることを条件として実行される第3入替処理を実現する。あるいはさらに好ましくは、システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファが書込先状態であることを条件として実行される第3入替処理を含む。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファ、第2同期バッファおよび第3同期バッファを同期バッファの組として生成する処理である。第1同期バッファ、第2同期バッファおよび第3同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含む。リファラ側開始処理は、さらに、参照先状態とする同期バッファと同じ組に属する同期バッファであって書込先状態でない同期バッファを待機状態とする処理を含む。あるいは好ましくは、第1同期バッファおよび第2同期バッファは、前記グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。リファラ側開始処理は、さらに、参照先状態とする同期バッファと同じ組に属する他方の同期バッファを書込先状態とする処理を含む。あるいは好ましくは、リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファを書込禁止状態とする処理を含む。システムプログラムは、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。コピー処理は、第1同期バッファおよび第2同期バッファのうち書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理である。好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を含む。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、1つの同期バッファを生成する処理である。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。システムプログラムは、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を含む。コピー処理は、第1同期バッファおよび第2同期バッファのうち書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第1同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第1同期バッファに格納されているデータを第2同期バッファにコピーする処理を含む。この発明の別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するPLCのCPUユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのPLC用のシステムプログラムを提供する。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第1同期バッファおよび第2同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファと、第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理である。第1同期バッファ、第2同期バッファおよび第3同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む。あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を実行させる。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を実行させる。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第1同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第1同期バッファに格納されているデータを第2同期バッファにコピーする処理を含む。この発明のさらに別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するPLCのCPUユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのPLC用のシステムプログラムを格納した記録媒体を提供する。記憶手段は、制御プログラムと、制御プログラムの実行を制御するシステムプログラムと、制御プログラムが使用する変数についての属性データとの格納に用いられる。マイクロプロセッサは、システムプログラムに加えて、制御プログラムを実行する。通信回路は、出力データを送信しおよび入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理とを実行させる。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、オーナー側制御プログラムを実行開始させるオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始させるリファラ側開始処理とを実行させる。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第1同期バッファおよび第2同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、書込先状態である同期バッファにコピーする処理である。さらに好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファと、第2同期バッファと、第3同期バッファとを同期バッファの組として生成する処理である。第1同期バッファ、第2同期バッファおよび第3同期バッファは、書込先状態、参照先状態、待機状態、のいずれかの状態が重複せずに付与されるものである。コピー処理は、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理を含む。リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を含む。あるいは好ましくは、リファラ側開始処理は、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を含む。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。システムプログラムは、マイクロプロセッサに、制御プログラムの実行準備処理として、さらに、最新状態記録領域を記憶手段内に生成する処理を実行させる。コピー処理は、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を含む。リファラ側開始処理は、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とする処理を含む。好ましくは、リファラ側開始処理は、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を含む。システムプログラムは、マイクロプロセッサに、制御プログラムの実行制御処理として、さらに、リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理を実行させる。コピー処理は、コピー先の同期バッファが書込禁止状態でないことを条件として実行される処理である。好ましくは、同期バッファを生成する処理は、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として生成する処理である。第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。コピー処理は、第1同期バッファにコピーする処理である。リファラ側開始処理は、さらに、第1同期バッファに格納されているデータを第2同期バッファにコピーする処理を含む。本発明によれば、PLCにおいて、複数の制御プログラムが一貫性の確保されたグローバル変数を参照することができる。その際、グローバル変数の一貫性を確保するための手続の処理を制御プログラム自身が行うことを必要としない。また、グローバル変数へのアクセス権の長時間にわたる開放待ちのために複数の制御プログラムの時分割実行または並列実行が妨げられることもない。本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。<A.システム構成>本実施の形態に係るPLCは、機械や設備などの制御対象を制御する。本実施の形態に係るPLCは、その構成要素としてCPUユニットを含む。CPUユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、制御プログラム、プログラムの実行を制御するシステムプログラム、および制御プログラムが使用する変数についての属性データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、出力データを送信しおよび記入力データを受信する。属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定を含むことが可能である。まず、図1を参照して、本実施の形態に係るPLC1のシステム構成について説明する。図1は、本発明の実施の形態に係るPLCシステムの概略構成を示す模式図である。図1を参照して、PLCシステムSYSは、PLC1と、PLC1とフィールドネットワーク2を介して接続されるサーボモータドライバ3およびリモートIOターミナル5と、フィールド機器である検出スイッチ6およびリレー7とを含む。また、PLC1には、接続ケーブル10などを介してPLCサポート装置8が接続される。PLC1は、主たる演算処理を実行するCPUユニット13と、1つ以上のIOユニット14と、特殊ユニット15とを含む。これらのユニットは、PLCシステムバス11を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット12によって適切な電圧の電源が供給される。なお、PLC1として構成される各ユニットは、PLCメーカーが提供するものであるので、PLCシステムバス11は、一般にPLCメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク2については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。CPUユニット13の詳細については、図2を参照して後述する。IOユニット14は、一般的な入出力処理に関するユニットであり、オン/オフといった2値化されたデータの入出力を司る。すなわち、IOユニット14は、検出スイッチ6などのセンサが何らかの対象物を検出している状態オンおよび何らの対象物も検出していない状態オフのいずれであるかという情報を収集する。また、IOユニット14は、リレー7やアクチュエータといった出力先に対して、活性化するための指令オンおよび不活性化するための指令オフのいずれかを出力する。特殊ユニット15は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、IOユニット14ではサポートしない機能を有する。フィールドネットワーク2は、CPUユニット13と遣り取りされる各種データを伝送する。フィールドネットワーク2としては、典型的には、各種の産業用イーサネット登録商標を用いることができる。産業用イーサネット登録商標としては、たとえば、EtherCAT登録商標、ProfinetIRT、MECHATROLINK登録商標-III、Powerlink、SERCOS登録商標-III、CIPMotionなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット登録商標以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、DeviceNet、CompoNet/IP登録商標などを用いてもよい。本実施の形態に係るPLCシステムSYSでは、典型的に、本実施の形態においては、産業用イーサネット登録商標であるEtherCAT登録商標をフィールドネットワーク2として採用する場合の構成について例示する。なお、図1には、PLCシステムバス11およびフィールドネットワーク2の両方を有するPLCシステムSYSを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク2ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク2を使用せずに、サーボモータドライバ3をPLCシステムバス11に直接接続してもよい。さらに、フィールドネットワーク2の通信ユニットをPLCシステムバス11に接続し、CPUユニット13から当該通信ユニット経由で、フィールドネットワーク2に接続された機器との間の通信を行うようにしてもよい。なお、PLC1は、CPUユニット13にIOユニット14の機能やサーボモータドライバ3の機能を持たせることにより、IOユニット14やサーボモータドライバ3などを介さずにCPUユニット13が直接制御対象を制御する構成でもよい。サーボモータドライバ3は、フィールドネットワーク2を介してCPUユニット13と接続されるとともに、CPUユニット13からの指令値に従ってサーボモータ4を駆動する。より具体的には、サーボモータドライバ3は、PLC1から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ3は、サーボモータ4の軸に接続されている位置センサロータリーエンコーダやトルクセンサといった検出器から、位置、速度典型的には、今回位置と前回位置との差から算出される、トルクといったサーボモータ4の動作に係る実測値を取得する。そして、サーボモータドライバ3は、CPUユニット13からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ3は、実測値が目標値に近づくようにサーボモータ4を駆動するための電流を調整する。なお、サーボモータドライバ3は、サーボモータアンプと称されることもある。また、図1には、サーボモータ4とサーボモータドライバ3とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。図1に示すPLCシステムSYSのフィールドネットワーク2には、さらに、リモートIOターミナル5が接続されている。リモートIOターミナル5は、基本的には、IOユニット14と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートIOターミナル5は、フィールドネットワーク2でのデータ伝送に係る処理を行うための通信カプラ52と、1つ以上のIOユニット53とを含む。これらのユニットは、リモートIOターミナルバス51を介して、データを互いに遣り取りできるように構成される。PLCサポート装置8については後述する。<B.CPUユニットのハードウェア構成>次に、図2を参照して、CPUユニット13のハードウェア構成について説明する。図2は、本発明の実施の形態に係るCPUユニット13のハードウェア構成を示す模式図である。図2を参照して、CPUユニット13は、マイクロプロセッサ100と、チップセット102と、メインメモリ104と、不揮発性メモリ106と、システムタイマ108と、PLCシステムバスコントローラ120と、フィールドネットワークコントローラ140と、USBコネクタ110とを含む。チップセット102と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。マイクロプロセッサ100およびチップセット102は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ100は、チップセット102から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット102は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ100に必要な命令コードを生成する。さらに、チップセット102は、マイクロプロセッサ100での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。マイクロプロセッサ100は、以下に説明する実施の形態1~7においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が2以上の場合を意味するコア数が2の場合も含む。CPUユニット13は、記憶手段として、メインメモリ104および不揮発性メモリ106を有する。メインメモリ104は、揮発性の記憶領域RAMであり、CPUユニット13への電源投入後にマイクロプロセッサ100で実行されるべき各種プログラムを保持する。また、メインメモリ104は、マイクロプロセッサ100による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ104としては、DRAMDynamicRandomAccessMemoryやSRAMStaticRandomAccessMemoryといったデバイスが用いられる。一方、不揮発性メモリ106は、リアルタイムOSOperatingSystem、PLC1のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ100がアクセスできるようにメインメモリ104にコピーされる。このような不揮発性メモリ106としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、DVD-RAMDigitalVersatileDiskRandomAccessMemoryのような光学記録媒体などを用いることもできる。システムタイマ108は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ100に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、OSOperatingSystemやBIOSBasicInputOutputSystemなどによって、任意の周期で割り込み信号を発生するように設定することもできる。このシステムタイマ108が発生する割り込み信号を利用して、後述するような制御サイクルごとの制御動作が実現される。CPUユニット13は、通信回路として、PLCシステムバスコントローラ120およびフィールドネットワークコントローラ140を有する。これらの通信回路は、出力データの送信および入力データの受信を行う。なお、CPUユニット13自体にIOユニット14やサーボモータドライバ3の機能を持たせる場合は、通信回路による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてCPUユニット13の内部で行われる送信および受信となる。PLCシステムバスコントローラ120は、PLCシステムバス11を介したデータの遣り取りを制御する。より具体的には、PLCシステムバスコントローラ120は、DMADynamicMemoryAccess制御回路122と、PLCシステムバス制御回路124と、バッファメモリ126とを含む。なお、PLCシステムバスコントローラ120は、PLCシステムバスコネクタ130を介してPLCシステムバス11と内部的に接続される。バッファメモリ126は、PLCシステムバス11を介して他のユニットへ出力されるデータ以下出力データとも称す。の送信バッファ、および、PLCシステムバス11を介して他のユニットから入力されるデータ以下入力データとも称す。の受信バッファとして機能する。なお、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ126に一次的に保持される。また、他のユニットから転送された入力データは、バッファメモリ126に一次的に保持された後、メインメモリ104に移される。DMA制御回路122は、メインメモリ104からバッファメモリ126への出力データの転送、および、バッファメモリ126からメインメモリ104への入力データの転送を行う。PLCシステムバス制御回路124は、PLCシステムバス11に接続される他のユニットとの間で、バッファメモリ126の出力データを送信する処理および入力データを受信してバッファメモリ126に格納する処理を行う。典型的には、PLCシステムバス制御回路124は、PLCシステムバス11における物理層およびデータリンク層の機能を提供する。フィールドネットワークコントローラ140は、フィールドネットワーク2を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ140は、用いられるフィールドネットワーク2の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはEtherCAT登録商標規格に従うフィールドネットワーク2が採用されるので、通常のイーサネット登録商標通信を行うためのハードウェアを含む、フィールドネットワークコントローラ140が用いられる。EtherCAT登録商標規格では、通常のイーサネット登録商標規格に従う通信プロトコルを実現する一般的なイーサネット登録商標コントローラを利用できる。但し、フィールドネットワーク2として採用される産業用イーサネット登録商標の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット登録商標コントローラが用いられる。また、産業用イーサネット登録商標以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。バッファメモリ146は、フィールドネットワーク2を介して他の装置などへ出力されるデータこのデータについても、以下出力データと称す。の送信バッファ、および、フィールドネットワーク2を介して他の装置などから入力されるデータこのデータについても、以下入力データとも称す。の受信バッファとして機能する。上述したように、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定の装置へ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ146に一次的に保持される。また、他の装置から転送された入力データは、バッファメモリ146に一次的に保持された後、メインメモリ104に移される。DMA制御回路142は、メインメモリ104からバッファメモリ146への出力データの転送、および、バッファメモリ146からメインメモリ104への入力データの転送を行う。フィールドネットワーク制御回路144は、フィールドネットワーク2に接続される他の装置との間で、バッファメモリ146の出力データを送信する処理および入力データを受信してバッファメモリ146に格納する処理を行う。典型的には、フィールドネットワーク制御回路144は、フィールドネットワーク2における物理層およびデータリンク層の機能を提供する。USBコネクタ110は、PLCサポート装置8とCPUユニット13とを接続するためのインターフェイスである。典型的には、PLCサポート装置8から転送される、CPUユニット13のマイクロプロセッサ100で実行可能なプログラムなどは、USBコネクタ110を介してPLC1に取込まれる。<C.CPUユニットのソフトウェア構成>次に、図3を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、CPUユニット13のマイクロプロセッサ100によって実行される。図3は、本発明の実施の形態に係るCPUユニット13で実行されるソフトウェア構成を示す模式図である。図3を参照して、CPUユニット13で実行されるソフトウェアとしては、リアルタイムOS200と、システムプログラム210と、ユーザプログラム236との3階層になっている。リアルタイムOS200は、CPUユニット13のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ100がシステムプログラム210およびユーザプログラム236を実行するための基本的な実行環境を提供する。このリアルタイムOSは、典型的には、PLCのメーカーあるいは専門のソフトウェア会社などによって提供される。システムプログラム210は、PLC1としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム210は、スケジューラプログラム212と、出力処理プログラム214と、入力処理プログラム216と、シーケンス命令演算プログラム232と、モーション演算プログラム234と、その他のシステムプログラム220とを含む。なお、一般には出力処理プログラム214および入力処理プログラム216は、連続的一体としてに実行されるので、これらのプログラムを、IO処理プログラム218と総称する場合もある。ユーザプログラム236は、ユーザにおける制御目的に応じて作成される。すなわち、PLCシステムSYSを用いて制御する対象のラインプロセスなどに応じて、任意に設計されるプログラムである。後述するように、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム236、シーケンス命令演算プログラム232、およびモーション演算プログラム234を、制御プログラム230と総称する場合もある。このように、CPUユニット13のマイクロプロセッサ100は、記憶手段に格納されたシステムプログラム210およびユーザプログラム236を実行する。以下、各プログラムについてより詳細に説明する。ユーザプログラム236は、上述したように、ユーザにおける制御目的たとえば、対象のラインやプロセスに応じて作成される。ユーザプログラム236は、典型的には、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム236は、PLCサポート装置8などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム236は、PLCサポート装置8から接続ケーブル10を介してCPUユニット13へ転送され、不揮発性メモリ106などに格納される。スケジューラプログラム212は、出力処理プログラム214、入力処理プログラム216、および制御プログラム230について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム212は、ユーザプログラム236およびモーション演算プログラム234の実行を制御する。本実施の形態に係るCPUユニット13では、モーション演算プログラム234に適した一定周期の実行サイクル制御サイクルを処理全体の共通サイクルとして採用する。そのため、1つの制御サイクル内で、すべての処理を完了することは難しいので、実行すべき処理の優先度などに応じて、各制御サイクルにおいて実行を完了すべき処理と、複数の制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム212は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム212は、各制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。出力処理プログラム214は、ユーザプログラム236制御プログラム230の実行によって生成された出力データを、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140へ転送するのに適した形式に再配置する。PLCシステムバスコントローラ120またはフィールドネットワークコントローラ140が、マイクロプロセッサ100からの、送信を実行するための指示を必要とする場合は、出力処理プログラム214がそのような指示を発行する。入力処理プログラム216は、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140によって受信された入力データを、制御プログラム230が使用するのに適した形式に再配置する。シーケンス命令演算プログラム232は、ユーザプログラム236で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。モーション演算プログラム234は、ユーザプログラム236による指示に従って実行され、サーボモータドライバ3やパルスモータドライバといったモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。その他のシステムプログラム220は、図3に個別に示したプログラム以外の、PLC1の各種機能を実現するためのプログラム群をまとめて示したものである。リアルタイムOS200は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。本実施の形態に係るPLC1においては、CPUユニット13のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力送信するためのイベント割り込みとして、制御サイクル開始の割り込みが初期設定される。リアルタイムOS200は、制御サイクル開始の割り込みが発生すると、マイクロプロセッサ100での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム212に切り替える。なお、リアルタイムOS200は、スケジューラプログラム212およびスケジューラプログラム212がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム210に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、CPUユニット13とPLCサポート装置8との間の接続ケーブル10USBなどを介した通信処理に関するものが含まれる。なお、制御プログラム230およびスケジューラプログラム212は、記憶手段であるメインメモリ104および不揮発性メモリ106に格納される。<D.メインメモリ構成>次に、図4を参照して、CPUユニット13のメインメモリ104に構成される記憶領域について説明する。図4は、本発明の実施の形態に係るCPUユニット13のメインメモリ104の領域構成を示す模式図である。図4を参照して、メインメモリ104には、各種のプログラム領域1041と、制御プログラムの作業領域1042と、PLCシステムバス送信バッファ1043と、PLCシステムバス受信バッファ1044と、フィールドネットワーク送信バッファ1045と、フィールドネットワーク受信バッファ1046とが形成される。各種のプログラム領域1041には、プログラム自体を格納する領域のほか、プログラムが実行に用いる変数の属性データを格納する領域1041aも含まれる。変数の属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。制御プログラムの作業領域1042には、各制御プログラム230のローカル変数領域のほか、グローバル変数領域1042aおよび同期バッファ領域1042bがシステムプログラム210によって生成される。制御プログラムの作業領域1042には、制御プログラム230の実行により作成された出力データおよび制御プログラムが参照する入力データが格納される。PLCシステムバス送信バッファ1043およびPLCシステムバス受信バッファ1044は、PLCシステムバス11を介して送信および受信されるデータをそれぞれ一時的に格納する。同様に、フィールドネットワーク送信バッファ1045およびフィールドネットワーク受信バッファ1046は、フィールドネットワーク2を介して送信および受信されるデータをそれぞれ一時的に格納する。より具体的には、出力処理プログラム214は、PLCシステムバス11を介していずれかの出力データを送信する必要がある場合には、対象の出力データを制御プログラムの作業領域1042からPLCシステムバス送信バッファ1043へコピーする。その際、出力処理プログラム214は、同一のユニットに送信される複数の出力データを一括して送信できるように、PLCシステムバス送信バッファ1043において、同一のユニットに向けられた出力データ群がまとめられるように出力データを再配置する。同様に、出力処理プログラム214は、フィールドネットワーク2を介していずれかの出力データを送信する必要がある場合には、対象の出力データを制御プログラムの作業領域1042からフィールドネットワーク送信バッファ1045へコピーする。その際、出力処理プログラム214は、フィールドネットワーク送信バッファ1045において、シリアルフレームとして送信できる形式に出力データを再配置する。一方、入力処理プログラム216は、PLCシステムバスコントローラ120が受信してPLCシステムバス受信バッファ1044に格納された入力データ、および/または、フィールドネットワークコントローラ140が受信してフィールドネットワーク受信バッファ1046に格納された入力データを、制御プログラムの作業領域1042へコピーする。その際、入力処理プログラム216は、制御プログラムの作業領域1042において、制御プログラム230が使用するのに適した形式に入力データを再配置する。PLCシステムバスコントローラ120のDMA制御回路122は、PLCシステムバス送信バッファ1043に格納されている出力データをPLCシステムバスコントローラ120のバッファメモリ146へ転送するとともに、バッファメモリ146に格納されている入力データをPLCシステムバス受信バッファ1044へ転送する。フィールドネットワークコントローラ140のDMA制御回路142は、フィールドネットワーク送信バッファ1045に格納されている出力データをフィールドネットワークコントローラ140のバッファメモリ146へ転送するとともに、バッファメモリ146に格納されている入力データをフィールドネットワーク受信バッファ1046へ転送する。制御プログラムの作業領域1042、PLCシステムバス送信バッファ1043、PLCシステムバス受信バッファ1044、フィールドネットワーク送信バッファ1045、および、フィールドネットワーク受信バッファ1046は、それぞれのアクセスを互いに独立に制御できるように構成されている。そのため、たとえば、以下に示す1~3といった複数の動作を並列実行することができる。1マイクロプロセッサ100が行う、ユーザプログラム236実行に伴う制御プログラムの作業領域1042へのアクセス2PLCシステムバスコントローラ120のDMA制御回路122が行う、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044とPLCシステムバスコントローラ120内のバッファメモリ126との間のデータ転送のための、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044へのアクセス3フィールドネットワークコントローラ140のDMA制御回路142が行う、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046とフィールドネットワークコントローラ140内のバッファメモリ146との間のデータ転送のための、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046へのアクセス<E.システムプログラムの全体処理動作>次に、システムプログラム210の全体処理動作について説明する。システムプログラム210の実行段階では、制御プログラム230の実行準備処理および制御プログラム230の実行制御処理が順次実行される。より具体的には、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1および2の処理を含む。1グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする同期バッファを記憶手段内に生成する処理さらに、制御プログラム230の実行準備処理は、具体的な実装形態に応じたその他の実行準備処理を含みうる。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の3~5の処理を含む。3オーナー側制御プログラムを実行開始させるオーナー側開始処理4オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーするコピー処理5リファラ側制御プログラムを実行開始させるリファラ側開始処理さらに、制御プログラム230の実行制御処理は、具体的な実装形態に応じたその他の実行制御処理を含みうる。図5は、本発明の実施の形態に係るCPUユニットにおけるシステムプログラムの全体処理を示すフローチャートである。図5に示すように、まず、制御プログラム230の実行準備処理が実行されステップS1、続いて、制御プログラム230の実行制御処理が実行されるステップS2。制御プログラム230の実行準備処理ステップS1に含まれる各処理の実行順序は、適宜設計される。同様に、制御プログラム230の実行制御処理ステップS2に含まれる各処理は、制御プログラム230を繰り返し実行するのに伴い繰り返し実行されるものであり、その実行順序は具体的な実装形態に依存する。以下、具体的な実装形態の典型例として、実施の形態1~7について説明する。<F.単一同期バッファ方式実施の形態1>f1:概要実施の形態1においては、複数の制御プログラムが時分割的に実行される場合を想定する。この際、複数の制御プログラムから参照されるグローバル変数が存在する。このグローバル変数に対して、書き換えが可能となっている1つのオーナー側制御プログラムが設定されるとともに、グローバル変数の参照のみが可能となっている1つまたは複数のリファラ側制御プログラムが設定される。以下、オーナー側制御プログラムに設定されている制御プログラムをグローバル変数のオーナー、あるいは、単にオーナーとも称す。以下、実行サイクルの大小関係の別に、制御プログラムのうちいずれかをグローバル変数のオーナーとして指定した場合について例示する。f2:実行優先度が高く実行サイクルが短い方の制御プログラムがグローバル変数のオーナー以下に示す例では、実行優先度と実行サイクルの長さとが異なる複数の制御プログラム制御プログラム1~3が実行される状態を想定する。このとき、制御プログラムの実行優先度が他の制御プログラム2および3に比較して高く、かつ、制御プログラム1の実行サイクルが他の制御プログラム2および3に比較して短いとする。このような状況下において、実行サイクルの短い方の制御プログラム1がグローバル変数のオーナーオーナー側制御プログラムに設定され、制御プログラム2および3がグローバル変数のリファラリファラ側制御プログラムに設定されているとする。図6は、実施の形態1に係る実行動作を示すシーケンス図である。図6を参照して、制御プログラム1~3が実行されるものとする。図7は、図6に示す制御サイクル1および2について拡大して示すシーケンス図である。図8は、実施の形態1に係る実行動作を示すフローチャートである。図6の制御プログラム1~3のそれぞれの時間軸に沿って示した破線の角丸の矩形は、対応する制御プログラムの実行サイクルを示す。たとえば、制御プログラム1は、1回分の制御サイクルを実行サイクルとしており、同様に、制御プログラム2および3は、それぞれ2および4回分の制御サイクルを実行サイクルとしている。なお、以下、説明に用いるシーケンス図においては同様の方法で実行サイクルを表す。また、図6の横方向の実線の矢印はデータの遣り取りを示し、また、各矢印に対応付けて示される数字は、対応するデータがいずれの制御サイクルの状態を反映しているかを示す。たとえば、1が付与された矢印では、制御サイクル1において制御プログラムが実行されたことで生成されたデータが遣り取りされることを示す。以下、説明に用いるシーケンス図においても同様の方法で実行サイクルを表す。図6に示す例では、制御プログラム1がグローバル変数のオーナーであるので、制御プログラム1は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域1に書き込む。一方、リファラ側制御プログラムに設定されている制御プログラム2および3は、同期バッファ領域1042b内のそれぞれ対応する同期バッファ2および3に格納されるデータを参照して処理を実行する。実行の結果などを対応する同期バッファ2および3にそれぞれ書き込むようにしてもよい。また、同期バッファ2および3のデータは、後述するような手順に従って、グローバル変数領域1との間で同期が保たれる。図6には、制御プログラム1~3のそれぞれの時間軸に沿って、その制御プログラムの実行状態を示す。より具体的には、予め定められた処理を実行すべき実行サイクル内において、未だ処理を開始していない状態である実行前、当該実行サイクル内において処理が行なわれている実行中、および、当該実行サイクル内においては既に処理が完了している実行終了のいずれかの実行状態が監視される。このような実行状態は、実行状態記録領域に各制御プログラムの実行状態を記録することよって表される。実行状態記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。実行状態の記録の態様は、適宜定めることができる。たとえば、実行状態ごとにその実行状態にある制御プログラムを特定する情報制御プログラムの名称や識別番号などを記録する態様、制御プログラムごとに実行状態を表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。実行状態フラグは、たとえば、実行前フラグがオンなら実行前状態、実行中フラグがオンなら実行中状態、などのように用いる。このような実行状態変数としては、たとえば、状態変数の値が1なら実行前、2なら実行中、などのように設定することができる。以下、説明する他の実施の形態における制御プログラムの実行状態の管理についても同様である。図7には、図6に示すシーケンス図の制御サイクル1および2における実行動作について拡大表示する。なお、図7には、CPUユニット13における実行動作をより詳細に説明するために、システムプログラム210についても示している。このシステムプログラム210は、主として、スケジューラプログラム212、出力処理プログラム214、入力処理プログラム216が動作する時間を示している。出力処理プログラム214、入力処理プログラム216は、スケジューラプログラム212が行う実行制御によって各制御サイクルの冒頭部分の時間図7では制御プログラム1が実行開始される前の時間に実行される。以下、説明する他の実施の形態においても、図7の例から理解できるように、システムプログラム210が動作している時間が存在するが、説明を簡略化する観点から図示しないこととする。図6および7の各制御サイクルは、システムタイマ108が発生する制御サイクル開始の割り込み信号が、マイクロプロセッサ100に入力することにより開始される。制御サイクル開始の割り込みがあれば、リアルタイムOS200は、実行中の制御プログラムがある場合、その実行を中断して、システムプログラム210スケジューラプログラム212をマイクロプロセッサ100に実行させる。図8を参照して、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行準備処理を実行するステップS1。続いて、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行制御処理を実行する図5に示すステップS2。この制御プログラム230の実行制御処理の詳細な一例がステップS200~S270に相当する。まず、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を待つステップS200。制御サイクル開始の割り込み信号を受けるとステップS200においてYES、マイクロプロセッサ100は、現在の制御サイクルから開始する制御プログラムを実行前状態に設定する。すなわち、制御プログラム1の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム1を実行前状態に設定する。同様に、制御プログラム2の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム2を実行前状態に設定する。制御プログラム3の実行サイクルが現在の制御サイクルから開始する場合には、制御プログラム3を実行前状態に設定するステップS202。続いて、マイクロプロセッサ100は、システムプログラム210内のIO処理プログラム218出力処理プログラム214および入力処理プログラム216を実行するステップS204。その後、マイクロプロセッサ100は、制御プログラム1オーナー側制御プログラムの実行状態を判断するステップS210。制御プログラム1オーナー側制御プログラムが実行前状態である場合ステップS210において実行前には、マイクロプロセッサ100は、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212。制御プログラム1オーナー側制御プログラムが実行中状態である場合ステップS210において実行中には、マイクロプロセッサ100は、制御プログラム1の未実行の部分の実行を開始するステップS214。制御プログラム1オーナー側制御プログラムが実行終了状態である場合ステップS210において実行終了には、処理はステップS230へ進む。ステップS212またはステップS214において制御プログラム1の実行が開始された後、マイクロプロセッサ100は、制御プログラム1の実行終了通知を受けたか否かを判断するステップS216。制御プログラム1の実行終了通知を受けていない場合ステップS216においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS218。制御サイクル開始の割り込み信号を受けた場合ステップS218においてYESの場合には、ステップS202以下の処理が繰り返される。すなわち、制御プログラム1の実行終了通知を受けるまでに制御サイクル開始割り込みが発生すると、制御プログラム1の実行はいったん中断され、次の制御サイクルにおいて、IO処理プログラムの実行後に、制御プログラム1の未実行部分が実行される。ただし、図6および7は、制御プログラム1の実行サイクルが制御サイクルに等しく、制御プログラム1が制御サイクル内に終了する処理量しか含まないようにプログラムされている場合を示している。制御プログラム1の実行が制御サイクル内に終了しなければ、制御プログラム1の実行サイクルが延長される。すなわち、制御プログラム1の実行が中断されて、次の制御サイクルにおいて制御プログラム1の未実行の部分が実行される。あるいは、制御プログラム1の実行が制御サイクル実行サイクル内に終了しなかった段階で、エラー発生と判断してエラー処理を行うようにしてもよい。図6および図7の制御プログラム2および3や、他の実施の形態についても、制御プログラムが実行サイクル内に終了しなかった場合には、同様に、実行サイクルの延長またはエラー処理が行われる。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS218においてNOの場合には、ステップS216以下の処理が繰り返される。制御サイクル開始の割り込み信号の処理は、システムプログラム210のフローチャート上便宜的にこのように表現するが、実装上は、マイクロプロセッサ100は、ステップS216およびS218のループを実行するのではなく、制御プログラム1の実行を開始してから終了するまで、システムプログラム210を実行していない。制御プログラム1の実行が終了するまでに制御サイクル開始の割り込みがあれば、リアルタイムOS200は、制御プログラム1の実行を中断させてシステムプログラム210をステップS202から実行させる。本フローチャートの制御プログラム2および3に関する制御サイクル開始の割り込み信号の処理ステップS236およびS238、ならびに、ステップS256およびS258、および他のフローチャートの制御サイクル開始の割り込み信号の処理についても、同様である。一方、制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合には、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するとともに、グローバル変数領域1に格納されているデータを同期バッファ2および同期バッファ3にコピーするステップS220。このグローバル変数領域1に格納されているデータの同期バッファ2および同期バッファ3へのコピー動作は、図6および図7において、実線の矢印で示されている。但し、このグローバル変数領域1に格納されているデータは、書込禁止状態になっている同期バッファにはコピーされない。この書込禁止状態については、後述する。ステップS220に続いて、マイクロプロセッサ100は、制御プログラム2リファラ側制御プログラムの実行状態を判断するステップS230。制御プログラム2リファラ側制御プログラムが実行前状態である場合ステップS230において実行前には、マイクロプロセッサ100は、対応する同期バッファ2を書込禁止状態に設定した上で、制御プログラム2の実行状態を実行中状態に設定するとともに、制御プログラム2の実行を開始するステップS232。制御プログラム2リファラ側制御プログラムが実行中状態である場合ステップS230において実行中には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始するステップS234。このとき、対応する同期バッファ2の書込禁止状態は解除されず、そのまま維持される。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230において実行終了には、処理はステップS250へ進む。ステップS232またはステップS234において制御プログラム2の実行が開始された後、マイクロプロセッサ100は、制御プログラム2の実行終了通知を受けたか否かを判断するステップS236。制御プログラム2の実行終了通知を受けていない場合ステップS236においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS238。制御サイクル開始の割り込み信号を受けた場合ステップS238においてYESの場合には、ステップS202以下の処理が繰り返される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS238においてNOの場合には、ステップS236以下の処理が繰り返される。一方、制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合には、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するとともに、対応する同期バッファ2の書込禁止状態を解除するステップS240。この同期バッファ2の書込禁止状態の期間は、図6および図7において破線の矢印で示されている。ステップS240に続いて、マイクロプロセッサ100は、制御プログラム3リファラ側制御プログラムの実行状態を判断するステップS250。制御プログラム3リファラ側制御プログラムが実行前状態である場合ステップS250において実行前には、マイクロプロセッサ100は、対応する同期バッファ3を書込禁止状態に設定した上で、制御プログラム3の実行状態を実行中状態に設定するとともに、制御プログラム3の実行を開始するステップS252。制御プログラム3リファラ側制御プログラムが実行中状態である場合ステップS250において実行中には、マイクロプロセッサ100は、制御プログラム3の未実行の部分の実行を開始するステップS254。このとき、対応する同期バッファ3の書込禁止状態は解除されず、そのまま維持される。制御プログラム3リファラ側制御プログラムが実行終了状態である場合ステップS250において実行終了には、処理はステップS270へ進む。ステップS252またはステップS254において制御プログラム3の実行が開始された後、マイクロプロセッサ100は、制御プログラム3の実行終了通知を受けたか否かを判断するステップS256。制御プログラム3の実行終了通知を受けていない場合ステップS256においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS258。制御サイクル開始の割り込み信号を受けた場合ステップS258においてYESの場合には、ステップS202以下の処理が繰り返される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS258においてNOの場合には、ステップS256以下の処理が繰り返される。一方、制御プログラム3の実行終了通知を受けた場合ステップS256においてYESの場合には、マイクロプロセッサ100は、制御プログラム3の実行状態を実行終了状態に設定するとともに、対応する同期バッファ3の書込禁止状態の状態を解除するステップS260。この同期バッファ3の書込禁止状態の期間は、図6および図7において破線の矢印で示されている。ステップS260に続いて、制御サイクル開始の割り込み信号を待つステップS270。制御サイクル開始の割り込み信号を受けるとステップS270においてYES、ステップS202以下の処理が再度実行される。オーナー側制御プログラムとリファラ側制御プログラムとが共通であるグローバル変数が複数ある場合には、それらのグローバル変数についての、グローバル変数領域から当該リファラ側制御プログラムの同期バッファへのコピー処理は一括して行われる。同期バッファは、そのように一括してコピー処理が行われる単位でグループ化される。同期バッファの書込禁止状態は、同じグループの同期バッファに共通に設定される。同期バッファの状態が、そのような同じグループの同期バッファに共通して設定されることは、以下、説明する他の実施の形態における、書込禁止状態、書込先状態、参照先状態、待機状態、最新状態のいずれについても同様である。また、上述したような、同期バッファの書込禁止状態は、書込禁止状態記録領域に同期バッファが書込禁止状態であることを記録することよって表される。書込禁止状態記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込禁止状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込禁止状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込禁止状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。以下、説明する他の実施の形態における制御プログラムの実行状態の管理についても同様である。f3:実行優先度が低く実行サイクルが長い方の制御プログラムがグローバル変数のオーナー以下に示す例では、グローバル変数のリファラリファラ側制御プログラムに設定されている制御プログラム1の方がより高い実行優先度とより短い実行サイクルとを有しており、グローバル変数のオーナーオーナー側制御プログラムに設定されている制御プログラム2の方がより低い実行優先度とより長い実行サイクルとを有しているとする。図9は、実施の形態1に係る別の実行動作を示すシーケンス図である。図9に示す例では、制御プログラム2がグローバル変数のオーナーであるので、制御プログラム2は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域2に書き込む。一方、リファラ側制御プログラムに設定されている制御プログラム1は、同期バッファ領域1042b内の同期バッファ1に格納されるデータを参照して処理を実行する。実行の結果などを対応する同期バッファ1に書き込むようにしてもよい。一方、制御プログラム1の実行サイクルは、制御プログラム2に比較して短いものとする。図9に示す例では、制御プログラム1の実行サイクルは1回分の制御サイクルに相当し、制御プログラム2の実行サイクルは2回分の制御サイクルに相当する。このような場合には、以下に示すような手順に従って、同期バッファ2とグローバル変数領域1との間で同期が保たれる。図10は、実施の形態1に係る別の実行動作を示すフローチャートである。図10のフローチャートにおいては、図8に示すフローチャートと同一の処理を実行するステップについては、図8と同一のステップ番号を付与している。図10を参照して、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行準備処理を実行するステップS1。続いて、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行制御処理を実行する図5に示すステップS2。より具体的には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を待つステップS200。制御サイクル開始の割り込み信号を受けるとステップS200においてYES、現在の制御サイクルから開始する制御プログラムを実行前状態に設定するステップS202。続いて、マイクロプロセッサ100は、システムプログラム210内のIO処理プログラム218出力処理プログラム214および入力処理プログラム216を実行するステップS204。その後、マイクロプロセッサ100は、制御プログラム1リファラ側制御プログラムの実行状態を判断するステップS210A。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Aにおいて実行前には、マイクロプロセッサ100は、対応する同期バッファ1を書込禁止状態に設定した上で、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212A。制御プログラム1リファラ側制御プログラムが実行中状態である場合ステップS210Aにおいて実行中には、マイクロプロセッサ100は、制御プログラム1の未実行の部分の実行を開始するステップS214。このとき、対応する同期バッファ1の書込禁止状態は解除されず、そのまま維持される。制御プログラム1リファラ側制御プログラムが実行終了状態である場合ステップS210Aにおいて実行終了には、処理はステップS230Aへ進む。ステップS212AまたはステップS214において制御プログラム1の実行が開始された後、マイクロプロセッサ100は、制御プログラム1の実行終了通知を受けたか否かを判断するステップS216。制御プログラム1の実行終了通知を受けていない場合ステップS216においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS218。制御サイクル開始の割り込み信号を受けた場合ステップS218においてYESの場合には、ステップS202以下の処理が繰り返される。すなわち、制御プログラム1の実行終了通知を受けるまでに制御サイクル開始割り込みが発生すると、制御プログラム1の実行はいったん中断され、次の制御サイクルにおいて、IO処理プログラムの実行後に、制御プログラム1の未実行部分が実行される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS218においてNOの場合には、ステップS216以下の処理が繰り返される。一方、制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合には、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するとともに、対応する同期バッファ1の書込禁止状態を解除するステップS220A。この同期バッファ1の書込禁止状態の期間は、図9において破線の矢印で示されている。ステップS220Aに続いて、マイクロプロセッサ100は、制御プログラム2オーナー側制御プログラムの実行状態を判断するステップS230A。制御プログラム2オーナー側制御プログラムが実行前状態である場合ステップS230Aにおいて実行前には、マイクロプロセッサ100は、制御プログラム2の実行状態を実行中状態に設定するとともに、制御プログラム2の実行を開始するステップS232A。制御プログラム2オーナー側制御プログラムが実行中状態である場合ステップS230Aにおいて実行中には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始するステップS234。制御プログラム2オーナー側制御プログラムが実行終了状態である場合ステップS230Aにおいて実行終了には、処理はステップS270へ進む。ステップS232またはステップS234において制御プログラム2の実行が開始された後、マイクロプロセッサ100は、制御プログラム2の実行終了通知を受けたか否かを判断するステップS236。制御プログラム2の実行終了通知を受けていない場合ステップS236においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS238。制御サイクル開始の割り込み信号を受けた場合ステップS238においてYESの場合には、ステップS202以下の処理が繰り返される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS238においてNOの場合には、ステップS236以下の処理が繰り返される。一方、制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合には、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するとともに、グローバル変数領域2に格納されているデータを同期バッファ1にコピーするステップS240A。このグローバル変数領域2に格納されているデータの同期バッファ1へのコピー動作は、図9において、実線の矢印で示されている。ステップS240Aに続いて、制御サイクル開始の割り込み信号を待つステップS270。制御サイクル開始の割り込み信号を受けるとステップS270においてYES、ステップS202以下の処理が再度実行される。説明を簡略化する観点から、図9には1つのグローバル変数を参照するリファラ側制御プログラムの数が1である例を示すが、リファラ側制御プログラムの数は任意に設定できる。いずれの実施形態においても、1つのグローバル変数を参照するリファラ側制御プログラムの数は任意である。リファラ側制御プログラムを1つしか示していない実施形態についても、図6~8を参考にすれば、リファラ側制御プログラムが複数ある場合の動作を理解できるであろう。f4:まとめいずれの実施形態においても、制御プログラム1および制御プログラム2がある場合に、あるグローバル変数については制御プログラム1がオーナーであり、別のグローバル変数については制御プログラム2がオーナーであるということがありうる。システムプログラムの制御プログラムの実行制御処理の動作は、グローバル変数ごとに理解することができる。上述したように、実施の形態1においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1および2の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする1つの同期バッファを提供する同期バッファ領域1042bを記憶手段基本的には、メインメモリ104内に生成する処理また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~4の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図8のステップS212、および、図10のステップS2322オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する同期バッファにコピーすることを、コピー先の同期バッファが書込禁止状態でないことを条件として行うコピー処理図8のS220、および、図10のS240A3リファラ側制御プログラムを実行開始させる処理であって、さらに、その実行において参照する同期バッファを書込禁止状態とする処理を実行するリファラ側開始処理図8のS232,S252、および、図10のS212A4リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理図8のS240,S260、および、図10のS220A上述のような実施の形態1によれば、同期バッファへの書込禁止状態の期間の存在にもかかわらず、たとえば各制御プログラムに共通の制御サイクルの中で各制御プログラムの実行の優先度制御がなされているような場合には、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。すなわち、このような場合には、リファラ側制御プログラムにおいて参照すべきグローバル変数の値は書込禁止状態ではない期間におけるコピー処理によって得ることができる。また、実施の形態1によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが単一であるので、グローバル変数の数やリファラ側制御プログラムの数が多くても同期バッファが占めるメモリサイズが小さくてすむ。さらに、同期バッファが単一である点でアルゴリズムが単純であるので、システムプログラムの設計が容易である。<G.複数同期バッファへの順次コピー方式実施の形態2>g1:概要上述の実施の形態1においては、書込禁止状態になっている同期バッファには、グローバル変数領域に格納されているデータはコピーされない構成を採用した例を示す。これに対して、同期バッファを参照するリファラ側制御プログラムの実行状態にかかわらず、グローバル変数領域に格納されているデータを同期バッファにコピーできる構成について説明する。より具体的には、実施の形態2においては、同期バッファとして、グローバル変数領域からのデータを一次的に格納する領域と、リファラ側制御プログラムが実際にデータを参照する領域とをそれぞれ設ける。これにより、リファラ側制御プログラムの実行状態に影響されることなく、グローバル変数領域に格納されているデータを同期バッファにコピーできる。g2:実行優先度が高く実行サイクルが短い方の制御プログラムがグローバル変数のオーナー図11は、実施の形態2に係る実行動作を示すシーケンス図である。図11に示すシーケンス図においては、2つの制御プログラム制御プログラム1および制御プログラム2が時分割的に実行されるとし、優先度が高く実行サイクルが短い方の制御プログラム1がグローバル変数のオーナーオーナー側制御プログラムに設定されているとする。図11に示す例では、制御プログラム1がグローバル変数のオーナーであるので、制御プログラム1は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域1に書き込む。一方、同期バッファ領域1042b内には、同期バッファ2Aおよび2Bが設定される。グローバル変数領域1のデータは、まずは、同期バッファ2Aに書き込まれ、続いて、同期バッファ2Aから同期バッファ2Bへ適切なタイミングで転送される。図11に示すような、グローバル変数領域1と同期バッファ2Aおよび2Bとの間の同期処理について、図12を参照して説明する。図12は、実施の形態2に係る実行動作を示すフローチャートである。図12のフローチャートにおいては、図8に示すフローチャートと同一の処理を実行するステップについては、図8と同一のステップ番号を付与している。図12を参照して、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行準備処理を実行するステップS1。続いて、マイクロプロセッサ100は、システムプログラム210における、制御プログラム230の実行制御処理を実行する図5に示すステップS2。図12に示すフローチャートにおいては、図8に示すフローチャートのステップS200~S218と同様の処理が実行される。但し、図12に示すフローチャートにおいては、ステップS220に代えてステップS220Bの処理が実行される。具体的には、ステップS220Bにおいて、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するとともに、グローバル変数領域1に格納されているデータを同期バッファ2Aにコピーする。このグローバル変数領域1に格納されているデータの同期バッファ2Aへのコピー動作は、図11において、実線の矢印で示されている。ステップS220Bに続いて、マイクロプロセッサ100は、制御プログラム2リファラ側制御プログラムの実行状態を判断するステップS230。制御プログラム2リファラ側制御プログラムが実行前状態である場合ステップS230において実行前には、マイクロプロセッサ100は、同期バッファ2Aに格納されているデータを同期バッファ2Bにコピーした上で、制御プログラム2の実行状態を実行中状態に設定するとともに、制御プログラム2の実行を開始するステップS232B。制御プログラム2リファラ側制御プログラムが実行中状態である場合ステップS230において実行中には、マイクロプロセッサ100は、制御プログラム2の未実行の部分の実行を開始するステップS234。このとき、同期バッファ2Aに格納されているデータの同期バッファ2Bへのコピーは行われない。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230において実行終了には、処理はステップS270へ進む。ステップS232BまたはステップS234において制御プログラム2の実行が開始された後、マイクロプロセッサ100は、制御プログラム2の実行終了通知を受けたか否かを判断するステップS236。制御プログラム2の実行終了通知を受けていない場合ステップS236においてNOの場合には、マイクロプロセッサ100は、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS238。制御サイクル開始の割り込み信号を受けた場合ステップS238においてYESの場合には、ステップS202以下の処理が繰り返される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS238においてNOの場合には、ステップS236以下の処理が繰り返される。一方、制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合には、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するステップS240B。ステップS240Bに続いて、制御サイクル開始の割り込み信号を待つステップS270。制御サイクル開始の割り込み信号を受けるとステップS270においてYES、ステップS202以下の処理が再度実行される。g3:実行優先度が低く実行サイクルが長い方の制御プログラムがグローバル変数のオーナー以下に示す例では、グローバル変数のリファラリファラ側制御プログラムに設定されている制御プログラム1の方がより高い実行優先度とより短い実行サイクルとを有しており、グローバル変数のオーナーオーナー側制御プログラムに設定されている制御プログラム2の方がより長い実行サイクルを有しているとする。図13は、実施の形態2に係る別の実行動作を示すシーケンス図である。図13に示す例では、制御プログラム2がグローバル変数のオーナーであるので、制御プログラム2は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域2に書き込む。一方、リファラ側制御プログラムに設定されている制御プログラム1には、同期バッファ1Aおよび1Bが設定される。このような場合には、以下に示すような手順に従って、同期バッファ1Aおよび1Bとグローバル変数領域2との間で同期が保たれる。図14は、実施の形態2に係る別の実行動作を示すフローチャートである。図14のフローチャートにおいては、図10に示すフローチャートと同一の処理を実行するステップについては、図10と同一のステップ番号を付与している。図14に示すフローチャートは、図10に示すフローチャートと比較して、ステップS212A,S220A,S240Aに代えて、それぞれステップS212C,S220C,S240Cの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Aにおいて実行前に実行されるステップS212Cにおいては、マイクロプロセッサ100は、同期バッファ1Aに格納されているデータを同期バッファ1Bにコピーした上で、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212C。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Cにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するステップS220C。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合に実行されるステップS240Cにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するとともに、グローバル変数領域2に格納されているデータを同期バッファ1AにコピーするステップS240C。このグローバル変数領域2に格納されているデータの同期バッファ1Aへのコピー動作は、図13において、実線の矢印で示されている。g4:まとめ上述したように、実施の形態2においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1および2の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、第1同期バッファおよび第2同期バッファを同期バッファの組として提供する同期バッファ領域1042bを記憶手段基本的には、メインメモリ104内に生成する処理第2同期バッファは、リファラ側制御プログラムがグローバル変数を参照するときに参照先とする同期バッファである。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~3の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図12のステップS212、および、図14のステップS232A2オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する第1同期バッファにコピーするコピー処理図12のS220B、および、図14のS240C3リファラ側制御プログラムを実行開始させる処理であって、さらに、第1同期バッファに格納されているデータを第2同期バッファにコピーする処理を実行するリファラ側開始処理図12のS232B、および、図14のS212C上述のような実施の形態2によれば、グローバル変数領域から第1同期バッファへのコピー処理を行うことが常に可能であり、さらにリファラ側制御プログラムの実行開始時に第1同期バッファから第2同期バッファへのコピーを行うので、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。また、実施の形態2は、第1同期バッファへのコピー処理の際にコピー先の同期バッファの状態についての判断をする必要がない点で、アルゴリズムが単純である。なお、マイクロプロセッサ100がマルチコアの場合には、第1同期バッファへの書き込みグローバル変数領域からのコピー処理のタイミングと、第1同期バッファからの読み出し第2同期バッファへのコピーのタイミングとが重なることがありえるが、そのような場合は、先に開始した処理が完了してから他方の処理を行うようにすればよい。<H.複数同期バッファの選択利用方式実施の形態3>h1:概要実施の形態2においては、2つの同期バッファを使用してデータを順送りする形態について例示した。これに対して、実施の形態3においては、複数典型的には、2つの同期バッファを選択的に利用することで、同期バッファを参照するリファラ側制御プログラムの実行状態にかかわらず、グローバル変数領域に格納されているデータを同期バッファにコピーできる構成について説明する。h2:実行優先度が高く実行サイクルが短い方の制御プログラムがグローバル変数のオーナー図15は、実施の形態3に係る実行動作を示すシーケンス図である。図15に示すシーケンス図においては、2つの制御プログラム制御プログラム1および制御プログラム2が時分割的に実行されるとし、実行優先度が高く実行サイクルが短い方の制御プログラム1がグローバル変数のオーナーオーナー側制御プログラムに設定されているとする。図15に示す例では、制御プログラム1がグローバル変数のオーナーであるので、制御プログラム1は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域1に書き込む。一方、同期バッファ領域1042b内には、同期バッファ2Aおよび2Bが設定される。グローバル変数領域1のデータは、同期バッファ2Aおよび同期バッファ2Bの一方に書き込まれる。より具体的には、2つの同期バッファのうち、書込禁止状態にはなっていない同期バッファにコピーされる。図15に示すような、グローバル変数領域1と同期バッファ2Aおよび2Bとの間の同期処理について、図16を参照して説明する。図16は、実施の形態3に係る実行動作を示すフローチャートである。図16のフローチャートにおいては、図12に示すフローチャートと同一の処理を実行するステップについては、図12と同一のステップ番号を付与している。図16に示すフローチャートは、図12に示すフローチャートと比較して、ステップS220B,S232B,S240Bに代えて、それぞれステップS220D,S232D,S240Dの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Dにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを前回コピーしたのと同じ同期バッファ2同期バッファ2Aまたは同期バッファ2Bにコピーするとともに、データを書き込んだ同期バッファ2を最新状態に設定するステップS220D。但し、グローバル変数領域1に格納されているデータの書き込み先となっている同期バッファ2が書込禁止状態に設定されている場合には、他方の同期バッファ2にデータが書き込まれる。制御プログラム2リファラ側制御プログラムが実行前状態である場合ステップS230において実行前に実行されるステップS232Dにおいては、マイクロプロセッサ100は、最新状態に設定されている同期バッファ2同期バッファ2Aまたは同期バッファ2Bを、制御プログラム2リファラ側制御プログラムの参照先状態に設定するとともに書込禁止状態にも設定し、さらに、制御プログラム2の実行状態を実行中状態に設定するとともに、制御プログラム2の実行を開始するステップS232D。なお、制御プログラム2リファラ側制御プログラムが実行中状態である場合ステップS230において実行中に実行されるステップS234においては、最新状態に設定されている同期バッファ2に対する、参照先状態および書込禁止状態は解除されず、そのまま維持される。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合に実行されるステップS240Dにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するとともに、対応する同期バッファ2の書込禁止状態を解除するステップS240D。上述したような同期バッファの状態、すなわち、書込禁止状態、参照先状態、最新データを格納している状態最新状態は、それぞれ書込禁止状態記録領域、参照先状態記録領域、最新状態記録領域に、対応する同期バッファが書込禁止状態、参照先状態、最新状態であることをそれぞれ記録することよって表される。これらの各記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込禁止状態、参照先状態、最新状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込禁止状態、参照先状態、最新状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込禁止状態、参照先状態、最新状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。以下、説明する他の実施の形態における制御プログラムの実行状態の管理についても同様である。h3:実行優先度が低く実行サイクルが長い方の制御プログラムがグローバル変数のオーナー以下に示す例では、グローバル変数のリファラリファラ側制御プログラムに設定されている制御プログラム1の方がより高い実行優先度とより短い実行サイクルとを有しており、グローバル変数のオーナーオーナー側制御プログラムに設定されている制御プログラム2の方がより低い実行優先度とより長い実行サイクルとを有しているとする。図17は、実施の形態3に係る別の実行動作を示すシーケンス図である。図17に示す例では、制御プログラム2がグローバル変数のオーナーであるので、制御プログラム2は、その実行の結果などを、グローバル変数領域1042a内のグローバル変数領域2に書き込む。一方、リファラ側制御プログラムに設定されている制御プログラム1には、同期バッファ1Aおよび1Bが設定される。このような場合には、以下に示すような手順に従って、同期バッファ1Aおよび1Bとグローバル変数領域2との間で同期が保たれる。図18は、実施の形態3に係る別の実行動作を示すフローチャートである。図18のフローチャートにおいては、図14に示すフローチャートと同一の処理を実行するステップについては、図14と同一のステップ番号を付与している。図18に示すフローチャートは、図14に示すフローチャートと比較して、ステップS212C,S220C,S240Cに代えて、それぞれステップS212E,S220E,S240Eの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Aにおいて実行前に実行されるステップS212Eにおいては、マイクロプロセッサ100は、最新状態に設定されている同期バッファ1同期バッファ1Aまたは同期バッファ1Bを、制御プログラム1リファラ側制御プログラムの参照先状態に設定するとともに書込禁止状態にも設定し、さらに、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212E。なお、制御プログラム1リファラ側制御プログラムが実行中状態である場合ステップS210Aにおいて実行中に実行されるステップS214においては、最新状態に設定されている同期バッファ1に対する、参照先状態および書込禁止状態は解除されず、そのまま維持される。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Eにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するとともに、対応する同期バッファ1の書込禁止状態を解除するステップS220E。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合に実行されるステップS240Eにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを前回コピーしたのと同じ同期バッファ1同期バッファ1Aまたは同期バッファ1Bにコピーするとともに、データを書き込んだ同期バッファ1を最新状態に設定するステップS240E。但し、グローバル変数領域2に格納されているデータの書き込み先となっている同期バッファ1が書込禁止状態に設定されている場合には、他方の同期バッファ1にデータが書き込まれる。h4:[マルチコア]システムプログラムと同一のコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合について例示する。図19および図20は、実施の形態3に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。より具体的には、図19および図20には、コア1が制御プログラム1を実行し、コア2が制御プログラム2を実行するものとする。このとき、コア1では、制御プログラム1に加えてシステムプログラムも実行される。そして、制御プログラム1がオーナー側制御プログラムに設定されているものとする。図19には、制御プログラム1の実行サイクルと制御プログラム2の実行サイクルとが実質的に同じである場合の例を示し、図20には、制御プログラム1の実行サイクルの方が制御プログラム2の実行サイクルより短い場合の例を示す。図19および図20に示すようなマルチコアを採用して、制御プログラム1および制御プログラム2を並列的に実行する場合を考える。制御プログラム2は、コアの資源利用上はいつでも実行可能であるが、PLCとして考えた場合には、制御プログラム2もシステムプログラムの出力処理および入力処理を利用する必要があるため、各制御サイクルの冒頭で実行される出力処理および入力処理の終了を待って、制御プログラム2の実行が開始されることを基本としている。なお、制御プログラム2がシステムプログラムの出力処理および入力処理を利用する必要がないのであれば、制御プログラム2の実行サイクルを制御サイクルと同期せずに実行するように設計を変更してもよい。たとえば、制御プログラム2が実行終了すると、すぐに次回のリファラ側開始処理を行うようにしてもよい。このような場合には、以下に示すような手順に従って、グローバル変数領域1と同期バッファ2Aおよび2Bとの間で同期が保たれる。図21は、実施の形態3に係る実行動作を示すフローチャートである。図21に示すフローチャートは、図19および図20のいずれにも適用される。図21のフローチャートにおいては、図16に示すフローチャートと実質的に同一の処理を実行するステップについては、図16と同一のステップ番号を付与している。図21を参照して、マイクロプロセッサ100コア1は、システムプログラム210における、制御プログラム230の実行準備処理を実行するステップS1。続いて、マイクロプロセッサ100コア1は、システムプログラム210における、制御プログラム230の実行制御処理を実行する図5に示すステップS2。この制御プログラム230の実行制御処理の詳細な一例がステップS200~S270に相当する。まず、マイクロプロセッサ100コア1は、制御サイクル開始の割り込み信号を待つステップS200。制御サイクル開始の割り込み信号を受けるとステップS200においてYES、マイクロプロセッサ100コア1は、制御プログラム1の実行サイクルが現在の制御サイクルから開始する場合には、その制御プログラム1を実行前状態に設定するステップS202F。続いて、マイクロプロセッサ100コア1は、システムプログラム210内のIO処理プログラム218出力処理プログラム214および入力処理プログラム216を実行するステップS204。その後、マイクロプロセッサ100コア1は、制御プログラム1オーナー側制御プログラムの実行状態を判断するステップS210F。制御プログラム1オーナー側制御プログラムが実行前状態である場合ステップS210Fにおいて実行前には、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212。但し、マイクロプロセッサ100のコア1が制御プログラム1の実行に専有される前にステップS230F,S232D,S234Fの処理を行う必要があるので、このフローチャートの表現にかかわらず、制御プログラム1の実行開始はこれらの処理の終了後に行う。制御プログラム1オーナー側制御プログラムが実行中状態である場合ステップS210Fにおいて実行中には、マイクロプロセッサ100コア1は、制御プログラム1の未実行の部分の実行を開始するステップS214。但し、上述と同様の理由により、実際には、ステップS230F,S232D,S234Fの処理の終了後に実行を開始する。ステップS212またはステップS214において制御プログラム1の実行が開始された後、マイクロプロセッサ100コア1は、制御プログラム2リファラ側制御プログラムの実行状態を判断するステップS230F。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230Fにおいて実行終了には、マイクロプロセッサ100コア1は、最新状態に設定されている同期バッファ2同期バッファ2Aまたは同期バッファ2Bを、制御プログラム2リファラ側制御プログラムの参照先状態に設定するとともに書込禁止状態にも設定し、さらに、制御プログラム2の実行状態を実行中状態に設定するとともに、コア2に制御プログラム2の実行を開始させるステップS232D。制御プログラム2リファラ側制御プログラムが実行中状態である場合ステップS230Fにおいて実行中には、マイクロプロセッサ100コア1は、制御プログラム2の実行制御を行わないステップS234F。このとき、対応する同期バッファ2の参照先状態および書込禁止状態はいずれも解除されず、制御プログラム2の実行が継続される。ステップS232DまたはステップS234Fの後、マイクロプロセッサ100コア1は、制御プログラム1オーナー側制御プログラムが実行終了状態であるか否かを判断するステップS211F。実際には、リアルタイムOS200が制御プログラム1の実行終了を検出することがステップS211Fに相当する。制御プログラム1が実行を終了していない場合ステップS211FにおいてNOの場合、マイクロプロセッサ100のコア1は制御プログラム1の実行に専有されているから、実際には、次に説明するステップS216,S236およびS218からなるループ処理、ならびに、ステップS240Dは、このフローチャートのとおりには実行できない。実際には、リアルタイムOS200がコア2における制御プログラム2の実行終了を検出すると、コア1における割り込み処理としてステップS240Dが実行されるのであるが、便宜上このフローチャートに沿って説明する。制御プログラム1オーナー側制御プログラムが実行終了状態である場合ステップS211FにおいてYESの場合には、処理はステップS236Fへ進む。制御プログラム1オーナー側制御プログラムが実行終了状態ではない場合ステップS211FにおいてNOの場合には、マイクロプロセッサ100コア1は、制御プログラム1の実行終了通知を受けたか否かを判断するステップS216。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合には、処理はステップS220Dへ進む。一方、制御プログラム1の実行終了通知を受けていない場合ステップS216においてNOの場合には、マイクロプロセッサ100コア1は、制御プログラム2の実行終了通知を受けたか否かを判断するステップS236。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合には、処理はステップS240Dへ進む。すなわち、制御プログラム1の実行終了通知を受けるまでに制御プログラム2の実行終了通知を受けると、ステップS240Dの処理が実行される。一方、制御プログラム2の実行終了通知を受けていない場合ステップS236においてNOの場合には、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS218。制御サイクル開始の割り込み信号を受けた場合ステップS218においてYESの場合には、ステップS202F以下の処理が再度実行される。すなわち、制御プログラム1の実行終了通知を受けるまでに制御サイクル開始割り込みが発生すると、ステップS202F以下の処理が再度実行される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS218においてNOの場合には、ステップS216以下の処理が繰り返される。ステップS220Dにおいては、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを前回コピーしたのと同じ同期バッファ2同期バッファ2Aまたは同期バッファ2Bにコピーするとともに、データを書き込んだ同期バッファ2を最新状態に設定するステップS220D。続いて、マイクロプロセッサ100コア1は、制御プログラム2の実行終了通知を受けたか否かを判断するステップS236F。制御プログラム2の実行終了通知を受けた場合ステップS236FにおいてYESの場合には、処理はステップS240Dへ進む。すなわち、制御サイクル開始割り込みまでに制御プログラム2の実行終了通知を受けると、ステップS240Dの処理が実行される。一方、制御プログラム2の実行終了通知を受けていない場合ステップS236においてNOの場合には、制御サイクル開始の割り込み信号を受けたか否かを判断するステップS270。制御サイクル開始の割り込み信号を受けた場合ステップS270においてYESの場合には、ステップS202F以下の処理が再度実行される。一方、制御サイクル開始の割り込み信号を受けていない場合ステップS270においてNOの場合には、ステップS236F以下の処理が繰り返される。ステップS240Dにおいては、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行終了状態に設定するとともに、対応する同期バッファ2の書込禁止状態を解除するステップS240D。ステップS240Dの実行後、ステップS240Dに進む前に実行されていた処理へ戻る。h5:[マルチコア]システムプログラムとは異なるコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合において、システムプログラムを実行するコアとは異なるコアで実行される制御プログラムがオーナー側制御プログラムに設定されている場合について例示する。図22は、実施の形態3に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。図22に示すシーケンス図において、コア2で実行される制御プログラム2がオーナー側制御プログラムに設定されているものとする。図23は、実施の形態3に係る別の実行動作を示すフローチャートである。図23のフローチャートにおいては、図18および図21に示すフローチャートと同一の処理を実行するステップについては、それぞれ図18および図21と同一のステップ番号を付与している。図23に示すフローチャートは、図21に示すフローチャートと比較して、ステップS210F,S212,S230F,S232D,S220D,S240Dに代えて、それぞれステップS210G,S212E,S230G,S232A,S220E,S240Eの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。ステップS210Gにおいては、マイクロプロセッサ100コア1は、制御プログラム1リファラ側制御プログラムの実行状態を判断するステップS210G。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Gにおいて実行前に実行されるステップS212Eにおいては、マイクロプロセッサ100コア1は、最新状態に設定されている同期バッファ1同期バッファ1Aまたは同期バッファ1Bを、制御プログラム1リファラ側制御プログラムの参照先状態に設定するとともに書込禁止状態にも設定し、さらに、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212E。但し、制御プログラム1の実行開始はステップS230F,S232A,S234Fの処理の終了後に行う。なお、制御プログラム1リファラ側制御プログラムが実行中状態である場合ステップS210Gにおいて実行中に実行されるステップS214においては、最新状態に設定されている同期バッファ2に対する、参照先状態および書込禁止状態は解除されず、そのまま維持される。ステップS230Gにおいては、マイクロプロセッサ100コア1は、制御プログラム2オーナー側制御プログラムの実行状態を判断するステップS230G。制御プログラム2オーナー側制御プログラムが実行終了状態である場合ステップS230Gにおいて実行終了に実行されるステップS232Aにおいては、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行中状態に設定するとともに、コア2に制御プログラム2の実行を開始させるステップS232A。なお、制御プログラム2オーナー側制御プログラムが実行中状態である場合ステップS230Gにおいて実行中に実行されるステップS234Fにおいては、制御プログラム2の実行が継続される。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Eにおいては、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行終了状態に設定するとともに、対応する同期バッファ1の書込禁止状態を解除するステップS220E。ステップS240Eにおいては、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを前回コピーしたのと同じ同期バッファ1同期バッファ1Aまたは同期バッファ1Bにコピーするとともに、データを書き込んだ同期バッファ1を最新状態に設定するステップS240E。但し、グローバル変数領域2に格納されているデータの書き込み先となっている同期バッファ1が書込禁止状態に設定されている場合には、他方の同期バッファ1にデータが書き込まれる。h6:まとめ上述したように、実施の形態3においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1および2の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする第1同期バッファおよび第2同期バッファを同期バッファの組同期バッファ1Aおよび1B、または、同期バッファ2Aまたは2Bとして記憶手段基本的には、メインメモリ104内に生成する処理このとき、最新データを格納している状態最新状態を格納するための最新状態記録領域が記憶手段基本的には、メインメモリ104内に生成する処理も含まれる。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~4の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図16および図21のステップS212、ならびに、図18および図23のステップS232A2リファラ側制御プログラムを実行開始させる処理であって、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とし、かつ、当該同期バッファを書込禁止状態とする処理を実行するリファラ側開始処理図16および図21のステップS232D、ならびに、図18および図23のステップS212E3オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を、グローバル変数領域から、そのグローバル変数に対応する第1同期バッファおよび第2同期バッファのうち書込禁止状態ではないいずれかの同期バッファをコピー先として、コピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を実行するコピー処理図16および図21のステップS220D、ならびに、図18および図23のステップS240E4リファラ側制御プログラムの実行が終了すると、書込禁止状態であった同期バッファの書込禁止状態を解除する書込禁止解除処理図16および図21のステップS240D、ならびに、図18および図23のステップS220E上述のような実施の形態3によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが2つあり、常に少なくとも1つの同期バッファに書込可能であるので、いつでもコピー処理が可能である。さらに、リファラ側制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている同期バッファを参照先とすることにより、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。書込禁止状態を用いることにおいて共通する上述の実施の形態1と比較すると、実施の形態3では、たとえば、図19に円で囲って示すように、一方の同期バッファの書込禁止期間中にコピー処理を行うべきタイミングが来た場合でも、他方の同期バッファに対してコピー処理を実行した上で、そのコピーしたデータを後に参照側制御プログラムが参照することが可能である。したがって、コピー処理のタイミングが書込禁止期間中に到来したためにそのデータをリファラ側制御プログラムが参照できなくなるということがない。特に、マルチコアのマイクロプロセッサで制御プログラムを並列実行する場合には、一方の同期バッファの書込禁止期間中にコピー処理したデータをリファラ側制御プログラムが参照するということが発生するので、実施の形態3はより有利となる。<I.更新フラグ型2バッファ入替方式実施の形態4>i1:概要上述の実施の形態3においては、グローバル変数領域1に格納されているデータがコピーされた同期バッファを書込禁止状態に設定することで、グローバル変数領域1との間で同期を保つ構成を説明した。これに対して、実施の形態4および5では、同期バッファを書込先状態と参照先状態とに設定し、これらの状態を入れ替えることにより、グローバル変数領域1との間で同期を保つ構成が採用される。特に、実施の形態4においては、最新データ更新フラグを利用して同期バッファの状態の入れ替えを制御する構成について例示する。実施の形態4においても、マイクロプロセッサ100がマルチコアである場合について例示する。i2:[マルチコア]システムプログラムと同一のコアで実行される制御プログラムがグローバル変数のオーナー図24および図25は、実施の形態4に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。より具体的には、図24および図25には、コア1が制御プログラム1を実行し、コア2が制御プログラム2を実行するものとする。このとき、コア1では、制御プログラム1に加えてシステムプログラムも実行される。そして、制御プログラム1がオーナー側制御プログラムに設定されているものとする。図24には、制御プログラム1の実行サイクルと制御プログラム2の実行サイクルとが実質的に同じである場合の例を示し、図25には、制御プログラム1の実行サイクルの方が制御プログラム2の実行サイクルより短い場合の例を示す。なお、図24および図25は、後述する実施の形態5と共通的に説明するためのシーケンス図である。後述する実施の形態5においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。そのため、図24および図25を参照して、実施の形態4について説明する場合には、最新データ更新フラグについてのみ着目し、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別は不要である。一方、図24および図25を参照して、実施の形態5について説明する場合には、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。また、図24および図25においては、書込先状態および参照先状態を、単に、書込先および参照先と記述する。図24および図25に示すようなマルチコアを採用して、制御プログラム1および制御プログラム2を並列的に実行する場合を考える。制御プログラム2は、コアの資源利用上はいつでも実行可能であるが、PLCとして考えた場合には、制御プログラム2もシステムプログラムの出力処理および入力処理を利用する必要があるため、各制御サイクルの冒頭で実行される出力処理および入力処理の終了を待って、制御プログラム2の実行が開始されることを基本としている。なお、制御プログラム2がシステムプログラムの出力処理および入力処理を利用する必要がないのであれば、制御プログラム2の実行サイクルを制御サイクルと同期せずに実行するように設計を変更してもよい。たとえば、制御プログラム2が実行終了すると、すぐに次回のリファラ側開始処理を行うようにしてもよい。このような場合には、以下に示すような手順に従って、グローバル変数領域1と同期バッファ2Aおよび2Bとの間で同期が保たれる。図26は、実施の形態4に係る実行動作を示すフローチャートである。図26に示すフローチャートは、図24および図25のいずれにも適用される。図26のフローチャートにおいては、図21に示すフローチャートと実質的に同一の処理を実行するステップについては、図21と同一のステップ番号を付与している。図26に示すフローチャートは、図21に示すフローチャートと比較して、ステップS232D,S220D,S240Dに代えて、それぞれステップS232G,S220G,S240Gの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。マイクロプロセッサ100は、制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230Fにおいて実行終了に実行されるステップS232Gにおいては、マイクロプロセッサ100コア1は、最新データ更新フラグ2がオンに設定されていれば、書込先状態であった同期バッファ2同期バッファ2Aまたは2Bを参照先状態に変更するとともに、参照先状態であった同期バッファ2同期バッファ2Aまたは2Bを書込先状態に変更した上で、最新データ更新フラグ2をオンからオフに変更する。なお、最新データ更新フラグ2がオンに設定されていなければ最新データ更新フラグ2がオフに設定されていれば、同期バッファ2の書込先状態および参照先状態については変更せず、最新データ更新フラグ2についてもオフのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行中状態に設定するとともに、コア2に制御プログラム2の実行を開始させるステップS232G。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Gにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを書込先状態に設定されている同期バッファ2同期バッファ2Aまたは同期バッファ2Bにコピーするとともに、最新データ更新フラグ2をオンに設定するステップS220G。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Gにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するステップS240G。上述したような同期バッファの状態、すなわち、書込先状態および参照先状態は、それぞれ書込先状態記録領域および参照先状態記録領域に、対応する同期バッファが書込先状態および参照先状態であることをそれぞれ記録することよって表される。これらの各記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込先状態または参照先状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込先状態または参照先状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込先状態、参照先状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。なお、1つの同期バッファについて書込先状態と参照先状態とは重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、1つのフラグまたは状態変数によって書込先状態か参照先状態かを表してもよい。なお、実施の形態4に係るシーケンス図に表されている最新データ更新フラグの垂直線時間軸に沿った線のうち、太い線の部分は最新データ更新フラグがオンであることを表す。最新データ更新フラグは、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。最新データ更新フラグは、一括してコピー処理が行われる単位でグループ化された同期バッファのグループごとに設けられる。i3:[マルチコア]システムプログラムとは異なるコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合において、システムプログラムを実行するコアとは異なるコアで実行される制御プログラムがオーナー側制御プログラムに設定されている場合について例示する。図27は、実施の形態4に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。図27に示すシーケンス図において、コア2で実行される制御プログラム2がオーナー側制御プログラムに設定されているものとする。図27については、上述の図24および図25と同様に、後述する実施の形態5と共通的に説明するためのシーケンス図である。そのため、図27を参照して、実施の形態4について説明する場合には、最新データ更新フラグについてのみ着目し、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別は不要である。一方、図27を参照して、実施の形態5について説明する場合には、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図28は、実施の形態4に係る別の実行動作を示すフローチャートである。図28のフローチャートにおいては、図23に示すフローチャートと同一の処理を実行するステップについては、それぞれ図23と同一のステップ番号を付与している。図28に示すフローチャートは、図23に示すフローチャートと比較して、ステップS212E,S220E,S240Eに代えて、それぞれステップS212H,S220H,S240Hの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Gにおいて実行前に実行されるステップS212Hにおいては、マイクロプロセッサ100コア1は、最新データ更新フラグ1がオンに設定されていれば、書込先状態であった同期バッファ1同期バッファ1Aまたは1Bを参照先状態に変更するとともに、参照先状態であった同期バッファ1同期バッファ1Aまたは1Bを書込先状態に変更した上で、最新データ更新フラグ1をオンからオフに変更する。なお、最新データ更新フラグ1がオンに設定されていなければ最新データ更新フラグ1がオフに設定されていれば、同期バッファ1の書込先状態および参照先状態については変更せず、最新データ更新フラグ1についてもオフのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212H。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Hにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するステップS220H。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Hにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを書込先状態に設定されている同期バッファ1同期バッファ1Aまたは同期バッファ1Bにコピーするとともに、最新データ更新フラグ1をオンに設定するステップS240H。i4:まとめ上述したように、実施の形態4においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1~3の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段内基本的には、メインメモリ104に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする、第1同期バッファおよび第2同期バッファを同期バッファの組同期バッファ1Aおよび1B、または、同期バッファ2Aまたは2Bとして記憶手段基本的には、メインメモリ104内に生成する処理3グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段基本的には、メインメモリ104内に生成する処理第1同期バッファおよび第2同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態のうち、いずれかの状態が重複せずに付与される。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~3の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図26のステップS212、および、図28のステップS232A2オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を、グローバル変数領域から、そのグローバル変数に対応する書込先状態である同期バッファにコピーする処理であって、さらに、当該コピー処理に関連する最新データ更新フラグをオンにする処理を実行するコピー処理図26のステップS220G、および、図28のステップS240H3リファラ側制御プログラムを実行開始させる処理であって、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが書込先状態であることを条件としてすなわち、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理と、当該オン状態であった最新データ更新フラグをオフにする処理とを実行するリファラ側開始処理図26のステップS232G、および、図28のステップS212H上述のような実施の形態4によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが2つあり、リファラ側開始処理において同期バッファの書込先状態と参照先状態との入替処理第3入替処理をしている間の短い時間を除き、常にいずれかの同期バッファが書込先状態であるので、いつでもコピー処理が可能である。さらに、リファラ側制御プログラムの実行開始時に、最新データ更新フラグの状態に基づいて、コピーされた最新データが格納されている同期バッファを参照先とすることにより、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。<J.最新データ型2バッファ入替方式実施の形態5>j1:概要上述したように、実施の形態5においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。j2:[マルチコア]システムプログラムと同一のコアで実行される制御プログラムがグローバル変数のオーナー実施の形態5に係るマルチコアのマイクロプロセッサでの実行動作は、上述した図24および図25のシーケンス図に示す。但し、図24および図25は、上述の実施の形態4と共通的に説明するためのシーケンス図であり、実施の形態5においては、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図29は、実施の形態5に係る実行動作を示すフローチャートである。図29に示すフローチャートは、図24および図25のいずれにも適用される。図29のフローチャートにおいては、図21に示すフローチャートと実質的に同一の処理を実行するステップについては、図21と同一のステップ番号を付与している。図29に示すフローチャートは、図21に示すフローチャートと比較して、ステップS232D,S220D,S240Dに代えて、それぞれステップS232I,S220I,S240Iの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230Fにおいて実行終了に実行されるステップS232Iにおいては、マイクロプロセッサ100は、最新状態に設定されている同期バッファ2同期バッファ2Aまたは同期バッファ2Bを、制御プログラム2リファラ側制御プログラムの参照先状態に設定するとともに、他方の同期バッファ2を書込先状態に設定し、さらに、制御プログラム2の実行状態を実行中状態に設定するとともに、制御プログラム2の実行を開始するステップS232I。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Iにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを書込先状態に設定されている同期バッファ2同期バッファ2Aまたは同期バッファ2Bにコピーするとともに、グローバル変数領域1に格納されているデータを書き込んだ先の同期バッファ2を最新状態に設定するステップS220I。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Iにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定するステップS240I。上述したような同期バッファの状態、すなわち、書込先状態、参照先状態、最新状態は、それぞれ書込先状態記録領域、参照先状態記録領域、最新状態記録領域に、対応する同期バッファが書込先状態、参照先状態、最新状態であることをそれぞれ記録することよって表される。これらの各記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込先状態、参照先状態、最新状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込先状態、参照先状態、最新状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込先状態、参照先状態、最新状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。1つの同期バッファについて書込先状態と参照先状態とは重複しないように付与されるので、書込先状態記録領域と参照先状態記録領域とを分けずに共通の状態記録領域を生成し、1つのフラグまたは状態変数によって書込先状態か参照先状態かを表してもよい。j3:[マルチコア]システムプログラムとは異なるコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合において、システムプログラムを実行するコアとは異なるコアで実行される制御プログラムがオーナー側制御プログラムに設定されている場合について例示する。実施の形態5に係るマルチコアのマイクロプロセッサでの別の実行動作は、上述した図27のシーケンス図に示す。但し、図27は、上述の実施の形態4と共通的に説明するためのシーケンス図であり、実施の形態5においては、同期バッファ2Aおよび2Bの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図30は、実施の形態5に係る別の実行動作を示すフローチャートである。図30のフローチャートにおいては、図23に示すフローチャートと同一の処理を実行するステップについては、それぞれ図23と同一のステップ番号を付与している。図30に示すフローチャートは、図23に示すフローチャートと比較して、ステップS212E,S220E,S240Eに代えて、それぞれステップS212J,S220J,S240Jの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Gにおいて実行前に実行されるステップS212Jにおいては、マイクロプロセッサ100コア1は、最新状態に設定されている同期バッファ1同期バッファ1Aまたは同期バッファ1Bを、制御プログラム1リファラ側制御プログラムの参照先状態に設定するとともに、他方の同期バッファ1を書込先状態に設定し、さらに、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212J。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Jにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定するステップS220J。制御プログラム1の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Jにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを書込先状態に設定されている同期バッファ1同期バッファ1Aまたは同期バッファ1Bにコピーするとともに、グローバル変数領域1に格納されているデータを書き込んだ先の同期バッファ1を最新状態に設定するステップS240J。j4:まとめ上述したように、実施の形態5においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1~3の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする、第1同期バッファおよび第2同期バッファを同期バッファの組同期バッファ1Aおよび1B、または、同期バッファ2Aまたは2Bとして記憶手段内に生成する処理3最新状態記録領域を記憶手段基本的には、メインメモリ104内に生成する処理第1同期バッファおよび第2同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、および、リファラ側制御プログラムから参照可能な状態である参照先状態のうち、いずれかの状態が重複せずに付与される。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~3の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図29のステップS212、および、図30のステップS232A2オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を、グローバル変数領域から、そのグローバル変数に対応する書込先状態である同期バッファにコピーする処理であって、さらに、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理を実行するコピー処理図29のステップS220I、および、図30のステップS240J3リファラ側制御プログラムを実行開始させる処理であって、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新状態記録領域の内容によって特定される最新状態である同期バッファが書込先状態であることを条件として、書込先状態である同期バッファおよび参照先状態である同期バッファの書込先状態と参照先状態とを入れ替える第3入替処理を実行するリファラ側開始処理図29のステップS232I、および、図30のステップS212Jなお、リファラ側開始処理は、次のように説明することもできる。すなわち、リファラ側制御プログラムを実行開始させる処理であって、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とし、かつ、参照先状態とする同期バッファと同じ組に属する他方の同期バッファを書込先状態とする処理を実行するリファラ側開始処理。上述のような実施の形態5によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが2つあり、リファラ側開始処理において同期バッファの書込先状態と参照先状態との入替処理第3入替処理をしている間の短い時間を除き、常にいずれかの同期バッファが書込先状態であるので、いつでもコピー処理が可能である。さらに、リファラ側制御プログラムの実行開始時に、最新状態記録領域の内容に基づいて、コピーされた最新データが格納されている同期バッファを参照先とすることにより、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。<K.更新フラグ型3バッファ入替方式実施の形態6>k1:概要上述の実施の形態4においては、最新データ更新フラグを利用して、2つの同期バッファにデータを格納する構成について例示したが、実施の形態6においては、3つの同期バッファにデータを格納する構成について例示する。すなわち、実施の形態4の構成を3つの同期バッファに拡張した構成について例示する。実施の形態6においても、マイクロプロセッサ100がマルチコアである場合について例示する。k2:[マルチコア]システムプログラムと同一のコアで実行される制御プログラムがグローバル変数のオーナー図31および図32は、実施の形態6に係るマルチコアのマイクロプロセッサでの実行動作を示すシーケンス図である。より具体的には、図31および図32には、コア1が制御プログラム1を実行し、コア2が制御プログラム2を実行するものとする。このとき、コア1では、制御プログラム1に加えてシステムプログラムも実行される。そして、制御プログラム1がオーナー側制御プログラムに設定されているものとする。図31には、制御プログラム1の実行サイクルと制御プログラム2の実行サイクルとが実質的に同じである場合の例を示し、図32には、制御プログラム1の実行サイクルの方が制御プログラム2の実行サイクルより短い場合の例を示す。図31および図32に示すように、実施の形態6においては、制御プログラム1にグローバル変数領域1が対応付けられ、制御プログラム2に同期バッファ2A,2B,2Cが対応付けられている。なお、図31および図32は、後述する実施の形態7と共通的に説明するためのシーケンス図である。後述する実施の形態7においては、実施の形態5の構成を同期バッファを3個に拡張した構成に相当し、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を扱う。そのため、図31および図32を参照して、実施の形態6について説明する場合には、最新データ更新フラグについてのみ着目し、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別は不要である。一方、図31および図32を参照して、実施の形態7について説明する場合には、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。また、図31および図32においては、書込先状態および参照先状態を、単に、書込先および参照先と記述する。図31および図32に示すようなマルチコアを採用して、制御プログラム1および制御プログラム2を並列的に実行する場合を考える。制御プログラム2は、コアの資源利用上はいつでも実行可能であるが、PLCとして考えた場合には、制御プログラム2もシステムプログラムの出力処理および入力処理を利用する必要があるため、各制御サイクルの冒頭で実行される出力処理および入力処理の終了を待って、制御プログラム2の実行が開始されることを基本としている。なお、制御プログラム2がシステムプログラムの出力処理および入力処理を利用する必要がないのであれば、制御プログラム2の実行サイクルを制御サイクルと同期せずに実行するように設計を変更してもよい。たとえば、制御プログラム2が実行終了すると、すぐに次回のリファラ側開始処理を行うようにしてもよい。このような場合には、以下に示すような手順に従って、グローバル変数領域1と同期バッファ2Aおよび2Bとの間で同期が保たれる。図33は、実施の形態6に係る実行動作を示すフローチャートである。図33に示すフローチャートは、図31および図32のいずれにも適用される。図33のフローチャートにおいては、図26に示すフローチャートと実質的に同一の処理を実行するステップについては、図26と同一のステップ番号を付与している。図33に示すフローチャートは、図26に示すフローチャートと比較して、ステップS232GおよびS220Gに代えて、それぞれステップS232KおよびS220Kの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230Fにおいて実行終了に実行されるステップS232Kにおいては、マイクロプロセッサ100は、最新データ更新フラグ2がオンに設定されていれば、待機状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを参照先状態に変更するとともに、参照先状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを待機状態に変更した上で、最新データ更新フラグ2をオンからオフに変更する。なお、最新データ更新フラグ2がオンに設定されていなければ最新データ更新フラグ2がオフに設定されていれば、同期バッファ2の待機状態および参照先状態については変更せず、最新データ更新フラグ2についてもオフのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行中状態に設定するとともに、コア2に制御プログラム2の実行を開始させるステップS232K。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Kにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを書込先状態に設定されている同期バッファ2同期バッファ2A,2B,2Cのいずれかにコピーする。さらに、マイクロプロセッサ100は、書込先状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを待機状態に変更するとともに、待機状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを書込先状態に変更した上で、最新データ更新フラグ2をオンに設定するステップS220K。上述したような同期バッファの状態、すなわち、同期バッファの書込先状態、参照先状態、待機状態は、それぞれ書込先状態記録領域、参照先状態記録領域、待機状態記録領域に、対応する同期バッファが書込先状態、参照先状態、待機状態であることをそれぞれ記録することよって表される。これらの各記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込先状態、参照先状態、待機状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込先状態、参照先状態、待機状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込先状態、参照先状態、待機状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。なお、1つの同期バッファについて書込先状態、参照先状態、待機状態は重複しないように付与されるので、これらの記録領域を分けずに共通の状態記録領域を生成し、1組のフラグまたは1つの状態変数によってどの状態であるかを表してもよい。なお、実施の形態6に係るシーケンス図に表されている最新データ更新フラグの垂直線時間軸に沿った線のうち、太い線の部分は最新データ更新フラグがオンであることを表す。最新データ更新フラグは、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。最新データ更新フラグは、一括してコピー処理が行われる単位でグループ化された同期バッファのグループごとに設けられる。k3:[マルチコア]システムプログラムとは異なるコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合において、システムプログラムを実行するコアとは異なるコアで実行される制御プログラムがオーナー側制御プログラムに設定されている場合について例示する。図34は、実施の形態6に係るマルチコアのマイクロプロセッサでの別の実行動作を示すシーケンス図である。図34に示すシーケンス図において、コア2で実行される制御プログラム2がオーナー側制御プログラムに設定されているものとする。図34については、上述の図31および図32と同様に、後述する実施の形態7と共通的に説明するためのシーケンス図である。そのため、図34を参照して、実施の形態6について説明する場合には、最新データ更新フラグについてのみ着目し、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別は不要である。一方、図34を参照して、実施の形態7について説明する場合には、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図35は、実施の形態6に係る別の実行動作を示すフローチャートである。図35のフローチャートにおいては、図28に示すフローチャートと同一の処理を実行するステップについては、それぞれ図28と同一のステップ番号を付与している。図35に示すフローチャートは、図28に示すフローチャートと比較して、ステップS212HおよびS240Hに代えて、それぞれステップS212LおよびS240Lの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Gにおいて実行前に実行されるステップS212Lにおいては、マイクロプロセッサ100は、最新データ更新フラグ1がオンに設定されていれば、待機状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを参照先状態に変更するとともに、参照先状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを待機状態に変更した上で、最新データ更新フラグ1をオンからオフに変更する。なお、最新データ更新フラグ1がオンに設定されていなければ最新データ更新フラグ1がオフに設定されていれば、同期バッファ1の待機状態および参照先状態については変更せず、最新データ更新フラグ1についてもオフのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212L。制御プログラム2の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Lにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを書込先状態に設定されている同期バッファ1同期バッファ1A,1B,1Cのいずれかにコピーする。さらに、マイクロプロセッサ100は、書込先状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを待機状態に変更するとともに、待機状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを書込先状態に変更した上で、最新データ更新フラグ1をオンに設定するステップS220L。k4:まとめ上述したように、実施の形態6においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1~3の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする、第1同期バッファ、第2同期バッファおよび第3同期バッファを同期バッファの組同期バッファ1A,1B,1C、または、同期バッファ2A,2B,2Cとして記憶手段内に生成する処理3グローバル変数によって関係付けられるオーナー側制御プログラムとリファラ側制御プログラムとの組み合わせごとに最新データ更新フラグを記憶手段内に生成する処理このとき、第1同期バッファ、第2同期バッファ、および第3同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、リファラ側制御プログラムから参照可能な状態である参照先状態、待機状態のいずれかの状態が重複せずに付与される。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~3の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図33のステップS212、および、図35のステップS232A2オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を、グローバル変数領域から、そのグローバル変数に対応する書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理と、当該コピーする処理に関連する最新データ更新フラグをオンにする処理とを実行するコピー処理図33のステップS220K、および、図35のステップS240L3リファラ側制御プログラムを実行開始させる処理であって、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新データを格納している同期バッファが待機状態であることを条件としてすなわち、実行開始させるリファラ側制御プログラムの同期バッファに関連する最新データ更新フラグがオンであることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理と、当該オン状態であった最新データ更新フラグをオフにする処理を実行するリファラ側開始処理図33のステップS232K、および、図35のステップS212L上述のような実施の形態6によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが3つあり、常にいずれかの同期バッファが書込先状態であるので、いつでもコピー処理が可能である。さらに、リファラ側制御プログラムの実行開始時に、コピーされた最新データが格納されている同期バッファを参照先とすることにより、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。また、実施の形態6では、リファラ側制御プログラムの実行開始時にコピーされた最新データが格納されている同期バッファを参照先とする手段として、コピー処理において同期バッファの書込先状態と待機状態の入替を行い、リファラ側開始処理において、最新データ更新フラグの状態に基づいて、同期バッファの待機状態と参照先状態の入替を行う。グローバル変数領域からコピーが行われたときに書込先状態であった同期バッファは、待機状態を経て参照先状態となる。上述の実施の形態4の場合には、リファラ側開始処理において同期バッファの書込先状態と参照先状態との入替処理第3入替処理をしている短い時間の間はグローバル変数領域から同期バッファへのコピー処理をすることができず、第3入替処理の終了を待ってコピー処理を行う必要があったが、実施の形態6の場合には、リファラ側開始処理において同期バッファの待機状態と参照先状態との入替処理第2入替処理をしている間であってもグローバル変数領域から同期バッファへのコピー処理を実行するように設計することが可能である。<L.最新データ型3バッファ入替方式実施の形態7>l1:概要上述の実施の形態5においては、コピーされた最新データが格納されている同期バッファを参照先として識別するための情報を利用して、2つの同期バッファにデータを格納する構成について例示したが、実施の形態7においては、3つの同期バッファにデータを格納する構成について例示する。すなわち、実施の形態5の構成を3つの同期バッファに拡張した構成について例示する。実施の形態7においても、マイクロプロセッサ100がマルチコアである場合について例示する。l2:[マルチコア]システムプログラムと同一のコアで実行される制御プログラムがグローバル変数のオーナー実施の形態7に係るマルチコアのマイクロプロセッサでの実行動作は、上述した図31および図32のシーケンス図に示す。但し、図31および図32は、上述の実施の形態6と共通的に説明するためのシーケンス図であり、実施の形態7においては、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図36は、実施の形態7に係る実行動作を示すフローチャートである。図36に示すフローチャートは、図31および図32のいずれにも適用される。図36のフローチャートにおいては、図29に示すフローチャートと実質的に同一の処理を実行するステップについては、図29と同一のステップ番号を付与している。図36に示すフローチャートは、図29に示すフローチャートと比較して、ステップS232IおよびS220Iに代えて、それぞれステップS232MおよびS220Mの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム2リファラ側制御プログラムが実行終了状態である場合ステップS230Fにおいて実行終了に実行されるステップS232Mにおいては、マイクロプロセッサ100コア1は、最新状態の同期バッファ2同期バッファ2A,2B,2Cのいずれかが待機状態に設定されていれば、待機状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを参照先状態に変更するとともに、参照先状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを待機状態に変更する。なお、最新状態の同期バッファ2同期バッファ2A,2B,2Cのいずれかが参照状態に設定されていれば、同期バッファ2の待機状態および参照先状態については変更せず、そのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム2の実行状態を実行中状態に設定するとともに、コア2に制御プログラム2の実行を開始させるステップS232M。制御プログラム1の実行終了通知を受けた場合ステップS216においてYESの場合に実行されるステップS220Mにおいては、マイクロプロセッサ100は、制御プログラム1の実行状態を実行終了状態に設定した上で、グローバル変数領域1に格納されているデータを書込先状態に設定されている同期バッファ2同期バッファ2A,2B,2Cのいずれかにコピーする。さらに、マイクロプロセッサ100は、書込先状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを待機状態に変更するとともに最新状態にも設定し、待機状態であった同期バッファ2同期バッファ2A,2B,2Cのいずれかを書込先状態に設定するステップS220M。上述したような同期バッファの状態、すなわち、同期バッファの書込先状態、参照先状態、待機状態、最新状態は、それぞれ書込先状態記録領域、参照先状態記録領域、待機状態記録領域、最新状態記録領域に、対応する同期バッファが書込先状態、参照先状態、待機状態、最新状態であることをそれぞれ記録することよって表される。これらの各記録領域は、システムプログラム210が制御プログラムの実行準備処理図5に示すステップS1において、メインメモリ104内の制御プログラムの作業領域1042に生成する。同期バッファが書込先状態、参照先状態、待機状態、最新状態であることの記録の態様は適宜に定めることができる。たとえば、一括してコピー処理が行われる単位でグループ化された同期バッファのグループのうち書込先状態、参照先状態、待機状態、最新状態であるものを特定する情報同期バッファのグループの識別番号などを記録する態様、そのような同期バッファのグループごとに書込先状態、参照先状態、待機状態、最新状態であるかどうかを表すフラグまたは状態変数を設けてそのフラグまたは状態変数の値を用いて記録する態様、などを採用することができる。1つの同期バッファについて書込先状態、参照先状態、待機状態は重複しないように付与されるので、書込先状態記録領域、参照先状態記録領域、待機状態記録領域を分けずに共通の状態記録領域を生成し、1組のフラグまたは1つの状態変数によってこれら3つの状態のうちのどの状態であるかを表してもよい。l3:[マルチコア]システムプログラムとは異なるコアで実行される制御プログラムがグローバル変数のオーナー次に、マイクロプロセッサ100がマルチコアである場合において、システムプログラムを実行するコアとは異なるコアで実行される制御プログラムがオーナー側制御プログラムに設定されている場合について例示する。実施の形態7に係るマルチコアのマイクロプロセッサでの別の実行動作は、上述した図34のシーケンス図に示す。但し、図34は、上述の実施の形態6と共通的に説明するためのシーケンス図であり、実施の形態7においては、同期バッファ2A,2B,2Cの時間軸に沿って示した最新状態の識別についてのみ着目し、最新データ更新フラグは不要となる。図37は、実施の形態7に係る別の実行動作を示すフローチャートである。図37のフローチャートにおいては、図30に示すフローチャートと同一の処理を実行するステップについては、それぞれ図30と同一のステップ番号を付与している。図37に示すフローチャートは、図30に示すフローチャートと比較して、ステップS212JおよびS240Jに代えて、それぞれステップS212NおよびS240Nの処理が実行される点が異なっている。以下、主としてこの相違点について説明し、その他の処理についての詳細な説明は繰り返さない。制御プログラム1リファラ側制御プログラムが実行前状態である場合ステップS210Gにおいて実行前に実行されるステップS212Nにおいては、マイクロプロセッサ100は、最新状態の同期バッファ1同期バッファ1A,1B,1Cのいずれかが待機状態に設定されていれば、待機状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを参照先状態に変更するとともに、参照先状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを待機状態に変更する。なお、最新状態の同期バッファ1同期バッファ1A,1B,1Cのいずれかが参照状態に設定されていれば、同期バッファ1の待機状態および参照先状態については変更せず、そのまま維持する。さらに、マイクロプロセッサ100コア1は、制御プログラム1の実行状態を実行中状態に設定するとともに、制御プログラム1の実行を開始するステップS212N。制御プログラム1の実行終了通知を受けた場合ステップS236においてYESの場合、または、ステップS236FにおいてYESの場合に実行されるステップS240Nにおいては、マイクロプロセッサ100は、制御プログラム2の実行状態を実行終了状態に設定した上で、グローバル変数領域2に格納されているデータを書込先状態に設定されている同期バッファ1同期バッファ1A,1B,1Cのいずれかにコピーする。さらに、マイクロプロセッサ100は、書込先状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを待機状態に変更するとともに最新状態にも設定し、さらに、待機状態であった同期バッファ1同期バッファ1A,1B,1Cのいずれかを書込先状態に変更するステップS240N。l4:まとめ上述したように、実施の形態7においては、システムプログラム210は、制御プログラム230の実行準備処理として、以下の1~3の処理を含む。1グローバル変数を格納するグローバル変数領域1042aを記憶手段基本的には、メインメモリ104内に生成する処理2各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする、第1同期バッファ、第2同期バッファおよび第3同期バッファを同期バッファの組同期バッファ1A,1B,1C、または、同期バッファ2A,2B,2Cとして記憶手段内に生成する処理3最新状態記録領域を記憶手段内に生成する処理第1同期バッファ、第2同期バッファ、および第3同期バッファは、グローバル変数領域からグローバル変数をコピー可能な状態である書込先状態、リファラ側制御プログラムから参照可能な状態である参照先状態、待機状態のいずれかの状態が重複せずに付与される。また、システムプログラム210は、制御プログラム230の実行制御処理として、以下の1~3の処理を含む。1オーナー側制御プログラムを実行開始させるオーナー側開始処理図36のステップS212、および、図37のステップS232A2オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を、グローバル変数領域から、そのグローバル変数に対応する書込先状態である同期バッファにコピーする処理であって、さらに、コピー先となった書込先状態である同期バッファおよびその同期バッファと同じ組の中で待機状態である同期バッファの書込先状態と待機状態とを入れ替える第1入替処理と、コピー先の同期バッファが最新状態であることを最新状態記録領域に記録する処理とを実行するコピー処理図36のステップS220M、および、図37のステップS240N3リファラ側制御プログラムを実行開始させる処理であって、さらに、実行開始させるリファラ側制御プログラムの同期バッファについて、最新状態記録領域の内容によって特定される最新状態である同期バッファが待機状態であることを条件として、待機状態である同期バッファおよび参照先状態である同期バッファの待機状態と参照先状態とを入れ替える第2入替処理を実行するリファラ側開始処理図36のステップS232M、および、図37のステップS212Nなお、リファラ側開始処理は、次のように説明することもできる。すなわち、リファラ側制御プログラムを実行開始させる処理であって、さらに、最新状態記録領域の内容によって特定される最新状態である同期バッファをそのリファラ側制御プログラムの実行において参照する参照先状態とし、かつ、参照先状態とする同期バッファと同じ組に属する同期バッファであって書込先状態でない同期バッファを待機状態とする処理を実行するリファラ側開始処理。上述のような実施の形態7によれば、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに同期バッファが3つあり、常にいずれかの同期バッファが書込先状態であるので、いつでもコピー処理が可能である。さらに、リファラ側制御プログラムの実行開始時に、コピーされた最新データが格納されている同期バッファを参照先とすることにより、リファラ側制御プログラムはその実行開始時における最新のグローバル変数の値を参照することができる。さらに、実施の形態7では、リファラ側制御プログラムの実行開始時にコピーされた最新データが格納されている同期バッファを参照先とする手段として、コピー処理において同期バッファの書込先状態と待機状態の入替を行い、リファラ側開始処理において、最新状態記録領域の内容に基づいて、同期バッファの待機状態と参照先状態の入替を行う。グローバル変数領域からコピーが行われたときに書込先状態であった同期バッファは、待機状態を経て参照先状態となる。上述の実施の形態5の場合には、リファラ側開始処理において同期バッファの書込先状態と参照先状態との入替処理第3入替処理をしている短い時間の間はグローバル変数領域から同期バッファへのコピー処理をすることができず、第3入替処理の終了を待ってコピー処理を行う必要があったが、実施の形態7の場合には、リファラ側開始処理において同期バッファの待機状態と参照先状態との入替処理第2入替処理をしている間であってもグローバル変数領域から同期バッファへのコピー処理を実行するように設計することが可能である。<M.サポート装置>次に、PLC1で実行されるプログラムの作成およびPLC1のメンテナンスなどを行うためのPLCサポート装置8について説明する。図38は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のハードウェア構成を示す模式図である。図38を参照して、PLCサポート装置8は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。図38を参照して、PLCサポート装置8は、OSを含む各種プログラムを実行するCPU81と、BIOSや各種データを格納するROMReadOnlyMemory82と、CPU81でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリRAM83と、CPU81で実行されるプログラムなどを不揮発的に格納するハードディスクHDD84とを含む。PLCサポート装置8は、さらに、ユーザからの操作を受付けるキーボード85およびマウス86と、情報をユーザに提示するためのモニタ87とを含む。さらに、PLCサポート装置8は、PLC1CPUユニット13などと通信するための通信インターフェイスIF89を含む。後述するように、PLCサポート装置8で実行される各種プログラムは、CD-ROM9に格納されて流通する。このCD-ROM9に格納されたプログラムは、CD-ROMCompactDiskReadOnlyMemoryドライブ88によって読取られ、ハードディスクHDD84などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。上述したように、PLCサポート装置8は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。図39は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のソフトウェア構成を示す模式図である。図39を参照して、PLCサポート装置8ではOS310が実行され、PLCサポートプログラム320に含まれる各種のプログラムを実行可能な環境が提供される。PLCサポートプログラム320は、エディタプログラム321と、コンパイラプログラム322と、デバッガプログラム323と、シミュレーション用シーケンス命令演算プログラム324と、シミュレーション用モーション演算プログラム325と、通信プログラム326とを含む。PLCサポートプログラム320に含まれるそれぞれのプログラムは、典型的には、CD-ROM9に格納された状態で流通して、PLCサポート装置8にインストールされる。エディタプログラム321は、ユーザプログラム236を作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム321は、ユーザがキーボード85やマウス86を操作してユーザプログラム236のソースプログラム330を作成する機能に加えて、作成したソースプログラム330の保存機能および編集機能を提供する。また、エディタプログラム321は、外部からの制御プログラム230その中でも特に、ユーザプログラム236のソースプログラムを入力し、またユーザの操作により既存の制御プログラム230のソースプログラムを編集する。エディタプログラム321は、さらに、制御プログラム230が使用する変数についての属性データの入力および編集も行う。コンパイラプログラム322は、制御プログラム230のソースプログラムをコンパイルして、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式のユーザプログラム236を生成する機能を提供する。また、コンパイラプログラム322は、ソースプログラム330をコンパイルして、PLCサポート装置8のCPU81で実行可能なオブジェクトプログラム形式のユーザプログラム340を生成する機能を提供する。このユーザプログラム340は、PLCサポート装置8によってPLC1の動作をシミュレート模擬するために使用される、シミュレーション用のオブジェクトプログラムである。デバッガプログラム323は、制御プログラム230のソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。デバッガプログラム323は、さらに、制御プログラム230のシミュレーション用のオブジェクトプログラムを実行する機能を提供する。このシミュレーション時には、CPUユニット13のシステムプログラムに含まれるシーケンス命令演算プログラム232およびモーション演算プログラム234に代えて、PLCサポートプログラム320に含まれるシミュレーション用シーケンス命令演算プログラム324およびシミュレーション用モーション演算プログラム325が用いられる。通信プログラム326は、PLC1のCPUユニット13へ制御プログラム230のCPUユニット13用のオブジェクトプログラムと変数の属性データとを転送する機能を提供する。一般的には、PLC1に実装されるシステムプログラム210は、CPUユニット13の製造段階でCPUユニット13の不揮発性メモリ106へ格納される。但し、CD-ROM9にシステムプログラム210を格納しておけば、ユーザは、CD-ROM9のシステムプログラム210をPLCサポート装置8へコピーし、通信プログラム326が提供する機能を利用してコピーしたシステムプログラム210をCPUユニット13へ転送することもできる。さらに、CD-ROM9に、PLC1のCPUユニット13で実行されるリアルタイムOS200を格納しておけば、リアルタイムOS200についてもユーザ操作によってPLC1へ再インストールできる。今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。"