(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
タスクの実行に使用される複数の変数を記憶するメモリと、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部と、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部に出力し、前記処理部から受けた当該変数の値を用いて前記タスクを実行するタスク実行部とを備え、
前記処理部は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリにおける、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部は、前記読出指示を受けると、
前記メモリにおける、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域のいずれかから読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記データ処理装置は、さらに、
前記タスク実行部が前記第１読出指示を出力するタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部に出力するダミー指示部を備え、
前記複数の変数は、Ｍ個のグループに分割され、
Ｍは２以上の整数であり、
前記ダミー指示部は、
前記Ｍ個のグループの各々について、当該グループに属する変数を指定した前記第２読出指示を予め定められた周期ごとに前記処理部に出力し、
前記Ｍ個のグループごとの前記第２読出指示の出力タイミングを、前記予め定められた周期の１／Ｍの周期分だけ順にシフトさせる、データ処理装置。
【請求項２】
データ処理装置であって、
タスクの実行に使用される複数の変数を記憶するメモリと、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部と、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部に出力し、前記処理部から受けた当該変数の値を用いて前記タスクを実行するタスク実行部とを備え、
前記処理部は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリにおける、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部は、前記読出指示を受けると、
前記メモリにおける、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域のいずれかから読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記データ処理装置は、さらに、
前記タスク実行部が前記第１読出指示を出力するタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部に出力するダミー指示部を備え、
前記ダミー指示部は、
前記複数の変数の各々について、前記処理部が書き込みまたは読み出しを実行した最新時刻を管理し、
前記最新時刻からの経過時間が予め定められた期間だけ経過した変数を指定した前記第２読出指示を前記処理部に出力する、データ処理装置。
【請求項３】
前記タスクはファクトリオートメーションに関連する、請求項１または２に記載のデータ処理装置。
【請求項４】
データ処理装置の制御方法であって、
前記データ処理装置は、
タスクの実行に使用される複数の変数を記憶するメモリと、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部とを含み、
前記処理部は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリにおける、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部は、前記読出指示を受けると、
前記メモリにおける、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域から読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記制御方法は、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部に出力し、前記処理部から受けた当該変数の値を用いて前記タスクを実行するステップと、
前記第１読出指示が出力されるタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部に出力するステップとを備え、
前記複数の変数は、Ｍ個のグループに分割され、
Ｍは２以上の整数であり、
前記出力するステップは、
前記Ｍ個のグループの各々について、当該グループに属する変数を指定した前記第２読出指示を予め定められた周期ごとに前記処理部に出力するステップと、
前記Ｍ個のグループごとの前記第２読出指示の出力タイミングを、前記予め定められた周期の１／Ｍの周期分だけ順にシフトさせるステップとを含む、制御方法。
【請求項５】
データ処理装置の制御方法であって、
前記データ処理装置は、
タスクの実行に使用される複数の変数を記憶するメモリと、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部とを含み、
前記処理部は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリにおける、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部は、前記読出指示を受けると、
前記メモリにおける、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域から読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記制御方法は、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部に出力し、前記処理部から受けた当該変数の値を用いて前記タスクを実行するステップと、
前記第１読出指示が出力されるタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部に出力するステップとを備え、
前記出力するステップは、
前記複数の変数の各々について、前記処理部が書き込みまたは読み出しを実行した最新時刻を管理するステップと、
前記最新時刻からの経過時間が予め定められた期間だけ経過した変数を指定した前記第２読出指示を前記処理部に出力するステップとを含む、制御方法。
【請求項６】
請求項４または５に記載の制御方法をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理装置、制御方法およびプログラムに関する。
【背景技術】
【０００２】
半導体デバイスの高集積化および微細化に伴い、メモリにおける一過性のビットエラー（ソフトエラー）が急増している。ソフトエラーは、例えばα粒子や宇宙線中性子の衝突によって生じる。ソフトエラーの起こりうるメモリをシステムに適用すると、ソフトエラーによるシステムの一時的な停止が生じうる。
【０００３】
ソフトエラーによるシステムの一時的な停止を回避するための技術が開発されている。例えば、特開２００７−１８４１４号公報（特許文献１）には、ＲＡＭ（Random Access Memory）の変数データを書き換える場合に、同一のデータをＲＡＭ内の異なる３以上のアドレスの各々に書き込む制御装置が開示されている。この制御装置は、プログラムの実行によって変数を読み出すとき、ＲＡＭ内の異なる３以上のアドレスの各々からデータを読み出す。そして、制御装置は、異なる３以上のアドレスからそれぞれ読み出したデータのうち、任意の１個のデータが他の複数個のデータと異なっている場合には、異なっているデータを他の複数個のデータに書き換える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１８４１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の制御装置では、ＲＡＭ上の異なる３以上のアドレスのうちの１つのアドレスにソフトエラーが生じたとしても、プログラムの実行によって変数を読み出すときに、当該１つのアドレスのデータは修復される。ただし、各変数が読み出される頻度は、プログラムに依存する。読み出される頻度の高い変数については、データの修復される機会が多くなる。一方、読み出される頻度の低い変数については、データの修復される機会が少なくなり、ＲＡＭ上の異なる３以上のアドレスのうち複数のアドレスにソフトエラーが起こり得る。３以上のアドレスのうち複数のアドレスにソフトエラーが起きた場合、データが修復されず、システムが一時的に停止する。
【０００６】
本開示は、上記の問題に鑑みてなされたものであり、その目的は、メモリのデータ化けに起因するシステムの一時的な停止を抑制可能なデータ処理装置、制御方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本開示の一例によれば、データ処理装置は、タスクの実行に使用される複数の変数を記憶するメモリと、処理部と、タスク実行部とを備える。処理部は、書込指示および読出指示を受けて、メモリに対して複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する。タスク実行部は、複数の変数のうち必要な変数を指定した第１読出指示を処理部に出力し、処理部から受けた当該変数の値を用いてタスクを実行する。処理部は、書込指示を受けると、指定された変数の値を示すデータを、メモリにおける、指定された変数に対応するＮ個の領域の各々に書き込む。Ｎは３以上の整数である。処理部は、読出指示を受けると、メモリにおける、指定された変数に対応するＮ個の領域の各々からデータを読み出し、Ｎ個の領域からそれぞれ読み出したデータを互いに照合する。処理部は、Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、読出指示の出力元にＮ個の領域から読み出したデータで示される値を送る。処理部は、Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、Ｎ−１個の領域から読み出したデータと一致するように１個の領域のデータを書き換えるとともに、読出指示の出力元にＮ−１個の領域から読み出したデータで示される値を送る。データ処理装置は、さらに、タスク実行部が第１読出指示を出力するタイミングと異なるタイミングにおいて、複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を処理部に出力するダミー指示部を備える。
【０００８】
この開示によれば、ダミーの第２読出指示を受けた処理部は、Ｎ個の領域のうちの１個の領域にデータ化けが生じている場合、当該１個の領域のデータを、残りＮ−１個の領域のデータと一致するように修復する。そのため、タスクの実行のために読み出される頻度の少ない変数についても、第１読出指示が出力されるタイミングと異なるタイミングにおいて、メモリ内の当該変数に対応するＮ個の領域がチェックされる。その結果、データ化けの生じたデータが正しいデータに修復される。すなわち、タスクの実行のために読み出される頻度の少ない変数についても、タスクの実行のために変数を読み出すタイミングと異なるタイミングにおいて、データの修復される機会が設けられる。そのため、メモリにおいて、変数に対応するＮ個の領域のうち複数の領域でデータが化けた状態は、発生しにくい。これにより、メモリのデータ化けに起因するシステムの一時的な停止を抑制できる。
【０００９】
上述の開示において、第２読出指示は、複数の変数の全てを指定する。ダミー指示部は、予め定められた周期ごとに第２読出指示を処理部に出力する。
【００１０】
この開示によれば、全ての変数について、データの修復される機会が定期的に設けられる。その結果、メモリにおいて、変数に対応するＮ個の領域のうち複数の領域でデータが化けた状態は、より発生しにくい。
【００１１】
上述の開示において、複数の変数は、Ｍ個のグループに分割される。Ｍは２以上の整数である。ダミー指示部は、Ｍ個のグループの各々について、当該グループに属する変数を指定した第２読出指示を予め定められた周期ごとに処理部に出力する。ダミー指示部は、Ｍ個のグループごとの第２読出指示の出力タイミングを、予め定められた周期の１／Ｍの周期分だけ順にシフトさせる。
【００１２】
この開示によれば、１回の第２読出指示に応じて実行される変数の読み出し処理に要する時間を短縮化できる。
【００１３】
上述の開示において、ダミー指示部は、複数の変数の各々について、処理部が書き込みまたは読み出しを実行した最新時刻を管理し、最新時刻からの経過時間が予め定められた期間だけ経過した変数を指定した第２読出指示を処理部に出力する。
【００１４】
この開示によれば、１回の第２読出指示に応じて実行される変数の読み出し処理に要する時間を短縮化できる。
【００１５】
上述の開示において、タスクはファクトリオートメーション（ＦＡ）に関連する。この開示によれば、データ処理装置は、ＦＡ分野のシステムに適用される。ＦＡ分野のシステムは、２４時間×３６５日稼働する生産ラインに組み込まれ得る。このような生産ラインにおいて、システムが一時的に停止すると、多大な損害が生じ得る。そのため、できるだけコストをかけることなく、データ化けが生じたとして運転継続させたいというＦＡ分野特有の要望が新たに生じている。上述の開示によれば、当該ＦＡ分野特有の要望を満たすことができる。
【００１６】
本開示の一例によれば、データ処理装置は、タスクの実行に使用される複数の変数を記憶するメモリと、書込指示および読出指示を受けて、メモリに対して複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部とを含む。処理部は、書込指示を受けると、指定された変数の値を示すデータを、メモリにおける、指定された変数に対応するＮ個の領域の各々に書き込む。Ｎは３以上の整数である。処理部は、読出指示を受けると、メモリにおける、指定された変数に対応するＮ個の領域の各々からデータを読み出し、Ｎ個の領域からそれぞれ読み出したデータを互いに照合する。処理部は、Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、読出指示の出力元にＮ個の領域から読み出したデータで示される値を送る。処理部は、Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、Ｎ−１個の領域から読み出したデータと一致するように１個の領域のデータを書き換えるとともに、読出指示の出力元にＮ−１個の領域から読み出したデータで示される値を送る。データ処理装置の制御方法は、複数の変数のうち必要な変数を指定した第１読出指示を処理部に出力し、処理部から受けた当該変数の値を用いてタスクを実行するステップと、第１読出指示が出力されるタイミングと異なるタイミングにおいて、複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を処理部に出力するステップとを備える。
【００１７】
本開示の一例によれば、プログラムは、上記の制御方法をコンピュータに実行させる。これらの開示によっても、メモリのデータ化けに起因するシステムの一時的な停止を抑制できる。
【発明の効果】
【００１８】
本開示によれば、メモリのデータ化けに起因するシステムの一時的な停止を抑制できる。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係る制御システムの全体構成を示す概略図である。
【図２】標準ＰＬＣのハードウェア構成例を示す模式図である。
【図３】安全ＰＬＣのハードウェア構成例を示す模式図である。
【図４】カプラのハードウェア構成例を示す模式図である。
【図５】安全ＩＯユニットのハードウェア構成例を示す模式図である。
【図６】安全ＩＯユニットの機能構成の一例を示す図である。
【図７】書込読出処理部によるメインメモリへのデータの書き込み処理の一例を示す図である。
【図８】書込読出処理部によるメインメモリからのデータの読み出し処理の一例を示す図である。
【図９】ダミー指示を行なわないときの動作例（参考例）を示す図である。
【図１０】ダミー指示を行なわないときの別の動作例（参考例）を示す図である。
【図１１】ダミー指示を行なうときの動作例（実施例）を示す図である。
【図１２】安全ＩＯユニットにおける処理の流れの一例を示すフローチャートである。
【図１３】図１２に示すステップＳ３，Ｓ６のサブルーチンの流れの一例を示すフローチャートである。
【図１４】変形例１に係るダミー指示部による第２読出指示の生成例を示す図である。
【図１５】変形例２に係るダミー指示部の一例を示す図である。
【図１６】変形例３に係る安全ＩＯユニットのハードウェア構成の一例を示す図である。
【図１７】変形例３に係る安全ＩＯユニットの動作例を示す図である。
【発明を実施するための形態】
【００２０】
本開示の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２１】
§１  適用例
航空宇宙システム、自動車、医療機器、通信機器、産業機器など様々に分野において、メモリのデータ化けに起因するシステムの一時的な停止を抑制することが望まれる。本開示は、このような様々な分野のシステムに適用され得る。以下では、本開示の適用例として、ＦＡ（ファクトリオートメーション）分野に組み込まれる制御システムについて説明するが、本開示の適用例は、当該制御システムに限定されない。
【００２２】
図１は、実施形態に係る制御システムの全体構成を示す概略図である。図１に例示される制御システム１は、主要なコンポーネントとして、標準ＰＬＣ（プログラマブルロジックコントローラ）１００と、安全ＰＬＣ２００と、１以上のカプラ３００と、１以上の安全ＩＯユニット４００とを含む。制御システム１に含まれるこれらの装置は、各種のタスクを実行するデータ処理装置である。
【００２３】
標準ＰＬＣ１００は、予め作成された標準制御プログラムに従って、任意の制御対象に対する標準制御を実行する。「標準制御」は、予め定められた要求仕様に沿って、制御対象を制御するための処理の総称である。制御対象は、例えばサーボモータ、ロボットなどである。
【００２４】
安全ＰＬＣ２００は、標準ＰＬＣ１００とは独立して、任意の制御対象に対するセーフティ制御を実行する。図１に例示される安全ＰＬＣ２００は、ローカルバスを介して標準ＰＬＣ１００に接続される。「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理の総称である。「セーフティ制御」は、例えばＩＥＣ  ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。
【００２５】
カプラ３００は、標準ＰＬＣ１００と安全ＩＯユニット４００との間のデータの遣り取りを仲介する。カプラ３００は、フィールドネットワーク２を介して、標準ＰＬＣ１００と電気的に接続されている。フィールドネットワーク２は、ＦＡ（Factory Automation）用のデータ伝送を実現するための通信媒体である。フィールドネットワーク２において、予め定められた周期でフレーム伝送が可能になっており、ネットワーク内の各ノードに対するデータ到着時間が保証される。このようなデータ到着時間が保証されるプロトコルの一例として、本実施の形態に従う制御システム１においては、フィールドネットワーク２にはＥｔｈｅｒＣＡＴ（登録商標）を採用する。
【００２６】
カプラ３００は、標準ＰＬＣ１００から受信したデータを安全ＩＯユニット４００へ送信するとともに、安全ＩＯユニット４００からデータを受信すると、当該受信したデータを次に到着するフレームに格納する準備を行う。
【００２７】
安全ＩＯユニット４００は、安全ＰＬＣ２００またはカプラ３００にローカルバスを介して接続される。さらに、安全ＩＯユニット４００には任意の安全デバイス（図示せず）が接続される。安全デバイスには、ライトカーテン、非常停止ボタン、セーフティドアスイッチなどが含まれる。
【００２８】
安全ＩＯユニット４００は、安全デバイスからの入力信号を受け付けて、安全ＰＬＣ２００へ当該入力信号を提供する。あるいは、安全ＩＯユニット４００は、安全デバイスからの入力信号を受け付けて、カプラ３００を介して標準ＰＬＣ１００へ当該入力信号を提供する。標準ＰＬＣ１００へ提供された入力信号は、安全ＰＬＣ２００へ提供される。
【００２９】
さらに、安全ＩＯユニット４００は、安全ＰＬＣ２００からの指令に応じて、安全デバイスへ出力信号を出力する。あるいは、安全ＩＯユニット４００は、カプラ３００および標準ＰＬＣ１００を介した安全ＰＬＣ２００からの指令に応じて、安全デバイスへ出力信号を出力する。
【００３０】
安全ＩＯユニット４００は、予め定められた周期（以下、「タスク周期」と称する。）ごとに、安全デバイスからの入力信号の受け付け、当該入力信号の提供、安全デバイスへの出力信号の出力などに関するＩＯタスクを実行する。
【００３１】
安全ＩＯユニット４００は、ＩＯタスクを実行するための処理回路を備える。処理回路は、プロセッサおよびメモリによって構成される。プロセッサは、メモリが記憶する複数の変数を用いてＩＯタスクを実行する。
【００３２】
安全ＰＬＣ２００は、安全ＩＯユニット４００から提供された入力信号に応じて、セーフティ制御を実行する。例えば、安全ＰＬＣ２００は、ライトカーテンである安全デバイスから人の侵入を示す入力信号が提供されると、標準ＰＬＣ１００の制御対象への電源供給を遮断し、制御システム１を一時的に停止させる。あるいは、安全ＰＬＣ２００は、非常停止ボタンである安全デバイスからボタン押下を示す入力信号が提供されると、標準ＰＬＣ１００の制御対象への電源供給を遮断し、制御システム１を一時的に停止させる。
【００３３】
このように、安全ＩＯユニット４００は、人の安全が脅かされることを防止するためのセーフティ制御に直接関わる。従って、安全ＰＬＣ２００は、安全ＩＯユニット４００に故障や異常が発生したときにも、制御システム１を一時的に停止させるように設計されている。
【００３４】
安全ＩＯユニット４００に備えられるメモリにデータ化けが生じ、当該データ化けが修復されないまま安全ＩＯユニット４００が動作し続けると、安全ＰＬＣ２００は、セーフティ制御を正常に実行できない。そのため、安全ＩＯユニット４００は、メモリにデータ化けが生じたとしても、当該データ化けを修復する機能を有する。
【００３５】
具体的には、安全ＩＯユニット４００において、プロセッサは、ＩＯタスクの実行に用いられる複数の変数の各々について、当該変数の値を示すデータを、メモリにおける当該変数に対応するＮ個の領域に書き込む。Ｎは３以上の整数である。複数の変数の各々の値を示すデータは、安全ＩＯユニット４００の起動時にメモリに書き込まれる。また、複数の変数のうちの一部または全部について、メモリ上のデータは、ＩＯタスクの実行中に書き換えられてもよい。
【００３６】
プロセッサは、ＩＯタスクの実行のために、複数の変数のうち指定された変数をメモリから読み出す。このとき、プロセッサは、メモリにおける、指定された変数に対応するＮ個の領域の各々からデータを読み出し、当該Ｎ個の領域からそれぞれ読み出したデータを互いに照合する。
【００３７】
メモリにデータ化けが生じていない場合、Ｎ個の領域からそれぞれ読み出されるデータは互いに一致する。そのため、プロセッサは、Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、当該Ｎ個の領域から読み出したデータで示される値を用いてＩＯタスクを実行する。
【００３８】
Ｎ個の領域のうちの１個領域にデータ化けが生じた場合、残りのＮ−１個の領域からそれぞれ読み出されるデータは互いに一致する。そのため、プロセッサは、Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、Ｎ−１個の領域から読み出したデータと一致するように、メモリにおける上記１個の領域のデータを書き換える。これにより、データ化けによる誤ったデータが正しいデータに修復される。そして、プロセッサは、当該Ｎ−１個の領域から読み出したデータで示される値を用いてＩＯタスクを実行する。
【００３９】
さらに、本実施の形態に係る安全ＩＯユニット４００では、プロセッサは、ＩＯタスクの実行のために変数を読み出すタイミングと異なるタイミングにおいて、複数の変数のうちの少なくとも１つをメモリからダミーで読み出す処理を実行する。ダミーの読み出し処理とは、読み出した変数の値が何ら利用されないにもかかわらず、当該変数の値を読み出す処理を意味する。
【００４０】
ダミーの読み出し処理においても、上記と同様に、Ｎ個の領域のうちの１個の領域にデータ化けが生じている場合、当該１個の領域のデータが、Ｎ−１個の領域のデータと一致するように修復される。そのため、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、メモリ内の当該変数に対応するＮ個の領域がチェックされ、データ化けの生じたデータが正しいデータに修復される。すなわち、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、ＩＯタスクの実行のために変数を読み出すタイミングと異なるタイミングにおいて、データの修復される機会が設けられる。これにより、メモリのデータ化けに起因するシステムの一時的な停止を抑制できる。
【００４１】
§２  具体例
＜標準ＰＬＣのハードウェア構成＞
図２は、標準ＰＬＣのハードウェア構成例を示す模式図である。図２に例示される標準ＰＬＣ１００は、プロセッサ１０２と、メインメモリ１０４と、ストレージ１１０と、フィールドネットワークコントローラ１０８と、ローカルバスコントローラ１１６とを含む。これらのコンポーネントは、プロセッサバス１１８を介して接続されている。
【００４２】
プロセッサ１０２は、主として、標準制御に係る制御演算を実行する演算処理部に相当し、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphics Processing Unit）などで構成される。具体的には、プロセッサ１０２は、ストレージ１１０に格納されたプログラム（一例として、システムプログラム１１０２および標準制御プログラム１１０４）を読出して、メインメモリ１０４に展開して実行することで、制御対象に応じた制御演算、および、後述するような各種処理を実現する。
【００４３】
メインメモリ１０４は、例えばＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）のような揮発性メモリによって構成される。ストレージ１１０は、例えば、ＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）などの不揮発性記憶装置などによって構成される。
【００４４】
ストレージ１１０には、基本的な機能を実現するためのシステムプログラム１１０２、制御対象に応じて作成された標準制御プログラム１１０４、および標準ＰＬＣ１００での処理を規定するための設定情報１１０６が格納される。
【００４５】
フィールドネットワークコントローラ１０８は、フィールドネットワーク２を介して任意のデバイス（例えばカプラ３００）との間でデータを遣り取りする。
【００４６】
ローカルバスコントローラ１１６は、ローカルバスを介して、標準ＰＬＣ１００に接続される任意のユニット（例えば安全ＰＬＣ２００）との間でデータを遣り取りする。
【００４７】
＜安全ＰＬＣのハードウェア構成＞
図３は、安全ＰＬＣのハードウェア構成例を示す模式図である。図３に例示される安全ＰＬＣ２００は、プロセッサ２０２と、メインメモリ２０４と、ストレージ２１０と、ローカルバスコントローラ２１６とを含む。これらのコンポーネントは、プロセッサバス２１８を介して接続されている。
【００４８】
プロセッサ２０２は、主として、セーフティ制御に係る制御演算を実行する演算処理部に相当し、ＣＰＵやＧＰＵなどで構成される。
【００４９】
メインメモリ２０４は、例えばＤＲＡＭやＳＲＡＭのような揮発性メモリによって構成される。ストレージ２１０は、例えば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などによって構成される。
【００５０】
ストレージ２１０には、基本的な機能を実現するためのシステムプログラム２１０２、要求されるセーフティ機能に応じた作成された安全プログラム２１０４、および安全ＰＬＣ２００での処理を規定するための設定情報２１０６が格納される。
【００５１】
ローカルバスコントローラ２１６は、ローカルバスを介して、安全ＰＬＣ２００に接続される安全ＩＯユニット４００との間でデータを遣り取りする。
【００５２】
＜カプラのハードウェア構成＞
図４は、カプラのハードウェア構成例を示す模式図である。図４に例示されるカプラ３００は、プロセッサ３０２と、メインメモリ３０４と、ストレージ３１０と、フィールドネットワークコントローラ３０８と、ローカルバスコントローラ３１６とを含む。これらのコンポーネントは、プロセッサバス３１８を介して接続されている。
【００５３】
プロセッサ３０２は、主として、カプラ３００を動作させるための制御演算を実行する演算処理部に相当し、ＣＰＵやＧＰＵなどで構成される。
【００５４】
メインメモリ３０４は、例えばＤＲＡＭやＳＲＡＭのような揮発性メモリによって構成される。ストレージ３１０は、例えば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などによって構成される。
【００５５】
ストレージ３１０には、基本的な機能を実現するためのシステムプログラム３１０２およびカプラ３００での処理を規定するための設定情報３１０６が格納される。
【００５６】
フィールドネットワークコントローラ３０８は、フィールドネットワーク２を介して、任意のデバイス（例えば標準ＰＬＣ１００）との間でデータを遣り取りする。
【００５７】
ローカルバスコントローラ３１６は、ローカルバスを介して、カプラ３００に接続される安全ＩＯユニット４００との間でデータを遣り取りする。
【００５８】
＜安全ＩＯユニットのハードウェア構成＞
図５は、安全ＩＯユニットのハードウェア構成例を示す模式図である。図５に例示される安全ＩＯユニット４００は、プロセッサ４０２と、メインメモリ４０４と、ストレージ４１０と、ローカルバスコントローラ４１２と、安全ＩＯモジュール４１６とを含む。これらのコンポーネントは、プロセッサバス４１８を介して接続されている。
【００５９】
プロセッサ４０２は、セーフティ制御を実現するために必要な信号の入出力および管理機能に係る制御演算を実行する演算処理部に相当し、ＣＰＵやＭＰＵ（Micro Processing Unit）などによって構成される。
【００６０】
メインメモリ４０４は、例えばＤＲＡＭやＳＲＡＭのような揮発性メモリによって構成される。ＳＲＡＭは、記憶部の構造としてフリップフロップを用いており、リフレッシュ動作を必要とせず、ＤＲＡＭより高速に動作できるという利点を有する。そのため、ＳＲＡＭをメインメモリ４０４として用いることが好ましい。
【００６１】
積み上げ型（スタック型）の構造を有するＤＲＡＭでは、ソフトエラー耐性が高い。一方、フリップフロップ構造を有するＳＲＡＭでは、微細化によりソフトエラー耐性が低下する。そのため、ＳＲＡＭによって構成されるメインメモリ４０４を用いる場合、メインメモリ４０４にソフトエラーが起こりやすい。以下、メインメモリ４０４がＳＲＡＭであるとものとして説明する。
【００６２】
ストレージ４１０は、例えば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などで構成される。ストレージ４１０には、ＩＯ機能を実現するための実行可能プログラム４２０と、ライブラリ４２２と、ダミー読出プログラム４２４とが格納される。
【００６３】
ローカルバスコントローラ４１２は、ローカルバスを介して、安全ＩＯユニット４００が接続されるデバイス（例えば安全ＰＬＣ２００、カプラ３００）との間でデータを遣り取りする。
【００６４】
安全ＩＯモジュール４１６は、安全デバイスと電気的に接続され、安全デバイスによる検出結果などの入力を受け付けたり、安全デバイスへ信号を出力したりする。
【００６５】
＜安全ＩＯユニットの機能構成＞
図６は、安全ＩＯユニットの機能構成の一例を示す図である。図６に例示される安全ＩＯユニット４００は、書込読出処理部４１と、タスク実行部４２と、ダミー指示部４３とを備える。書込読出処理部４１は、プロセッサ４０２がライブラリ４２２を実行することにより実現される。タスク実行部４２は、プロセッサ４０２が実行可能プログラム４２０を実行することにより実現される。ダミー指示部４３は、プロセッサ４０２がダミー読出プログラム４２４を実行することにより実現される。
【００６６】
書込読出処理部４１は、書込指示および読出指示を受けて、メインメモリ４０４に対して指定された変数の書き込みおよび読み出しをそれぞれ実行する。書込読出処理部４１は、ＩＯタスクの実行に使用される全ての変数の各々について、当該変数の値を示すデータを３以上に多重化させてメインメモリ４０４上で管理する。以下、データを３重化して管理する例について説明する。
【００６７】
図６に示されるように、書込読出処理部４１は、変数管理テーブル４４を管理している。変数管理テーブル４４は、ＩＯタスクの実行に使用される全ての変数の各々について、変数名と、型と、メインメモリ４０４における当該変数の値を示すデータが保持される３つの領域のアドレスとが互いに対応付けられたテーブルである。以下、３つの領域のアドレスを、「第１アドレス」、「第２アドレス」および「第３アドレス」と称する。ＩＯタスクの実行に使用される全ての変数の一覧は、ソースコードをコンパイルして実行可能プログラム４２０を作成するときに生成される。
【００６８】
図７は、書込読出処理部によるメインメモリへのデータの書き込み処理の一例を示す図である。図７に示されるように、書込読出処理部４１は、指定された変数の値を示す対象データをメインメモリ４０４に書き込む際に、対象データを２回コピーし、第１コピーデータおよび第２コピーデータを生成する。書込読出処理部４１は、変数管理テーブル４４を用いて、指定された変数に対応する第１〜第３アドレスを特定し、特定した第１〜第３アドレスによって示される３個の領域に、対象データ、第１コピーデータおよび第２コピーデータをそれぞれ書き込む。これにより、メインメモリ４０４において、データが３重化される。
【００６９】
書き込み直後において、対象データと第１コピーデータと第２コピーデータとは同一である。しかしながら、例えば宇宙線や中性子線の影響により、対象データと第１コピーデータと第２コピーデータとのいずれかにおいてデータ化けが生じ得る。
【００７０】
図８は、書込読出処理部によるメインメモリからのデータの読み出し処理の一例を示す図である。図８に示されるように、書込読出処理部４１は、読出指示を受けると、変数管理テーブル４４を用いて、指定された変数に対応する第１〜第３アドレスを特定する。そして、書込読出処理部４１は、特定した第１〜第３アドレスによって示される、メインメモリ４０４の３個の領域の各々からデータを読み出し、当該３個の領域からそれぞれ読み出したデータを互いに照合する。
【００７１】
３個の領域のいずれにもデータ化けが発生していない場合、当該３個の領域からそれぞれ読み出したデータの全てが一致する。そのため、書込読出処理部４１は、３個の領域からそれぞれ読み出したデータの全てが一致することに応じて、読出指示の出力元に３個の領域のいずれかから読み出したデータで示される値を送る。
【００７２】
３個の領域のうちの１個の領域にデータ化けが発生したとしても、残り２個の領域からそれぞれ読み出したデータが一致する。そのため、書込読出処理部４１は、３個の領域のうち１個の領域を除いた２個の領域からそれぞれ読み出したデータが一致することに応じて、当該２個の領域から読み出したデータと一致するように当該１個の領域のデータを書き換える。さらに、書込読出処理部４１は、読出指示の出力元に当該２個の領域から読み出したデータで示される値を送る。これにより、３個の領域のうちの１個の領域にデータ化けが発生したとしても、読み出し処理において、データ化けの生じたデータが修復される。
【００７３】
図６に戻って、書込読出処理部４１は、読出指示として、タスク実行部４２から第１読出指示を受け、ダミー指示部４３から第２読出指示を受ける。また、書込読出処理部４１は、タスク実行部４２から書込指示を受ける。
【００７４】
タスク実行部４２は、タスク周期ごとに、メインメモリ４０４に記憶される変数を用いたＩＯタスクを実行する。ＩＯタスクの実行に使用される変数は、タスク周期ごとに異なり得る。すなわち、メインメモリ４０４に記憶される複数の変数には、全てのタスク周期において使用される変数と、Ｍ回（Ｍは２以上の整数）のタスク周期のうちの１回のタスク周期において使用される変数とが含まれ得る。このように、メインメモリ４０４に記憶される変数がＩＯタスクの実行のために使用される頻度は、変数ごとに異なる。
【００７５】
タスク実行部４２は、メインメモリ４０４に記憶された複数の変数のうち必要な変数を指定した第１読出指示を生成し、生成した第１読出指示を書込読出処理部４１に出力する。このように、第１読出指示は、ＩＯタスクの実行に利用される変数を読み出すための正規の指示である。タスク実行部４２は、指定した変数の値を書込読出処理部４１から受け、当該変数の値を用いてＩＯタスクを実行する。
【００７６】
タスク実行部４２は、ＩＯタスクの実行によって変数の値の書き換えが必要となった場合、当該変数と更新後の値とを指定した書込指示を生成し、生成した書込指示を書込読出処理部４１に出力する。
【００７７】
ダミー指示部４３は、ＩＯタスクの実行に使用される複数の変数のリスト（以下、「変数リスト４５」と称する。）を管理している。変数リスト４５は、ソースコードをコンパイルして実行可能プログラム４２０を作成するときに生成される。ダミー指示部４３は、変数リスト４５に含まれる全ての変数を指定したダミーの第２読出指示を定期的に生成し、生成した第２読出指示を書込読出処理部４１に出力する。第２読出指示は、書込読出処理部４１による上記のデータの修復を期待して生成される。そのため、ダミー指示部４３は、第２読出指示に応じて読み出された変数の値に対して何ら処理を実行せず、当該値を破棄すればよい。このように、第２読出指示は、読み出された変数の値を何ら利用しないにもかかわらず、当該変数の値を読み出すためのダミーの指示である。
【００７８】
ダミー指示部４３が第２読出指示を生成する周期は、ソフトエラーが発生する周期よりも短いことが好ましく、例えば８時間以内である。ダミー指示部４３が第２読出指示を生成する周期は、タスク周期と同一であってもよい。
【００７９】
＜ダミー指示の利点＞
図９〜図１１を参照して、ダミー指示の利点について説明する。図９は、ダミー指示を行なわないときの動作例（参考例）を示す図である。
【００８０】
図９には、全てのタスク周期において、変数「Var_A」を用いたＩＯタスクが実行されるときの動作例が示される。タスク実行部４２として動作するプロセッサ４０２は、各タスク周期において、ＩＯタスクの実行に必要な変数「Var_A」を指定した第１読出指示を生成する。そして、書込読出処理部４１として動作するプロセッサ４０２は、当該第１読出指示に応じて、メインメモリ４０４における、変数「Var_A」に対応する３個の領域４０４ａ〜４０４ｃからデータを読み出す。
【００８１】
図９に例示される動作例では、１回目のＩＯタスクの実行後の時刻ｔ１において、領域４０４ｂにデータ化けが発生している。しかしながら、２回目のＩＯタスクが実行される時刻ｔ２において、変数「Var_A」を指定した第１読出指示が生成される。これにより、書込読出処理部４１として動作するプロセッサ４０２は、変数「Var_A」に対応する３個の領域４０４ａ〜４０４ｃからデータを読み出し、領域４０４ａ〜４０４ｃからそれぞれ読み出されたデータを照合する。プロセッサ４０２は、照合の結果、領域４０４ａ，４０４ｃから読み出したデータが一致し、領域４０４ｂから読み出したデータが領域４０４ａ，４０４ｃから読み出したデータと一致しないことを認識する。そのため、プロセッサ４０２は、領域４０４ａ，４０４ｃから読み出したデータと一致するように領域４０４ｂのデータを書き換える。その結果、領域４０４ｂのデータ化けが修復される。
【００８２】
同様に、Ｘ回目のＩＯタスクの実行後の時刻ｔ３において、領域４０４ａにデータ化けが発生しても、次のＸ＋１回目のＩＯタスクの実行期間内である時刻ｔ４において、領域４０４ａのデータ化けが修復される。
【００８３】
図９に示されるように、ＩＯタスクの実行のために読み出される頻度の高い変数については、データ化けが発生しても、すぐに修復される。そのため、メインメモリ４０４において、当該変数に対応する３個の領域のうち複数の領域でデータが化けた状態は、発生しにくい。
【００８４】
図１０は、ダミー指示を行なわないときの別の動作例（参考例）を示す図である。図１０には、タスク周期のＸ倍の周期ごとに、変数「Var_A」を用いたＩＯタスクが実行されるときの動作例が示される。図１０に示される動作例においても、図９に示される動作例と同様に、１回目のＩＯタスクの実行後の時刻ｔ１において、領域４０４ｂにデータ化けが発生し、Ｘ回目のＩＯタスクの実行後の時刻ｔ３において、領域４０４ａにデータ化けが発生している。
【００８５】
図１０に示される動作例では、１回目のＩＯタスクの実行後からＸ＋１回目のＩＯタスクが実行されるまでの期間において、変数「Var_A」は、ＩＯタスクの実行のために使用されない。そのため、タスク実行部４２として動作するプロセッサ４０２は、当該期間において、変数「Var_A」を指定した第１読出指示を生成しない。したがって、当該期間において、変数「Var_A」に対応する領域４０４ａ〜４０４ｃのデータ化けを修復する機会がない。その結果、図１０に示されるように、領域４０４ａ〜４０４ｃのうちの複数の領域（領域４０４ａ，４０４ｂ）でデータが化けた状態が発生する。
【００８６】
領域４０４ａに生じたデータ化けの内容と、領域４０４ｂに生じたデータ化けの内容とが一致する確率は非常に小さい。そのため、領域４０４ａ〜４０４ｃのデータは互いに異なる。従って、Ｘ＋１回目のＩＯタスクが実行される時刻ｔ４において、変数「Var_A」を指定した第１読出指示が生成されたとしても、書込読出処理部４１として動作するプロセッサ４０２は、領域４０４ａ，４０４ｂのデータを修復できない。
【００８７】
図１０に示されるように、ＩＯタスクの実行のために読み出される頻度の低い変数について、メインメモリ４０４における、当該変数に対応する３個の領域のうち複数の領域でデータが化けた状態が発生し得る。その結果、データの修復が不可能となり、システムを停止せざる得なくなる。
【００８８】
図１１は、ダミー指示を行なうときの動作例（実施例）を示す図である。図１１に示される動作例においても、図１０に示される動作例と同様に、タスク周期のＸ倍の周期ごとに、変数「Var_A」を用いたＩＯタスクが実行される。さらに、図１１に示される動作例においても、図１０に示される動作例と同様に、１回目のＩＯタスクの実行後の時刻ｔ１において、領域４０４ｂにデータ化けが発生し、Ｘ回目のＩＯタスクの実行後の時刻ｔ３において、領域４０４ａにデータ化けが発生している。
【００８９】
図１１に示される動作例では、ダミー指示部４３として動作するプロセッサ４０２は、各タスク周期の開始直後において、全ての変数を指定した第２読出指示を生成する。そのため、１回目のＩＯタスクが実行された後、次のタスク周期の開始直後である時刻ｔ１１において、書込読出処理部４１として動作するプロセッサ４０２は、変数「Var_A」に対応する３個の領域４０４ａ〜４０４ｃからデータを読み出し、領域４０４ａ〜４０４ｃからそれぞれ読み出されたデータを照合する。プロセッサ４０２は、照合の結果、領域４０４ａ，４０４ｃから読み出したデータが一致し、領域４０４ｂから読み出したデータが領域４０４ａ，４０４ｃから読み出したデータと一致しないことを認識する。そのため、プロセッサ４０２は、領域４０４ａ，４０４ｃから読み出したデータと一致するように領域４０４ｂのデータを書き換える。その結果、領域４０４ｂのデータ化けが修復される。
【００９０】
同様に、Ｘ回目のＩＯタスクが実行された後、次のタスク周期の開始直後である時刻ｔ１２において、書込読出処理部４１として動作するプロセッサ４０２は、変数「Var_A」に対応する３個の領域４０４ａ〜４０４ｃからデータを読み出し、領域４０４ａ〜４０４ｃからそれぞれ読み出されたデータを照合する。プロセッサ４０２は、照合の結果、領域４０４ｂ，４０４ｃから読み出したデータが一致し、領域４０４ａから読み出したデータが領域４０４ｂ，４０４ｃから読み出したデータと一致しないことを認識する。そのため、プロセッサ４０２は、領域４０４ｂ，４０４ｃから読み出したデータと一致するように領域４０４ａのデータを書き換える。その結果、領域４０４ａのデータ化けが修復される。
【００９１】
図１１に示されるように、全ての変数について、定期的に第２読出指示が生成される。そのため、ＩＯタスクの実行のために読み出される頻度の低い変数についても、メインメモリ４０４内の当該変数に対応する３個の領域が定期的にチェックされ、データ化けの生じたデータが正しいデータに修復される。すなわち、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、データの修復される機会が定期的に設けられる。そのため、メインメモリ４０４において、当該変数に対応する３個の領域のうち複数の領域でデータが化けた状態は、発生しにくい。これにより、メインメモリ４０４のデータ化けに起因するシステムの一時的な停止を抑制できる。
【００９２】
＜安全ＩＯユニットにおける処理の流れ＞
図１２は、安全ＩＯユニットにおける処理の流れの一例を示すフローチャートである。まず、プロセッサ４０２は、タスク周期の開始タイミングに到達したか否かを判断する（ステップＳ１）。タスク周期の開始タイミングに到達していない場合（ステップＳ１でＮＯ）、処理は再度ステップＳ１に戻る。
【００９３】
タスク周期の開始タイミングに到達した場合（ステップＳ１でＮＯ）、ダミー指示部４３として動作するプロセッサ４０２は、全ての変数を指定した第２読出指示を生成する（ステップＳ２）。当該第２読出指示に応じて、書込読出処理部４１として動作するプロセッサ４０２は、指定された変数の読み出し処理を実行する（ステップＳ３）。ステップＳ３の詳細については後述する。
【００９４】
ステップＳ３が完了すると、タスク実行部４２として動作するプロセッサ４０２は、実行可能プログラム４２０に従ったＩＯタスクを開始する（ステップＳ４）。プロセッサ４０２は、ＩＯタスクの実行に必要な変数を指定した第１読出指示を生成する（ステップＳ５）。
【００９５】
ステップＳ５において生成された第１読出指示に応じて、書込読出処理部４１として動作するプロセッサ４０２は、指定された変数の読み出し処理を実行する（ステップＳ６）。
【００９６】
タスク実行部４２として動作するプロセッサ４０２は、ステップＳ６によって読み出された変数の値を用いてＩＯタスクを実行する（ステップＳ７）。なお、ステップＳ７において、プロセッサ４０２は、書き換えの必要な変数と更新後の値とを指定した書込指示を生成してもよい。この場合、書込読出処理部４１として動作するプロセッサ４０２は、指定された変数の書き込み処理を実行する。
【００９７】
ステップＳ７の完了後、処理は終了する。ステップＳ１〜Ｓ７の処理は、タスク周期ごとに実行される。
【００９８】
図１３は、図１２に示すステップＳ３，Ｓ６のサブルーチンの流れの一例を示すフローチャートである。
【００９９】
書込読出処理部４１として動作するプロセッサ４０２は、メインメモリ４０４における、指定された変数に対応する３個の領域からデータをそれぞれ読み出す（ステップＳ１１）。次に、プロセッサ４０２は、３個の領域からそれぞれ読み出されたデータを照合する（ステップＳ１２）。
【０１００】
プロセッサ４０２は、３個の領域からそれぞれ読み出されたデータの全てが一致するか否かを判断する（ステップＳ１３）。ステップＳ１３でＹＥＳの場合、処理はステップＳ１６に移る。
【０１０１】
ステップＳ１３でＮＯの場合、プロセッサ４０２は、３個の領域のうちの２個の領域から読み出されたデータが一致するか否かを判断する（ステップＳ１４）。ステップＳ１４でＹＥＳの場合、プロセッサ４０２は、当該２個の領域から読み出されたデータと一致するように残り１個の領域のデータを書き換える（ステップＳ１６）。ステップＳ１５の完了後、処理はステップＳ１６に移る。
【０１０２】
ステップＳ１４でＮＯの場合、プロセッサ４０２は、エラー信号を出力する（ステップＳ１７）。これにより、制御システム１が一時的に停止する。ステップＳ１７の後、処理は終了する。
【０１０３】
ステップＳ１６において、プロセッサ４０２は、一致するデータで示される値を指定された変数の値として決定する。ステップＳ１６の完了後、処理は図１２に示す後段のステップ（ステップＳ４またはステップＳ７）に戻る。
【０１０４】
＜作用・効果＞
以上のように、データ処理装置である安全ＩＯユニット４００は、ＩＯタスクの実行に使用される複数の変数を記憶するメインメモリ４０４と、書込読出処理部４１と、タスク実行部４２とを備える。書込読出処理部４１は、書込指示および読出指示を受けて、メインメモリ４０４に対して複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する。タスク実行部４２は、複数の変数のうち必要な変数を指定した第１読出指示を書込読出処理部４１に出力し、書込読出処理部４１から受けた当該変数の値を用いてＩＯタスクを実行する。書込読出処理部４１は、書込指示を受けると、指定された変数の値を示すデータを、メインメモリ４０４における、指定された変数に対応する３個の領域の各々に書き込む。書込読出処理部４１は、読出指示を受けると、メインメモリ４０４における、指定された変数に対応する３個の領域の各々からデータを読み出し、３個の領域からそれぞれ読み出したデータを互いに照合する。書込読出処理部４１は、３個の領域からそれぞれ読み出したデータの全てが一致することに応じて、読出指示の出力元に３個の領域から読み出したデータで示される値を送る。書込読出処理部４１は、３個の領域のうち１個の領域を除いた２個の領域からそれぞれ読み出したデータが一致することに応じて、当該２個の領域から読み出したデータと一致するように当該１個の領域のデータを書き換える。さらに、書込読出処理部４１は、読出指示の出力元に当該２個の領域から読み出したデータで示される値を送る。安全ＩＯユニット４００は、さらに、タスク実行部４２が第１読出指示を出力するタイミングと異なるタイミングにおいて、複数の変数を指定したダミーの第２読出指示を書込読出処理部４１に出力するダミー指示部４３を備える。
【０１０５】
上記の構成によれば、ダミーの第２読出指示を受けた書込読出処理部４１は、３個の領域のうちの１個の領域にデータ化けが生じている場合、当該１個の領域のデータを、残り２個の領域のデータと一致するように修復する。そのため、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、タスク実行部４２が第１読出指示を出力するタイミングと異なるタイミングにおいて、メインメモリ４０４内の当該変数に対応する３個の領域がチェックされる。その結果、データ化けの生じたデータが正しいデータに修復される。すなわち、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、ＩＯタスクの実行のために変数を読み出すタイミングと異なるタイミングにおいて、データの修復される機会が設けられる。そのため、メインメモリ４０４において、変数に対応する３個の領域のうち複数の領域でデータが化けた状態は、発生しにくい。これにより、メモリのデータ化けに起因するシステムの一時的な停止を抑制できる。
【０１０６】
第２読出指示は、複数の変数の全てを指定する。ダミー指示部４３は、予め定められた周期ごとに第２読出指示を書込読出処理部４１に出力する。これにより、全ての変数について、データの修復される機会が定期的に設けられる。その結果、メインメモリ４０４において、変数に対応する３個の領域のうち複数の領域でデータが化けた状態がより発生しにくい。
【０１０７】
上記の予め定められた周期は、例えばタスク周期（タスク実行部４２がＩＯタスクを実行する周期）と同じであってもよい。これにより、データの修復される機会がタスク周期と同じ周期で設けられる。その結果、メインメモリ４０４において、変数に対応する３個の領域のうち複数の領域でデータが化けた状態がより一層発生しにくい。
【０１０８】
なお、ＩＯタスクはＦＡに関連する。すなわち、安全ＩＯユニット４００は、ＦＡ分野に組み込まれる制御システム１に適用される。
【０１０９】
航空宇宙システム等の分野では、一般に一時的な停止が許されない。そのため、従来、航空宇宙システム等の分野では、データ化けが生じたとして運転継続できるように、ハードウェアである処理回路を３重化する三重モード冗長（Triple Modular Redundant（ＴＭＲ））技術が適用されている。これに対し、ＦＡ分野に組み込まれる制御システムでは、航空宇宙システム等の分野と比較して、一時的な停止が許される。また、ハードウェアである処理回路を３重化すると、コストがかかる。そのため、従来、データ化けに起因した異常が発生した場合、一時的に停止するように制御システムが設計されている。
【０１１０】
しかしながら、ＦＡ分野に組み込まれる制御システムは、２４時間×３６５日稼働する生産ラインに組み込まれ得る。このような生産ラインにおいて、制御システムが一時的に停止すると、多大な損害が生じ得る。そのため、ＴＭＲ技術のようにコストをかけることなく、データ化けが生じたとして運転継続させたいというＦＡ分野特有の要望が新たに生じている。制御システム１は、上記の構成を有することにより、当該ＦＡ分野特有の要望を満たすことができる。
【０１１１】
＜変形例１＞
上記の説明では、ダミー指示部４３として動作するプロセッサ４０２は、タスク周期ごとに、メインメモリ４０４に記憶される複数の変数の全てを指定した第２読出指示を生成する。しかしながら、ダミー指示部４３は、メインメモリ４０４に記憶される複数の変数のうちの一部を指定した第２読出指示を定期的に生成してもよい。
【０１１２】
図１４は、変形例１に係るダミー指示部による第２読出指示の生成例を示す図である。図１４に示されるように、メインメモリ４０４に記憶される複数の変数は、Ｍ個のグループ（グループＧ１〜ＧＭ）に分割される。Ｍは２以上の整数である。
【０１１３】
ダミー指示部４３として動作するプロセッサ４０２は、複数のグループの各々について、当該グループに属する変数を指定した第２読出指示を予め定められた周期ごとに生成する。図１４に示す例では、予め定められた周期は、タスク周期のＭ倍の周期である。さらに、ダミー指示部４３として動作するプロセッサ４０２は、グループごとの第２読出指示の出力タイミングを、上記予め定められた周期の１／Ｍの周期（図１４に示す例ではタスク周期）分だけ順にシフトさせる。
【０１１４】
具体的には、ダミー指示部４３として動作するプロセッサ４０２は、あるタスク周期において、グループＧｋに属する変数を指定した第２読出指示を生成した場合、次のタスク周期において、グループＧ（ｋ＋１）に属する変数を指定した第２読出指示を出力する。なお、ダミー指示部４３として動作するプロセッサ４０２は、あるタスク周期において、グループＧＭに属する変数を指定した第２読出指示を生成した場合、次のタスク周期において、グループＧ１に属する変数を指定した第２読出指示を生成する。
【０１１５】
変形例１によれば、１回の第２読出指示に応じて実行される変数の読み出し処理に要する時間を短縮化できる。
【０１１６】
＜変形例２＞
上記の説明では、メインメモリ４０４に記憶される複数の変数の全てについて、ダミーの第２読出指示が定期的に出力されるものとした。しかしながら、複数の変数のうち、ＩＯタスクの実行のための書き込みまたは読み出しの頻度の少ない変数について、ダミーの第２読出指示が出力されてもよい。
【０１１７】
図１５は、変形例２に係るダミー指示部の一例を示す図である。変形例２に係る安全ＩＯユニットは、ダミー指示部４３の代わりに図１５に示すダミー指示部４３ａを備える点で、図６に示す安全ＩＯユニット４００と相違する。
【０１１８】
ダミー指示部４３ａは、変数リスト４５ａを管理している。変数リスト４５ａには、メインメモリ４０４に記憶される複数の変数の一覧と、当該複数の変数の各々について、書込読出処理部４１が書き込みまたは読み出しを実行した最新時刻（最新アクセス時刻）とが記述される。ダミー指示部４３ａは、複数の変数の各々について、書込読出処理部４１が書き込みまたは読み出しを実行した時刻を書込読出処理部４１から受け、当該時刻に基づいて変数リスト４５ａを更新する。このようにして、ダミー指示部４３ａは、複数の変数の各々について、書込読出処理部４１が書き込みまたは読み出しを実行した最新時刻を管理する。
【０１１９】
ダミー指示部４３ａは、最新時刻からの経過時間が予め定められた期間（例えば８時間）だけ経過した変数を指定した第２読出指示を生成し、生成した第２読出指示を書込読出処理部４１に出力する。これにより、複数の変数のうち、ＩＯタスクの実行のための書き込みまたは読み出しの頻度の少ない変数について、ダミーの第２読出指示が出力される。その結果、ダミーの第２読出指示に応じて実行される読み出し処理に要する時間を短縮化できる。
【０１２０】
＜変形例３＞
上記の説明では、安全ＩＯユニット４００は、プロセッサおよびメインメモリからなる処理回路を１つだけ備えるものとした。しかしながら、安全ＩＯユニット４００は、２つの処理回路を備えてもよい。２つの処理回路は、同一のＩＯタスクを並行して実行する。これにより、より信頼性の高いタスク結果を得ることができる。
【０１２１】
図１６は、変形例３に係る安全ＩＯユニットのハードウェア構成の一例を示す図である。図１６に示されるように、変形例３に係る安全ＩＯユニット４００ｂは、図５に例示される安全ＩＯユニット４００と比較して、プロセッサ４０６と、メインメモリ４０８とをさらに含む点で相違する。すなわち、安全ＩＯユニット４００ｂは、プロセッサ４０２およびメインメモリ４０４を有するＡチャンネル回路４０Ａと、プロセッサ４０６およびメインメモリ４０８を有するＢチャンネル回路４０Ｂとを含む。Ａチャンネル回路４０ＡとＢチャンネル回路４０Ｂとは、同一の処理を並行して実行する。
【０１２２】
Ａチャンネル回路４０Ａにおいて、プロセッサ４０２がライブラリ４２２、実行可能プログラム４２０およびダミー読出プログラム４２４を実行することにより、図６に示す書込読出処理部４１、タスク実行部４２およびダミー指示部４３が実現される。Ｂチャンネル回路４０Ｂにおいても、プロセッサ４０６がライブラリ４２２、実行可能プログラム４２０およびダミー読出プログラム４２４を実行することにより、図６に示す書込読出処理部４１、タスク実行部４２およびダミー指示部４３が実現される。ただし、Ａチャンネル回路４０Ａにおいて実現される書込読出処理部４１は、メインメモリ４０４に対して書き込みおよび読み出しを実行する。Ｂチャンネル回路４０Ｂにおいて実現される書込読出処理部４１は、メインメモリ４０８に対して書き込みおよび読み出しを実行する。
【０１２３】
図１７は、変形例３に係る安全ＩＯユニットの動作例を示す図である。図１７に示されるように、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂにおいて、タスク周期ごとに、ダミーの第２読出指示に従った、メインメモリ４０４，４０８からのダミーの読み出し処理がそれぞれ実行される。これにより、メインメモリ４０４，４０８の各々において、ＩＯタスクの実行のために読み出される頻度の少ない変数についても、データ化けを修復する機会が定期的に設けられる。その結果、メインメモリ４０４，４０８の各々において、各変数に対応する３個の領域のうち複数の領域にデータ化けが生じた状態の発生を抑制できる。
【０１２４】
さらに、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂにおいて、タスク周期ごとに、同一のＩＯタスクがそれぞれ実行される。そして、Ａチャンネル回路４０ＡによるＩＯタスクの結果と、Ｂチャンネル回路４０ＢによるＩＯタスクの結果とが照合される。
【０１２５】
Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂの一方において、ＩＯタスクの実行中に一過性の故障が生じた場合、Ａチャンネル回路４０ＡによるＩＯタスクの結果と、Ｂチャンネル回路４０ＢによるＩＯタスクの結果とが一致しない。このような一過性の故障は、プロセッサ内のレジスタにおけるデータ化け、バス上でのデータ化け、プロセッサの誤動作などに起因して生じる。
【０１２６】
Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂは、両者のＩＯタスクの結果が一致することに応じて、動作を継続させる。一方、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂは、両者のＩＯタスクの結果が一致しないことに応じて、動作を停止させる。これにより、上記のような一過性の故障が生じた状態で実行されたＩＯタスクの結果に基づいて動作が継続されることを抑制できる。
【０１２７】
＜変形例４＞
上記の説明では、メインメモリにおいてデータが３重化して管理されるものとした。しかしながら、メインメモリにおいて、各変数の値を示すデータが４以上に多重化されてもよい。
【０１２８】
＜変形例５＞
標準ＰＬＣ１００、安全ＰＬＣ２００およびカプラ３００も、安全ＩＯユニット４００と同様に、書込読出処理部４１、タスク実行部４２、およびダミー指示部４３（またはダミー指示部４３ａ）を備えていてもよい。ただし、各装置に備えられるタスク実行部４２は、ＩＯタスクの代わりに、各装置に応じたタスクを実行する。これにより、標準ＰＬＣ１００、安全ＰＬＣ２００およびカプラ３００も、メインメモリにデータ化けが生じたとしても動作を継続できる。その結果、制御システム１の停止の頻度が抑制される。
【０１２９】
§３  付記
以上のように、本実施の形態は以下のような開示を含む。
【０１３０】
（構成１）
データ処理装置（４００，４００ｂ）であって、
タスクの実行に使用される複数の変数を記憶するメモリ（４０４，４０８）と、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部（４１，４０２，４０６）と、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部（４１，４０２，４０６）に出力し、前記処理部（４１，４０２，４０６）から受けた当該変数の値を用いて前記タスクを実行するタスク実行部（４２，４０２，４０６）とを備え、
前記処理部（４１，４０２，４０６）は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリ（４０４，４０８）における、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部（４１，４０２，４０６）は、前記読出指示を受けると、
前記メモリ（４０４，４０８）における、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域のいずれかから読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記データ処理装置（４００）は、さらに、
前記タスク実行部（４２，４０２，４０６）が前記第１読出指示を出力するタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部（４１，４０２，４０６）に出力するダミー指示部（４３，４３ａ，４０２，４０６）を備える、データ処理装置（４００，４００ｂ）。
【０１３１】
（構成２）
前記第２読出指示は、前記複数の変数の全てを指定し、
前記ダミー指示部（４３，４０２，４０６）は、予め定められた周期ごとに前記第２読出指示を前記処理部（４１，４０２，４０６）に出力する、構成１に記載のデータ処理装置（４００，４００ｂ）。
【０１３２】
（構成３）
前記複数の変数は、Ｍ個のグループに分割され、
Ｍは２以上の整数であり、
前記ダミー指示部（４３，４０２，４０６）は、
前記Ｍ個のグループの各々について、当該グループに属する変数を指定した前記第２読出指示を予め定められた周期ごとに前記処理部（４１，４０２，４０６）に出力し、
前記Ｍ個のグループごとの前記第２読出指示の出力タイミングを、前記予め定められた周期の１／Ｍの周期分だけ順にシフトさせる、構成１に記載のデータ処理装置（４００，４００ｂ）。
【０１３３】
（構成４）
前記ダミー指示部（４３ａ，４０２，４０６）は、
前記複数の変数の各々について、前記処理部が書き込みまたは読み出しを実行した最新時刻を管理し、
前記最新時刻からの経過時間が予め定められた期間だけ経過した変数を指定した前記第２読出指示を前記処理部（４１，４０２，４０６）に出力する、構成１に記載のデータ処理装置（４００，４００ｂ）。
【０１３４】
（構成５）
前記タスクはファクトリオートメーションに関連する、構成１から４のいずれかに記載のデータ処理装置（４００，４００ｂ）。
【０１３５】
（構成６）
データ処理装置（４００，４００ｂ）の制御方法であって、
前記データ処理装置（４００，４００ｂ）は、
タスクの実行に使用される複数の変数を記憶するメモリ（４０４，４０８）と、
書込指示および読出指示を受けて、前記メモリに対して前記複数の変数のうち指定された変数の書き込みおよび読み出しをそれぞれ実行する処理部（４１，４０２，４０６）とを含み、
前記処理部（４１，４０２，４０６）は、前記書込指示を受けると、前記指定された変数の値を示すデータを、前記メモリにおける、前記指定された変数に対応するＮ個の領域の各々に書き込み、
Ｎは３以上の整数であり、
前記処理部（４１，４０２，４０６）は、前記読出指示を受けると、
前記メモリ（４０４，４０８）における、前記指定された変数に対応する前記Ｎ個の領域の各々からデータを読み出し、前記Ｎ個の領域からそれぞれ読み出したデータを互いに照合し、
前記Ｎ個の領域からそれぞれ読み出したデータの全てが一致することに応じて、前記読出指示の出力元に前記Ｎ個の領域から読み出したデータで示される値を送り、
前記Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、前記Ｎ−１個の領域から読み出したデータと一致するように前記１個の領域のデータを書き換えるとともに、前記読出指示の出力元に前記Ｎ−１個の領域から読み出したデータで示される値を送り、
前記制御方法は、
前記複数の変数のうち必要な変数を指定した第１読出指示を前記処理部（４１，４０２，４０６）に出力し、前記処理部（４１，４０２，４０６）から受けた当該変数の値を用いて前記タスクを実行するステップと、
前記第１読出指示が出力されるタイミングと異なるタイミングにおいて、前記複数の変数のうちの少なくとも１つを指定したダミーの第２読出指示を前記処理部（４１，４０２，４０６）に出力するステップとを備える、制御方法。
【０１３６】
（構成７）
構成６に記載の制御方法をコンピュータに実行させるプログラム。
【０１３７】
本発明の実施の形態について説明したが、今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１３８】
１  制御システム、２  フィールドネットワーク、４０Ａ，４０Ｂ  チャンネル回路、４１  書込読出処理部、４２  タスク実行部、４３，４３ａ  ダミー指示部、４４  変数管理テーブル、４５，４５ａ  変数リスト、１００  標準ＰＬＣ、１０２，２０２，３０２，４０２，４０６  プロセッサ、１０４，２０４，３０４，４０４，４０８  メインメモリ、１０８，３０８  フィールドネットワークコントローラ、１１０，２１０，３１０，４１０  ストレージ、１１６，２１６，３１６，４１２  ローカルバスコントローラ、１１８，２１８，３１８，４１８  プロセッサバス、２００  安全ＰＬＣ、３００  カプラ、４００，４００ｂ  安全ＩＯユニット、４０４ａ，４０４ｂ，４０４ｃ  領域、４１６  安全ＩＯモジュール、４２０  実行可能プログラム、４２２  ライブラリ、４２４  ダミー読出プログラム、１１０２，２１０２，３１０２  システムプログラム、１１０４  標準制御プログラム、１１０６，２１０６，３１０６  設定情報、２１０４  安全プログラム、Ｇ１〜ＧＭ  グループ。
【要約】
【課題】メモリのデータ化けに起因するシステムの一時的な停止を抑制する。
【解決手段】データ処理装置は、タスクの実行に使用される複数の変数を記憶するメモリと、処理部と、ダミー指示部とを備える。処理部は、各変数に対応するメモリ上のＮ個の領域の各々からデータを読み出し、読み出したデータを互いに照合する。処理部は、Ｎ個の領域のうち１個の領域を除いたＮ−１個の領域からそれぞれ読み出したデータが一致することに応じて、Ｎ−１個の領域のデータと一致するように１個の領域のデータを書き換える。ダミー指示部は、タスクの実行タイミングと異なるタイミングにおいて、複数の変数を指定したダミーの読出指示を処理部に出力する。
【選択図】図１１【図１】
0006733843.tif 000002
【図２】
0006733843.tif 000003
【図３】
0006733843.tif 000004
【図４】
0006733843.tif 000005
【図５】
0006733843.tif 000006
【図６】
0006733843.tif 000007
【図７】
0006733843.tif 000008
【図８】
0006733843.tif 000009
【図９】
0006733843.tif 000010
【図１０】
0006733843.tif 000011
【図１１】
0006733843.tif 000012
【図１２】
0006733843.tif 000013
【図１３】
0006733843.tif 000014
【図１４】
0006733843.tif 000015
【図１５】
0006733843.tif 000016
【図１６】
0006733843.tif 000017
【図１７】
0006733843.tif 000018