(57)【特許請求の範囲】
【請求項１】
第一プロセッサが所定のプログラムを実行した結果としてメインメモリに格納される第一情報から第一誤り検出符号を作成し、予め前記メインメモリに記憶されている誤り検出符号である第二記憶情報と比較することで異常を検出する第一符号生成部と、
前記第一プロセッサと同一の演算結果を出力するべく構成されている第二プロセッサが前記プログラムを実行した結果として前記メインメモリに格納される第二情報から第二誤り検出符号を作成し、前記第二記憶情報と比較することで異常を検出する第二符号生成部と、
前記第一プロセッサ及び／又は前記第二プロセッサが前記メインメモリから前記第一情報あるいは前記第二情報である第一記憶情報を読み出す時、前記メインメモリから読み出した前記第一記憶情報と前記第二記憶情報に対し、必要に応じてエラー訂正を行って前記第一符号生成部及び前記第二符号生成部に供給する訂正処理部と、
前記第一符号生成部が前記第一誤り検出符号と前記第二記憶情報との不一致を検出した場合、及び／又は前記第二符号生成部が前記第二誤り検出符号と前記第二記憶情報との不一致を検出した場合、前記第一プロセッサが前記第一記憶情報を前記メインメモリから読み出す動作及び前記第二プロセッサが前記第二記憶情報を前記メインメモリから読み出す動作を禁止する、割込制御部と、
前記第一情報と前記第二情報が同一であるか否かを検出して前記割込制御部に報告すると共に、前記第一誤り検出符号と前記第二誤り検出符号が同一であるか否かを検出して前記割込制御部に報告することで、前記前記第一情報あるいは前記第二情報の前記メインメモリへの書き込みを制御する照合部と
を備える制御装置。
【請求項２】
前記割込制御部は割込要因レジスタを有し、前記第一符号生成部が前記第一誤り検出符号と前記第二記憶情報との不一致を検出した場合、及び／又は前記第二符号生成部が前記第二誤り検出符号と前記第二記憶情報との不一致を検出した場合、前記メインメモリ又は前記訂正処理部に起因する故障として、前記割込要因レジスタに登録すると共に、前記照合部が前記第一情報と前記第二情報との不一致を検出した場合、及び／又は前記照合部が前記第一誤り検出符号と前記第二誤り検出符号との不一致を検出した場合、前記第一符号生成部、前記第二符号生成部、前記第一プロセッサ又は前記第二プロセッサに起因する故障として、前記割込要因レジスタに登録する、
請求項１記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル電子装置を備える制御装置に関する。
【背景技術】
【０００２】
原子力プラントや化学プラントなど潜在的な危険性の高いプロセス設備では、万が一の事態に作業員および周辺環境への影響を低減するため、隔壁等の防護設備による受動的な対策および緊急停止装置等の安全装置を用いる能動的な対策が講じられる。このうち、安全装置等の制御には、従来リレー等の電磁的・機械的な手段により実現されていた。
【０００３】
しかし、近年、プログラマブル電子装置（Ｐｒｏｇｒａｍｍａｂｌｅ Ｌｏｇｉｃ Ｃｏｎｔｒｏｌｌｅｒ：ＰＬＣ)に代表されるプログラム可能な制御機器における技術の発展に伴い、これらを安全制御システムの制御手段として利用するニーズが高まっている。
【０００４】
例えば、ＩＥＣ６１５０８は、そのような動向に対応して発行された国際規格であり、電気的／電子的／プログラム可能な電子的装置を安全制御システムの一部に利用する場合の要件が規定されている（非特許文献１）。
【０００５】
ＩＥＣ６１５０８では、安全制御システムの能力の尺度としてＳａｆｅｔｙ Ｉｎｔｅｇｒｉｔｙ Ｌｅｖｅｌ（ＳＩＬ）を定義し、１から４までのレベルに対応する水準の要求事項を規定している。ＳＩＬが高いほどプロセス設備の持つ潜在的な危険性を低減できる度合が大きいことを示す。すなわち、プロセス設備の異常を検出した際、どれだけ確実に所定の安全制御を実施できるかを意味する。
【０００６】
安全制御装置は、通常稼働状態で非活性となっていても、プロセス設備の異常発生時には直ちに活性化することを求められる。そのため、常時自己診断を行い、自身の健全性をチェックし続けることが重要となる。また、高いＳＩＬが要求される安全制御システムでは、未検出の故障によりシステムが不動作となる確率を極小とするため、広範囲・高精度な自己診断を実施する必要がある。
【０００７】
ＩＥＣ６１５０８では、安全制御装置を構成する要素部品の種類ごとに、各々適用される自己診断技法を紹介し、それぞれの技法の有効性を診断率という形で示している。診断率は、各構成要素における全故障のうち、その診断技法を採用したとき検出可能な故障の割合を示す。例えば、ＲＡＭの診断技法"ａｂｒａｈａｍ"では、最高９９％の診断率を主張可能であるとされている（特許文献２）。
【０００８】
また、ＰＬＣの構成要素の一つであるプロセッサの故障検出手段として、複数のプロセッサを用いて、相互の出力結果の整合性を監視する方法が有効である。
【０００９】
複数のプロセッサ出力を相互診断する方式としては、各プロセッサが同様の制御処理を同時に実行し、その出力が一致していることを確認しあう手段が効果的である。
【００１０】
例えば、非同期に動作する複数のプロセッサの出力を照合することにより、プロセッサが故障しても即時検出するという技術がある（特許文献１）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００７−１１６３９号公報
【特許文献２】米国登録６７７９１２８号公報
【非特許文献】
【００１２】
【非特許文献１】ＩＥＣ６１５０８−１〜７，“Functional safety of electrical／electronic／programmable electronic safety-related systems”part１〜part７
【発明の概要】
【発明が解決しようとする課題】
【００１３】
特許文献１に記載されたものは、プロセッサ照合手段によりプロセッサの診断ができる。しかしながら、プロセッサ照合手段の出力からメインメモリまでのメモリインターフェースで故障が発生した場合に、ハード的な検出手段がないため、ソフトウェアによる故障検出を行わなければならない。プロセッサのソフトウェアによる診断処理はメモリに期待値をライトリードバック比較することで、メモリインターフェースの診断を行うことは可能である。しかし、n回目の診断処理とn+1回目の診断処理の間の実稼働期間は、異常を検出できず不安定なまま動作継続する可能性がある、という問題があった。
【００１４】
本発明は斯かる点に鑑みてなされたものであり、故障を即時かつ確実に検出して不安定な状態で処理し続けることを阻止できるようにすることを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するため、本発明の制御装置は、第一プロセッサが所定のプログラムを実行した結果としてメインメモリに格納される第一情報から第一誤り検出符号を作成し、予めメインメモリに記憶されている誤り検出符号である第二記憶情報と比較することで異常を検出する第一符号生成部と、第一プロセッサと同一の演算結果を出力するべく構成されている第二プロセッサがプログラムを実行した結果としてメインメモリに格納される第二情報から第二誤り検出符号を作成し、第二記憶情報と比較することで異常を検出する第二符号生成部とを備える。さらに、第一プロセッサ及び／又は第二プロセッサがメインメモリから第一情報あるいは第二情報である第一記憶情報を読み出す時、メインメモリから読み出した第一記憶情報と第二記憶情報に対し、必要に応じてエラー訂正を行って第一符号生成部及び第二符号生成部に供給する訂正処理部と、第一符号生成部が第一誤り検出符号と第二記憶情報との不一致を検出した場合、及び／又は第二符号生成部が第二誤り検出符号と第二記憶情報との不一致を検出した場合、第一プロセッサが第一記憶情報をメインメモリから読み出す動作及び第二プロセッサが第二記憶情報をメインメモリから読み出す動作を禁止する、割込制御部とを備える。さらに、第一情報と第二情報が同一であるか否かを検出して割込制御部に報告すると共に、第一誤り検出符号と第二誤り検出符号が同一であるか否かを検出して割込制御部に報告することで、第一誤り検出符号と第二誤り検出符号とが同一でない時には、第一情報あるいは第二情報を第一記憶情報としてメインメモリに書き込むことを禁止する照合部とを備える。
【００１６】
本発明の制御装置では、ライト時において照合部が第一情報と第二情報が一致するか否かを検出することにより、第一プロセッサ、第二プロセッサおよびこれらのプロセッサと照合部の間にあるバスインターフェースとの故障を検出する。そして、照合部が第一誤り検出符号と第二誤り検出符号が一致するか否かを検出することにより、第一符号生成部、第二符号生成部およびこれらの生成部と照合部の間にあるバスインターフェースの故障を検出する。
【００１７】
すなわち、本発明の制御装置では、照合部は、第一情報あるいは第二情報に生じるビットエラーを常に検出することができる。また、照合部は、検出したビットエラーに基づいて第一情報および第二情報のメインメモリに対する書き込みの制御を行う。それゆえ、本発明では、ライト中に各プロセッサあるいは各バスインターフェースの故障によりビットエラーが生じた場合、第一情報あるいは第二情報がメインメモリに書き込まれないようにすることができる。
【００１８】
本発明の制御装置では、リード時において照合部が第一情報と第二情報が一致するか否かを検出することにより、第一プロセッサ、第二プロセッサおよびこれらのプロセッサと照合部の間にあるバスインターフェースとの故障を検出する。そして、第一照合部は故障が検出された場合、メインメモリから記憶情報を読み出さないようにしている。
【００１９】
メインメモリから記憶情報を読み出した場合に、第一符号生成部は、記憶情報の第一記憶情報および第一情報で新たに生成した誤り検出符号と、記憶情報の第二記憶情報とが同一であるか否かを検出することにより、メインメモリおよび当該メインメモリと第一符号生成部との間にあるバスインターフェースの故障を検出する。また、第二符号生成部は、記憶情報の第一記憶情報および第二情報で新たに生成した誤り検出符号と、記憶情報の第二記憶情報とが同一であるか否かを検出することにより、メインメモリおよび当該メインメモリと第一符号生成部との間にあるバスインターフェースの故障を検出する。
【００２０】
第一符号生成部および第二符号生成部は、いずれか一方の符号生成部で故障を検出した場合に、第一プロセッサおよび第二プロセッサそれぞれに対して第一記憶情報の入力を行わないようにしている。それゆえ、本発明では、リード中に各プロセッサあるいは各バスインターフェースの故障によりビットエラーが生じた場合、当該ビットエラーを誤検出することなく、第一記憶情報が第一プロセッサおよび第二プロセッサに入力させないことができる。
【発明の効果】
【００２１】
本発明によれば、各プロセッサあるいは各バスインターフェースに発生した故障を確実に検出できる。ライト時に故障を検出した場合、メインメモリに対する情報の書き込みを禁止し、リード時に故障を検出した場合、各プロセッサに対する情報の入力を禁止する。つまり、故障を即時かつ確実に検出して不安定な状態で処理し続けることを阻止できる。これにより、安全性をより向上させる。
【図面の簡単な説明】
【００２２】
【図１】制御システムを示すブロック図である。
【図２】本発明の一実施形態に係る制御装置を適用したＣＰＵ装置を示すブロック図である。
【図３】Ａ系ＣＲＣ回路を示すブロック図である。
【図４】ＥＣＣ回路を示すブロック図である。
【図５】ＣＰＵ装置のモードの遷移を示す状態遷移図である。
【図６】本発明の一実施形態に係る制御装置を適用したＣＰＵ装置の動作を示すタイミングチャートである。
【図７】本発明の一実施形態に係る制御装置を適用したＣＰＵ装置の動作を示すタイミングチャートである。
【図８】本発明の一実施形態に係る制御装置を適用したＣＰＵ装置の動作を示すタイミングチャートである。
【図９】本発明の一実施形態に係る制御装置を適用したＣＰＵ装置の故障検出範囲を示す表である。
【発明を実施するための形態】
【００２３】
以下、発明を実施するための最良の形態（以下、「実施の形態」とする）について以下の順序で説明を行う。以下に述べる実施の形態は、本発明の好適な具体例である。そのため、技術的に好ましい種々の限定が付されている。しかしながら、本発明の範囲は、下記の説明において特に本発明を限定する旨の記載がない限り、これらの形態に限られるものではない。例えば、以下の説明で挙げる各パラメータの数値的条件は好適例に過ぎず、説明に用いた各図における寸法、形状および配置関係も概略的なものである。
【００２４】
１．一実施形態
（１）制御システムの構成
（２）ＣＰＵ装置の構成
（３）Ａ系ＣＲＣ回路の構成の一例
（４）ＥＣＣ回路の構成の一例
（５）ＣＰＵ装置のモード遷移
（６）ＣＰＵ装置の動作
（７）ＣＰＵ装置の故障検出範囲
【００２５】
＜１．一実施形態＞
［制御システムの構成］
以下、本発明の実施の形態の例について、図１〜図９を参照して説明する。
図１は、発明の一実施形態である制御システム１０１を示すブロック図である。
制御システム１０１は、ＣＰＵ装置１０２と、上位装置１０３と、下位装置１０４と、制御対象１０５よりなる。
【００２６】
上位装置１０３は、所定のプログラムを記憶しており、ＣＰＵ装置１０２とネットワーク１０６で接続されている。
【００２７】
ＣＰＵ装置１０２は、上位装置１０３からネットワーク１０６を介して所定のプログラムをダウンロードし、当該プログラムに基づいて演算を行う。また、ＣＰＵ装置１０２は下位装置１０４ともネットワーク１０６で接続されており、演算結果を当該ネットワークを介して下位装置１０４に出力する。
【００２８】
このＣＰＵ装置１０２は、後述するように複数のプロセッサを備えており、一般モードあるいは安全モードのいずれかで、プログラムに基づいた演算を行う。一般モードは、各プロセッサで独立した演算を行うモードある。また、安全モードは、各プロセッサで同一の演算を行い、その演算結果が同一であるか否かを検証することにより、プロセッサの健全性を確認するモードである。さらに、ＣＰＵ装置１０２は、テストモードで稼動する場合もある。テストモードは、予めＣＰＵ装置１０２に記憶されたテストプログラムに基づいて、ＣＰＵ装置１０２が正常に動作するか否かを検証するモードである。一般モードおよび安全モード時のＣＰＵ装置１０２は基本的に演算結果を下位装置１０４に入力するが、テストモード時のＣＰＵ装置１０２は下位装置１０４になにも出力しない。すなわち、テストモードは、ＣＰＵ装置１０２による下位装置１０４の制御が行われていないときに行われる。なお、一般モード、安全モードおよびテストモードの切り替えは、予めＣＰＵ装置１０２に設定されたスケジューラにより行われる。
【００２９】
下位装置１０４は、制御対象１０５との間で制御情報の入出力を行うインターフェースである。下位装置１０４は、制御対象１０５と接続されており、ＣＰＵ装置１０２から入力される演算結果に基づいて制御対象１０５を動作させる。この制御対象１０５は、制御を行う際に安全性が求められる、例えば原子力プラントや化学プラント等の潜在的な危険性の高いプロセス設備である。
【００３０】
［ＣＰＵ装置の構成］
次に、制御システム１０１を構成するＣＰＵ装置１０２について図２を参照して説明する。
図２は、ＣＰＵ装置１０２を示すブロック図である。なお、以下に示すＣＰＵ装置１０２は、ＣＰＵ装置１０２が上位装置１０３からダウンロードしたプログラムに基づいて、安全モードで演算を行う場合を想定している。ただし、ＣＰＵ装置１０２が、上位装置１０３から所定のプログラムをダウンロードするときだけは、安全モードとは異なる動作を行う。
【００３１】
まず、ＣＰＵ装置１０２が、上位装置１０３から所定のプログラムをダウンロードするときに使用する構成について説明する。このときＣＰＵ装置１０２において使用される構成は、Ａ系プロセッサ２０２と、Ｂ系プロセッサ２０３と、制御装置２０４の一部と、メインメモリ２０５である。制御装置２０４の一部とは、ネットワークコントローラ２０６、ＣＲＣ回路２０７およびＥＣＣ回路２３２である。以下、本例では、ＣＰＵ装置１０２を構成するプロセッサがＡ系プロセッサ２０２およびＢ系プロセッサ２０３という２個の場合について説明するが、プロセッサの台数に制限はなく、それにより本発明が制約を受けることはない。
【００３２】
上位装置１０３からの所定のプログラムのダウンロードは、マルチタスクモード、すなわちＡ系プロセッサ２０２あるいはＢ系プロセッサ２０３のいずれか一方により行われる。このとき、ネットワークコントローラ２０６は、ネットワーク１０６を介して上位装置１０３からプログラムである３２ビット幅のデータ列を取得する。ネットワークコントローラ２０６は、図示しないＤＭＡ（Direct Memory Access）コントローラを含んでおり、メインメモリ２０５のどの位置に当該プログラムを書き込むかを決定する。すなわち、アドレスである３２ビット幅のデータ列を生成する。また、ネットワークコントローラ２０６は、ＣＲＣ回路２０７およびＥＣＣ回路２３２と接続されており、上位装置１０３から取得したプログラムおよび生成したアドレスをＣＲＣ回路２０７およびＥＣＣ回路２３２に出力する。
【００３３】
ＣＲＣ回路２０７は、ネットワークコントローラ２０６から入力されるアドレスおよびプログラムを併せた６４ビットの幅のデータ列から８ビットのＣＲＣＣ（Cyclic Redundancy Check Codes）を生成する。また、ＣＲＣ回路２０７は、ＥＣＣ回路２３２と接続されており、生成したＣＲＣＣをＥＣＣ回路２３２へ出力する。ＥＣＣ回路２３２は、ＣＲＣＣ、プログラム本体およびアドレスを併せた合計７２ビット幅のデータ列から８ビット幅のデータ列のＥＣＣ（Error-Correcting Code）を生成し、プログラム本体、ＣＲＣＣおよびＥＣＣをメインメモリ２０５に書き込む。このＥＣＣ回路２３２は、安全モードの演算でも用いられる。そこで、このＥＣＣ回路２３２についてのより詳細な説明は安全モードに関する構成の説明を行う箇所に記載する。
【００３４】
メインメモリ２０５は、データ記憶領域２２９、ＣＲＣＣ記憶領域２３０およびＥＣＣ記憶領域２３１という３つの領域を有している。データ記憶領域２２９は、プログラムが書き込まれる領域である。ＣＲＣＣ記憶領域２３０は、ネットワークコントローラ２０６を経由してＣＲＣ回路で生成されたＣＲＣＣが書き込まれる領域である。ＥＣＣ記憶領域２３１は、ネットワークコントローラ２０６経由してＥＣＣ回路２３２で生成されたＥＣＣが書き込まれる領域である。
【００３５】
次に、ＣＰＵ装置１０２が、上位装置１０３からダウンロードしたプログラムに基づいて安全モードで演算を行う際に使用される構成について説明する。このときＣＰＵ装置１０２において使用される構成は、Ａ系プロセッサ２０２と、Ｂ系プロセッサ２０３と、ＣＲＣ回路２０７を除いた制御装置２０４と、メインメモリ２０５である。
【００３６】
Ａ系プロセッサ２０２は、上位装置１０３からダウンロードした所定のプログラムを実行してタスクを処理する。その際、タスクによっては情報のライト／リードを制御装置２０４を介してメインメモリ２０５に対し行うものもある。Ａ系プロセッサ２０２は、制御装置２０４とＡ系プロセッサバス２０８により接続されており、Ａ系プロセッサバス２０８を介して制御装置２０４に情報の入出力を行う。ライト時には、Ａ系プロセッサ２０２は、アドレス、データおよびコマンドをＡ系プロセッサバス２０８を介して制御装置２０４に出力する。一方、リード時には、Ａ系プロセッサ２０２は、アドレスおよびコマンドをＡ系プロセッサバス２０８を介して制御装置２０４に出力する。
【００３７】
データおよびアドレスは、３２ビット幅のデータ列である。一方、コマンドは、制御装置２０４およびメインメモリ２０５を制御する１ビットのデータである。本例では、制御装置２０４およびメインメモリ２０５は、コマンドが‘１’のときにライトに対応する動作を行い、コマンドが‘０’のときにリード動作を行うものとする。
【００３８】
また、Ｂ系プロセッサ２０３は、Ａ系プロセッサ２０２と同じ機能を備えたものである。つまり、Ｂ系プロセッサ２０３は、上位装置１０３からダウンロードした所定のプログラムを実行してタスクを処理する際に、当該タスクに応じた情報等のライト／リードを制御装置２０４を介してメインメモリ２０５に対し行うものである。Ｂ系プロセッサ２０３は、制御装置２０４とＢ系プロセッサバス２１１により接続されており、Ｂ系プロセッサバス２１１を介して制御装置２０４に情報の入出力を行う。ライト時には、Ｂ系プロセッサ２０３は、アドレス、データおよびコマンドをＢ系プロセッサバス２１１を介して制御装置２０４に出力する。一方、リード時には、Ｂ系プロセッサ２０３は、アドレスおよびコマンドをＢ系プロセッサバス２１１を介して制御装置２０４に出力する。
【００３９】
制御装置２０４は、当該制御装置２０４を構成する各ブロックおよびバスと、Ａ系プロセッサ２０２と、Ｂ系プロセッサ２０３と、メインメモリ２０５に故障があるか否かを検出するものである。
制御装置２０４は、Ａ系ＣＲＣ回路２０９と、Ｂ系ＣＲＣ回路２１２と、照合回路２１４と、ＥＣＣ回路２３２と、割込制御部２２０とを含んで構成される。さらに、制御装置２０４は、ネットワークコントローラ２０６と、出力切替スイッチ２２１を含む。
【００４０】
Ａ系ＣＲＣ回路２０９は、入力される所定の桁数のビット幅のデータ列からＣＲＣＣを生成する回路である。
【００４１】
本例のＡ系ＣＲＣ回路２０９は、ライト時とリード時では異なる処理を行う。
ライト時のＡ系ＣＲＣ回路２０９は、Ａ系プロセッサ２０２から入力されるアドレスおよびデータを併せた６４ビット幅のデータ列からＣＲＣＣを生成する。また、Ａ系ＣＲＣ回路２０９は、照合回路２１４とＡ系ＣＲＣＣバス２１０で接続されており、生成したＣＲＣＣを照合回路２１４へ出力する。
【００４２】
リード時のＡ系ＣＲＣ回路２０９は、Ａ系プロセッサ２０２から入力されるアドレスおよびライト時にメインメモリ２０５に書き込まれたデータを併せた６４ビット幅のデータ列から新たにＣＲＣＣを生成する。そして、当該メインメモリ２０５に記憶されたＣＲＣＣと、新たに生成したＣＲＣＣとが同じデータ列であるか否かを判定する。
【００４３】
このＡ系ＣＲＣ回路２０９は、割込制御部２２０と接続されており、その判定結果（一致／不一致）に基づいた論理信号（以下、「Ａ系ＣＲＣＣ照合不一致」という）を生成して割込制御部２２０に出力する。
【００４４】
Ｂ系ＣＲＣ回路２１２は、Ａ系ＣＲＣ回路２０９と同じ回路であり、所定の桁数のビット幅のデータ列からＣＲＣＣを生成する回路である。
【００４５】
本例のＢ系ＣＲＣ回路２１２は、ライト時とリード時では異なる処理を行う。
【００４６】
ライト時のＢ系ＣＲＣ回路２１２は、Ｂ系プロセッサ２０３から入力されるアドレスおよびデータを併せた６４ビット幅のデータ列からＣＲＣＣを生成する。また、Ｂ系ＣＲＣ回路２１２は、照合回路２１４とＢ系ＣＲＣＣバス２１３で接続されており、生成したＣＲＣＣを照合回路２１４へ出力する。
【００４７】
リード時のＢ系ＣＲＣ回路２１２は、Ｂ系プロセッサ２０３から入力されるアドレスおよびライト時にメインメモリ２０５に書き込まれたデータを併せた６４ビット幅のデータ列から新たにＢ系ＣＲＣＣを生成する。そして、当該メインメモリ２０５に記憶されたＣＲＣＣと、新たに生成したＣＲＣＣとが同じデータ列であるか否かを判定する。
【００４８】
このＢ系ＣＲＣ回路２１２は、割込制御部２２０と接続されており、その判定結果（一致／不一致）に基づいた論理信号（以下、「Ｂ系ＣＲＣＣ照合不一致」という）を生成して割込制御部２２０に出力する。以下、Ａ系ＣＲＣ回路２０９で生成されるＣＲＣＣをＡ系ＣＲＣＣと記載し、Ｂ系ＣＲＣ回路２１２で生成されるＣＲＣＣをＢ系ＣＲＣＣと記載する。
【００４９】
照合回路２１４は、入力される２つのデータ列の一致／不一致を判定する回路である。この照合回路２１４は、ＥＣＣ回路２３２と内部バス２１５およびＣＲＣＣ内部バス２１６という２本のバスでＥＣＣ回路２３２と接続されている。さらに、照合回路２１４は、割込制御部２２０とも接続されている。
【００５０】
ライト時の照合回路２１４は、Ａ系プロセッサ２０２から入力されるアドレスおよびデータと、Ａ系ＣＲＣ回路２０９から入力されるＡ系ＣＲＣＣとを併せた７２ビット幅のデータ列を、Ｂ系プロセッサ２０３から入力されるアドレスおよびデータと、Ｂ系ＣＲＣ回路２１２から入力されるＢ系ＣＲＣＣとを併せた７２ビットのデータ列と比較して一致／不一致を判定する。このとき照合回路２１４は、そのデータ列の判定結果（一致／不一致）に基づいた論理信号（以下、「照合不一致」という）を生成して割込制御部２２０に出力する。相互のデータ列が一致、すなわち判定結果が一致である場合に限り、照合回路２１４は、Ａ系プロセッサ２０２から入力されるアドレス、データ、コマンドを内部バス２１５を介してＥＣＣ回路２３２に出力し、Ａ系ＣＲＣＣをＣＲＣＣ内部バス２１６を介してＥＣＣ回路２３２に出力する。
【００５１】
リード時の照合回路２１４は、Ａ系プロセッサ２０２から入力されるアドレスのデータ列を、Ｂ系プロセッサ２０３から入力されるアドレスのデータ列と比較して一致／不一致を判定する。このとき照合回路２１４は、その判定結果（一致／不一致）に基づいて照合不一致を生成して割込制御部２２０に出力する。相互のデータ列が一致しているすなわち、判定結果が一致である場合に限り、照合回路２１４は、Ａ系プロセッサ２０２から入力されるアドレスおよびコマンドを内部バス２１５を介してＥＣＣ回路２３２に出力する。
【００５２】
ＥＣＣ回路２３２は、所定の桁数のビット幅のデータ列からＥＣＣを生成する。また、生成したＥＣＣを利用することにより、当該データ列のエラーを検出し、検出したエラーが訂正可能な１ビットエラーの場合に当該データ列を訂正する。
【００５３】
ＥＣＣ回路２３２は、ライト時とリード時では異なった処理を行う。このＥＣＣ回路２３２は、メインメモリ２０５の間でデータ列のやりとりができるように、メモリバス２１７、ＣＲＣＣメモリバス２１８およびＥＣＣメモリバス２１９によって接続されている。
【００５４】
ライトのＥＣＣ回路２３２は、照合回路２１４から入力されるアドレス、データおよびＣＲＣＣを併せた７２ビット幅のデータ列でＥＣＣを生成する。そして、生成したＥＣＣをＥＣＣメモリバス２１９を介してメインメモリ２０５に出力する。そして、ＥＣＣ回路２３２は、照合回路２１４から入力されるアドレス、データ、コマンドをメモリバス２１７を介してメインメモリ２０５に出力し、照合回路２１４から入力されるＣＲＣＣをＣＲＣＣメモリバス２１８を介してメインメモリ２０５に出力する。
【００５５】
リード時のＥＣＣ回路２３２は、メインメモリ２０５に書き込まれているデータと、照合回路２１４から入力されるアドレスおよびＣＲＣＣとを併せた７２ビット幅のデータ列から新たにＥＣＣを生成する。そして、ＥＣＣ回路２３２は、新たに生成したＥＣＣと、メインメモリ２０５に書き込まれたＥＣＣとの一致不一致を判定する。また、ＥＣＣ回路２３２は、割込制御部２２０と接続されており、その判定結果（一致／不一致）に基づいた論理信号（以下、「ＥＣＣ照合不一致」という）を生成して割込制御部２２０に出力する。
【００５６】
判定結果が一致の場合、ＥＣＣ回路２３２は、メインメモリ２０５に書き込まれているデータおよびＣＲＣＣを照合回路２１４を介してＡ系ＣＲＣ回路２０９およびＢ系ＣＲＣ回路２１２に出力するとともに、ＥＣＣ照合不一致（一致）を生成して割込制御部２２０に出力する。
【００５７】
判定結果が不一致の場合、ＥＣＣ回路２３２は、新たに生成したＥＣＣおよびメインメモリ２０５に書き込まれているＥＣＣを利用してメインメモリ２０５に書き込まれたＥＣＣおよびＣＲＣＣのエラーチェックを行う。
【００５８】
訂正可能なエラーの場合は、ＥＣＣ回路２３２は、データおよびＣＲＣＣのエラー訂正を行い、エラー訂正を行ったデータおよびＣＲＣＣを照合回路２１４を介してＡ系ＣＲＣ回路２０９およびＢ系ＣＲＣ回路２１２に出力するとともに、ＥＣＣ照合不一致（一致）を生成して割込制御部２２０に出力する。
【００５９】
訂正不可能なエラーの場合は、ＥＣＣ回路２３２は、ＥＣＣ照合不一致（不一致）を生成して割込制御部２２０に出力する。
【００６０】
割込制御部２２０は、Ａ系割込要求をＡ系プロセッサ２０２に出力し、Ｂ系割込要求をＢ系プロセッサ２０３に出力する。また、割込制御部２２０は、Ａ系割込要求とＢ系割込要求を制御する機能を備え、Ａ系割込要求をアサートするためのＡ系割込要求レジスタと、割込要因を示すＡ系割込要因レジスタで構成する。また、Ｂ系割込要求をアサートするためのＢ系割込要求レジスタと、割込要因を示すＢ系割込要因レジスタを備える。
【００６１】
割込制御部２２０は、Ａ系プロセッサ２０２に対するＡ系割込要求とＢ系プロセッサ２０３に対するＢ系割込要求独立に制御することが可能である。
【００６２】
Ａ系割込要求レジスタと、Ｂ系割込要求レジスタ、Ａ系割込要因レジスタ、Ｂ系割込要因レジスタはＡ系プロセッサ２０２とＢ系プロセッサ２０３からアクセスすることが可能な構造となっている。
【００６３】
割込制御部２２０は、各プロセッサの異常または各プロセッサからメインメモリ２０５までのインターフェースの異常およびメインメモリ２０５の異常を検出すると、制御装置２０４を不安全な状態から回避する機能を備える。すなわち、割込制御部２２０は、Ａ系ＣＲＣ回路２０９からのＡ系ＣＲＣ照合不一致、Ｂ系ＣＲＣ回路２１２からＢ系ＣＲＣ照合不一致、照合回路２１４からの照合不一致あるいはＥＣＣ回路２３２からのＥＣＣ照合不一致のいずれか一つの論理信号に基づいて、Ａ系プロセッサ２０２およびＢ系プロセッサ２０３が現在行っている演算を中断させるか否かを決定する。割込制御部２２０は他の割込要因についても制御を行っているが、本発明では言及しない。
【００６４】
ところで、出力切替スイッチ２２１は、Ａ系プロセッサ２０２、Ｂ系プロセッサ２０３およびネットワークコントローラ２０６に接続されている。この出力切替スイッチ２２１は、Ａ系プロセッサ２０２あるいはＢ系プロセッサ２０３の演算結果のいずれか一方を選択し、選択した方プロセッサの演算結果をネットワークコントローラ２０６に出力する。つまり、出力切替スイッチ２２１は、選択した方のプロセッサの演算結果がネットワークコントローラ２０６を介してネットワーク１０６上にある上位装置１０３あるいは下位装置１０４に出力されるようにするためのスイッチである。
【００６５】
［Ａ系ＣＲＣ回路の構成］
次に、Ａ系ＣＲＣ回路２０９およびＢ系ＣＲＣ回路２１２の回路構成の一例について図３を参照して説明する。
図３は、Ａ系ＣＲＣ回路２０９の一例およびその周辺を示す図である。なお、Ａ系ＣＲＣ回路２０９とＢ系ＣＲＣ回路２１２は同じ回路であるので、Ｂ系ＣＲＣ回路２１２の説明は省略する。
【００６６】
Ａ系ＣＲＣ回路２０９は、Ａ系プロセッサバス２０８を介してＡ系プロセッサ２０２および照合回路２１４と接続されているＣＲＣ計算回路３０２と、Ａ系プロセッサ２０２を介してＡ系プロセッサ２０２および照合回路２１４と接続されているスイッチと、デジタル比較器３０４とよりなる。
【００６７】
スイッチの端子Ｓ２はＣＲＣ計算回路３０２およびデジタル比較器３０４と接続されており、端子Ｓ１はＣＲＣバスで照合回路２１４と接続されており、端子Ｓ３はデジタル比較器３０４と接続されている。このスイッチは、Ａ系プロセッサ２０２から入力されるコマンドに基づいて接続する端子を切り替える。より具体的には、スイッチは、コマンドが‘１’のとき、すなわちライト時に端子Ｓ１と端子Ｓ２を接続し、入力されるコマンドが‘０’のとき、すなわちリード時に端子Ｓ１と端子Ｓ３を接続する。
【００６８】
ＣＲＣ計算回路３０２は、ライト時にＡ系プロセッサ２０２から入力されるアドレスおよびデータでＡ系ＣＲＣＣを計算し、計算したＡ系ＣＲＣＣをＡ系ＣＲＣＣバス２１０を介して照合回路２１４へ出力する。
【００６９】
また、ＣＲＣ計算回路３０２は、リード時にＡ系プロセッサ２０２から入力されるアドレスおよび照合回路２１４を介してメインメモリ２０５から取得したデータでＡ系ＣＲＣＣを計算し、計算したＡ系ＣＲＣＣをデジタル比較器３０４に出力する。
【００７０】
デジタル比較器３０４は、リード時のみ動作する。デジタル比較器３０４は、ＣＲＣ計算回路３０２が計算したＡ系ＣＲＣＣと、照合回路２１４を介してメインメモリ２０５から取得したＣＲＣＣを比較し、その比較結果に応じた論理信号であるＡ系ＣＲＣＣ照合不一致を割込制御部２２０に出力する。
【００７１】
［ＥＣＣ回路の構成］
次に、ＥＣＣ回路２３２の回路構成の一例について図４を参照して説明する。
図４は、ＥＣＣ回路２３２の一例およびその周辺を示す図である。
【００７２】
ＥＣＣ回路２３２は、第一切替スイッチ４０２と、第二切替スイッチ４０３と、ＥＣＣ計算回路４０４と、第三切替スイッチ４０５と、ＥＣＣ比較回路４０６と、ＥＣＣ訂正回路４０８と、第四切替スイッチ４０９と、第五切替スイッチ４１０と、スイッチ制御回路４１１よりなる。
【００７３】
第一切替スイッチ４０２は、ＥＣＣ計算回路４０４と、内部バス２１５あるいはメモリバス２１７のいずれか一方とを接続するスイッチである。
第一切替スイッチ４０２の端子Ｓ４は内部バス２１５で照合回路２１４と接続されており、端子Ｓ５はメモリバス２１７でメインメモリ２０５と接続されており、端子Ｓ６はＥＣＣ計算回路４０４と接続されている。この第一切替スイッチ４０２は、スイッチ制御回路４１１により接続する端子を制御される。具体的には、ライト時に、端子Ｓ４と端子Ｓ６を接続することで、ＥＣＣ計算回路４０４と内部バス２１５を接続する。一方、リード時に、端子Ｓ５と端子Ｓ６を接続してＥＣＣ計算回路４０４とメモリバス２１７を接続する。
【００７４】
第二切替スイッチ４０３は、ＥＣＣ計算回路４０４と、ＣＲＣＣ内部バス２１６あるいはＣＲＣＣメモリバス２１８のいずれか一方とを接続するスイッチである。
第二切替スイッチ４０３の端子Ｓ７はＣＲＣＣ内部バス２１６で照合回路２１４と接続されており、端子Ｓ８はＣＲＣＣメモリバス２１８でメインメモリ２０５と接続されており、端子Ｓ９はＥＣＣ計算回路４０４と接続されている。この第二切替スイッチ４０３は、スイッチ制御回路４１１により接続する端子を制御される。具体的には、ライト時に、端子Ｓ７と端子Ｓ９を接続してＥＣＣ計算回路４０４とＣＲＣＣ内部バス２１６を接続する。一方、リード時に、端子Ｓ８と端子Ｓ９を接続してＥＣＣ計算回路４０４とＣＲＣＣメモリバス２１８を接続する。
【００７５】
ライト時のＥＣＣ計算回路４０４は、内部バス２１５を介して照合回路２１４から入力されるアドレスおよびデータと、ＣＲＣＣ内部バス２１６を介して照合回路２１４から入力されるＣＲＣＣからＥＣＣを生成し、生成したＥＣＣを第三切替スイッチ４０５を介して出力する。
【００７６】
一方、リード時のＥＣＣ計算回路４０４は、メモリバス２１７を介してメインメモリ２０５から取得するデータと、ＣＲＣＣメモリバス２１８を介してメインメモリ２０５から取得するＣＲＣＣと、内部バス２１５を介して照合回路２１４から入力されるアドレスからＥＣＣを生成し、生成したＥＣＣを第三切替スイッチ４０５を介して出力する。
【００７７】
第三切替スイッチ４０５は、ＥＣＣ回路２３２からの出力をＥＣＣ比較回路４０６あるいはメインメモリ２０５のいずれかに切り替えるスイッチである。
第三切替スイッチ４０５の端子Ｓ１０はＥＣＣ計算回路４０４と接続されており、端子Ｓ１２はＥＣＣ比較回路４０６と接続されており、端子Ｓ１１はＥＣＣメモリバス２１９でメインメモリ２０５と接続されている。この第三切替スイッチ４０５は、スイッチ制御回路４１１により接続する端子を制御される。具体的には、ライト時に、端子Ｓ１０と端子Ｓ１１を接続してＥＣＣ計算回路４０４で生成されたＥＣＣをＥＣＣメモリバス２１９に出力する。一方、リード時に、端子Ｓ１０と端子Ｓ１２を接続してＥＣＣ計算回路４０４で生成されたＥＣＣをＥＣＣ比較回路４０６に出力する。
【００７８】
ＥＣＣ比較回路４０６は、第三切替スイッチ４０５によりリード時のみ処理を行う。ＥＣＣ比較回路４０６は、メインメモリ２０５からＥＣＣメモリバス２１９を介して取得したＥＣＣと、ＥＣＣ計算回路４０４で生成されたＥＣＣそれぞれのデータ列の排他的論理和を計算することにより、これらの各ＥＣＣのエラーチェックを行う。ここでのエラーチェックは、エラーなし（全ビット一致）か、１ビットエラーか、２ビット以上のエラーか、を検出するとともに、これらの各エラーが訂正可能であるか否かを検出する、ことを指す。ＥＣＣ比較回路４０６は、このようなエラーチェック結果をＥＣＣ訂正回路４０８およびスイッチ制御回路４１１に出力する。
【００７９】
ＥＣＣ訂正回路４０８は、第三切替スイッチ４０５によりリード時のみ処理を行う。ＥＣＣ訂正回路４０８は、メインメモリ２０５から読み出したデータおよびＣＲＣＣのエラーの訂正をＥＣＣ比較回路４０６から入力されたエラーチェック結果に基づいて行う。
【００８０】
訂正不可能な１ビットエラーおよび２ビット以上のエラーの場合、ＥＣＣ訂正回路４０８は割込制御部２２０にＥＣＣ照合不一致（不一致）を出力する。
【００８１】
訂正可能な１ビットエラーの場合、ＥＣＣ訂正回路４０８は、メインメモリ２０５から読み出したデータまたはＣＲＣＣのビット訂正をＥＣＣ比較回路４０６から入力されるエラーチェック結果を利用して行うとともに、割込制御部２２０にＥＣＣ照合不一致（一致）を出力する。
【００８２】
第四切替スイッチ４０９は、内部バス２１５とメモリバス２１７の接続のオン／オフを切り替えるスイッチである。第四切替スイッチ４０９の端子Ｓ１３は内部バス２１５に接続しており、端子Ｓ１４はメモリバス２１７に接続している。この第四切替スイッチ４０９は、スイッチ制御回路４１１によりオン／オフを制御される。ライト時に、端子Ｓ１３と端子Ｓ１４を接続して照合回路２１４から入力されるアドレス、データおよびコマンドをメインメモリ２０５に出力するようにする。リード時にＥＣＣ比較回路４０６で検出したエラーチェック結果がエラーなしあるいは訂正可能な１ビットエラーの場合、端子Ｓ１３と端子Ｓ１４を接続してメインメモリ２０５に記憶されたデータを照合回路２１４に出力するようにする。
【００８３】
第五切替スイッチ４１０は、ＣＲＣＣ内部バス２１６とＣＲＣＣメモリバス２１８の接続のオン／オフを切り替えるスイッチである。第五切替スイッチ４１０の端子Ｓ１５はＣＲＣＣ内部バス２１６に接続しており、端子Ｓ１６はＣＲＣＣメモリバス２１８に接続している。この第五切替スイッチ４１０は、スイッチ制御回路４１１によりオン／オフを制御される。ライト時に、端子Ｓ１５と端子Ｓ１６を接続して照合回路２１４から入力されるＣＲＣＣをメインメモリ２０５に出力するようにする。リード時においてＥＣＣ比較回路４０６で検出したエラーチェック結果がエラーなしあるいは訂正可能な１ビットエラーの場合、端子Ｓ１５と端子Ｓ１６を接続してメインメモリ２０５に記憶されたＣＲＣＣを照合回路２１４に出力するようにする。
【００８４】
スイッチ制御回路４１１は、第一切替スイッチ４０２、第二切替スイッチ４０３、第三切替スイッチ４０５、第四切替スイッチ４０９および第五切替スイッチ４１０の各端子の接続を制御するものである。この制御は、内部バス２１５を介して照合回路２１４から入力されるコマンドおよびＥＣＣ比較回路４０６から入力されるエラーチェック結果に基づいて行われる。
【００８５】
［ＣＰＵ装置のモード遷移］
次に、ＣＰＵ装置１０２のモードの遷移について図５を参照して説明する。
図５は、ＣＰＵ装置１０２のモードの遷移を示す状態遷移図である。
【００８６】
まず、ＣＰＵ装置１０２が起動されると、当該ＣＰＵ装置１０２はＯＳ立ち上がりモードになる（ステップＳ５０１）。このとき、ＣＰＵ装置１０２は、上位装置１０３に記憶された所定のプログラムをネットワーク経由で取得する。
【００８７】
そして、ＣＰＵ装置１０２は、スケジューラにより、前述の一般モード（ステップＳ５０２）、安全モード（ステップＳ５０３）あるいはテストモード（ステップＳ５０４）のいずれかのモードで稼動する。なお、スケジューラにより、モードの変更が行われる場合は、ＯＳ立ち上がりモードに移行する（ステップＳ５０６、ステップＳ５０７およびステップＳ５０８）。
【００８８】
ＣＰＵ装置１０２は、一般モードでの演算中にＣＰＵ装置１０２に異常が発生すると、ＣＰＵ装置１０２は演算を中止する（ステップＳ５０９）。
【００８９】
また、ＣＰＵ装置１０２は、安全モードでの演算中にＣＰＵ装置１０２に以上が発生すると、ＣＰＵ装置１０２は演算を中止する（ステップＳ５１０）。
【００９０】
また、ＣＰＵ装置１０２は、テストモードの実行、すなわちテストプログラムによりＣＰＵ装置１０２を構成する各ブロックおよび各バスの故障を検出すると、当該ＣＰＵ装置１０２を停止する（ステップＳ５１１）。
【００９１】
以上に示した各状態のうち、ステップＳ５１０のエラーを検出するために、ＣＰＵ装置１０２は、図２から図４に示した構成となっている。つまり、本実施形態の図２乃至図４の構成は、安全モードでＣＰＵ装置１０２の異常を確実に検出し、異常停止モードに至らせるためのものである。
【００９２】
［ＣＰＵ装置の動作］
次に、安全モード時における制御装置２０４の動作を図６〜図８を参照して説明する。
図６は、故障がない場合の制御装置２０４の動作を示すタイミングチャートである。
【００９３】
Ａ系プロセッサ２０２およびＢ系プロセッサ２０３が、予め上位装置１０３から取得した所定のプログラムに基づいて、メインメモリ２０５に対してライトを行う時の制御装置２０４の動作について説明する。なお、Ｂ系ＣＲＣ回路２１２はＡ系ＣＲＣ回路２０９と同じ構成であるので、以下ではＢ系ＣＲＣ回路に関する動作を図３に示すＡ系ＣＲＣ回路を参照して説明する。
【００９４】
まず、Ａ系プロセッサ２０２は、メインメモリ２０５に書き込み要求を行うと（Ｔ６０１）、Ａ系プロセッサバス２０８を介してアドレス、データおよびライトを示すコマンド（‘１’）を制御装置２０４のＡ系ＣＲＣ回路２０９および照合回路２１４へ出力する。すると、Ａ系ＣＲＣ回路２０９は、Ａ系プロセッサ２０２から入力されたコマンドをトリガーにスイッチ３０３の端子Ｓ１と端子Ｓ２を接続する。そして、Ａ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２は、Ａ系プロセッサ２０２から入力されたアドレスおよびデータからＡ系ＣＲＣＣを生成する。そして、Ａ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２は、生成したＡ系ＣＲＣＣを、Ａ系ＣＲＣＣバスを介して照合回路２１４に出力する（Ｔ６０２）。
【００９５】
一方、Ｂ系プロセッサ２０３もＡ系プロセッサ２０２と同様の動作を行う。まず、Ｂ系プロセッサ２０３は、メインメモリ２０５に書き込み要求を行うと（Ｔ６０３）、Ｂ系プロセッサバス２１１を介してデータ、アドレスおよびライトを示すコマンド（‘１’）を制御装置２０４のＢ系ＣＲＣ回路２１２および照合回路２１４へ出力する。すると、Ｂ系ＣＲＣ回路２１２は、Ｂ系プロセッサ２０３から入力されたコマンドをトリガーにスイッチ３０３の端子Ｓ１と端子Ｓ２を接続する。そして、Ｂ系ＣＲＣ回路２１２のＣＲＣ計算回路３０２は、Ｂ系プロセッサ２０３から入力されたアドレスおよびデータからＢ系ＣＲＣＣを生成する。そして、Ｂ系ＣＲＣ回路２１２のＣＲＣ計算回路３０２は生成したＢ系ＣＲＣＣを照合回路２１４に出力する（Ｔ６０４）。
【００９６】
照合回路２１４は、Ａ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２から入力されるＡ系ＣＲＣＣと、Ｂ系ＣＲＣ回路２１２のＣＲＣ計算回路３０２から入力されるＢ系ＣＲＣＣとが一致するか否かを判定する（Ｔ６０５）。各故障検出対象に故障がないケースでは、判定結果が一致となるので、照合回路２１４は、Ａ系プロセッサバス２０８を介してＡ系プロセッサ２０２から入力されるアドレス、データおよびコマンドを内部バス２１５を介してＥＣＣ回路２３２に出力する。さらに、照合回路２１４は、Ａ系ＣＲＣ回路２０９から入力されるＡ系ＣＲＣＣをＣＲＣＣ内部バス２１６を介してＥＣＣ回路２３２に出力する。なお、ＥＣＣ回路２３２にはＢ系ＣＲＣ回路２１２からの出力を入力するようにしてもよいので、以下ではＡ系ＣＲＣＣおよびＢ系ＣＲＣＣを区別せず単にＣＲＣＣと記載する。
【００９７】
ＥＣＣ回路２３２は、照合回路２１４から入力されたコマンドをトリガーに、第一切替スイッチ４０２の端子Ｓ４と端子Ｓ６を接続し、第二切替スイッチ４０３の端子Ｓ７と端子Ｓ９を接続し、第三切替スイッチ４０５の端子Ｓ１０と端子Ｓ１１を接続し、第四切替スイッチ４０９の端子Ｓ１３と端子Ｓ１４を接続し、第五切替スイッチ４１０の端子Ｓ１５と端子Ｓ１６を接続する。ＥＣＣ計算回路４０４は、照合回路２１４から入力されるアドレス、データおよびＣＲＣＣでＥＣＣを生成し、生成したＥＣＣをＥＣＣメモリバス２１９を介してメインメモリ２０５に出力する。このとき、ＥＣＣ回路２３２は、照合回路２１４から入力されたデータ、コマンドおよびデータをメモリバス２１７を介してメインメモリ２０５に出力し、照合回路２１４から入力されたＣＲＣＣをＣＲＣＣメモリバス２１８を介してメインメモリ２０５に出力する（Ｔ６０６）。
【００９８】
メインメモリ２０５は、ＥＣＣ回路２３２から入力されたコマンドをトリガーにして、ＥＣＣ回路２３２から入力された各アドレスが示す位置にＥＣＣ回路２３２から入力されたデータ、ＣＲＣＣおよびＥＣＣを記憶する。すなわち、メインメモリ２０５は、アドレスに基づいて、データをデータ記憶領域２２９に記憶し、ＣＲＣＣをＣＲＣＣ記憶領域２３０に記憶し、ＥＣＣをＥＣＣ記憶領域２３１に記憶する（Ｔ６０７）。
【００９９】
以上の処理が完了した後、メインメモリ２０５が制御装置２０４の各回路に書き込み終了応答を出力すると、メインメモリ２０５の各回路は書き込み動作を終了する（Ｔ６０８）。
【０１００】
続いて、Ａ系プロセッサ２０２およびＢ系プロセッサ２０３が、予め上位装置１０３から取得した所定のプログラムに基づいて、メインメモリ２０５からリードを行う時の制御装置２０４の動作について説明する。
【０１０１】
まず、Ａ系プロセッサ２０２およびＢ系プロセッサ２０３は制御装置２０４に対して読み込み要求を行う。すると、Ａ系プロセッサ２０２は、Ａ系プロセッサバス２０８を介して制御装置２０４の照合回路２１４にアドレスおよびリードを示すコマンド（‘０’）を出力するとともに、当該コマンドをＡ系ＣＲＣ回路２０９に出力する。Ａ系ＣＲＣ回路２０９は、Ａ系プロセッサ２０２から入力されたコマンドをトリガーにスイッチ３０３の端子Ｓ１と端子Ｓ３を接続する。
【０１０２】
一方、Ｂ系プロセッサ２０３は、Ｂ系プロセッサバス２１１を介してメインメモリ２０５の照合回路２１４にアドレスおよびリードを示すコマンド（‘０’）を出力するとともに、当該コマンドをＢ系ＣＲＣ回路２１２に出力する。Ｂ系ＣＲＣ回路２１２は、Ｂ系プロセッサ２０３から入力されたコマンドをトリガーにスイッチ３０３の端子Ｓ１と端子Ｓ３を接続する。
【０１０３】
ここで、照合回路２１４は、Ａ系プロセッサ２０２から入力されたアドレスと、Ｂ系プロセッサ２０３から入力されたアドレスとを比較し、比較結果が一致であるか否かを判定する（Ｔ６０９）。
【０１０４】
照合回路２１４が一致と判定すると、照合回路２１４は、Ａ系プロセッサ２０２から入力されたアドレスおよびコマンドを内部バス２１５を介してＥＣＣ回路２３２に出力する。すると、ＥＣＣ回路２３２は、照合回路２１４から入力されたコマンドをトリガーに、第一切替スイッチ４０２の端子Ｓ５と端子Ｓ６を接続し、第二切替スイッチ４０３の端子Ｓ８と端子Ｓ９を接続し、第三切替スイッチ４０５の端子Ｓ１０と端子Ｓ１２を接続する。そして、ＥＣＣ回路２３２は、照合回路２１４から入力されたアドレスおよびコマンドをメモリバスを介してメインメモリ２０５に出力する。
【０１０５】
メインメモリ２０５は、ＥＣＣ回路２３２から入力されたコマンドをトリガーにして、ＥＣＣ回路２３２から入力されたアドレスに従って、メインメモリ２０５に記憶されたデータをメモリバスを介してＥＣＣ回路２３２に出力する。このとき、メインメモリ２０５は、ＥＣＣ回路２３２から入力されたアドレスに従って、記憶しているＣＲＣＣをＣＲＣＣメモリバス２１８を介してＥＣＣ回路２３２に出力する。さらに、メインメモリ２０５は、ＥＣＣ回路２３２から入力されたアドレスに従って、記憶しているＥＣＣをＥＣＣメモリバス２１９を介してＥＣＣ回路２３２に出力する。
【０１０６】
すると、ＥＣＣ回路２３２のＥＣＣ計算回路４０４は、照合回路２１４から入力されたアドレスおよびメインメモリ２０５から取得したデータおよびＣＲＣＣから新たにＥＣＣを生成してＥＣＣ比較回路４０６に出力する。
【０１０７】
ＥＣＣ比較回路４０６は、新たに生成したＥＣＣと、メインメモリ２０５から取得したＥＣＣとの排他的論理和を計算する。そして、前述のエラーチェックを行い、エラーチェック結果をＥＣＣ訂正回路４０８およびスイッチ制御回路４１１に出力する。本ケースではエラーチェック結果がエラーなしとなるので、スイッチ制御回路４１１は、第四切替スイッチ４０９の端子Ｓ１３とＳ１４を接続し、第五切替スイッチ４１０の端子Ｓ１５とＳ１６を接続する。すると、メインメモリ２０５から取得したデータが、内部バス２１５、照合回路２１４およびＡ系プロセッサバス２０８を介してＡ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２へ出力される。このとき、メインメモリ２０５から取得したＣＲＣＣがＣＲＣＣ内部バス２１６、照合回路２１４およびＡ系ＣＲＣＣバスを介してＡ系ＣＲＣ回路２０９のデジタル比較器３０４に出力される。なお、メインメモリ２０５から取得したデータおよびＣＲＣＣは、Ｂ系ＣＲＣ回路２１２にも同様に入力される（Ｔ６１０）。
【０１０８】
ここで、Ａ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２は、Ａ系プロセッサバス２０８を介してＡ系プロセッサ２０２から出力されているアドレスおよびＥＣＣ回路２３２から入力されたデータから新たにＣＲＣＣを生成してデジタル比較器３０４に入力する。デジタル比較器３０４は、新たに生成したＣＲＣＣと、ＥＣＣ回路２３２から入力されたＣＲＣＣとを比較し、その比較結果一致であるが否かを判定する。
【０１０９】
本ケースでは、判定結果が一致となるので、ＥＣＣ回路２３２から出力されたデータ、すなわちメインメモリ２０５に記憶されたデータがＡ系プロセッサバス２０８を介してＡ系プロセッサ２０２に出力される（Ｔ６１１）。このとき、Ｂ系プロセッサ２０３にも同様に、Ｂ系ＣＲＣ回路２１２からＢ系プロセッサバス２１１を介して、メインメモリ２０５に記憶されたと同じデータが出力される（Ｔ６１２）。
【０１１０】
図７は、Ａ系プロセッサ２０２、Ａ系ＣＲＣ回路２０９、Ａ系プロセッサバス２０８、Ｂ系プロセッサ２０３、Ｂ系ＣＲＣ回路２１２およびＢ系プロセッサバス２１１のいずれかで故障が起きた場合の制御装置２０４の動作を示すタイミングチャートである。なお、Ｔ７０１〜Ｔ７０４は、図６のＴ６０１〜Ｔ６０４と同じなので、それらの説明は省略する。
【０１１１】
Ｔ７０４のタイミングの直後、すなわちライト中に、Ａ系プロセッサ２０２、Ａ系ＣＲＣ回路２０９、Ａ系プロセッサバス２０８、Ｂ系プロセッサ２０３、Ｂ系ＣＲＣ回路２１２およびＢ系プロセッサバス２１１のいずれかで故障が起きたとする（Ｔ７０５）。すると、照合回路２１４は、Ａ系ＣＲＣＣバス２１０を介してＡ系ＣＲＣ回路２０９から入力されたＡ系ＣＲＣＣおよびＢ系ＣＲＣＣバス２１３を介してＢ系ＣＲＣ回路２１２から入力されたＢ系ＣＲＣＣを比較する。そして、照合回路２１４はそれぞれの比較結果が一致であるか否かを判定する（Ｔ７０６）。
【０１１２】
本ケースでは、判定結果が不一致となるので、照合回路２１４は、Ａ系プロセッサ２０２およびＢ系プロセッサ２０３に応答を返す。また、照合回路２１４は、割込制御部２２０に照合不一致（不一致）を出力し、Ａ系割込要因レジスタおよびＢ系割込要因レジスタに要因を登録する。そして、Ａ系割込要因レジスタおよびＢ系割込要因レジスタにより、Ｔ６０７の時点でＡ系プロセッサ２０２およびＢ系プロセッサ２０３の処理がそれぞれ一次中断される。
【０１１３】
以上のようにして、本ケースのような故障が生じた際、メインメモリ２０５へのデータの書き込みが行われなくなり、その後のプログラムの実行が割込制御部２２０によって中断される。
【０１１４】
次に、照合回路２１４、内部バス２１５、ＣＲＣＣ内部バス２１６、ＥＣＣ回路２３２、メモリバス、ＣＲＣＣメモリバス２１８、ＥＣＣメモリバス２１９およびメインメモリ２０５のいずれかで故障が起きたときの制御装置２０４の動作について図８を参照して説明する。
図８は、制御装置２０４の動作を示すタイミングチャートである。なお、Ｔ８０１〜Ｔ８０９は図６に示すＴ６０１〜Ｔ６０９と同じなので、それらの説明は省略する。
【０１１５】
Ｔ８０９のタイミングの直後、すなわちリード中に、照合回路２１４、内部バス２１５、ＣＲＣＣ内部バス２１６、ＥＣＣ回路２３２、メモリバス２１７、ＣＲＣＣメモリバス２１８、ＥＣＣメモリバス２１９およびメインメモリ２０５のいずれかで故障が起きているとする（Ｔ８１０）。
【０１１６】
メインメモリ２０５は、記憶しているデータをＥＣＣ回路２３２から入力されたアドレスに従ってメモリバスを介してＥＣＣ回路２３２に出力する。このとき、メインメモリ２０５は、記憶しているＥＣＣをＥＣＣ回路２３２から入力されたアドレスに従ってＥＣＣメモリバス２１９を介してＥＣＣ回路２３２に出力するとともに、記憶しているＣＲＣＣをＥＣＣ回路２３２から入力されたアドレスに従ってＣＲＣＣメモリバス２１８を介してＥＣＣ回路２３２に出力する。そして、ＥＣＣ回路２３２のＥＣＣ計算回路４０４は、照合回路２１４から内部バス２１５を介して入力されたアドレスと、メインメモリ２０５から取得したデータおよびＣＲＣＣから新たにＥＣＣを生成してＥＣＣ比較回路４０６に出力する。
【０１１７】
ＥＣＣ計算回路４０４は、新たに生成したＥＣＣと、メインメモリ２０５から読み出したＥＣＣの排他的論理和を計算することにより、前述のエラーチェックを行う。そして、エラーチェック結果をＥＣＣ比較回路４０６およびスイッチ制御回路４１１に出力する。本ケースではエラーチェック結果が‘ビットエラーなし’となるので、スイッチ制御回路４１１は、第四切替スイッチ４０９の端子Ｓ１３とＳ１４を接続し、第五切替スイッチ４１０の端子Ｓ１５とＳ１６を接続する。すると、メインメモリ２０５から取得したデータが、内部バス２１５、照合回路２１４およびＡ系プロセッサバス２０８を介してＡ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２へ出力される。このとき、メインメモリ２０５から取得したＣＲＣＣがＣＲＣＣ内部バス２１６、照合回路２１４およびＡ系ＣＲＣＣバスを介してＡ系ＣＲＣ回路２０９のデジタル比較器３０４に出力される。なお、メインメモリ２０５から取得したデータおよびＣＲＣＣは、Ｂ系ＣＲＣ回路２１２にも同様に入力される（Ｔ８１１）。
【０１１８】
Ａ系ＣＲＣ回路２０９のＣＲＣ計算回路３０２は、Ａ系プロセッサバス２０８を介してＡ系プロセッサ２０２から入力されたアドレスおよびＥＣＣ回路２３２から入力されるデータから新たにＣＲＣＣを生成してＡ系ＣＲＣ回路２０９のデジタル比較器３０４に出力する。このデジタル比較器３０４は、新たに生成したＣＲＣＣと、ＥＣＣ回路２３２から入力されたＣＲＣＣとを比較し、その比較結果が一致であるか否かを判定する（Ｔ８１２）。
【０１１９】
一方、Ｂ系ＣＲＣ回路２１２のＣＲＣ計算回路３０２は、Ｂ系プロセッサバス２１１を介してＢ系プロセッサ２０３から入力されたアドレスおよびＥＣＣ回路２３２から入力されるデータから新たにＣＲＣＣを生成してＢ系ＣＲＣ回路２１２のデジタル比較器３０４に出力する。このデジタル比較器３０４は、新たに生成したＣＲＣＣと、ＥＣＣ回路２３２から入力されたＣＲＣＣとを比較し、その比較結果が一致であるか否かを判定する（Ｔ８１３）。
【０１２０】
本ケースでは、Ａ系ＣＲＣ回路２０９のデジタル比較器３０４およびＢ系ＣＲＣ回路２１２のデジタル比較器３０４の両方あるいはいずれか一方が、不一致であると判定する。すると、不一致を検出した方のデジタル比較器３０４は、割込制御部２２０にＣＲＣ照合不一致（不一致）を出力し、Ａ系割込要因レジスタあるいはＢ系割込要因レジスタに要因を登録する。そして、Ａ系割込要因レジスタあるいはＢ系割込要因レジスタにより、Ｔ６０７の時点でＡ系プロセッサ２０２およびＢ系プロセッサ２０３の処理がそれぞれ一時中断される。
【０１２１】
以上のようにして、本ケースのような故障が発生した際に、Ａ系プロセッサ２０２およびＢ系プロセッサ２０３がデータを読み込めなくなり、その後のプログラムの実行が割込制御部２２０によって中断される。
【０１２２】
［ＣＰＵ装置の故障検出範囲］
次に、ＣＰＵ装置１０２の故障検出範囲についてまとめる。
図９は、ＣＰＵ装置１０２の故障検出範囲を示す表である。
図９（ａ）は、安全モードで稼働しているときのＣＰＵ装置１０２の故障検出範囲を示す表である。
【０１２３】
前述したように、安全モードのときにＣＰＵ装置１０２を構成する各ブロックおよび各バス（以下、「故障検出対象」という）の故障を検出する構成要素としてＣＰＵ装置１０２はＡ系ＣＲＣ回路２０９、Ｂ系ＣＲＣ回路２１２、照合回路２１４およびＥＣＣ回路２３２を備えている。
【０１２４】
Ａ系ＣＲＣ回路２０９の故障検出対象は、Ａ系プロセッサバス２０８と、照合回路２１４と、内部バス２１５と、ＣＲＣＣ内部バス２１６と、ＥＣＣ回路２３２と、メモリバス２１７と、ＣＲＣＣメモリバス２１８と、ＥＣＣメモリバス２１９と、メインメモリ２０５である。
【０１２５】
Ｂ系ＣＲＣ回路２１２の故障検出対象は、Ｂ系プロセッサバス２１１と、照合回路２１４と、内部バス２１５と、ＣＲＣＣ内部バス２１６と、ＥＣＣ回路２３２と、メモリバス２１７と、ＣＲＣＣメモリバス２１８と、ＥＣＣメモリバス２１９と、メインメモリ２０５である。
【０１２６】
照合回路２１４の故障検出対象は、Ａ系プロセッサ２０２、Ｂ系プロセッサ２０３、Ａ系ＣＲＣ回路２０９、Ｂ系ＣＲＣ回路２１２、Ａ系プロセッサバス２０８およびＢ系プロセッサバス２１１である。
【０１２７】
ＥＣＣ回路２３２の故障検出対象は、メモリバス２１７と、ＣＲＣＣメモリバス２１８と、ＥＣＣメモリバス２１９と、メインメモリ２０５である。
【０１２８】
図９（ｂ）は、テストモードで稼働しているときのＣＰＵ装置１０２の故障検出範囲を示す表である。テストモードでは、表に示すようなテストプログラムを動作させることにより、Ａ系プロセッサ２０２、Ｂ系プロセッサ２０３、Ａ系ＣＲＣ回路２０９、Ｂ系ＣＲＣ回路２１２、Ａ系プロセッサバス２０８、Ｂ系プロセッサバス２１１、照合回路２１４、内部バス２１５、ＣＲＣＣメモリバス２１８、ＥＣＣ回路２３２、メモリバス２１７、ＣＲＣＣメモリバス２１８、ＥＣＣメモリバス２１９およびメインメモリ２０５の診断を独立して行う。なお、故障検出対象は図９（ａ）の表に示したものと同じなので、故障検出対象に関する説明は省略する。
【０１２９】
以上説明したように、本実施形態は、複数のプロセッサからの出力を単に比較してそれらの出力の一致／不一致を判定することにより故障を検出するだけではなく、当該比較を行う手段の故障の検出を行えるようにした。そのため、ＣＰＵ装置１０２での処理中（安全モード時）における、当該ＣＰＵ装置１０２を構成する各ブロックおよび各バスの故障をより確実に検出することができる。そして、故障が検出されるとすぐに、当該処理を中止するようにした。例えば、潜在的な危険性の高いプロセス設備の制御中に何らかの故障が発生しても、すぐにその制御が中断されるので、安全性をより向上させる、という効果がある。
【０１３０】
なお、本実施形態ではＥＣＣ回路２３２を設けてあるが、このＥＣＣ回路２３２を設けなくても上述したものと同様の効果が得られる。ただし、ＥＣＣ回路２３２を設けない場合は、内部バス２１５とメモリバス２１７が接続されており、ＣＲＣＣ内部バス２１６とＣＲＣＣメモリバス２１８が接続されていることが必要となる。
【０１３１】
以上、本発明の実施形態の例について説明したが、本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含むことはいうまでもない。
【符号の説明】
【０１３２】
１０１…制御システム、１０２…ＣＰＵ装置、１０３…上位装置、１０４…下位装置、１０５…制御対象、１０６…ネットワーク、２０２…Ａ系プロセッサ、２０３…Ｂ系プロセッサ、２０４…制御装置、２０５…メインメモリ、２０６…ネットワークコントローラ、２０７…ＣＲＣ回路、２０８…Ａ系プロセッサバス、２０９…Ａ系ＣＲＣ回路、２１０…Ａ系ＣＲＣＣバス、２１１…Ｂ系プロセッサバス、２１２…Ｂ系ＣＲＣ回路、２１３…Ｂ系ＣＲＣＣバス、２１４…照合回路、２１５…内部バス、２１６…ＣＲＣＣ内部バス、２１７…メモリバス、２１８…ＣＲＣＣメモリバス、２１９…ＥＣＣメモリバス、２２０…割込制御部、２２１…出力切替スイッチ、２２９…データ記憶領域、２３０…ＣＲＣＣ記憶領域、２３１…ＥＣＣ記憶領域、２３２…ＥＣＣ回路、３０２…ＣＲＣ計算回路、３０３…スイッチ、３０４…デジタル比較器、４０２…第一切替スイッチ、４０３…第二切替スイッチ、４０４…ＥＣＣ計算回路、４０５…第三切替スイッチ、４０６…ＥＣＣ比較回路、４０８…ＥＣＣ訂正回路、４０９…第四切替スイッチ、４１０…第五切替スイッチ、４１１…スイッチ制御回路
【図１】
0005563700.tif 000002
【図２】
0005563700.tif 000003
【図３】
0005563700.tif 000004
【図４】
0005563700.tif 000005
【図５】
0005563700.tif 000006
【図６】
0005563700.tif 000007
【図７】
0005563700.tif 000008
【図８】
0005563700.tif 000009
【図９】
0005563700.tif 000010