(57)【特許請求の範囲】
【請求項１】
演算処理を実行する情報処理装置であって、
第１の処理回路と、
第２の処理回路とを備え、
前記第１の処理回路は、前記演算処理をＮ回連続して実行し、
前記第２の処理回路は、前記演算処理をＮ回連続して実行し、
Ｎは２以上の整数であり、
前記第１の処理回路および前記第２の処理回路は、前記第１の処理回路によって実行されたＮ回の前記演算処理の第１の結果のうちの少なくとも１つの第１の結果と、前記第２の処理回路によって実行されたＮ回の前記演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、前記少なくとも１つの第１の結果および前記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続する、情報処理装置。
【請求項２】
前記第１の処理回路は、第１のメモリと、前記第１のメモリを用いて前記演算処理を実行する第１のプロセッサとを含み、
前記第２の処理回路は、第２のメモリと、前記第２のメモリを用いて前記演算処理を実行する第２のプロセッサとを含み、
前記第１のプロセッサは、前記第１のメモリの互いに異なるＮ個の領域を用いて、Ｎ回の前記演算処理をそれぞれ実行し、
前記第２のプロセッサは、前記第２のメモリの互いに異なるＮ個の領域を用いて、Ｎ回の前記演算処理をそれぞれ実行する、請求項１に記載の情報処理装置。
【請求項３】
前記第１のプロセッサは、前記第１のメモリの前記Ｎ個の領域のうち、前記少なくとも１つの第１の結果と異なる結果が出力された前記演算処理において用いられた領域のデータを、前記少なくとも１つの第２の結果が出力された前記演算処理において用いられた領域のデータで上書きし、
前記第２のプロセッサは、前記第２のメモリの前記Ｎ個の領域のうち、前記少なくとも１つの第２の結果と異なる結果が出力された前記演算処理において用いられた領域のデータを、前記少なくとも１つの第２の結果が出力された前記演算処理において用いられた領域のデータで上書きする、請求項２に記載の情報処理装置。
【請求項４】
前記第１の処理回路は、第１のメモリと、前記第１のメモリを用いて前記演算処理を実行する第１のプロセッサとを含み、
前記第２の処理回路は、第２のメモリと、前記第２のメモリを用いて前記演算処理を実行する第２のプロセッサとを含み、
前記第１のプロセッサは、前記演算処理に用いられる対象データを前記第１のメモリに書き込むとき、前記対象データをコピーすることにより得られる２つのコピーデータも前記第１のメモリに書き込み、
前記第２のプロセッサは、前記演算処理に用いられる対象データを前記第２のメモリに書き込むとき、前記対象データをコピーすることにより得られる２つのコピーデータも前記第２のメモリに書き込み、
前記第１のプロセッサは、
前記演算処理を実行する前に、前記第１のメモリから前記対象データおよび前記２つのコピーデータを読み出し、
読み出した前記対象データおよび前記２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて前記演算処理を実行し、
前記第２のプロセッサは、
前記演算処理を実行する前に、前記第２のメモリから前記対象データおよび前記２つのコピーデータを読み出し、
読み出した前記対象データおよび前記２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて前記演算処理を実行する、請求項１に記載の情報処理装置。
【請求項５】
前記第１のプロセッサは、読み出した前記対象データおよび前記２つのコピーデータのうち２つのデータが一致し、残り１つのデータが前記２つのデータと異なることに応じて、前記第１のメモリにおいて、前記１つのデータが格納されていた領域を、前記２つのデータの一方で上書きし、
前記第２のプロセッサは、読み出した前記対象データおよび前記２つのコピーデータのうち２つのデータが一致し、残り１つのデータが前記２つのデータと異なることに応じて、前記第２のメモリにおいて、前記１つのデータが格納されていた領域を、前記２つのデータの一方で上書きする、請求項４に記載の情報処理装置。
【請求項６】
前記第１のプロセッサは、Ｎ回の前記演算処理の結果を、前記第１のメモリの互いに異なるＮ個の領域にそれぞれ書き込み、
前記第２のプロセッサは、Ｎ回の前記演算処理の結果を、前記第２のメモリの互いに異なるＮ個の領域にそれぞれ書き込み、
前記第１のプロセッサは、前記第１のメモリの前記Ｎ個の領域のうち、前記少なくとも１つの第１の結果と異なる結果が書き込まれた領域のデータを、前記少なくとも１つの第１の結果が書き込まれた領域のデータで上書きし、
前記第２のプロセッサは、前記第２のメモリの前記Ｎ個の領域のうち、前記少なくとも１つの第２の結果と異なる結果が書き込まれた領域のデータを、前記少なくとも１つの第２の結果が書き込まれた領域のデータで上書きする、請求項４または５に記載の情報処理装置。
【請求項７】
演算処理を実行する情報処理装置の制御方法であって、
前記情報処理装置は、
第１の処理回路と、
第２の処理回路とを含み、
前記制御方法は、
前記第１の処理回路が前記演算処理をＮ回連続して実行するステップと、
前記第２の処理回路が前記演算処理をＮ回連続して実行するステップとを備え、
Ｎは２以上の整数であり、
前記制御方法は、さらに、
前記第１の処理回路および前記第２の処理回路が、前記第１の処理回路によって実行されたＮ回の前記演算処理の第１の結果のうちの少なくとも１つの第１の結果と、前記第２の処理回路によって実行されたＮ回の前記演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、前記少なくとも１つの第１の結果および前記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続するステップを備える、制御方法。
【請求項８】
第１の処理回路と第２の処理回路とを含むコンピュータに、
前記第１の処理回路に演算処理をＮ回連続して実行させるステップと、
前記第２の処理回路に前記演算処理をＮ回連続して実行させるステップとを実行させ、
Ｎは２以上の整数であり、さらに、
前記第１の処理回路によって実行されたＮ回の前記演算処理の第１の結果のうちの少なくとも１つの第１の結果と、前記第２の処理回路によって実行されたＮ回の前記演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、前記少なくとも１つの第１の結果および前記少なくとも１つの第２の結果に基づいて、前記第１の処理回路および前記第２の処理回路の動作をそれぞれ継続させるステップを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置、制御方法およびプログラムに関する。
【背景技術】
【０００２】
情報処理装置における演算処理の実行中において一過性の故障が生じ、所望とは異なる演算結果が出力され得る。このような一過性の故障は、例えば、プロセッサ内のレジスタにおけるデータ化け、バス上でのデータ化け、プロセッサの誤動作などに起因して生じる。一過性の故障が起こり得る情報処理装置をシステムに適用すると、当該故障によるシステムの一時的な停止が生じうる。社会インフラを支えるシステムにおいて、このような一時的な停止が生じると、重大な影響を及ぼす。また、生産ラインに組み込まれるシステムにおいて一時的な停止が生じると、生産効率が低下する。
【０００３】
このようなシステムの一時的な停止を回避するための技術が開発されている。例えば、特開２０１９−８７８１号公報（特許文献１）は、処理回路を三重化する三重モード冗長（Triple Modular Redundant（ＴＭＲ））技術を開示している。ＴＭＲ技術によれば、３つの処理回路のうち１つの処理回路において一過性の故障が生じたとしても、残りの２つの処理回路によって当該故障を訂正することができる。これにより、システムの一時的な停止を回避できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１９−８７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の技術では、同一の処理回路を３つ用意する必要があるため、処理回路を構成するハードウェアに要するコストが増大する。
【０００６】
本開示は、上記の問題に鑑みてなされたものであり、その目的は、ハードウェアに要するコストの増大を抑制するとともに、一過性の故障によるシステムの一時的な停止を抑制可能な情報処理装置、制御方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本開示の一例によれば、演算処理を実行する情報処理装置は、第１の処理回路と、第２の処理回路とを備える。第１の処理回路は、演算処理をＮ回連続して実行する。第２の処理回路は、演算処理をＮ回連続して実行する。Ｎは２以上の整数である。第１の処理回路および第２の処理回路は、第１の処理回路によって実行されたＮ回の演算処理の第１の結果のうちの少なくとも１つの第１の結果と、第２の処理回路によって実行されたＮ回の演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、上記少なくとも１つの第１の結果および上記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続する。
【０００８】
この開示によれば、３つの処理回路を必要とするＴＭＲ技術と比較して、ハードウェアに要するコストの増大を抑制できる。
【０００９】
演算処理の実行中に一過性の故障が生じる確率は一般に低い。そのため、互いに一致する上記少なくとも１つの第１の結果と上記少なくとも１つの第２の結果とは、実行中に一過性の故障の生じていない演算処理の結果であると推定される。これにより、第１の処理回路および第２の処理回路、信頼性の高い結果を用いて動作を継続できる。このように、一過性の故障が生じたとしても、動作を継続させることができ、一過性の故障によるシステムの一時的な停止を抑制できる。
【００１０】
上述の開示において、第１の処理回路は、第１のメモリと、第１のメモリを用いて演算処理を実行する第１のプロセッサとを含む。第２の処理回路は、第２のメモリと、第２のメモリを用いて演算処理を実行する第２のプロセッサとを含む。第１のプロセッサは、第１のメモリの互いに異なるＮ個の領域を用いて、Ｎ回の演算処理をそれぞれ実行する。第２のプロセッサは、第２のメモリの互いに異なるＮ個の領域を用いて、Ｎ回の演算処理をそれぞれ実行する。
【００１１】
この開示によれば、第１のメモリのＮ個の領域のうちの一部および第２のメモリのＮ個の領域のうちの一部において、演算処理の開始前の一過性の故障によってデータ化けが生じたとしても、少なくとも１つの第１の結果と少なくとも１つの第２の結果とが一致する。演算処理の開始前に生じうる一過性の故障は、例えばソフトエラーなどによって起こりうる。そのため、第１のプロセッサおよび第２のプロセッサは、互いに一致する上記少なくとも１つの第１の結果および上記少なくとも１つの第２の結果に基づいて運転をそれぞれ継続できる。すなわち、演算処理の開始前に一過性の故障が生じた場合であっても、第１の処理回路および第２の処理回路は、動作を継続できる。
【００１２】
上述の開示において、第１のプロセッサは、第１のメモリのＮ個の領域のうち、上記少なくとも１つの第１の結果と異なる結果が出力された演算処理において用いられた領域のデータを、上記少なくとも１つの第１の結果が出力された演算処理において用いられた領域のデータで上書きする。第２のプロセッサは、第２のメモリのＮ個の領域のうち、上記少なくとも１つの第２の結果と異なる結果が出力された演算処理において用いられた領域のデータを、上記少なくとも１つの第２の結果が出力された演算処理において用いられた領域のデータで上書きする。
【００１３】
この開示によれば、誤ったデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【００１４】
上述の開示において、第１の処理回路は、第１のメモリと、第１のメモリを用いて演算処理を実行する第１のプロセッサとを含む。第２の処理回路は、第２のメモリと、第２のメモリを用いて演算処理を実行する第２のプロセッサとを含む。第１のプロセッサは、演算処理に用いられる対象データを第１のメモリに書き込むとき、対象データをコピーすることにより得られる２つのコピーデータも第１のメモリに書き込む。第２のプロセッサは、演算処理に用いられる対象データを第２のメモリに書き込むとき、対象データをコピーすることにより得られる２つのコピーデータも第２のメモリに書き込む。第１のプロセッサは、演算処理を実行する前に、第１のメモリから対象データおよび２つのコピーデータを読み出し、読み出した対象データおよび２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて演算処理を実行する。第２のプロセッサは、演算処理を実行する前に、第２のメモリから対象データおよび２つのコピーデータを読み出し、読み出した対象データおよび２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて演算処理を実行する。
【００１５】
この開示によれば、第１のメモリおよび第２のメモリの各々において、演算処理の開始前の一過性の故障（例えばソフトエラー）により対象データおよび２つのコピーデータのうちのいずれか１つのデータにデータ化けが生じたとしても、残り２つのデータを用いて演算処理が実行される。これにより、演算処理の開始前に一過性の故障が生じた場合であっても、当該一過性の故障の生じていない正しいデータを用いて演算処理が実行され、当該演算処理の結果に基づいて動作を継続できる。
【００１６】
上述の開示において、第１のプロセッサは、読み出した対象データおよび２つのコピーデータのうち２つのデータが一致し、残り１つのデータが２つのデータと異なることに応じて、第１のメモリにおいて、１つのデータが格納されていた領域を、２つのデータの一方で上書きする。
【００１７】
第２のプロセッサは、読み出した対象データおよび２つのコピーデータのうち２つのデータが一致し、残り１つのデータが２つのデータと異なることに応じて、第２のメモリにおいて、１つのデータが格納されていた領域を、２つのデータの一方で上書きする。
【００１８】
この開示によれば、一過性の故障によりデータ化けしたデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【００１９】
上述の開示において、第１のプロセッサは、Ｎ回の演算処理の結果を、第１のメモリの互いに異なるＮ個の領域にそれぞれ書き込む。第２のプロセッサは、Ｎ回の演算処理の結果を、第２のメモリの互いに異なるＮ個の領域にそれぞれ書き込む。第１のプロセッサは、第１のメモリのＮ個の領域のうち、上記少なくとも１つの第１の結果と異なる結果が書き込まれた領域のデータを、上記少なくとも１つの第１の結果が書き込まれた領域のデータで上書きする。第２のプロセッサは、第２のメモリのＮ個の領域のうち、上記少なくとも１つの第２の結果と異なる結果が書き込まれた領域のデータを、上記少なくとも１つの第２の結果が書き込まれた領域のデータで上書きする。
【００２０】
この開示によれば、誤ったデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【００２１】
本開示の一例によれば、演算処理を実行する情報処理装置は、第１の処理回路と、第２の処理回路とを含む。情報処理装置の制御方法は、第１の処理回路が演算処理をＮ回連続して実行するステップと、第２の処理回路が演算処理をＮ回連続して実行するステップとを備える。Ｎは２以上の整数である。制御方法は、さらに、第１の処理回路および第２の処理回路が、第１の処理回路によって実行されたＮ回の演算処理の第１の結果のうちの少なくとも１つの第１の結果と、第２の処理回路によって実行されたＮ回の演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、上記少なくとも１つの第１の結果および上記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続するステップを備える。
【００２２】
本開示の一例によれば、プログラムは、上記の制御方法をコンピュータに実行させる。これらの開示によっても、ハードウェアに要するコストの増大を抑制するとともに、一過性の故障による一時的な停止を抑制できる。
【発明の効果】
【００２３】
本開示によれば、ハードウェアに要するコストの増大を抑制するとともに、一過性の故障による一時的な停止を抑制できる。
【図面の簡単な説明】
【００２４】
【図１】実施形態に係る制御システムの全体構成を示す概略図である。
【図２】２つの処理回路を用いた処理の参考例を示す図である。
【図３】２つの処理回路を用いた処理の実施例を示す図である。
【図４】標準ＰＬＣのハードウェア構成例を示す模式図である。
【図５】安全ＰＬＣのハードウェア構成例を示す模式図である。
【図６】カプラのハードウェア構成例を示す模式図である。
【図７】具体例１に係る安全ＩＯユニットのハードウェア構成例を示す模式図である。
【図８】一過性の故障が生じていないときの、２つの処理回路を用いた処理の具体例１を示す図である。
【図９】一過性の故障が生じたときの、２つの処理回路を用いた処理の具体例１を示す図である。
【図１０】具体例１におけるデータの修復処理の一例を示す図である。
【図１１】安全ＩＯユニットにおける処理の流れを示すフローチャートである。
【図１２】アドレスを示すデータにデータ化けが生じたときの、具体例１の処理の一例を示す図である。
【図１３】具体例２に係る安全ＩＯユニットのハードウェア構成例を示す模式図である。
【図１４】メインメモリへのデータの書き込み処理を示す図である。
【図１５】メインメモリからのデータの読み出し処理を示す図である。
【図１６】具体例２に係るメインメモリの領域を示す図である。
【図１７】データ化けが生じたときの、２つの処理回路を用いた処理の具体例２を示す図である。
【図１８】図１７に示すデータ「Ｘ」の修復処理の一例を示す図である。
【図１９】一過性の故障が生じたときの、２つの処理回路を用いた処理の具体例２を示す図である。
【図２０】図１９に示すデータ「Ｚ」の修復処理の一例を示す図である。
【発明を実施するための形態】
【００２５】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２６】
§１  適用例
航空宇宙システム、自動車、医療機器、通信機器、産業機器など様々に分野において、情報処理装置の一過性の故障によるシステムの一時的な停止を抑制することが望まれる。本発明は、このような様々な分野のシステムに適用され得る。以下では、本発明の適用例として、ＦＡ（Factory Automation）分野に組み込まれる制御システムについて説明するが、本発明の適用例は、当該制御システムに限定されない。
【００２７】
図１は、実施形態に係る制御システムの全体構成を示す概略図である。図１に例示される制御システム１は、主要なコンポーネントとして、標準ＰＬＣ（プログラマブルロジックコントローラ）１００と、安全ＰＬＣ２００と、１以上のカプラ３００と、１以上の安全ＩＯユニット４００とを含む。
【００２８】
標準ＰＬＣ１００は、予め作成された標準制御プログラムに従って、任意の制御対象に対する標準制御を実行する。「標準制御」は、予め定められた要求仕様に沿って、制御対象を制御するための処理の総称である。制御対象は、例えばサーボモータ、ロボットなどである。
【００２９】
安全ＰＬＣ２００は、標準ＰＬＣ１００とは独立して、任意の制御対象に対するセーフティ制御を実行する。図１に例示される安全ＰＬＣ２００は、ローカルバスを介して標準ＰＬＣ１００に接続される。「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理の総称である。「セーフティ制御」は、例えばＩＥＣ  ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。
【００３０】
カプラ３００は、標準ＰＬＣ１００と安全ＩＯユニット４００との間のデータの遣り取りを仲介する。カプラ３００は、フィールドネットワーク２を介して、標準ＰＬＣ１００と電気的に接続されている。フィールドネットワーク２は、ＦＡ（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）などによって構成される。プロセッサ４０１，４０４は、それぞれレジスタ４０２，４０５を内蔵している。レジスタ４０２，４０５は、プロセッサ４０１，４０４による演算結果を一時的に保持したり、メインメモリ４０３，４０６を読み書きする際のアドレスを保持したりする。
【００７０】
メインメモリ４０３，４０６は、例えばＤＲＡＭやＳＲＡＭのような揮発性メモリによって構成される。ＳＲＡＭは、記憶部の構造としてフリップフロップを用いており、リフレッシュ動作を必要とせず、ＤＲＡＭより高速に動作できるという利点を有する。そのため、ＳＲＡＭをメインメモリ４０３，４０６として用いることが好ましい。以下、メインメモリ４０３，４０６がＳＲＡＭであるとものとして説明する。
【００７１】
ストレージ４１０は、例えば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などで構成される。ストレージ４１０には、ＩＯ機能を実現するためのＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２と、照合修復プログラム４２Ａ，４２Ｂとが格納される。ＩＯプログラム４１Ａ１，４１Ａ２および照合修復プログラム４２Ａは、Ａチャンネル回路４０Ａにおいて実行される。ＩＯプログラム４１Ｂ１，４１Ｂ２および照合修復プログラム４２Ｂは、Ｂチャンネル回路４０Ｂにおいて実行される。
【００７２】
ローカルバスコントローラ４２０は、ローカルバスを介して、安全ＩＯユニット４００が接続されるデバイス（例えば安全ＰＬＣ２００、カプラ３００）との間でデータを遣り取りする。
【００７３】
安全ＩＯモジュール４３０は、安全デバイスと電気的に接続され、安全デバイスによる検出結果などの入力を受け付けたり、安全デバイスへ信号を出力したりする。
【００７４】
なお、図７の例では、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂに共用されるストレージ４１０が設けられる。しかしながら、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂの各々にストレージが設けられてもよい。また、Ａチャンネル回路４０ＡとＢチャンネル回路４０Ｂとは、プロセッサバス４４０ではなく、シリアル通信を用いて接続されてもよい。
【００７５】
＜一過性の故障について＞
一過性の故障は、例えば、プロセッサ４０１，４０４内のレジスタ４０２，４０５におけるデータ化け、プロセッサバス４４０上でのデータ化け、プロセッサ４０１，４０４の誤動作などに起因して生じ得る。
【００７６】
さらに、近年、半導体デバイスの高集積化および微細化に伴い、α粒子や宇宙線中性子によるソフトエラーが急増している。一過性の故障は、ソフトエラーによるデータ化けによっても生じ得る。積み上げ型（スタック型）の構造を有するＤＲＡＭでは、ソフトエラー耐性が高い。一方、フリップフロップ構造を有するＳＲＡＭでは、微細化によりソフトエラー耐性が低下する。そのため、ＳＲＡＭによって構成されるメインメモリ４０３，４０６を用いる場合、メインメモリ４０３，４０６にソフトエラーが起こり得る。
【００７７】
演算処理（演算タスク）の開始前においてメインメモリ４０３，４０６にソフトエラーなどに起因する一過性の故障が生じた場合、当該一過性の故障が生じた状態のデータを用いてプロセッサ４０１，４０４が演算することにより、演算結果が所望の結果と異なる。そのため、安全ＩＯモジュール４３０の動作が異常状態となる。
【００７８】
具体例１に係る安全ＩＯユニット４００は、演算処理の実行中において一過性の故障が生じた場合に限らず、演算処理の開始前においてメインメモリ４０３，４０６に一過性の故障が生じた場合であっても、正常な動作を継続するように以下のような処理を実行する。
【００７９】
＜安全ＩＯユニットにおける処理の具体例１＞
図８から図１０を参照して、２つの処理回路を用いた処理の具体例について説明する。図８は、一過性の故障が生じていないときの、２つの処理回路を用いた処理の具体例１を示す図である。図９は、一過性の故障が生じたときの、２つの処理回路を用いた処理の具体例１を示す図である。図１０は、具体例１におけるデータの修復処理の一例を示す図である。
【００８０】
図８および図９に示されるように、Ａチャンネル回路４０Ａのプロセッサ４０１は、セーフティタスク周期において、同一の演算タスクＴ１，Ｔ２を連続して実行する。Ｂチャンネル回路４０Ｂのプロセッサ４０４は、セーフティタスク周期において、同一の演算タスクＴ３，Ｔ４を連続して実行する。また、プロセッサ４０１が実行する演算タスクＴ１，Ｔ２は、プロセッサ４０４が実行する演算タスクＴ３，Ｔ４と同一である。すなわち、安全ＩＯユニット４００は、セーフティタスク周期において、同一の演算タスクＴ１〜Ｔ４を実行する。ただし、安全ＩＯユニット４００は、互いに異なる４つのメモリ領域を用いて、演算タスクＴ１〜Ｔ４をそれぞれ実行する。
【００８１】
具体的には、Ａチャンネル回路４０Ａを構成するメインメモリ４０３において、１回目の演算タスクＴ１で使用される領域４０３ａと２回目の演算タスクＴ２で使用される領域４０３ｂとが設定される。同様に、Ｂチャンネル回路４０Ｂを構成するメインメモリ４０６において、１回目の演算タスクＴ３で使用される領域４０６ａと２回目の演算タスクＴ４で使用される領域４０６ｂとが設定される。
【００８２】
Ａチャンネル回路４０Ａを構成するプロセッサ４０１は、演算タスクＴ１を実行する前に、演算タスクＴ１で使用されるデータを、Ａチャンネル回路を構成するメインメモリ４０３の領域４０３ａに書き込む。図８および図９に例示される実施例では、プロセッサ４０１は、演算タスクＴ１の実行前に、データ「Ｘ」および「Ｙ」を領域４０３ａに書き込んでいる。同様に、プロセッサ４０１は、演算タスクＴ２を実行する前に、演算タスクＴ２で使用されるデータ「Ｘ」および「Ｙ」をメインメモリ４０３の領域４０３ｂに書き込む。
【００８３】
Ｂチャンネル回路４０Ｂを構成するプロセッサ４０４は、プロセッサ４０１と同様に、演算タスクＴ３を実行する前に、演算タスクＴ３で使用されるデータ「Ｘ」および「Ｙ」を、Ｂチャンネル回路を構成するメインメモリ４０６の領域４０６ａに書き込む。同様に、プロセッサ４０４は、演算タスクＴ４を実行する前に、演算タスクＴ４で使用されるデータ「Ｘ」および「Ｙ」をメインメモリ４０６の領域４０６ｂに書き込む。
【００８４】
なお、領域４０３ａ，４０３ｂ，４０６ａ，４０６ｂへのデータ「Ｘ」および「Ｙ」を書き込むタイミングは、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２によってそれぞれ定義されている。当該タイミングは、例えば前回のセーフティタスク周期であってもよいし、安全ＩＯユニット４００の起動時であってもよい。また、データ「Ｘ」および「Ｙ」が書き込まれる領域４０３ａ，４０３ｂ，４０６ａ，４０６ｂ内のアドレスは、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２によってそれぞれ定義される。
【００８５】
プロセッサ４０１は、セーフティタスク周期の開始タイミングと同期して、演算タスクＴ１を開始する。図８および図９に例示される実施例では、プロセッサ４０１は、メインメモリ４０３の領域４０３ａからデータ「Ｘ」および「Ｙ」を読み出し、データ「Ｘ」および「Ｙ」を用いた演算を実行する。そして、プロセッサ４０１は、演算結果であるデータ「Ｚ」をメインメモリ４０３の領域４０３ａに書き込む。
【００８６】
プロセッサ４０１は、演算タスクＴ１の終了後に演算タスクＴ２を開始する。演算タスクＴ２は、メインメモリ４０３内の領域４０３ａの代わりに領域４０３ｂを用いる点でのみ演算タスクＴ１と相違する。すなわち、プロセッサ４０１は、領域４０３ｂからデータ「Ｘ」および「Ｙ」を読み出し、データ「Ｘ」および「Ｙ」を用いた演算を実行する。そして、プロセッサ４０１は、演算結果であるデータ「Ｚ」を領域４０３ｂに書き込む。
【００８７】
同様に、プロセッサ４０４は、セーフティタスク周期の開始タイミングと同期して、演算タスクＴ３を開始する。演算タスクＴ３は、メインメモリ４０３内の領域４０３ａの代わりにメインメモリ４０６の領域４０６ａを用いる点でのみ演算タスクＴ１と相違する。すなわち、プロセッサ４０４は、メインメモリ４０６の領域４０６ａからデータ「Ｘ」および「Ｙ」を読み出し、データ「Ｘ」および「Ｙ」を用いた演算を実行する。そして、プロセッサ４０４は、演算結果であるデータ「Ｚ」をメインメモリ４０６の領域４０６ａに書き込む。
【００８８】
プロセッサ４０４は、演算タスクＴ３の終了後に演算タスクＴ４を開始する。演算タスクＴ４は、メインメモリ４０６内の領域４０６ａの代わりに領域４０６ｂを用いる点でのみ演算タスクＴ３と相違する。すなわち、プロセッサ４０１は、領域４０６ｂからデータ「Ｘ」および「Ｙ」を読み出し、データ「Ｘ」および「Ｙ」を用いた演算を実行する。そして、プロセッサ４０４は、演算結果であるデータ「Ｚ」を領域４０６ｂに書き込む。
【００８９】
演算タスクＴ１〜Ｔ４は、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２に従ってそれぞれ実行される。すなわち、データ「Ｘ」および「Ｙ」の読み出し先となる領域４０３ａ，４０３ｂ，４０６ａ，４０６ｂ内のアドレスは、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２によってそれぞれ定義されている。ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２は、データ「Ｘ」および「Ｙ」を用いた同一の演算内容を定義する。データ「Ｚ」が書き込まれる領域４０３ａ，４０３ｂ，４０６ａ，４０６ｂ内のアドレスは、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２によってそれぞれ定義されている。このように、ＩＯプログラム４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２は、読み出しおよび書き込みの対象先となるメモリ領域のアドレスについてのみ互いに異なり、同一の演算内容を定義している。
【００９０】
Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂのいずれにおいても一過性の故障が生じていない場合、図８に示されるように、演算タスクＴ１〜Ｔ４の結果（データ「Ｚ」）は全て同一となる。一方、演算タスクＴ４の開始前または実行中において一過性の故障が生じると、図９に示されるように、演算タスクＴ４の結果（データ「Ｚ’」）が、演算タスクＴ１〜Ｔ３の結果（データ「Ｚ」）と異なる。図９の例では、演算タスクＴ４の開始前において領域４０６ｂにソフトエラーなどに起因するデータ化けが生じ、データ「Ｘ」がデータ「Ｘ’」に化けている。
【００９１】
そこで、プロセッサ４０１，４０４は、２回の演算タスクの後に、演算タスクＴ１〜Ｔ４の結果を照合する。演算タスクＴ１〜Ｔ４の結果が全て一致することに応じて、プロセッサ４０１，４０４は、データ化けを含む一過性の故障が生じていないと判断し、演算タスクＴ１〜Ｔ４の結果に基づいて動作を継続させる。
【００９２】
演算タスクＴ１，Ｔ２の結果のうちの少なくとも１つの結果と、演算タスクＴ３，Ｔ４の結果のうちの少なくとも１つの結果とが一致することに応じて、プロセッサ４０１，４０４は、一致する当該結果（以下、「共通結果」とも称する。）が一過性の故障の生じていない演算タスクの結果であると判断する。そして、プロセッサ４０１，４０４は、当該結果に基づいて動作を継続させる。図９に示す例では、演算タスクＴ１，Ｔ２の結果と、演算タスクＴ３の結果とが一致している。そのため、プロセッサ４０１は、演算タスクＴ１，Ｔ２の結果に基づいて動作を継続させ、プロセッサ４０４は、演算タスクＴ３の結果に基づいて動作を継続させる。
【００９３】
さらに、プロセッサ４０１，４０４は、上記共通結果が演算された演算タスクで用いられるメモリ領域のデータを、上記共通結果と異なる結果が演算された演算タスクで用いられたメモリ領域に上書きする。図１０に示す例では、プロセッサ４０４は、演算タスクＴ１，Ｔ２と一致する結果が出力された演算タスクＴ３において用いられた領域４０６ａのデータを、演算タスクＴ３の結果と異なる結果が出力された演算タスクＴ４において用いられた領域４０６ｂに上書きする。これにより、一過性の故障が生じたメモリ領域の誤ったデータが、一過性の故障の生じていないメモリ領域の正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【００９４】
プロセッサ４０１，４０４による演算タスクＴ１〜Ｔ４の照合処理は、照合修復プログラム４２Ａ，４２Ｂによってそれぞれ定義される。また、プロセッサ４０１による領域４０３ａ，４０３ｂの修復処理は、照合修復プログラム４２Ａによって定義される。同様に、プロセッサ４０４による領域４０６ａ，４０６ｂの修復処理は、照合修復プログラム４２Ｂによって定義される。
【００９５】
＜安全ＩＯユニットにおける処理の流れ＞
図１１は、安全ＩＯユニットにおける処理の流れを示すフローチャートである。まず、プロセッサ４０１，４０４は、タクト開始のタイミングに到達したか否かを判断する（ステップＳ１）。タクト開始のタイミングに到達していない場合（ステップＳ１でＮＯ）、処理は再度ステップＳ１に戻る。
【００９６】
タクト開始のタイミングに到達すると（ステップＳ１でＹＥＳ）、ステップＳ２，Ｓ３と、ステップＳ４，Ｓ５との並行処理が実行される。ステップＳ２において、Ａチャンネル回路４０Ａのプロセッサ４０１は、メインメモリ４０３の領域４０３ａを用いて１回目の演算タスクＴ１を実行する。演算タスクＴ１の実行が完了すると、ステップＳ３において、プロセッサ４０１は、メインメモリ４０３の領域４０３ｂを用いて２回目の演算タスクＴ２を実行する。ステップＳ４において、Ｂチャンネル回路４０Ｂのプロセッサ４０４は、メインメモリ４０６の領域４０６ａを用いて１回目の演算タスクＴ３を実行する。演算タスクＴ３の実行が完了すると、ステップＳ４において、プロセッサ４０４は、メインメモリ４０６の領域４０６ｂを用いて２回目の演算タスクＴ４を実行する。
【００９７】
ステップＳ３，Ｓ５が完了すると、ステップＳ６において、プロセッサ４０１，４０４は、演算タスクＴ１〜Ｔ４の結果を照合する。
【００９８】
演算タスクＴ１〜Ｔ４の結果が全て一致する場合（ステップＳ７でＹＥＳ）、プロセッサ４０１，４０４は、演算タスクＴ１〜Ｔ４の全てが正常に終了したと判断し、演算タスクＴ１〜Ｔ４の結果に基づいて運転を継続させる（ステップＳ１０）。ステップＳ１０の後、処理は終了する。
【００９９】
演算タスクＴ１〜Ｔ４の結果が全て一致しない場合（ステップＳ７でＮＯ）、プロセッサ４０１，４０４は、演算タスクＴ１，Ｔ２の結果のうちの少なくとも１つの結果と、演算タスクＴ３，Ｔ４の結果のうちの少なくとも１つの結果とが一致するか否か判断する（ステップＳ８）。
【０１００】
ステップＳ８でＹＥＳの場合、一致しない演算タスクに用いられるメモリ領域のデータが修復される（ステップＳ９）。データを修復した後、処理はステップＳ１０に移る。
【０１０１】
例えば、演算タスクＴ１の結果が他の３つの演算タスクの結果と異なる場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ａのデータを領域４０３ｂに上書きする。演算タスクＴ２の結果が他の３つの演算タスクの結果と異なる場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ｂのデータを領域４０３ａに上書きする。演算タスクＴ３の結果が他の３つの演算タスクの結果と異なる場合、プロセッサ４０４は、メインメモリ４０６において、領域４０６ａのデータを領域４０６ｂに上書きする。演算タスクＴ４の結果が他の３つの演算タスクの結果と異なる場合、プロセッサ４０４は、メインメモリ４０６において、領域４０６ｂのデータを領域４０６ａに上書きする。
【０１０２】
演算タスクＴ１，Ｔ３の結果が一致し、演算タスクＴ２，Ｔ４の各々が演算タスクＴ１，Ｔ３の結果の一致しない場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ａのデータを領域４０３ｂに上書きする。さらに、プロセッサ４０４は、メインメモリ４０６において、領域４０６ａのデータを領域４０６ｂに上書きする。演算タスクＴ１，Ｔ４の結果が一致し、演算タスクＴ２，Ｔ３の各々が演算タスクＴ１，Ｔ４の結果の一致しない場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ａのデータを領域４０３ｂに上書きする。さらに、プロセッサ４０４は、メインメモリ４０６において、領域４０６ｂのデータを領域４０６ａに上書きする。演算タスクＴ２，Ｔ３の結果が一致し、演算タスクＴ１，Ｔ４の各々が演算タスクＴ１，Ｔ３の結果の一致しない場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ｂのデータを領域４０３ａに上書きする。さらに、プロセッサ４０４は、メインメモリ４０６において、領域４０６ａのデータを領域４０６ｂに上書きする。演算タスクＴ２，Ｔ４の結果が一致し、演算タスクＴ１，Ｔ３の各々が演算タスクＴ２，Ｔ４の結果の一致しない場合、プロセッサ４０１は、メインメモリ４０３において、領域４０３ｂのデータを領域４０３ａに上書きする。さらに、プロセッサ４０４は、メインメモリ４０６において、領域４０６ｂのデータを領域４０６ａに上書きする。
【０１０３】
ステップＳ８でＮＯの場合、プロセッサ４０１，４０４は、異常信号を出力し、運転を停止させる（ステップＳ１１）。ステップＳ１１の後、処理は終了する。
【０１０４】
＜作用・効果＞
以上のように、具体例１によれば、Ａチャンネル回路４０Ａは、メインメモリ４０３と、メインメモリ４０３を用いて演算タスクを実行するプロセッサ４０１とを含む。Ｂチャンネル回路４０Ｂは、メインメモリ４０６と、メインメモリ４０６を用いて演算タスクを実行するプロセッサ４０４とを含む。プロセッサ４０１は、メインメモリ４０３の互いに異なる２個の領域４０３ａ，４０３ｂを用いて、演算タスクＴ１，Ｔ２をそれぞれ実行する。プロセッサ４０４は、メインメモリ４０６の互いに異なる２個の領域４０６ａ，４０６ｂを用いて、演算タスクＴ３，Ｔ４をそれぞれ実行する。
【０１０５】
上記の構成によれば、プロセッサ４０１は、メインメモリ４０３の異なる領域４０３ａ，４０３ｂを用いて２回の演算タスクＴ１，Ｔ２をそれぞれ実行する。同様に、プロセッサ４０４は、メインメモリ４０６の異なる領域４０６ａ，４０６ｂを用いて２回の演算タスクＴ３，Ｔ４をそれぞれ実行する。これにより、領域４０３ａ，４０３ｂの一方、および／または，領域４０６ａ，４０６ｂの一方においてソフトエラーなどに起因するデータ化けが生じたとしても、領域４０３ａ，４０３ｂの他方を用いた演算タスクの結果（共通結果）と、領域４０６ａ，４０６ｂの他方を用いた演算タスクの結果（共通結果）とは一致する。そのため、プロセッサ４０１，４０４は、当該共通結果に基づいて運転を継続できる。すなわち、演算タスクの開始前にメインメモリ４０３に一過性の故障が生じた場合であっても、Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂは、動作を継続できる。
【０１０６】
プロセッサ４０１は、メインメモリ４０３の領域４０３ａ，４０３ｂのうち、上記共通結果と異なる結果が出力された演算タスクにおいて用いられた領域のデータを、上記共通結果が出力された演算タスクにおいて用いられた領域のデータで上書きする。同様に、プロセッサ４０４は、メインメモリ４０６の領域４０６ａ，４０６ｂのうち、上記共通結果と異なる結果が出力された演算タスクにおいて用いられた領域のデータを、上記共通結果が出力された演算タスクにおいて用いられた領域のデータで上書きする。
【０１０７】
上記の構成によれば、誤ったデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【０１０８】
§３  具体例２
メインメモリが記憶するデータには、値を示すデータ、メインメモリ内のアドレスを示すデータが含まれる。値を示すデータが記憶される領域に一過性の故障（例えばソフトエラーによるデータ化け）が生じた場合、値が本来の状態から化けることになる。この場合であっても、プロセッサは演算を継続できる。一方、アドレスを示すデータが記憶される領域に一過性の故障が生じた場合、アドレスが本来の状態から化けることになる。化けた後のアドレスがメインメモリに存在しないことも有り得る。この場合、プロセッサは、例外（異常）と判断し、処理を停止させる。
【０１０９】
図１２は、アドレスを示すデータにデータ化けが生じたときの、具体例１の処理の一例を示す図である。図１２に示す例では、Ａチャンネル回路４０Ａを構成するメインメモリ４０３の領域４０３ａに格納されたアドレスを示すデータが、メインメモリ４０３に存在しないアドレスを示すようにデータ化けしている。そのため、プロセッサ４０１が演算タスクＴ１を実行する際に、領域４０３ａから読み出したデータがメインメモリ４０３に存在しないアドレスを示すことに応じて、処理を強制終了させる。そのため、演算タスクＴ１，Ｔ２の結果が得られない。その結果、演算タスクＴ１〜Ｔ４の照合処理が実行されず、安全ＩＯユニット４００の運転が継続されない。
【０１１０】
具体例２に係る安全ＩＯユニット４００は、アドレスを示すデータが記憶される領域に一過性の故障が生じた場合であっても、運転を継続できるように設計される。
【０１１１】
＜安全ＩＯユニットにおけるハードウェア構成＞
図１３は、具体例２に係る安全ＩＯユニットのハードウェア構成例を示す模式図である。図１３に例示される安全ＩＯユニット４００は、図７に例示される安全ＩＯユニット４００と比較して、ストレージ４１０が読出書込プログラム４３を記憶する点でのみ相違する。
【０１１２】
プロセッサ４０１は、読出書込プログラム４３に従って、メインメモリ４０３に対するデータの書き込みおよび読み出しを実行する。同様に、プロセッサ４０４は、読出書込プログラム４３に従って、メインメモリ４０６に対するデータの書き込みおよび読み出しを実行する。
【０１１３】
＜メインメモリへのデータの書き込みおよび読み出し＞
図１４は、メインメモリへのデータの書き込み処理を示す図である。図１４に示されるように、プロセッサ４０１，４０４は、書き込み対象となる対象データをメインメモリ４０３，４０６にそれぞれ書き込む際に、対象データを２回コピーし、コピーした２つのコピーデータもメインメモリ４０３，４０６にそれぞれ書き込む。このように、メインメモリ４０３，４０６の各々において、対象データと２つのコピーデータとは同時に書き込まれる。これにより、メインメモリ４０３，４０６の各々において、データが三重化される。
【０１１４】
書き込み直後において、対象データと２つのコピーデータとは同一となる。しかしながら、例えば宇宙線や中性子線の影響によりソフトエラーが生じると、対象データおよび２つのコピーデータのいずれかにおいてデータ化けが生じる。
【０１１５】
図１５は、メインメモリからのデータの読み出し処理を示す図である。図１５に示されるように、プロセッサ４０１，４０４は、読み出し対象となる対象データをメインメモリ４０３，４０６からそれぞれ読み出す際に、対象データとともに２つのコピーデータも読み出す。プロセッサ４０１，４０４の各々は、読み出した対象データおよび２つのコピーデータを互いに照合する。
【０１１６】
プロセッサ４０１，４０４の各々は、読み出した対象データおよび２つのコピーデータが全て一致する場合、対象データおよび２つのコピーデータのいずれかにおいてもデータ化けが生じていないと判断し、対象データを用いて演算タスクを実行する。
【０１１７】
プロセッサ４０１，４０４の各々は、読み出した対象データおよび２つのコピーデータのうち２つが一致し、残り１つが一致しない場合、一致する２つのデータにデータ化けが生じておらず、当該残り１つのデータにデータ化けが生じていると判断する。そして、プロセッサ４０１，４０４の各々は、一致する２つのデータの一方を、当該残り１つのデータが記憶される領域に上書きする。これにより、データ化けが生じたデータが修復される。その後、プロセッサ４０１，４０４は、一致する２つのデータの一方を用いて演算タスクを実行する。
【０１１８】
上記の処理により、対象データおよび２つのコピーデータのいずれかにおいてデータ化けが生じたとしても、読み出し処理において、データ化けの生じたデータが修復され、演算タスクが継続される。
【０１１９】
＜安全ＩＯユニットにおける処理の実施例＞
図１６から図２０を参照して、２つの処理回路を用いた処理の具体例２について説明する。図１６は、具体例２に係るメインメモリの領域を示す図である。図１６に示されるように、メインメモリ４０３は、領域４０３ｃ，４０３ｄ，４０３ｅを含む。メインメモリ４０６は、領域４０６ｃ，４０６ｄ，４０６ｅを含む。
【０１２０】
領域４０３ｃ，４０６ｃは、演算タスク中においてデータの読み出しのみが行われる領域である。領域４０３ｃは、プロセッサ４０１による１回目の演算タスクＴ１および２回目の演算タスクＴ２の両者で使用される。領域４０６ｃは、プロセッサ４０４による１回目の演算タスクＴ３および２回目の演算タスクＴ４の両者で使用される。
【０１２１】
領域４０３ｄ，４０３ｅ，４０６ｄ，４０６ｅは、演算タスク中においてデータの書き込みが行われる領域である。領域４０３ｄは、プロセッサ４０１による１回目の演算タスクＴ１で使用される。領域４０３ｅは、プロセッサ４０１による２回目の演算タスクＴ２で使用される。領域４０６ｄは、プロセッサ４０４による１回目の演算タスクＴ３で使用される。領域４０６ｅは、プロセッサ４０４による２回目の演算タスクＴ４で使用される。
【０１２２】
図１７は、データ化けが生じたときの、２つの処理回路を用いた処理の具体例２を示す図である。図１８は、図１７に示すデータ「Ｘ」の修復処理の一例を示す図である。
【０１２３】
図１７に示されるように、Ａチャンネル回路４０Ａのプロセッサ４０１は、セーフティタスク周期において、同一の演算タスクＴ１，Ｔ２を連続して実行する。プロセッサ４０１は、メインメモリ４０３の領域４０３ｃに記憶されたデータ「Ｘ」および「Ｙ」を用いて演算タスクＴ１，Ｔ２を実行する。プロセッサ４０１は、演算タスクＴ１，Ｔ２の結果（データ「Ｚ」）を領域４０３ｄ，４０３ｅにそれぞれ書き込む。同様に、Ｂチャンネル回路４０Ｂのプロセッサ４０４は、セーフティタスク周期において、同一の演算タスクＴ３，Ｔ４を連続して実行する。プロセッサ４０４は、メインメモリ４０６の領域４０６ｃに記憶されたデータ「Ｘ」および「Ｙ」を用いて演算タスクＴ３，Ｔ４を実行する。プロセッサ４０４は、演算タスクＴ３，Ｔ４の結果（データ「Ｚ」）を領域４０６ｄ，４０６ｅにそれぞれ書き込む。
【０１２４】
上述したように、メインメモリ４０３，４０６に書き込まれるデータは三重化されている。そのため、データ「Ｘ」および２つのコピーデータ「Ｘ_Copy1」，「Ｘ_Copy2」が領域４０３ｃ，４０６ｃに書き込まれている。図１７に示す例では、メインメモリ４０３において、演算タスクの開始前に、データ「Ｘ」が書き込まれて部分に一過性の故障が生じ、データ「Ｘ」がデータ「Ｘ’」に化けている。
【０１２５】
プロセッサ４０４は、演算タスクＴ３，Ｔ４の各々を実行する前に、メインメモリ４０６の領域４０６ｃから、対象データと２つのコピーデータとをそれぞれ読み出し、これら３つのデータを照合する。図１７に示す例では、メインメモリ４０６において一過性の故障が生じていない。そのため、対象データ（データ「Ｘ」，「Ｙ」）とその２つのコピーデータとは一致する。プロセッサ４０４は、対象データとその２つのコピーデータとが一致していることから、対象データ（データ「Ｘ」，「Ｙ」）をそのまま用いて演算タスクＴ３，Ｔ４を実行する。
【０１２６】
同様に、プロセッサ４０１は、演算タスクＴ１，Ｔ２の各々を実行する前に、メインメモリ４０３の領域４０３ｃから、対象データと２つのコピーデータとをそれぞれ読み出し、これら３つのデータを照合する。データ「Ｘ」がデータ「Ｘ’」に化けているため、データ「Ｘ’」は、２つのコピーデータ「Ｘ_Copy1」，「Ｘ_Copy2」と一致しない。一方、２つのコピーデータ「Ｘ_Copy1」，「Ｘ_Copy2」は一致する。そのため、図１８に示されるように、プロセッサ４０１は、一致する２つのコピーデータ「Ｘ_Copy1」，「Ｘ_Copy2」のうちの一方で、データ「Ｘ’」を上書きする。これにより、データ「Ｘ’」は、演算タスクＴ１の前において、データ「Ｘ」に修復される。その結果、プロセッサ４０１は、修復されたデータ「Ｘ」（またはコピーデータ「Ｘ_Copy1」，「Ｘ_Copy2」）を用いて演算タスクＴ１，Ｔ２を実行できる。すなわち、図１７に示されるように、データ「Ｘ」がアドレスを示すデータであったとしても、プロセッサ４０１は、例外（異常）と判断せず、演算タスクＴ１，Ｔ２を継続できる。
【０１２７】
そして、正しいデータを用いて演算タスクＴ１〜Ｔ４が実行されるため、演算タスクＴ１〜Ｔ４の結果が一致する。これにより、プロセッサ４０１，４０４は、演算タスクＴ１〜Ｔ４の結果に基づいて動作を継続させる。
【０１２８】
図１９は、演算タスクの実行中に一過性の故障が生じたときの、２つの処理回路を用いた処理の具体例２を示す図である。図２０は、図１９に示すデータ「Ｚ」の修復処理の一例を示す図である。
【０１２９】
図１９に示されるように、プロセッサ４０４による演算タスクＴ３の実行中に一過性の故障が生じ、他の演算タスクの結果（データ「Ｚ」）とは異なる演算結果（データ「Ｚ’」）が領域４０６ｄに書き込まれている。しかしながら、演算タスクＴ１，Ｔ２，Ｔ４の結果が一致していることから、プロセッサ４０１，４０４は、演算タスクＴ１，Ｔ２，Ｔ４が正常に実行されたものと判断し、演算タスクＴ１，Ｔ２，Ｔ４の結果に基づいて動作を継続させる。このように、演算タスクの実行中に一過性の故障が生じたとしても、安全ＩＯユニット４００の動作が継続され、制御システム１の一時的な停止を回避できる。
【０１３０】
さらに、図２０に示されるように、プロセッサ４０４は、正常に実行された演算タスクＴ４の結果が書き込まれた領域４０６ｅのデータを、演算タスクＴ３の結果が書き込まれた領域４０６ｄに上書きする。これにより、誤ったデータ「Ｚ’」が正常なデータ「Ｚ」に修復される。
【０１３１】
＜作用・効果＞
以上のように、具体例２によれば、プロセッサ４０１は、演算タスクＴ１，Ｔ２に用いられる対象データをメインメモリ４０３に書き込むとき、対象データをコピーすることにより得られる２つのコピーデータもメインメモリ４０３に書き込む。同様に、プロセッサ４０４は、演算タスクＴ３，Ｔ４に用いられる対象データをメインメモリ４０６に書き込むとき、対象データをコピーすることにより得られる２つのコピーデータもメインメモリ４０６に書き込む。
【０１３２】
さらに、プロセッサ４０１は、演算タスクＴ１，Ｔ２の各々を実行する前に、メインメモリ４０３から対象データおよび２つのコピーデータを読み出す。同様に、プロセッサ４０４は、演算タスクＴ３，Ｔ４の各々を実行する前に、メインメモリ４０６から対象データおよび２つのコピーデータを読み出す。プロセッサ４０１，４０４の各々は、読み出した対象データおよび２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて演算タスクを実行する。
【０１３３】
上記の構成によれば、メインメモリ４０３，４０６の各々において、対象データおよび２つのコピーデータのうちのいずれか１つのデータにデータ化けが生じたとしても、残り２つのデータを用いて演算タスクが実行される。これにより、一過性の故障によりデータ化けが生じた場合であっても、データ化けの生じていない正しいデータを用いて演算タスクが実行され、当該演算タスクの結果に基づいて動作を継続できる。
【０１３４】
プロセッサ４０１，４０４の各々は、読み出した対象データおよび２つのコピーデータのうち２つのデータが一致し、残り１つのデータが当該２つのデータと異なることに応じて、当該１つのデータが格納されていた領域を、当該２つのデータの一方で上書きする。
【０１３５】
上記の構成によれば、データ化けしたデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【０１３６】
プロセッサ４０１は、演算タスクＴ１，Ｔ２の結果を、メインメモリ４０３の互いに異なる２個の領域４０３ｄ，４０３ｅにそれぞれ書き込む。同様に、プロセッサ４０４は、演算タスクＴ３，Ｔ４の結果を、メインメモリ４０６の互いに異なる２個の領域４０６ｄ，４０６ｅにそれぞれ書き込む。そして、プロセッサ４０１，４０４は、演算タスクＴ１，Ｔ２の結果のうちの少なくとも１つの結果と、演算タスクＴ３，Ｔ４の結果のうちの少なくとも１つの結果とが一致することに応じて、当該一致する結果（共通結果）に基づいて動作を継続する。
【０１３７】
プロセッサ４０１は、メインメモリ４０３の領域４０３ｄ，４０３ｅのうち、上記共通結果と異なる結果が書き込まれた領域のデータを、上記共通結果の結果が書き込まれた領域のデータで上書きする。同様に、プロセッサ４０４は、メインメモリ４０６の領域４０６ｄ，４０６ｅのうち、上記共通結果と異なる結果が書き込まれた領域のデータを、上記共通結果が書き込まれた領域のデータで上書きする。
【０１３８】
上記の構成によれば、誤ったデータが正しいデータに修復される。その結果、誤ったデータが次回の演算タスクに引き継がれることを回避できる。
【０１３９】
§４  変形例
＜変形例１＞
上記の具体例１，２では、プロセッサ４０１，４０４の各々は、セーフティタスク周期ごとに、演算タスクを２回連続して実行する。しかしながら、プロセッサ４０１，４０４の各々は、セーフティタスク周期ごとに、演算タスクをＮ回連続して実行してもよい。Ｎは２以上の整数である。
【０１４０】
なお、具体例１に対する変形例では、プロセッサ４０１は、メインメモリ４０３における互いに異なるＮ個の領域を用いて、Ｎ回の演算タスクをそれぞれ実行する。同様に、プロセッサ４０４は、メインメモリ４０６における互いに異なるＮ個の領域を用いて、Ｎ回の演算タスクをそれぞれ実行する。
【０１４１】
また、具体例２に対する変形例では、プロセッサ４０１は、メインメモリ４０３における互いに異なるＮ個の領域にＮ回の演算タスクの結果をそれぞれ書き込む。同様に、プロセッサ４０４は、メインメモリ４０６における互いに異なるＮ個の領域にＮ回の演算タスクの結果をそれぞれ書き込む。
【０１４２】
プロセッサ４０１，４０４は、以下の条件Ａを満たすか否かを判定する。
条件Ａ：プロセッサ４０１によって実行されたＮ回の演算処理の結果（第１の結果）のうちの少なくとも１つの第１の結果と、プロセッサ４０４によって実行されたＮ回の演算処理の結果（第２の結果）のうちの少なくとも１つの第２の結果とが一致する。
そして、プロセッサ４０１，４０４は、上記の条件Ａを満たすことに応じて、上記少なくとも１つの第１の結果および少なくとも１つの第２の結果に基づいて動作をそれぞれ継続すればよい。
【０１４３】
さらに、プロセッサ４０１，４０４は、上記の条件Ａに加えて、以下の条件Ｂを満たすか否かを判定してもよい。
条件Ｂ：２Ｎ回の演算タスクの結果のうち基準回数以上の結果が、上記少なくとも１つの第１の結果（または上記少なくとも１つの第２の結果）と一致する。基準回数は、例えば３以上の整数である。
そして、プロセッサ４０１，４０４は、上記の条件ＡおよびＢを満たすことに応じて、上記少なくとも１つの第１の結果および少なくとも１つの第２の結果に基づいて動作をそれぞれ継続してもよい。
【０１４４】
基準回数は、Ｎを超える回数に設定されてもよい。例えばＮ＝２のとき、プロセッサ４０１，４０４は、４回の演算タスクの結果のうち３つ以上の結果が一致することに応じて、当該４つ以上の結果に基づいて動作を継続すればよい。例えばＮ＝３のとき、プロセッサ４０１，４０４は、６回の演算タスクの結果のうち４つ以上の結果が一致することに応じて、当該４つ以上の結果に基づいて動作を継続すればよい。これにより、２Ｎ回の演算タスクのうち半数未満の演算タスクにおいて一過性の故障が生じたとしても、安全ＩＯユニット４００の動作を継続させることができる。
【０１４５】
＜変形例２＞
上記の説明では、安全ＩＯユニット４００が２つの処理回路（Ａチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂ）を備えるものとした。しかしながら、標準ＰＬＣ１００、安全ＰＬＣ２００およびカプラ３００の少なくとも１つが２つの処理回路を備え、当該２つの処理回路が、上記のＡチャンネル回路４０ＡおよびＢチャンネル回路４０Ｂと同様の処理を実行してもよい。これにより、標準ＰＬＣ１００、安全ＰＬＣ２００およびカプラ３００の少なくとも１つは、一過性の故障が生じたとしても動作を継続できる。その結果、制御システム１の停止の頻度が抑制される。
【０１４６】
なお、変形例１と組み合わせる場合、装置に要求される特性に応じて、装置ごとに異なる基準回数が設定されてもよい。例えば、制御ＰＬＣ１００において要求される、演算タスクの結果の信頼性は、安全ＩＯユニット４００において要求される、演算タスクの結果の信頼性よりも低い。そのため、制御ＰＬＣ１００に設定される基準回数は、安全ＩＯユニット４００に設定される基準回数よりも少なくてもよい。
【０１４７】
§５  付記
以上のように、本実施の形態は以下のような開示を含む。
【０１４８】
（構成１）
演算処理を実行する情報処理装置（４００）であって、
第１の処理回路（４０Ａ）と、
第２の処理回路（４０Ｂ）とを備え、
前記第１の処理回路（４０Ａ）は、前記演算処理をＮ回連続して実行し、
前記第２の処理回路（４０Ｂ）は、前記演算処理をＮ回連続して実行し、
Ｎは２以上の整数であり、
前記第１の処理回路（４０Ａ）および前記第２の処理回路（４０Ｂ）は、前記第１の処理回路（４０Ａ）によって実行されたＮ回の前記演算処理の第１の結果のうちの少なくとも１つの第１の結果と、前記第２の処理回路（４０Ｂ）によって実行されたＮ回の前記演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、前記少なくとも１つの第１の結果および前記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続する、情報処理装置（４００）。
【０１４９】
（構成２）
前記第１の処理回路（４０Ａ）は、第１のメモリ（４０３）と、前記第１のメモリ（４０３）を用いて前記演算処理を実行する第１のプロセッサ（４０１）とを含み、
前記第２の処理回路（４０Ｂ）は、第２のメモリ（４０６）と、前記第２のメモリ（４０６）を用いて前記演算処理を実行する第２のプロセッサ（４０４）とを含み、
前記第１のプロセッサ（４０１）は、前記第１のメモリ（４０３）の互いに異なるＮ個の領域（４０３ａ，４０３ｂ）を用いて、Ｎ回の前記演算処理をそれぞれ実行し、
前記第２のプロセッサ（４０４）は、前記第２のメモリ（４０６）の互いに異なるＮ個の領域（４０６ａ，４０６ｂ）を用いて、Ｎ回の前記演算処理をそれぞれ実行する、構成１に記載の情報処理装置（４００）。
【０１５０】
（構成３）
前記第１のプロセッサ（４０１）は、前記第１のメモリ（４０３）の前記Ｎ個の領域（４０３ａ，４０３ｂ）のうち、前記少なくとも１つの第１の結果と異なる結果が出力された前記演算処理において用いられた領域のデータを、前記少なくとも１つの第１の結果が出力された前記演算処理において用いられた領域のデータで上書きし、
前記第２のプロセッサ（４０４）は、前記第２のメモリ（４０６）の前記Ｎ個の領域（４０６ａ，４０６ｂ）のうち、前記少なくとも１つの第２の結果と異なる結果が出力された前記演算処理において用いられた領域のデータを、前記少なくとも１つの第２の結果が出力された前記演算処理において用いられた領域のデータで上書きする、構成２に記載の情報処理装置（４００）。
【０１５１】
（構成４）
前記第１の処理回路（４０Ａ）は、第１のメモリ（４０３）と、前記第１のメモリ（４０３）を用いて前記演算処理を実行する第１のプロセッサ（４０１）とを含み、
前記第２の処理回路（４０Ｂ）は、第２のメモリ（４０６）と、前記第２のメモリ（４０６）を用いて前記演算処理を実行する第２のプロセッサ（４０４）とを含み、
前記第１のプロセッサ（４０１）は、前記演算処理に用いられる対象データを前記第１のメモリ（４０３）に書き込むとき、前記対象データをコピーすることにより得られる２つのコピーデータも前記第１のメモリ（４０３）に書き込み、
前記第２のプロセッサ（４０４）は、前記演算処理に用いられる対象データを前記第２のメモリ（４０６）に書き込むとき、前記対象データをコピーすることにより得られる２つのコピーデータも前記第２のメモリ（４０６）に書き込み、
前記第１のプロセッサ（４０１）は、
前記演算処理を実行する前に、前記第１のメモリ（４０３）から前記対象データおよび前記２つのコピーデータを読み出し、
読み出した前記対象データおよび前記２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて前記演算処理を実行し、
前記第２のプロセッサ（４０４）は、
前記演算処理を実行する前に、前記第２のメモリ（４０６）から前記対象データおよび前記２つのコピーデータを読み出し、
読み出した前記対象データおよび前記２つのコピーデータのうち２以上のデータが一致することに応じて、一致する当該２以上のデータを用いて前記演算処理を実行する、構成１に記載の情報処理装置（４００）。
【０１５２】
（構成５）
前記第１のプロセッサ（４０１）は、読み出した前記対象データおよび前記２つのコピーデータのうち２つのデータが一致し、残り１つのデータが前記２つのデータと異なることに応じて、前記第１のメモリ（４０３）において、前記１つのデータが格納されていた領域を、前記２つのデータの一方で上書きし、
前記第２のプロセッサ（４０４）は、読み出した前記対象データおよび前記２つのコピーデータのうち２つのデータが一致し、残り１つのデータが前記２つのデータと異なることに応じて、前記第２のメモリ（４０６）において、前記１つのデータが格納されていた領域を、前記２つのデータの一方で上書きする、構成４に記載の情報処理装置（４００）。
【０１５３】
（構成６）
前記第１のプロセッサ（４０１）は、Ｎ回の前記演算処理の結果を、前記第１のメモリ（４０３）の互いに異なるＮ個の領域（４０３ｄ，４０３ｅ）にそれぞれ書き込み、
前記第２のプロセッサ（４０４）は、Ｎ回の前記演算処理の結果を、前記第２のメモリ（４０６）の互いに異なるＮ個の領域（４０６ｄ，４０６ｅ）にそれぞれ書き込み、
前記第１のプロセッサ（４０１）は、前記第１のメモリ（４０３）の前記Ｎ個の領域（４０３ｄ，４０３ｅ）のうち、前記少なくとも１つの第１の結果と異なる結果が書き込まれた領域のデータを、前記少なくとも１つの第１の結果が書き込まれた領域のデータで上書きし、
前記第２のプロセッサ（４０４）は、前記第２のメモリ（４０６）の前記Ｎ個の領域（４０６ｄ，４０６ｅ）のうち、前記少なくとも１つの第２の結果と異なる結果が書き込まれた領域のデータを、前記少なくとも１つの第２の結果が書き込まれた領域のデータで上書きする、構成５または６に記載の情報処理装置（４００）。
【０１５４】
（構成７）
演算処理を実行する情報処理装置（４００）の情報処理方法であって、
前記情報処理装置（４００）は、
第１の処理回路（４０Ａ）と、
第２の処理回路（４０Ｂ）とを含み、
前記制御方法は、
前記第１の処理回路（４０Ａ）が前記演算処理をＮ回連続して実行するステップと、
前記第２の処理回路（４０Ｂ）が前記演算処理をＮ回連続して実行するステップとを備え、
Ｎは２以上の整数であり、さらに、
前記第１の処理回路（４０Ａ）および前記第２の処理回路（４０Ｂ）が、前記第１の処理回路（４０Ａ）によって実行されたＮ回の前記演算処理の第１の結果のうちの少なくとも１つの第１の結果と、前記第２の処理回路（４０Ｂ）によって実行されたＮ回の前記演算処理の第２の結果のうちの少なくとも１つの第２の結果とが一致することに応じて、前記少なくとも１つの第１の結果および前記少なくとも１つの第２の結果に基づいて動作をそれぞれ継続するステップを備える、情報処理方法。
【０１５５】
（構成８）
構成７に記載の情報処理方法をコンピュータに実行させるプログラム。
【０１５６】
本発明の実施の形態について説明したが、今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１５７】
１  制御システム、２  フィールドネットワーク、４０Ａ  Ａチャンネル回路、４０Ｂ  Ｂチャンネル回路、４１Ａ１，４１Ａ２，４１Ｂ１，４１Ｂ２  ＩＯプログラム、４２Ａ，４２Ｂ  照合修復プログラム、４３  読出書込プログラム、１００  標準ＰＬＣ、１０２，２０２，３０２，４０１，４０４  プロセッサ、１０４，２０４，３０４，４０３，４０６  メインメモリ、１０８，３０８  フィールドネットワークコントローラ、１１０，２１０，３１０，４１０  ストレージ、１１６，２１６，３１６，４２０  ローカルバスコントローラ、１１８，２１８，３１８，４４０  プロセッサバス、２００  安全ＰＬＣ、３００  カプラ、４００  安全ＩＯユニット、４０２，４０５  レジスタ、４０３ａ，〜４０３ｅ，４０６ａ〜４０６ｅ  領域、４３０  安全ＩＯモジュール、１１０２，２１０２，３１０２  システムプログラム、１１０４  標準制御プログラム、１１０６，２１０６，３１０６  設定情報、２１０４  安全プログラム、Ｔ１〜Ｔ４  演算タスク。
【要約】
【課題】ハードウェアに要するコストの増大を抑制するとともに、一過性の故障による一時的な停止を抑制できる情報処理装置を実現する。
【解決手段】演算処理を実行する情報処理装置は、第１の処理回路と、第２の処理回路とを備える。第１の処理回路は、演算処理をＮ回連続して実行する。第２の処理回路は、演算処理をＮ回連続して実行する。Ｎは２以上の整数である。第１の処理回路および第２の処理回路は、第１の処理回路によって実行されたＮ回の演算処理の結果のうちの少なくとも１つの結果と、第２の処理回路によって実行されたＮ回の演算処理の結果のうちの少なくとも１つの結果とが一致することに応じて、動作を継続する。
【選択図】図３【図１】
0006729825.tif 000002
【図２】
0006729825.tif 000003
【図３】
0006729825.tif 000004
【図４】
0006729825.tif 000005
【図５】
0006729825.tif 000006
【図６】
0006729825.tif 000007
【図７】
0006729825.tif 000008
【図８】
0006729825.tif 000009
【図９】
0006729825.tif 000010
【図１０】
0006729825.tif 000011
【図１１】
0006729825.tif 000012
【図１２】
0006729825.tif 000013
【図１３】
0006729825.tif 000014
【図１４】
0006729825.tif 000015
【図１５】
0006729825.tif 000016
【図１６】
0006729825.tif 000017
【図１７】
0006729825.tif 000018
【図１８】
0006729825.tif 000019
【図１９】
0006729825.tif 000020
【図２０】
0006729825.tif 000021