(57)【特許請求の範囲】
【請求項１】
略同一の構成の複数の制御モジュールより成り、該複数の制御モジュールに同一の入力情報が入力され、該複数の制御モジュールが該入力情報に応じた同一のアプリケーション処理を行い、該複数の制御モジュールが相互にデータ送受信を行って照合処理を行い、該複数の制御モジュールが同一の出力信号線に出力を行うフォールトトレラント装置であって、
前記各制御モジュールは、
予め各種出力情報毎に、それが安全側出力であるか危険側出力であるかを登録した第１の記憶手段と、
各種の前記アプリケーション処理を実行可能であり、任意の前記入力情報が入力される毎に、該入力情報に応じたアプリケーション処理を実行するアプリケーション処理実行手段と、
該アプリケーション処理の結果としての出力情報が、安全側出力であるか危険側出力であるかを前記第１の記憶手段を参照して判定する安全／危険判定手段と、
該安全／危険判定手段により前記出力情報が安全側出力であると判定した場合、該出力情報を前記出力信号線に出力し、その後、前記照合処理を実行し、前記安全／危険判定手段により前記出力情報が危険側出力であると判定した場合には、前記照合処理を実行し、照合ＯＫであれば前記出力情報を前記出力信号線に出力する出力制御手段と、
を有することを特徴とするフォールトトレラント装置。
【請求項２】
予め前記各種アプリケーション処理毎に対応付けて、そのアプリケーション処理が正常に実行されたか否かを判定する為の各種条件である検証条件を記憶する第２の記憶手段を更に有し、
前記出力制御手段は、前記出力情報が安全側出力であると判定された場合、前記第２の記憶手段を参照して、該出力情報に係わる前記アプリケーション処理が正常に実行されているか否かを検証し、検証ＯＫである場合に前記出力情報を前記出力信号線に出力し、その後、前記照合処理を実行することを特徴とする請求項１記載のフォールトトレラント装置。
【請求項３】
前記出力制御手段は、前記出力情報が安全側出力であると判定された場合における前記照合処理は、前記入力情報と出力情報とをまとめて行うことを特徴とする請求項１または２記載のフォールトトレラント装置。
【請求項４】
前記安全／危険判定手段は、前記アプリケーション処理の結果としての出力情報が複数ある場合、該各出力情報毎に前記第１の記憶手段を参照してその出力情報が安全側出力か危険側出力かを求め、全ての出力情報が安全側出力である場合に安全側出力であると判定することを特徴とする請求項１記載のフォールトトレラント装置。
【請求項５】
前記出力制御手段は、前記安全／危険判定手段による判定結果が安全側出力、危険側出力のどちらの場合でも、前記照合処理は、前記入力情報と出力情報とをまとめて行うことを特徴とする請求項１または４記載のフォールトトレラント装置。
【請求項６】
略同一の構成の複数の制御モジュールより成り、該複数の制御モジュールに同一の入力情報が入力され、該複数の制御モジュールが該入力情報に応じた同一のアプリケーション処理を行い、該複数の制御モジュールが相互にデータ送受信を行って照合処理を行い、該複数の制御モジュールが同一の出力信号線に出力を行うフォールトトレラント装置における前記制御モジュールであって、
予め各種出力情報毎に、それが安全側出力であるか危険側出力であるかを登録した第１の記憶手段と、
各種の前記アプリケーション処理を実行可能であり、任意の前記入力情報が入力される毎に、該入力情報に応じたアプリケーション処理を実行するアプリケーション処理実行手段と、
該アプリケーション処理の結果としての出力情報が、安全側出力であるか危険側出力であるかを前記第１の記憶手段を参照して判定する安全／危険判定手段と、
該安全／危険判定手段により前記出力情報が安全側出力であると判定した場合、該出力情報を前記出力信号線に出力し、その後、前記照合処理を実行し、前記安全／危険判定手段により前記出力情報が危険側出力であると判定した場合には、前記照合処理を実行し、照合ＯＫであれば前記出力情報を前記出力信号線に出力する出力制御手段と、
を有することを特徴とするフォールトトレラント装置における制御モジュール。
【請求項７】
略同一の構成の複数の制御モジュールより成り、該複数の制御モジュールに同一の入力情報が入力され、該複数の制御モジュールが該入力情報に応じた同一のアプリケーション処理を行い、該複数の制御モジュールが相互にデータ送受信を行って照合処理を行い、該複数の制御モジュールが同一の出力信号線に出力を行うフォールトトレラント装置における前記制御モジュールのコンピュータを、
予め各種出力情報毎に、それが安全側出力であるか危険側出力であるかを登録した第１の記憶手段と、
各種の前記アプリケーション処理を実行可能であり、任意の前記入力情報が入力される毎に、該入力情報に応じたアプリケーション処理を実行するアプリケーション処理実行手段と、
該アプリケーション処理の結果としての出力情報が、安全側出力であるか危険側出力であるかを前記第１の記憶手段を参照して判定する安全／危険判定手段と、
該安全／危険判定手段により前記出力情報が安全側出力であると判定した場合、該出力情報を前記出力信号線に出力し、その後、前記照合処理を実行し、前記安全／危険判定手段により前記出力情報が危険側出力であると判定した場合には、前記照合処理を実行し、照合ＯＫであれば前記出力情報を前記出力信号線に出力する出力制御手段、
として機能させる為のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二重化／比較方式によるフォールトトレラント装置に関する。
【背景技術】
【０００２】
非特許文献１にはフォールトトレランスを実現する方式について記載されている。特に５章における“５・１動的二重化”には、「二重化／比較方式」によるフォールトトレラントシステムの概念が記載されている。「二重化／比較方式」では、２個の機能モジュールに同じ仕事（処理）をさせて結果を比較することで、誤り検出する方式である。
【０００３】
図２０は、上記「二重化／比較方式」によるフォールトトレラントシステムの概念を示す図である。
図２０に示すシステムは、同期して同じ動作を行う２つのモジュール１００Ａ、１００Ｂ（制御モジュール；ＣＰＵモジュール）と、比較器１０１と、切替部１０２を有する。切替部１０２は２つのモジュール１００Ａ、１００Ｂからの出力を入力し、何れか一方を不図示の外部システムに出力する。比較器１０１は、２つのモジュール１００Ａ、１００Ｂからの出力を入力して、比較照合し一致／不一致を検出し、検出結果に応じて切替部１０２を制御する。例えば、不一致検出後に、必要ならば正常モジュール側に切り替える。
【０００４】
また、特許文献１には、上記図２０のような比較器、切替部を用いるのではなく、２つのＣＰＵ間が同期信号線で接続された構成とし、この同期信号線を介して２つのＣＰＵ間で入力信号の照合チェック等を行ってから入力信号をデータ編集して通信回路に出力することが開示されている。
【０００５】
特許文献１の発明では、二重化の入力信号をラッチして、同一入力を二重化したＣＰＵの両系が得られるようにしている。
注）フォールトトレランス：放置しておけば故障に至るようなフォールトや誤りが存在しても、要求機能の遂行を可能にするアイテムの属性
フェールセーフ：アイテムが故障したとき、あらかじめ定められた一つの安全な状態をとるような設計上の性質
出典：JIS Z 8115 ディペンダビリティ（信頼性）用語
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１７８７３０号公報
【非特許文献】
【０００７】
【非特許文献１】南谷崇著「フォールトトレラントコンピュータ」オーム社１９９１年
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献１は、安全性よりも可用性を中心に記載されている。安全性としては不一致の検出による故障検知とシャットダウンなどの安全出力をするフォールトコントロールが重要である。
【０００９】
また、特許文献１は入力を一致化する方式が提案されているが、入力から出力までのレ
スポンス時間については触れられていない。
ここで、上記安全性に関しては、上記二重化されたモジュール／ＣＰＵの一方に故障があるか否かに係わらず、二重化されたモジュール／ＣＰＵから外部（制御対象機器等）への出力によって人的危害が発生しないことが重要である。
【００１０】
例えば、二重化されたモジュール／ＣＰＵからの出力が、例えば制御対象機器等を停止させる信号等（安全側出力と呼ぶ）である場合、入力から出力までのレスポンス時間が重要となる。当然、レスポンスタイムが短いことが望まれる。例えば作業員が動作中の制御対象機器に近づき過ぎたことを検知した場合の安全側出力のレスポンスタイムは、短ければ短いほど、作業員に危害が生じる可能性を少なくできる。
【００１１】
また、レスポンスタイムは安全距離に関係する。
例えば「ISO13855機械の安全性 - 人体各部の接近速度に対応した保護機器の位置決め」では光カーテンとプレス機間の安全距離Ｓは
Ｓ＝Ｋ×Ｔ＋Ｃ
で計算される。（ここで、Ｋ；侵入速度、Ｔ；検出後の機会全体の停止時間＝光カーテンの応答速度＋機械停止制御時間、  Ｃ；最小検出体から算出される追加距離）
従って、この場合、安全フォールトトレラント装置のレスポンス時間短縮は、安全距離の短縮に貢献する。
【００１２】
ここで、上記特許文献１のように同期信号線を介して２つのＣＰＵ間で入力信号の照合チェック等を行ってから出力を行う場合、この照合チェック処理がネックになってレスポンス時間を悪化させる。レスポンス時間を悪化させる要因としては、両系の照合処理に掛かる時間がＣＰＵのダイバーシティにより処理速度の遅い方に依存する為である。また同期信号線におけるＣＰＵ間の伝送速度が低い場合も、これがレスポンス時間を悪化させる要因となる。
【００１３】
ＣＰＵ間の伝送は、共通メモリを使用すれば高速化が可能であるが、共通原因故障率が増大する。また伝送の高速化を含めコストが増加するなどの問題も発生する。
また、特許文献１では、入力の照合のみを行っているが、特に、単に入力信号をデータ編集する処理を行うだけでなく、入力に応じたアプリケーション処理を実行する場合には、２つのＣＰＵで同時に同一の入力を得たとしても出力が同一となる保証はなく、出力に関しても照合を行うことが望ましい。しかしこの場合、入力に関して照合を行い、アプリケーション処理後に出力に関する照合を行う為、２回の照合処理を行うことになり、レスポンス時間をより悪化させることになる。
【００１４】
この様に、二重化されたモジュール／ＣＰＵへの入力が、安全側出力である場合には、入力から出力までのレスポンス時間を短縮することが重要になる。
その一方で、二重化されたモジュール／ＣＰＵからの出力が、例えば制御対象機器等を運転開始（例えばプレス動作開始等）させる等の信号（危険側出力と呼ぶ）である場合、特にこの危険側出力がＣＰＵの誤動作（例えばどちらか一方のＣＰＵの故障等が原因であるが、これに限らない）の結果として出力された場合には、人的危害が発生する可能性がある。例えば、作業員が運転開始スイッチを操作していないのに機器が動作開始すれば、非常に危険である。この点からも出力に関する照合も行うことが望ましいが、上記の通り、レスポンス時間をより悪化させることになる。
【００１５】
また、上記図２０に示す非特許文献１の構成の場合、切換部１０２により外部に接続されているモジュールからの出力は、比較器１０１に入力されると同時に切換部１０２を介して外部へ出力されるので、このモジュールが故障等した為に誤って上記危険側出力をした場合、比較器１０１によって不一致を検出して切換部１０２を切り替えても、既に手遅
れとなる。
【００１６】
本発明の課題は、二重化／比較方式によるフォールトトレラント装置において、安全性を確保しつつ、コスト高となることなく、入力から出力までのレスポンスタイムを短縮することができるフォールトトレラント装置、その制御モジュール、プログラム等を提供することである。
【課題を解決するための手段】
【００１７】
本発明のフォールトトレラント装置は、略同一の構成の複数の制御モジュールより成り、該複数の制御モジュールに同一の入力情報が入力され、該複数の制御モジュールが該入力情報に応じた同一のアプリケーション処理を行い、該複数の制御モジュールが相互にデータ送受信を行って照合処理を行い、該複数の制御モジュールが同一の出力信号線に出力を行うフォールトトレラント装置であって、前記各制御モジュールは、予め各種出力情報毎に、それが安全側出力であるか危険側出力であるかを登録した第１の記憶手段と、各種の前記アプリケーション処理を実行可能であり、任意の前記入力情報が入力される毎に、該入力情報に応じたアプリケーション処理を実行するアプリケーション処理実行手段と、該アプリケーション処理の結果としての出力情報が、安全側出力であるか危険側出力であるかを前記第１の記憶手段を参照して判定する安全／危険判定手段と、該安全／危険判定手段により前記出力情報が安全側出力であると判定した場合、該出力情報を前記出力信号線に出力し、その後、前記照合処理を実行し、前記安全／危険判定手段により前記出力情報が危険側出力であると判定した場合には、前記照合処理を実行し、照合ＯＫであれば前記出力情報を前記出力信号線に出力する出力制御手段とを有する。
【００１８】
上記構成のフォールトトレラント装置では、安全側出力を行う場合には、照合処理を行う前に外部（制御対象機器等）への出力を行う。安全側出力はフェールセーフを実現する出力であり、例えばモータ停止、プレス停止等であり、よって誤って出力されても（照合ＮＧとなる場合でも）人的被害発生等の問題が生じる可能性は極めて低い。そして、照合処理の前に出力を行うので、時間が掛かる処理である照合処理の処理時間分、早く出力することができ、入力から出力までのレスポンスタイムを短縮できる。また、この場合、照合処理における２つの制御モジュール間の伝送路が遅くても、出力タイミングは影響を受けないので、伝送路を安価な構成で実現できる。また、危険側出力の場合は、安全性を優先して、照合処理を行ったうえで出力を行うので、安全性を確保できる。
【００１９】
また、上記構成のフォールトトレラント装置において、安全側出力を行う場合には、安全性を強化する為に、出力を行う前にアプリケーション処理に関する検証処理を行うようにしてもよい。
【００２０】
すなわち、上記構成のフォールトトレラント装置において、例えば、予め前記各種アプリケーション処理毎に対応付けて、そのアプリケーション処理が正常に実行されたか否かを判定する為の各種条件である検証条件を記憶する第２の記憶手段を更に有し、前記出力制御手段は、前記出力情報が安全側出力であると判定された場合、前記第２の記憶手段を参照して、該出力情報に係わる前記アプリケーション処理が正常に実行されているか否かを検証し、検証ＯＫである場合に前記出力情報を前記出力信号線に出力し、その後、前記照合処理を実行するようにしてもよい。
【００２１】
検証処理によってアプリケーション処理のフォールトの検知を行うことで、照合処理を行う前に外部出力しても人的危険等が発生しないようにすることを強化することができる。
【００２２】
また、例えば、前記出力制御手段は、前記出力情報が安全側出力であると判定された場
合における前記照合処理は、前記入力情報と出力情報とをまとめて行う。
これによって、入力の際に入力情報の照合を行い、出力の際に出力情報の照合を行うような、入力情報の照合と出力情報の照合を別々に行う場合に比べて、照合処理に関する処理時間を短縮でき、また処理負荷を軽減できる。
【００２３】
また、例えば、前記安全／危険判定手段は、前記アプリケーション処理の結果としての出力情報が複数ある場合、該各出力情報毎に前記第１の記憶手段を参照してその出力情報が安全側出力か危険側出力かを求め、全ての出力情報が安全側出力である場合に安全側出力であると判定する。
【００２４】
出力情報が複数ある場合、そのうちの１つでも危険側出力であった場合には、安全性を優先して、照合処理を行ったうえで出力を行うことで、人的危険等が発生しないようにする。
【発明の効果】
【００２５】
本発明のフォールトトレラント装置、その制御モジュール、プログラム等によれば、二重化／比較方式によるフォールトトレラント装置において、安全性を確保しつつ、コスト高となることなく、入力から出力までのレスポンスタイムを短縮することができる。これは、複数種類の出力が行われる場合でも対応可能である。
【図面の簡単な説明】
【００２６】
【図１】実施例１の二重化装置の構成・機能ブロック図である。
【図２】（ａ）、(ｂ)は実施例１における安全側出力タイムチャート、危険側出力タイムチャートである。
【図３】実施例１の安全管理テーブルのデータ構成例である。
【図４】判定テーブルのデータ構成例である。
【図５】検証テーブルのデータ構成例である。
【図６】実施例１の入力処理部の処理フローチャート図である。
【図７】判定処理部の処理フローチャート図である。
【図８】実施例１のアプリケーション処理部の処理フローチャート図である。
【図９】検証処理部の処理フローチャート図である。
【図１０】実施例１の照合処理部の処理フローチャート図である。
【図１１】診断処理部の処理フローチャート図である。
【図１２】実施例２の二重化装置の構成・機能ブロック図である。
【図１３】（ａ）、(ｂ)は実施例２における安全側出力タイムチャート、危険側出力タイムチャートである。
【図１４】実施例２の安全管理テーブルのデータ構成例である。
【図１５】実施例２の入力処理部の処理フローチャート図である。
【図１６】実施例２のアプリケーション処理部の処理フローチャート図である。
【図１７】入出力バッファのデータ構成例である。
【図１８】出力同定処理部の処理フローチャート図である。
【図１９】実施例２の照合処理部の処理フローチャート図である。
【図２０】従来の二重化装置の概略構成例である。
【発明を実施するための形態】
【００２７】
以下、図面を参照して本発明の実施の形態について説明する。
本手法として、実施例１と実施例２を示す。まず、実施例１について図１〜図１１を参照して説明する。
【００２８】
図１は、実施例１の二重化装置（フォールトトレラント装置）の構成・機能ブロック図である。
図１に限らず後述する図１２に示す実施例２においても同様であるが、本例の二重化装置（フォールトトレラント装置）は、２つのＣＰＵモジュール１Ａ，１Ｂから成り、「二重化／比較方式」の構成をとる。すなわち、２つのＣＰＵモジュール１Ａ，１Ｂには、同一のデータが入力され、各々で入力データに応じた所定の処理（両モジュールで同一の処理）を行い、基本的には両モジュール１間で入力と処理結果（出力）に関する比較照合処理を行ったうえで、照合ＯＫであれば処理結果（出力）を外部（制御対象機器等）へ出力する。但し、本例の二重化装置では、照合処理を行う前に出力を行う場合もある。すなわち、後述する「安全側出力」の場合は、照合処理を行う前に出力を行い、その後、照合処理を実行する。後述する「危険側出力」の場合は、照合処理を行ってＯＫであれば出力（入力に応じた出力）を行う（照合ＮＧの場合、本例では緊急停止出力を行うが、これは入力に応じた出力とは見做さない）。
【００２９】
尚、「二重化／比較方式」とは、必ずしも２つのモジュールから成るものとは限らず、３つ以上のモジュールから成るものであってもよく、３つ以上の場合でも“二重化”と言うものとする。
【００３０】
また、本例の二重化装置（フォールトトレラント装置）のＣＰＵモジュールは、例えばプログラマブルコントローラ等の制御モジュールに相当するものであり（制御モジュールが「二重化／比較方式」の構成をとっている）、その出力先としては例えばランプ、表示部等の物理的に動作しない機器や、モータ、プレス機等の物理的に動作する機器である。ここでは、特に、物理的に動作しない機器に対する出力を「非安全関連出力」と呼び、物理的に動作する機器に対する出力を「安全関連出力」と呼ぶものとする。この「安全関連出力」は更に上記「安全側出力」と「危険側出力」とに分類される。
【００３１】
尚、出力を「安全側出力」と「危険側出力」とに分類するのは、例えば人間が判断するものである。一例としては、図３に示すように分類するが、この例に限るものではない。基本的な考え方としては、「安全側出力」とはフェールセーフを実現するものである。“フェールセーフ”とは、ここでは、「失敗しても安全であるということ」を意味するものとする。つまり、「安全側出力」とは、何らかの異常等によりＣＰＵモジュール１から誤
って出力されてしまっても、安全である（特に人間に危害が発生しない）ような出力を意味するものである。
【００３２】
例えば、プレス機の停止指令の出力等は、フェールセーフを実現する安全側出力と考えられる。つまり、誤って停止信号が出力されたとしても、それによってプレス機が停止しても人的危害は発生しない。一方、プレス機の動作開始指令などの出力は、それによってプレス機が動き出すことで近くに居る人間に危害が加わる可能性があるので、「危険側出力」に分類すべきものとなる。
【００３３】
この様に、「安全側出力」、「危険側出力」の分類は、予め上記基本的考えに従って人間が判断して例えば図３のように登録しておく。
ＣＰＵモジュール１Ａと１Ｂの間は、特に図示しないが照合や相互診断を行うため相互伝送が可能な構成をとる。相互伝送が可能な構成（通信線／通信方式等；以下、相互伝送路というものとする）は、例えばシリアル通信など互いに他ＣＰＵの故障の影響を受けず且つ安価に実現できる構成を採用する。従来ではこの相互伝送路を介したＣＰＵモジュール１Ａ−１Ｂ間相互の照合処理に時間が掛かる為、入力から出力までのレスポンス時間が悪化しており、またこの問題を解消する為に伝送路に共通メモリを採用した場合、共通原因故障率が増大し且つコスト高となっていた。これに対して本手法では、シリアル通信等の安価に実現できる構成であってもレスポンス時間を短縮でき、且つ上記共通原因故障率の増大、コスト高等の問題も生じない。
【００３４】
外部（制御対象機器等）への出力は、ＣＰＵモジュール１Ａ，１Ｂそれぞれから出力され、ハードウェアで例えば１本の出力信号線で出力される。よって、場合によっては同一信号がＣＰＵモジュール１ＡとＣＰＵモジュール１Ｂからそれぞれ出力される場合があるが、これは特に問題にならない（その場合は早い方が優先となる）。
【００３５】
本例の二重化装置は、例えばプログラマブルコントローラシステム（制御システム）のコントローラ本体に適用される。この場合、ＣＰＵモジュール１Ａ，１Ｂからの出力先は、任意の制御対象機器等（不図示）である。また、不図示の外部からＣＰＵモジュール１Ａ，１Ｂに入力される信号／データは、この制御対象機器に係わる何らかの信号／データである。例えば一例としては制御対象機器がモータである場合、出力はこのモータの起動、停止、緊急停止、回転数制御信号等となり、入力はこのモータの回転数を検出するセンサからの検出信号（パルスカウント値）、危険領域への人間侵入を検知するセンサからの検知信号、起動／停止／緊急停止等の操作ボタンが操作された場合の信号等となる。これら各種信号に対応する信号線がある（よって、後述する入力処理部１５の入力側には複数の信号線が接続されている）。これら複数の信号線からの信号は、アナログの信号もあればディジタルの信号もある。
【００３６】
ＣＰＵモジュール１Ａ，１Ｂは、構成・機能は同一であってよい。よって、図示の通り、各構成・機能には同一符号を付してある。これより、以下、特にＣＰＵモジュール１Ａと１Ｂとを区別せずに、ＣＰＵモジュール１と総称して説明するものとする。但し、ダイバーシティを考慮して、ＣＰＵの機種などのハードウェアおよびソフトウェアは別である場合もある（例えば特許文献１に記載の通り）。
【００３７】
また、以下の説明における自系、他系とは、例えばＣＰＵモジュール１Ａにとっては自己（ＣＰＵモジュール１Ａ）が自系であり、ＣＰＵモジュール１Ｂが他系となり、同様にＣＰＵモジュール１Ｂにとっては自己（ＣＰＵモジュール１Ｂ）が自系であり、ＣＰＵモジュール１Ａが他系となる。
【００３８】
ＣＰＵモジュール１は、判定テーブル１１、安全管理テーブル１２、検証テーブル１３
の各種登録データテーブル（予め設定されたデータを記憶している）と、診断処理部１４、入力処理部１５、照合処理部１６ａ、１６ｂ、１６ｃ、判定処理部１７ａ、１７ｂ、１７ｃ、１７ｄ、アプリケーション処理部１８、検証処理部１９の各種処理機能部を有する。
【００３９】
ここで、各処理機能部は、それぞれ何らかの入力に応じて（例えば前段の処理機能部から渡される）何らかの出力を行うものであるが、本説明では特に、入力処理部１５から出力される情報（入力種別、そのデータ値等）を“入力情報”と呼び、アプリケーション処理部１８から出力される情報すなわち上記入力情報に応じた所定のアプリケーション処理の結果としての情報（出力種別、そのデータ値等）を“出力情報”と呼ぶものとする。尚、検証処理または照合処理による緊急停止出力も“出力情報”と見做してもよい。
【００４０】
尚、“入力情報”は、入力処理部１５が外部からの入力信号（その変化等）に応じて生成する情報である。例えば一例としては上記パルスカウント値を入力する信号線に関しては、入力処理部１５はこのパルスカウント値に基づいて速度値を演算して、この速度値を入力種別（速度入力）と共に（これらが“入力情報”となる）後段の処理機能部に渡すことになる。あるいは例えば始動信号を入力する信号線に関しては、入力処理部１５は、この信号線の信号がＯＦＦ→ＯＮに変化したことを（信号の立ち上がりを）検知すると、入力種別“始動”と判定して、この入力種別（始動）を上記“入力情報”として後段の処理機能部に渡すことになる。尚、本例の入力処理部１５は、更に安全管理テーブル１２を参照して、後段の処理機能部を選択する処理も行っている（詳しくは後述する）。
【００４１】
但し、これは既存の機能処理部である入力処理部１５の処理例を具体的に示しているだけであり、単純に、外部からの入力（または入力信号変化）を“入力情報”と見做してもよい。
【００４２】
尚、判定処理部１７ａ、１７ｂ、１７ｃ、１７ｄは、本例では何れも同一のアプリケーションを起動して実行される処理機能部であり、処理フロー自体は同一である（後述する図７のフローチャート図の処理）が、処理内容が異なる場合があることから（更に説明し易くする為に）、同一符号にはせずに区別して示している。大別して、判定処理部１７ａは“入力情報”に関する判定を行い、判定処理部１７ｂ、１７ｃ、１７ｄは“出力情報”に関する判定を行うものである（判定処理部１７ｄは特に緊急停止出力に関する判定を行う）。但し、上記の通り処理フロー自体は同一であることから、区別せずに判定処理部１７と呼ぶ場合もある。判定処理部１７は起動されると（他の処理部から呼び出されると）図７の処理を実行することになる。
【００４３】
これは、照合処理部１６ａ、１６ｂ、１６ｃについても同様であり、照合処理部１６ａ、１６ｂ、１６ｃは、本例では何れも同一のアプリケーションを起動して実行される処理機能部であり、処理フロー自体は同一である（後述する図１０のフローチャート図の処理）が、処理内容が異なる場合があることから（更に説明し易くする為に）、同一符号にはせずに区別して示している。違いとしては、照合処理部１６ａは“入力情報”のみに関する照合を行い、照合処理部１６ｂは“出力情報”のみに関する照合を行い、照合処理部１６ｃは“入力情報”と“出力情報”の両方に関する照合を行うことである。但し、上記の通り処理フロー自体は同一であることから、区別せずに照合処理部１６と呼ぶ場合もある。照合処理部１６は起動されると（他の処理部から呼び出されると）図１０の処理を実行することになる。
【００４４】
尚、別の言い方をすれば、図１に示す構成・機能ブロック図は、機能ブロックを示すだけでなく処理の流れ（フロー）も示している為、上記の通り、判定処理部１７と照合処理部１６を複数種類に区別して示しているが、機能ブロックのみを示すならば、ＣＰＵモジ
ュール１が有する各種処理機能部は、診断処理部１４、入力処理部１５、照合処理部１６、判定処理部１７、アプリケーション処理部１８、及び検証処理部１９ということになる。
【００４５】
診断処理部１４は後述する図１１の処理を実行し、入力処理部１５は後述する図６の処理を実行し、照合処理部１６は後述する図１０の処理を実行し、判定処理部１７は後述する図７の処理を実行し、アプリケーション処理部１８は後述する図８の処理を実行し、検証処理部１９は後述する図９の処理を実行する。
【００４６】
ＣＰＵモジュール１は、特に図示しないが、例えばＣＰＵ（マイクロプロセッサ）、メモリ（フラッシュメモリ等）等の記憶装置、入力／出力インタフェース等を有しており、記憶装置には上記各種テーブル１１，１２，１３が格納されている。また、記憶装置には、予め所定のアプリケーションプログラムが記憶されており、ＣＰＵがこのアプリケーションプログラムを読出し実行することにより、上記各種処理機能部１４〜２０の処理機能が実現される。尚、入力処理部１５は例えば一例としては常時起動されており、任意の入力がある毎に（あるいは入力信号変化がある毎に）後述する図６に示す所定の処理を実行し、最後に後段の処理機能部を起動する。他の処理機能部も同様に、所定の処理を実行後、最後に後段の処理機能部を起動する。
【００４７】
図１には、上記のように各種処理機能部が順次起動・実行される処理の流れを、図示の太線（または太線矢印）で示しており、また各種処理機能部がその処理実行の際に参照するテーブルを図示の細線点線矢印で示している。
【００４８】
図１において上記太線（または太線矢印）の処理の流れが示すように、処理が分岐する場合がある。これは、上記“出力情報”が、安全側であるか危険側であるかによって２通りに分かれる。
【００４９】
“出力情報”が危険側である場合には、入力処理部１５→照合処理部１６ａ→判定処理部１７ａ→アプリケーション処理部１８→照合処理部１６ｂ→判定処理部１７ｃというフローで処理実行される。つまり、図２（ｂ）の危険側出力タイムチャートに示す通りのフローとなる。
【００５０】
図２（ｂ）に示すように、“出力情報”が危険側である場合には、まず“入力情報”に関してＣＰＵモジュール１Ａ−１Ｂ間で相互に照合処理を行い、判定処理を経て、“入力情報”に応じたアプリケーション処理を実行する。そして、この処理結果（“出力情報”）に関してＣＰＵモジュール１Ａ−１Ｂ間で相互に照合処理を行い、判定処理を経て、外部への（例えば制御対象機器に対する）出力を行う。もし、照合処理や判定処理の結果がＮＧであった場合には、出力を行わないか、あるいは緊急停止等の安全確保の為の出力を行う。
【００５１】
一方、“出力情報”が危険側である場合には、入力処理部１５→判定処理部１７ａ→アプリケーション処理部１８→検証処理部１９→判定処理部１７ｂ→照合処理部１６ｃ→判定処理部１７ｄというフローで処理実行される。つまり、図２（ａ）の安全側出力タイムチャートに示す通りのフローとなる。
【００５２】
図２（ａ）に示すように、“出力情報”が安全側である場合には、“入力情報”に関する照合処理は行わずに入力判定処理を経て、“入力情報”に応じたアプリケーション処理を実行する。そして、この処理結果（“出力情報”）に関して検証処理を実行し、検証ＯＫであれば判定処理を経て外部への（例えば制御対象機器に対する）出力を行う。つまり、照合処理を行うことなく（行う前に）出力を行う。そして、出力後に、“入力情報”と
“出力情報”についてまとめて、ＣＰＵモジュール１Ａ−１Ｂ間で相互に照合処理を実行する。もし、照合処理の結果がＮＧであった場合には、緊急停止等の安全確保の為の出力を行う。その際、判定処理部１７を起動して、緊急停止出力に関する判定処理を実行させ（判定処理部１７ｄの処理を実行させる）、判定ＯＫである場合に、外部への（例えば制御対象機器に対する）緊急停止出力が行われる。
【００５３】
これによって、図２（ａ）と図２（ｂ）に示すように、“出力情報”を外部へ出力するタイミングは、“出力情報”が安全側である場合の方が危険側の場合よりも早くなり、その分、レスポンスタイムを短縮することができる。つまり、時間が掛かる照合処理を行わないで（行う前に）“出力情報”を外部へ出力することで、照合処理に掛かる時間分、レスポンスタイムを短縮することができる。
【００５４】
更に、“出力情報”が安全側である場合には、検証処理部１９の処理を実行することで、（詳しくは後述するように）アプリケーション処理のフォールトの検知及びフォールトコントロールすることで安全性を強化することができ、これによって、照合処理を行わずに出力を行っても危険が発生しないようにできる。
【００５５】
また、上記の通り本手法では“出力情報”が安全側か危険側かによって処理フローを分岐させるが、アプリケーション処理部１８の処理実行前は未だ“出力情報”が安全側か危険側かは分からない。つまり、照合処理部１６ａの処理をスキップするか否かの分岐判定の際には、未だ“出力情報”が安全側か危険側かは分からない。しかしながら、“入力情報”の種別に応じて“出力情報”の種別が一意に決まる場合もある。これは、後述する図３に示す例の場合である。よって、図３の安全管理テーブルを参照することで、“入力情報”の種別に応じた“出力情報”の種別の出力区分（安全側か危険側か）が分かるので、未だ“出力情報”が生成されていない段階においても、照合処理部１６ａの処理をスキップするか否かの分岐判定を行うことができる。逆に言えば、本説明における実施例１は、このような前提に元で実現できる。
【００５６】
但し、実施例１は、本説明の例に限らない。例えば、後述する実施例２と同様に、“出力情報”が危険側出力の場合でも照合処理は“入力情報”と“出力情報”をまとめて実行するようにしてもよい（これを実施例１の変形例と呼ぶ）。この場合、図１において照合処理部１６ａは削除され、よって照合処理部１６ａの処理をスキップするか否かの分岐判定を行う必要はなくなる。また、この場合、照合処理部１６ｂは、照合処理部１６ｃと同様に、“入力情報”と“出力情報”の両方の照合処理をまとめて実行する。この場合には、“入力情報”の種別に応じて“出力情報”の種別が一意に決まらない場合でも問題なく適用できる。
【００５７】
何れにしても、本手法の実施の形態は様々であってよく、ここで説明する例に限らない。本手法の特徴は、“出力情報”が危険側である場合には照合処理を行ってから外部へ出力するが、“出力情報”が安全側である場合には照合処理を行う前に外部へ出力することであり、これを実現できる実施形態であれば何でもよい。この特徴によって、入力から出力までのレスポンスタイム（ＣＰＵモジュール１に入力（または入力信号変化）があってからＣＰＵモジュール１から外部に“出力情報”が出力されるまでに掛かる時間）を短縮し、以って安全距離の短縮に貢献することである。
【００５８】
尚、上記の通り、“出力情報”が安全側である場合には、もしこの“出力情報”が間違ったものであったとしても安全である（特に人間に危害が発生しない）。よって、照合処理を行う前に外部へ出力しても基本的には問題はない。但し、より安全性を強化する為に、検証処理部１９を新たに設け、“出力情報”が安全側である場合には検証処理を行ってから外部へ出力するようにしてもよい。照合処理は２つのＣＰＵモジュール１Ａ−１Ｂ間
で相互に通信を行う為、時間が掛かるが、検証処理はそのＣＰＵモジュール１単独で処理できるので、照合処理に比べて短時間で処理完了できる。よって、検証処理を行う場合でも従来に比べて（危険側の場合に比べて）短時間で出力を行える。
【００５９】
以下、上記ＣＰＵモジュール１の各種登録データ、各種処理機能部について、まず概略的に説明する。
まず、各種登録データについて概略的に説明する。
【００６０】
安全管理テーブル１２は、各種“出力情報”の出力種別毎に、その“出力情報”が安全側か危険側かを定義しており、その具体例は図３に示し、後に説明する。安全管理テーブル１２の内容は、上記の通り、予め人間が判断して登録する。尚、上記の通り、本例では入力種別に応じて出力種別が一意に決まる場合を前提としており、図３に示すように、各出力種別に応じた入力種別も定義されている。
【００６１】
安全管理テーブル１２は、本例では、入力処理部１５、照合処理部１６、判定処理部１７、アプリケーション処理部１８がそれぞれ参照する。但し、この例に限らない。
判定テーブル１１は、入力または出力の是非（入力許可または出力許可）を判定する為の入力条件または出力条件が定義されており、その具体例は図４に示し、後に説明する。判定テーブル１１の内容は、予め人間が判断して登録する。判定テーブル１１は判定処理部１７が参照する。
【００６２】
検証テーブル１３は、アプリケーション処理部１８によるアプリケーション処理（“入力情報”に応じた“出力情報”の生成処理）のフォールト検知の為の各種検証値が定義されており、その具体例は図５に示し、後に説明する。図５に示す例では、入力パラメータ、出力パラメータ、処理制限時間の３つの検証項目毎に検証のための検証値が定義されているが、この例に限るものではない。
【００６３】
次に、各種処理機能部について概略的に説明する。
ここで、まず、診断処理部１４だけは他の処理機能部とは異なり、外部からの任意の入力（入力変化）があった場合に動作するのではなく、例えば定期的に起動されて動作する。診断処理部１４は、ＣＰＵモジュール１の自己（自系）診断処理、他系ＣＰＵモジュール１との相互監視処理を行う。診断の内容はＩＥＣ６１５０８で規定された内容に従ったものとなる。つまり、診断処理部１４による診断処理自体は、既存の一般的な処理であってよい。
【００６４】
尚、図１には示していないが、ＣＰＵモジュール１の記憶装置（メモリ）には、上記各種テーブル以外に、不図示のシステムステータス情報も記憶されている。このシステムステータス情報には、例えば診断処理部１４による診断結果等が含まれる。このシステムステータス情報は、例えば、自系ステータス（自系正常／自系異常）、他系ステータス（他系正常／他系異常）、相互伝送ステータス（相互伝送正常／相互伝送異常）、照合処理結果（照合ＯＫ／照合ＮＧ）、検証処理結果（検証ＯＫ／検証ＮＧ）等である。このうち、照合処理結果と検証処理結果以外が、診断処理部１４による診断結果である。
【００６５】
診断処理部１４の具体的処理例を図１１に示し、後に説明するが、上記の通りこの処理自体は既存の一般的な処理と略同様と考えてよい。
尚、判定処理部１７による判定処理の際には、上記システムステータス情報も参照する。
【００６６】
入力処理部１５は、外部から任意の入力信号（例えばセンサ検出信号、あるいは起動／停止信号等の何らかの指示信号等）がある毎に、上記の通りこの入力信号（または信号変
化）に応じた“入力情報”を生成する。そして、安全管理テーブル１２を参照して、この“入力情報”（その入力種別）に応じた“出力情報”（その出力種別）が安全側か危険側かを判定して、この判定結果に基づいて後続処理を起動する。入力処理部１５は、定期的に起動して入力の状態変化を検知した場合に図６の処理を開始する方式と、割り込みのデマンドを受けて起動して図６の処理を開始する方式がある。入力処理部１５の具体的処理例を図６に示し、後に説明する。
【００６７】
入力処理部１５によって、判定処理部１７ａ、照合処理部１６ａの何れか一方が起動されて処理実行される。照合処理部１６ａに関しては、後に説明する。
判定処理部１７は、入力または出力の是非を判定する。判定処理部１７ａは入力の是非（入力の許可／不許可）を判定し、判定処理部１７ｂ〜１７ｄは出力の是非（出力の許可／不許可）を判定する。判定処理部１７の具体的処理例を図７に示し、後に説明する。
【００６８】
また、アプリケーション処理部１８は、上記“入力情報”（その入力種別）に応じた所定のアプリケーション処理を実行する。この所定のアプリケーション処理自体は、既存の処理であり、特に説明しないが、一例としては、例えば緊急停止デマンド、非常停止デマンド、始動、モード切り替え等に関する処理がある。何れにしても、アプリケーション処理部１８は、上記所定のアプリケーション処理実行により外部からの入力に応じた“出力情報”を生成することになる。
【００６９】
そして、アプリケーション処理部１８は、この“出力情報”生成後に、最後に、この“出力情報”が安全側か危険側かによって、検証処理部１９、照合処理部１６ｂの何れか一方を起動する。
【００７０】
アプリケーション処理部１８の具体的処理例を図８に示し、後に説明する。
検証処理部１９は、上記アプリケーション処理部１８による所定処理の結果（“出力情報”が、安全側出力である場合にのみ動作する機能部であり、検証テーブル１３を参照して、この所定処理の妥当性を検証する処理を行う。検証処理部１９の具体的処理例を図９に示し、後に説明する。
【００７１】
照合処理部１６は、上記相互伝送路を介して他系のＣＰＵモジュール１と通信を行って、“入力情報”または“出力情報”の照合、あるいは“入力情報”と“出力情報”の両方の照合を行う（一致するか否かをチェックする）。つまり、ＣＰＵモジュール１Ａ−１Ｂ間で相互に“入力情報”、“出力情報”の照合を行う。これは、本例では、危険側出力の場合は“入力情報”、“出力情報”の照合を別々に行い、安全側出力の場合は“入力情報”と“出力情報”の照合をまとめて行う。尚、図示のように１６ａ、１６ｂ、１６ｃと区別した場合には、照合処理部１６ａは入力のみの照合を行い、照合処理部１６ｂは出力のみの照合を行い、照合処理部１６ｃは入力と出力の照合をまとめて行うという違いはあるものの、照合処理の内容自体に殆ど違いはないと考えてよい。
【００７２】
照合処理部１６の具体的処理例を図１０に示し、後に説明する。
上記構成により、アプリケーション処理部１８による“入力情報”に応じたアプリケーション処理結果としての“出力情報”が、安全側である場合には、照合処理は行う前に“出力情報”を外部へ（例えば制御対象機器への）出力する。尚、その前に、検証処理を行うことが望ましい。そして、その後に照合処理を行う。これは上記の通り“入力情報”の照合と“出力情報”の照合をまとめて行う。照合処理は時間が掛かるので、照合処理を後回しにして先に出力を行えるようにすることで、入力から出力までのレスポンスタイムを大幅に短縮することが可能となる。また、“入力情報”の照合と“出力情報”の照合を別々に行う場合に比べて、これらの照合をまとめて行うことでもレスポンスタイム短縮効果が得られる。
【００７３】
尚、アプリケーション処理実行前は（未だ“出力情報”が得られていない段階では）、“入力情報”に基づいて、“出力情報”の出力区分（安全側か危険側か）を仮に判定する。アプリケーション処理部１８による処理が正常に実行された場合には、“出力情報”の出力区分は仮の判定通りとなる。
【００７４】
一方、“出力情報”が危険側である場合には、“入力情報”に関する照合処理を実行し、照合ＯＫであればアプリケーション処理部１８の処理を実行し、続いて、アプリケーション処理部１８からの“出力情報”に関する照合処理を実行し、照合ＯＫであれば外部へ“出力情報”を出力する（尚、入力情報／出力情報に対して随時、判定処理を行う）。この様に、照合処理を行ったうえで、ＯＫであれば外部への出力を行うので、入力から出力までのレスポンスタイムは、“出力情報”が安全側である場合に比べて長くなるが、出力が危険側である以上、安全性を優先した処理とする。これによって安全性を確保できる。
【００７５】
以下、上記ＣＰＵモジュール１の各種登録データ、各種処理機能部について、図３〜図１１を参照して詳細に説明する。
まず、図３〜図５を参照して、各種登録データについて詳細に説明する。
【００７６】
図３に、実施例１の安全管理テーブル１２のデータ構成例を示す。
図示の安全管理テーブル１２は、番号３１、出力種別３２、入力種別３３、出力区分３４の各データ項目より成る複数のレコードにより構成される。
【００７７】
番号３１は、各レコードを特定するための一意の通し番号である。
出力種別３２は、各“出力情報”の種別を示す。尚、図１では出力線は１本のみ示すが、各出力種別（出力情報）毎の複数の出力線があってよい（但し、１本の出力線に複数の出力種別の信号が出力される場合もある。例えば、出力種別として始動と停止があったとし、同一の信号線において、信号の立ち上がりは始動、立下りは停止を意味する場合もある）。
【００７８】
入力種別３３は、出力種別３２の“出力情報”を生成するデマンドとなる“入力情報”の種別を示す。
出力区分３４は、各出力種別３２の“出力情報”が安全側であるか危険側であるかを示す。
【００７９】
尚、“入力情報”は入力種別とデータ値（入力値）より成る（但し、データ値が無い場合もある；例えば起動／停止のデマンド等）。同様に、“出力情報”は出力種別とデータ値より成る（但し、データ値が無い場合もある；例えば起動／停止信号等）。
【００８０】
安全管理テーブル１２には、各出力種別３２毎に、その“出力情報”が安全側であるか危険側であるかが登録されている。また、各出力種別３２に対応する入力種別３３が登録されている。これによって、入力種別３３に対応する出力種別３２の出力区分３４（安全側or危険側）が分かる。つまり、未だ“出力情報”が得られてない段階で、“入力情報”に基づいて、その“入力情報”に応じた“出力情報”が安全側であるか危険側であるかを判断可能となっている。
【００８１】
尚、入力処理部１５は、外部からの入力信号の入力種別を認識できるようになっている。例えば、図１では入力線は１本のみ示すが、上記出力線の場合と同様、各入力種別毎の複数の入力線があってよく、入力処理部１５はどの入力線からの入力信号であったのかによって、入力種別を判別可能となっている。これは一例であるが、入力処理部１５が入力種別を認識できること自体は、既存技術であり、様々な方法があってよい。
【００８２】
図４に、判定テーブル１１のデータ構成例を示す。
図示の判定テーブル１１は、番号４１、入力／出力４２、出力区分４３、「入力条件または出力条件」４４の各データ項目より成る複数のレコードにより構成される。
【００８３】
番号４１は、各レコードを特定するための一意の通し番号である。
入力／出力４２には、入力、出力の何れかが格納される。これは、そのレコードにおける「入力条件または出力条件」４４が、“入力情報”の判定に使用する条件か、“出力情報”の判定に使用する条件かを示す。
【００８４】
出力区分４３は、入力／出力４２が出力の場合に、安全側、危険側のどちらかが格納される。
「入力条件または出力条件」４４は、入力情報の入力を許可する条件または出力情報の外部出力を許可する条件を示す。
【００８５】
図３に示す例の判定テーブル１１では、「入力条件または出力条件」４４は３つのグループに分けられる。すなわち、入力／出力４２が“入力”の場合のグループ（番号４１が１〜３の３つ）と、入力／出力４２が“出力”且つ出力区分４３が“安全側”のグループ（番号４１が４〜９の６つ）と、入力／出力４２が“出力”且つ出力区分４３が“危険側”のグループ（番号４１が１０〜１２の３つ）とに分けられる。
【００８６】
そして、判定処理部１７による判定処理の際には、そのときの状況（入力判定か出力判定か、出力判定の場合は更に“出力情報”が安全側か危険側か）に応じたグループの「入力条件または出力条件」４４に基づいて判定を行う。上記の例では、状況が何れの場合でも、判定に用いる「入力条件または出力条件」４４は複数あることになるが、複数の条件のうち１つでも該当する場合には、入力または出力を許可するものと判定する。
【００８７】
尚、「入力条件または出力条件」４４は、基本的には、自系が正常であることが最低限の条件となっている。但し、緊急停止出力に関しては例外的に、自系異常であっても出力を許可する。
【００８８】
図示の例の各「入力条件または出力条件」４４において、例えば番号４１＝‘３’の条件は、照合処理部１６ａを経由しない判定処理部１７ａの処理において適用される。例えば番号４１＝‘１’または‘２’の条件は、照合処理部１６ａを経由した判定処理部１７ａの処理において適用される。基本的には番号４１＝‘１’の条件のように、診断処理による診断結果が全て正常で且つ照合処理部１６ａで照合ＯＫになった場合には、入力を許可することになる。但し、他系ＣＰＵモジュール１が異常または相互伝送異常であっても、自系が正常であれば入力を許可する。
【００８９】
また、例えば、番号４１＝‘４’または‘５’または‘６’の条件は、検証処理部１９において検証ＯＫと判定されて後述するステップＳ４５で起動された判定処理部１７ｂの処理において適用される。この場合、自系が正常でありさえすれば、他系や相互伝送に異常があったとしても、判定ＯＫとなる（出力許可し外部へ出力される）。また、例えば、番号４１＝‘７’の条件は、検証ＮＧと判定された後述するステップＳ４７で起動された判定処理部１７ｂの処理において適用される。この場合、自系が正常でありさえすれば、他のステータスは関係なく判定ＯＫとなり、ステップＳ４７で出力される緊急停止出力が外部へ出力される。
【００９０】
番号４１＝‘９’〜‘１２’は照合処理部１６から起動された場合に適用される条件であり、上記検証処理部からの起動の場合と略同様であり、ここでは特に説明しない。尚、
番号４１＝‘８’は、自系異常の場合の緊急停止出力に関する条件であり、本手法には特に関係しないので特に説明しない。また、尚、図４には全ての条件を載せているわけではなく、他の条件もあってよい。
【００９１】
判定処理部１７は、出力に関しては、“出力情報”（ここでは緊急停止出力も含まれる）を外部に出力するか否かを判定するものであり、判定ＯＫである場合には“出力情報”を外部へ出力する。一方、入力に関しては、“入力情報”を内部に取り込むか否か（アプリケーション処理を実行するか否か）を判定するものであり、判定ＯＫである場合には、“入力情報”を内部に取り込み、アプリケーション処理を実行させる。
【００９２】
尚、上記“入力”とは判定処理部１７への入力が“入力情報”である場合を意味し、上記“出力”とは判定処理部１７への入力が“出力情報”である場合を意味する。尚、ここでは、“出力情報”には照合処理部１６や検証処理部１９等からの緊急停止出力も含まれる。
【００９３】
判定処理部１７を起動した処理機能部が、判定処理部１７へ渡す情報が“入力情報”であるか“出力情報”であるかを示す入力／出力識別情報も一緒に渡すので、これによって“入力”／“出力”を認識できる。
【００９４】
尚、「入力条件または出力条件」４４に示す具体例における「緊急停止出力」は緊急時の安全対策出力の一例であり、この例に限らず、適用するシステムによって該当する緊急時の安全対策出力を登録する。
【００９５】
図５に、検証テーブル１３のデータ構成例を示す。
図示の検証テーブル１３は、番号５１、アプリケーション処理名５２、制限時間５３、入力パラメータ５４、出力パラメータ５５の各データ項目より成る複数のレコードにより構成される。
【００９６】
番号５１は、各レコードを特定するための一意の通し番号である。
アプリケーション処理名５２には、アプリケーション処理部１８が実行する各種アプリケーション処理の名称等（名称に限らず、アプリケーション識別ＩＤ等であってもよい）が格納される。尚、図では番号５１＝‘１’におけるアプリケーション処理名５２（速度範囲チェック処理）のみ記載されているが、他は省略して示しているだけであり、基本的に、アプリケーション処理部１８が実行する各種アプリケーション処理の全ての名称等が、各レコードに登録されており、それぞれに対応する検証条件が登録されている。
【００９７】
そして、検証テーブル１３には、各アプリケーション処理名５２に対応付けて、検証の為の各種検証条件が登録されている。ここでは、一例として上記制限時間５３、入力パラメータ５４、出力パラメータ５５の３つの検証条件を示すが、この例に限るものではない。更に何らかの条件を追加してもよいし、この３つの条件とは異なる別の条件であってもよい。
【００９８】
制限時間５３には、アプリケーション処理部１８におけるアプリケーション処理名５２のアプリケーション動作時間に関する任意の制限時間が登録される。
入力パラメータ５４には、アプリケーション処理の入力パラメータを検証する条件が登録される。
【００９９】
出力パラメータ５５には、アプリケーション処理の出力パラメータを検証する条件が登録される。
そして、検証処理部１９における検証処理の際には、まずアプリケーション処理名５２
により該当するレコードを検索して、このレコードの制限時間５３、入力パラメータ５４、出力パラメータ５５の全ての検証条件を満たす場合に、検証ＯＫと判定する。
【０１００】
尚、アプリケーション処理部１８は、検証処理部１９を起動後、上記検証条件に対応する情報（本例では、処理実行時間、入力パラメータ値、出力パラメータ値）を、検証処理部１９に渡す。検証処理部１９は、これら渡された各種情報が対応する検証条件を満たすか否かを判定する。
【０１０１】
以下、図６〜図１１を参照して、各種処理機能部について詳細に説明する。
図６は、入力処理部１５の処理フローチャート図である。
図６の処理では、まず、外部からの任意の入力信号（信号変化等）があると、これに基づいて上記の通り“入力情報”を生成する（ステップＳ１１）。既に述べた通り、“入力情報”は、入力種別や入力値等からなる。
【０１０２】
次に、安全管理テーブル１２を読み込み（参照し）、上記“入力情報”の入力種別に対応する出力区分３４を取得する（“入力情報”に応じた“出力情報”が安全側か危険側かを判別する）（ステップＳ１２）。そして、この出力区分３４が安全側である場合には（ステップＳ１３，ＹＥＳ）判定処理部１７を起動し、危険側である場合には（ステップＳ１３，ＮＯ）照合処理部１６を起動する。
【０１０３】
つまり、既に述べた通り本例においては、“入力情報”の種別に応じて“出力情報”が安全側になるか危険側になるかを推測できることを前提としており、安全側である場合には安全側の処理手順で処理実行し（よって、この時点では照合処理は行わずに判定処理を行う）、危険側である場合には危険側の処理手順で処理実行する。
【０１０４】
換言すれば、“出力情報”が安全側である場合には出力安全側モードとしての処理手順で順次処理実行し、“出力情報”が危険側である場合には出力危険側モードとしての処理手順で順次処理実行する。本例では、これを各処理機能部が後段の処理機能部を選択・起動することで実現するが、この例に限らず、例えば全体を管理する処理機能部を設け、この処理機能部が出力安全側モードであるか出力危険側モードであるかに応じて、各処理機能部を順次起動する処理を行うようにしてもよい。順次起動する手順は、図２（ａ）、（ｂ）に示す通りである。
【０１０５】
図７は、判定処理部１７の処理フローチャート図である。
当該判定処理への入力、すなわち当該判定処理部１７を起動した処理機能部から渡される情報（パラメータ）は、“入力情報”または“出力情報”と、“入力情報”であるか“出力情報”であるかを示す識別情報（入力／出力識別情報というものとする）である。この入力／出力識別情報により、当該判定処理部１７へ渡されるデータが“入力情報”であるか“出力情報”であるかを認識できる。
【０１０６】
尚、入力処理部１５は、上記ステップＳ１４，Ｓ１５の何れかで起動した処理機能部に対して、“入力情報”と入力／出力識別情報を渡す処理も行っている。この場合、当然、入力／出力識別情報は入力を示す情報となっている。同様に、アプリケーション処理部１８も、上記所定処理で得た“出力情報”と入力／出力識別情報を、後段の（自己が起動した）処理機能部に渡す処理も行っている。
【０１０７】
照合処理部１６は、認証ＯＫである場合には、自己に渡された情報とその入力／出力識別情報を、（自己が起動した）判定処理部１７へ渡す。一方、認証ＮＧであれば、緊急停止出力を（自己が起動した）判定処理部１７へ渡す。これは検証処理部１９についても同様である。判定処理部１７は、自己に渡された情報に“出力情報”が含まれる場合、基本
的には、判定ＯＫであれば、この“出力情報”を外部へ出力させる。但し、検証処理部１９によって起動された場合には、更に、自己に渡された情報を（自己が起動した）照合処理部１６へ渡す。あるいは、照合処理部１６／検証処理部１９は、自己が緊急停止等を出力する場合には、これと入力／出力識別情報を後段の（自己が起動した）処理機能部に渡す処理を行っている。尚、“出力情報”には緊急停止出力も含まれる。
【０１０８】
但し、上記のように自己に渡された“入力情報”／“出力情報”を後段の処理機能部に渡すようにすることは、一例であり、この例に限らない。例えば、後述する実施例２の図１２のように入出力バッファを設けるようにしてもよい。この場合には、入力処理部１５は自己が生成した“入力情報”を入出力バッファに記憶すると共に後段の処理機能部に入力／出力識別情報（入力を示す）を渡し、アプリケーション処理部１８は自己が生成した“出力情報”を入出力バッファに記憶すると共に後段の処理機能部に入力／出力識別情報（出力を示す）を渡す。他の各処理機能部は、自己に渡された入力／出力識別情報に応じて入出力バッファから“入力情報”／“出力情報”を取得し、認証ＯＫ／判定ＯＫ／検証ＯＫであれば、この入力／出力識別情報を後段の処理機能部へ渡す（あるいは、入出力バッファから取得した“出力情報”を外部へ出力する）。
【０１０９】
図７の処理では、まず、判定テーブル１１を読み込む。更に上述した不図示のシステムステータス情報から現在のシステムの状態を読み込む。更に、入力が“出力情報”である場合には、更に、その出力種別を用いて安全管理テーブル１２を検索して、この出力種別に応じた出力区分３４（安全側か危険側か）を取得する（ステップＳ２１）。
【０１１０】
そして、判定テーブル１１を参照して、上記取得した情報、すなわち入力が“入力情報”か“出力情報”か、“出力情報”である場合には安全側か危険側かによって、該当する条件を抽出し、上記現在のシステムの状態がこの条件に合致するか否かを判定する（ステップＳ２２）。これは、まず、“入力情報”か、“出力情報”且つ安全側か、“出力情報”且つ危険側かによって、該当する判定条件を全て抽出する。これは、図４の例では上述した３つのグループの何れかのグループの判定条件を全て取得することになる。
【０１１１】
そして、上記システムステータス情報に基づいて、現在のシステムの状態がこの抽出した判定条件に合致するか否かを判定する。既に述べた通り、抽出した判定条件（「入力条件または出力条件４４）が複数ある場合には、そのうちの１つに合致すればよい。
【０１１２】
そして、判定条件に合致すると判定した場合には（ステップＳ２２，ＹＥＳ）、当該判定処理への入力（“入力情報”または“出力情報”）の入力または出力を許可する（ステップＳ２３）。
【０１１３】
ステップＳ２３の処理では、当該判定処理への入力が“入力情報”の場合には、アプリケーション処理部１８への入力を許可し、この“入力情報”等をアプリケーション処理部１８へ渡す（その際、アプリケーション処理部１８を起動する（ステップＳ２５））。また、当該判定処理への入力が“出力情報”の場合には、外部（制御対象機器）への出力を許可し、“出力情報”を外部へ出力させる。更に、当該判定処理が検証処理部１９によって起動されたものである場合には、更に、照合処理部１６を起動し、この照合処理部１６に“出力情報”等を渡す処理も行う（ステップＳ２６）。
【０１１４】
尚、検証処理部１９は、判定処理部１７を起動した際に、自己が起動した旨を示す情報を上記出力情報、入力／出力識別情報等と共に判定処理部１７に渡す。
一方、判定条件に合致しないと判定した場合には（ステップＳ２２，ＮＯ）、上記出力を抑止する（入力または出力は許可しない）（ステップＳ２４）。この場合、処理を終了することになる。
【０１１５】
図８は、アプリケーション処理部１８の処理フローチャート図である。
図８において、まず、入力処理を行う（ステップＳ３１）。これは、アプリケーション処理部１８には、上記判定処理部１７において“入力情報”の入力を許可すると判定された場合に、判定処理部１７から“入力情報”等が渡されるので、この“入力情報”等を入力するものである。
【０１１６】
そして、この“入力情報”に応じた所定のアプリケーション処理を実行する（ステップＳ３２）。このアプリケーション処理の具体例は特に示さない（既存の一般的なものである）が、アプリケーション処理部１８は各種“入力情報”に応じた各種アプリケーション処理を実行可能となっている。
【０１１７】
ここで、上記の通りこのアプリケーション処理の結果として“出力情報”（外部（制御対象機器等）へ出力するデータ）が生成されるものと説明していたが、アプリケーション処理の結果が必ず“出力情報”生成になるとは限らない。例えば入力情報がセンサの最新計測値であり、ＣＰＵモジュール１内で記憶管理しているセンサ計測値を更新する場合等には、“出力情報”は生成されない。これより、ステップＳ３２のアプリケーション処理の結果が“出力情報”生成であるか否かを判定し（ステップＳ３３）、“出力情報”生成では無い場合には（ステップＳ３３，ＮＯ）ステップＳ３４以降の処理は行わない（よって、後段の処理を起動することなく、この“入力情報”に応じた処理は終了する。
【０１１８】
ステップＳ３２のアプリケーション処理の結果が“出力情報”生成である場合には（ステップＳ３３，ＹＥＳ）、ステップＳ３４以降の処理を実行する。
ステップＳ３４以降の処理では、まず、安全管理テーブル１２を読み込む（ステップＳ３４）。そして、安全管理テーブル１２を参照して、上記生成した“出力情報”が安全側か否かを判定する（ステップＳ３５）。“出力情報”が安全側である場合には（ステップＳ３５，ＹＥＳ）、検証処理部１９を起動する。そして、起動した検証処理部１９に対して“出力情報”や入力／出力識別情報（出力を示す）と共に、後述する「呼び出し元アプリケーション情報」を渡す（ステップＳ３６）。
【０１１９】
一方、“出力情報”が危険側である場合には（ステップＳ３５，ＮＯ）、照合処理部１６を起動する。そして、起動した照合処理部１６に対して“出力情報”と入力／出力識別情報を渡す（ステップＳ３７）。
【０１２０】
図９は、検証処理部１９の処理フローチャート図である。
上記の通り、当該検証処理への入力は、“出力情報”と入力／出力識別情報と「呼び出し元アプリケーション情報」である。「呼び出し元アプリケーション情報」は、上記ステップＳ３２のアプリケーション処理実行に係わる所定の情報であり、例えばアプリケーション処理の処理名、実行時間、アプリケーション処理の入力、出力に係わる所定情報等である。ここでは、図５に示す一例を用いて説明するならば、ステップＳ３２のアプリケーション処理が速度範囲チェック処理であった場合には、「呼び出し元アプリケーション情報」は、処理名＝速度範囲チェック処理、処理実行時間＝ｔ１、速度入力データ＝Ｐ１、速度基準＝Ｐ２、出力情報の出力先BitNo.の各項目より成る。
【０１２１】
図９の処理では、まず検証テーブル１３を読み込む（ステップＳ４１）。そして、上記「呼び出し元アプリケーション情報」の上記処理名に基づいて、検証テーブル１３から該当するレコードの検証条件を取得する。そして、「呼び出し元アプリケーション情報」の各項目が、対応する検証条件に合致するか否かを判定する（ステップＳ４２）。そして、全ての項目で検証条件に合致する場合には検証ＯＫと判定し（ステップＳ４３，ＹＥＳ）検証ＯＫを上記不図示のシステムステータス情報に記録すると共に（ステップＳ４４）、
ステップＳ４５の処理を実行する。一方、１つでも検証条件に合致しない項目があった場合には検証ＮＧと判定し（ステップＳ４３，ＮＯ）、検証ＮＧを上記システムステータス情報に記録すると共に（ステップＳ４６），ステップＳ４７の処理を実行する。
【０１２２】
上記の例では、検証テーブル１３から処理名が速度範囲チェック処理であるレコードの検証条件（制限時間５３＝１ｍｓ、入力パラメータ５４＝「０＜Ｐ１＜５００」且つ「−５０＜Ｐ２−Ｐ１＜５０」、出力パラメータ５５＝「ＢｉｔＮｏ．＝１６ｏｒ１７」）が取得される。そして、上記「呼び出し元アプリケーション情報」の各項目が、これら検証条件に合致するか否かを判定する。例えば、上記「呼び出し元アプリケーション情報」の各項目の値が、例えばｔ１＝０．５ｍｓ、Ｐ１＝２５０、Ｐ２＝２２０すなわちＰ２−Ｐ１（速度基準Ｐ２との誤差）＝−３０、出力情報の出力先BitNo.＝１６であったならば、全ての項目で検証条件に合致することになるので、検証ＯＫと判定される。
【０１２３】
上記検証処理により、アプリケーション処理自体に異常がある場合や、制御対象機器に異常がある場合等には、検証ＮＧと判定され、アプリケーション処理結果は出力されないので、例えば誤った“出力情報”によって制御対象機器が誤作動することにより人間に危害が発生するような事態を回避できる。但し、更に、後述するように緊急停止出力することで、より確実に安全を確保することが望ましい。
【０１２４】
尚、図５には１つのアプリケーション処理名（速度範囲チェック処理）に対応する検証条件しか示していないが、実際にはアプリケーション処理部１８が実行し得る全てのアプリケーション処理についてそれぞれ処理名と共に検証条件が登録されている。
【０１２５】
そして、ステップＳ４５の処理では、判定処理部１７を起動する。そして、当該検証処理部１９への入力であった上記“出力情報”、入力／出力識別情報を、起動した判定処理部１７に渡す。
【０１２６】
一方、ステップＳ４７の処理では、緊急停止を出力し、判定処理部１７を起動する。この場合には、起動した判定処理部１７には緊急停止出力が“出力情報”として渡されることになる。尚、入力／出力識別情報（出力を示す）も一緒に渡しても良いが、緊急停止出力は識別情報無しでも“出力”であると認識されるものであってもよい。
【０１２７】
尚、ここでは緊急時の安全対策出力の一例として緊急停止を挙げているが、適用するシステムに応じた適切な緊急時の安全対策出力を適宜決めておき（人間が判断する）実行させるようにする。
【０１２８】
図１０は、照合処理部１６の処理フローチャート図である。
当該照合処理の入力、すなわち当該照合処理部１６を起動した処理機能部から渡される情報（パラメータ）は、上記“入力情報”または／及び“出力情報”と、入力／出力識別情報である。危険側出力の場合には、照合処理部１６ａには“入力情報”、照合処理部１６ｂには“出力情報”が入力されることになる。一方、安全側出力の場合には、照合処理部１６ｃに“入力情報”と“出力情報”の両方が入力されることになる。
【０１２９】
尚、アプリケーション処理部１８は、検証処理部１９を起動した場合には、“出力情報”だけでなく“入力情報”も一緒に検証処理部１９に渡す。検証処理部１９も同様にして、起動した判定処理部１７にこの“入力情報”と“出力情報”を渡し、更にこの判定処理部１７も起動した照合処理部１６にこの“入力情報”と“出力情報”を渡す。これによって、安全側出力の場合には照合処理部１６ｃには“入力情報”と“出力情報”の両方が渡されることになる。尚、この場合も入力／出力識別情報も一緒に渡すが、これは入力と出力の両方を示す情報となる。そして、検証処理部１９、照合処理部１６、判定処理部１７
は、“入力情報”と“出力情報”の両方が渡される場合、“出力情報”に関する処理を実行する。
【０１３０】
但し、これは一例であり、上記の通り実施例２の場合と同様に入出力バッファを設けることで、入力／出力識別情報に基づいて入出力バッファから“入力情報”または／及び“出力情報”を取得するようにしてもよい。
【０１３１】
図１０の処理では、まず、安全管理テーブル１２を読み込む（ステップＳ５１）。そして、上記当該照合処理への入力に基づいて、“出力情報”が安全側であるか危険側であるかを安全管理テーブル１２に基づいて判定する（ステップＳ５２）。これは、既に述べた通り、当該照合処理への入力が“入力情報”である場合でも、これに対応する“出力情報”が安全側であるか危険側であるかを判定できる。
【０１３２】
“出力情報”が危険側である場合には（ステップＳ５２，ＹＥＳ）、他系のＣＰＵモジュール１に対して当該照合処理への入力（“入力情報”または“出力情報”）を通知する（ステップＳ５３）。“出力情報”が安全側である場合には（ステップＳ５２，ＮＯ）、他系のＣＰＵモジュール１に対して上記相互伝送路を介して、上記当該照合処理の入力（“入力情報”及び“出力情報”）を通知する（ステップＳ５４）。
【０１３３】
尚、ステップＳ５１〜Ｓ５４の処理は、必ずしも必要なく、単に前段の処理機能部から渡された情報（“入力情報”または“出力情報”、あるいは“入力情報”と“出力情報”）を、他系のＣＰＵモジュール１に通知するようにしてもよい。
【０１３４】
そして、他系のＣＰＵモジュール１も図１０の処理を行ってステップＳ５３又はＳ５４による通知を行ってくるはずであるので、既にこの通知があった場合には（ステップＳ５５，ＹＥＳ）ステップＳ５６の処理へ移行し、未だ通知が無い場合には（ステップＳ５５，ＮＯ）予め設定される所定の制限時間この通知を待ち（ステップＳ６０）、制限時間内に通知があった場合には（ステップＳ６１，ＹＥＳ）、ステップＳ５６の処理へ移行する。
【０１３５】
所定の制限時間内に他系のＣＰＵモジュール１からの通知が無かった場合には照合ＮＧと判定し（ステップＳ６１，ＮＯ）、上記システムステータス情報に照合ＮＧを記録すると共に（ステップＳ６２）、照合ＮＧの場合に応じた処理を実行する。ここでは一例として緊急停止を出力し、判定処理部１７を起動して（ステップＳ６３）、緊急停止出力に関する判定処理を実行させる。
【０１３６】
尚、図示の例では更に、ステップＳ５９の処理も行っている。ステップＳ５９では、上記システムステータス情報を参照して、現在のシステム状態が、他系異常または相互伝送異常の状態であるか否かを判定する。他系異常または相互伝送異常の状態であれば、上記の通知は来ないはずであるので、所定の制限時間待つことなく直ちに照合ＮＧと判定する（ステップＳ６２）。尚、図ではステップＳ５９の処理はステップＳ５５の後に行っているが、これは一例であり、例えば図１０の処理の最初に行ってもよい。この場合、もし異常があれば他系のＣＰＵモジュール１に対する通知を行うことなく照合ＮＧと判定でき、処理負荷が軽減でき、また照合ＮＧと判定するまでの処理時間を更に短縮できる。
【０１３７】
上記ステップＳ５６の処理では、上記当該照合処理への入力と、他系のＣＰＵモジュール１から通知された情報（他系のＣＰＵモジュール１における照合処理部１６への入力）とを照合して、合致するか否かを判定し、合致する場合には照合ＯＫと判定して（ステップＳ５６，ＹＥＳ）、合致しない場合には照合ＮＧと判定する（ステップＳ５６，ＮＯ）。
【０１３８】
照合ＯＫと判定した場合には（ステップＳ５６，ＹＥＳ）、上記システムステータス情報に“照合ＯＫ”を記録し（ステップＳ５７）、判定処理部１７を起動する（ステップＳ５８）。そして、起動した判定処理部１７に当該照合処理への入力（“入力情報”または／及び“出力情報”と、入力／出力識別情報）を渡す。
【０１３９】
一方、照合ＮＧと判定した場合には（ステップＳ５６，ＮＯ）、上記ステップＳ６２，Ｓ６３の処理を実行する。
尚、上記ステップＳ５６の照合処理は、例えば、外部からの入力（入力情報）がディジタル入力の場合はＯＦＦからＯＮ、またはＯＮからＯＦＦの変化が合致しているか否か、アナログ入力の場合ＣＰＵ１とＣＰＵ２の入力値の差が所定の値以内であるか否か、パルス入力の場合ＣＰＵモジュール１Ａ、ＣＰＵモジュール１Ｂそれぞれにおけるパルスカウント値の差が所定の値以内であるか否かによって、照合が合致したか否かを判断する。但し、照合処理部１６が直接外部からの入力信号（ＯＮ→ＯＦＦ変化等）を検出しているのではなく、これらは“入力情報”に反映されている形となっている。また、入力のチャターなどのノイズはハードウェアフィルタなどにより予め除去する。
【０１４０】
図１１は、診断処理部１４の処理フローチャート図である。
上記の通り、診断処理自体は既存の一般的な手法であってよく、以下、簡単に説明する。
【０１４１】
図１１の処理では、まず、自己診断処理を行う（ステップＳ７１）。自己診断処理の内容は例えばＩＥＣ６１５０８の規定に従って行うが、この例に限らない。
上記自己診断処理の結果、自系正常か否かを判定する（ステップＳ７２）。
【０１４２】
自系異常の場合は（ステップＳ７２，ＮＯ）、上記システムステータス情報に自系異常を記録すると共に、緊急停止出力を行い、判定処理部１７を起動して（ステップＳ７４、）緊急停止出力に関する判定処理を実行させる。
【０１４３】
一方、自系正常の場合には（ステップＳ７２，ＹＥＳ）、まず上記システムステータス情報に自系正常を記録し（ステップＳ７３）、続いて、他系のＣＰＵモジュール１に対して、上記相互伝送路を介して、他系のＣＰＵモジュール１におけるステップＳ７１の自己診断処理の結果を要求する（ステップＳ７５）。そして、他系の自己診断結果が正常であったならば（ステップＳ７９、ＹＥＳ）、上記システムステータス情報に他系正常を記録する（ステップＳ８０）。一方、他系の自己診断結果が異常であったならば（ステップＳ７９、ＮＯ）、上記システムステータス情報に他系異常を記録する（ステップＳ８１）。
【０１４４】
また、相互伝送が正常か否かを判定する（ステップＳ７６）。相互伝送が正常の場合には、例えば上記ステップＳ７５の要求に対する他系からの返信を正常に受信できるはずなので、返信があったことを以って相互伝送正常と判定し（ステップＳ７６，ＹＥＳ）、上記システムステータス情報に相互伝送正常を記録する（ステップＳ７７）。そして、返信内容に基づいて上記ステップＳ７９の処理を実行する。
【０１４５】
一方、上記ステップＳ７５の要求送信から所定時間経過しても返信が無い場合には、相互伝送異常と判定し（ステップＳ７６，ＮＯ）、上記システムステータス情報に相互伝送異常を記録する（ステップＳ７８）。この場合にはステップＳ７９の処理は行えないので、そのまま本処理を終了する。
【０１４６】
以上説明したように、実施例１の二重化比較方式の二重化装置では、まず、ＣＰＵモジュール１からの外部（制御対象機器等）への出力を、例えばプレス機の停止指令の出力な
どフェールセーフを実現する安全側と、プレス機の動作開始指令などの危険側とに予め区分して（例えば人間が判断する）安全管理テーブルに登録しておく。
【０１４７】
運用中、二重化装置の各ＣＰＵモジュール１は、任意の入力（入力変化等）がある毎に、安全管理テーブルを参照することで、この入力に応じた出力が安全側の場合と危険側の場合とで制御を区別する。
【０１４８】
安全側出力の場合は、入力に応じたアプリケーション処理結果としての出力を、判定処理等を経て外部に出力した後に、照合処理を実行する。照合処理は、ＣＰＵモジュール両系の待ち合わせなど時間の要する処理であり、よって照合処理を実行後に外部出力する場合に比べて、入力から出力までに掛かる時間を非常に短縮することができる。また、何らかの異常により照合処理結果がＮＧとなるような場合でも、出力が安全側であるため人的危害等は発生しない。たとえば誤ってプレスの停止指令が出力されプレスが停止しても人的危害は発生しない。ただし、照合処理がその後実施されるため、たとえば緊急停止出力がその後に出力される。
【０１４９】
また、危険側出力の場合は、外部への誤出力の防止を優先し、照合処理を行った後で、外部出力する。これによって、人的危害等は発生しない。
この様に、安全性を確保しつつ（人的危害等が発生しないようにしつつ）、出力が安全側の場合にはレスポンスタイムを短縮することができる。
【０１５０】
また、安全側出力の場合における出力の安全性を高めるため、検証テーブルを予め登録しておき、この検証テーブルを用いた検証処理によって、アプリケーション処理に関する検証を行い、検証結果が異常の場合は外部出力しない（そして例えば緊急停止を出力する）。この様に、照合処理を行う前に外部出力しても問題ないようにする為に（より高い安全性を確保する為に）、検証処理を行うようにすることが望ましい（但し、検証処理は必須ではない）。
【０１５１】
尚、検証処理結果が異常の場合、「リカバリブロック法」により代替アプリケーション処理で再実行する方法や「Ｎバージョン法」で複数の同機能のアプリケーションで処理した結果を比較判定する方法も可能である（緊急停止を出力する例に限らない）。
【０１５２】
また、緊急停止は一例であり、この例に限らず、使用用途に応じたものとしてよい。たとえば異常の場合シャットダウン指示を出力する等してもよい。
尚、検証処理における上記アプリケーション実行時間制限判定は、ウオッチドッグで時間監視する等して判定してもよい。
【０１５３】
以上述べたように、実施例１のフォールトトレラント装置によれば、二重化比較方式の二重化装置において、安全管理テーブルにより外部への出力信号（出力情報）がフェールセーフ（安全側）であるか否かを識別し、安全側出力の場合、照合処理を行う前に外部（制御対象機器等）への出力を行うことで、レスポンスタイムを短縮することができる。
【０１５４】
また、安全側出力の場合、照合処理が外部出力の後になり、照合が異常の場合の出力抑止ができないが、検証テーブルにより検証項目を定義し、アプリケーション処理のフォールトの検知およびフォールトコントロールすることにより、安全性を強化することができ、また出力がされたとしても危険が発生しないので安全性を確保できる。
【０１５５】
また、安全側出力の場合、照合処理に必要なＣＰＵモジュール間の伝送時間が長くても（照合処理に時間が掛かっても）、それによって外部出力のタイミングが遅れることにはならないため、ＣＰＵモジュール間の相互伝送の為の構成を、安価な伝送装置で実現する
ことが可能となる。
【０１５６】
また、安全側出力の場合（上記変形例では危険側出力の場合も）、入力の照合と出力の照合を一括して行うことにより、入力照合と出力照合を個別に行うよりも伝送時間などの処理時間の短縮を実現することができ、照合処理時間の短縮化とＣＰＵ負荷の軽減が実現できる。
【０１５７】
以下、実施例２について説明する。
実施例２でも、上記実施例１と略同様の効果が得られ、更に実施例２による効果も得られる。
【０１５８】
すなわち、上記実施例１では、１つのアプリケーション処理毎に、安全側の出力、危険側の出力の何れか一方が出力されることを前提としていたが、安全フォールトトレラント装置の機能として、１つのアプリケーション処理で複数の出力が行われる場合もあり（複数の“出力情報”が生成される）、この場合、安全側出力と危険側出力が混在する可能性があった。
【０１５９】
実施例２では、この様な状況にも対応可能とするものである。
すなわち、概略的には、実施例２では、安全側出力と危険側出力が混在する場合には出力を同定して区分する。
【０１６０】
すなわち、アプリケーション処理で生成された（複数の）“出力情報”の全てが安全側出力の場合は、上記実施例１においてフェールセーフとして安全側出力とされた場合と略同様の処理を行う。すなわち、照合処理を行う前に“出力情報”を外部へ出力する。
【０１６１】
一方、アプリケーション処理で生成された（複数の）“出力情報”の全てが危険側の場合は勿論のこと、安全側出力と危険側出力が混在する場合も危険側として区分し、上記実施例１において危険側出力とされた場合と略同様の処理を行う。すなわち、照合処理を行ってＯＫであれば、“出力情報”を外部へ出力する。
【０１６２】
以下、実施例２について図１２以降を参照して詳細に説明する。
図１２は、実施例２の二重化装置の構成・機能ブロック図である。
尚、以下の実施例２の説明においては、実施例１と略同様の内容については、その説明を省略する場合もある。本説明では、主に、実施例１と異なる点について詳細に説明するものとする。
【０１６３】
実施例２が実施例１と異なる点は、主に、図１２に示す出力同定処理部６８を新たに設けたことである。また、本例では図示の入出力バッファ６９も設けており、またアプリケーション処理部６７の処理内容が、上記アプリケーション処理部１８とは多少異なるものとなる。出力同定処理部６８の処理フローチャートは図１８に示し、アプリケーション処理部６７の処理フローチャートは図１６に示し、入出力バッファ６９に記憶されるデータの具体例を図１７に示し、後に説明する。
【０１６４】
尚、上記の通り、入出力バッファ６９は上記実施例１においても設けてもよい。
また、実施例２では、上記実施例１の変形例と同様、危険側出力の場合でも照合処理を“入力情報”と“出力情報”についてまとめて行うものであり、それ故、図１２に示す通り、入力処理部６５による入力処理後の照合処理は行われない。また、危険側出力の場合の照合処理である照合処理部７１ａの処理においても、安全側出力の場合の照合処理である照合処理部７１ｂの処理と同様、“入力情報”と“出力情報”をまとめて照合処理を行う。これに伴って、入力処理部６５、照合処理部７１の処理フローチャート、及び安全管
理テーブル６２の内容は、上記入力処理部１５、照合処理部１６、安全管理テーブル１２とは多少異なるものとなり、後に図１４、図１５、図１９を参照して説明する。
【０１６５】
尚、上記実施例１の場合と同様の理由により、図１２に示す判定処理部６６ａ、６６ｂ、６６ｃ、６６ｄをまとめて判定処理部６６と呼ぶ場合もある。同様に、照合処理部７１、７１ｂをまとめて照合処理部７１と呼ぶ場合もある。判定処理部６６、検証処理部７０、及び診断処理部６４の処理内容は、上記実施例１における判定処理部１７、検証処理部１９、及び診断処理部１４と略同様であってよい。すなわち、判定処理部６６、検証処理部７０、診断処理部６４は、それぞれ、図７、図９、図１１の処理を行うものであってよい。よって、ここではこれらの各処理機能部６６，７０，６４の処理フローチャート図は特に示さないし説明しない。
【０１６６】
また、判定テーブル６１、検証テーブル６３の内容も、上記実施例１における判定テーブル１１、検証テーブル１３と略同様であってよい。すなわち、判定テーブル６１、検証テーブル６３の内容は、それぞれ、図４、図５に示すものと略同様であってよく、ここでは特に図示／説明しない。
【０１６７】
また、図１２に示す実施例２の二重化装置（フォールトトレラント装置）におけるアプリケーション処理部６７による処理後の処理の流れは、出力同定処理部６８の処理結果によって２通りの処理手順の何れか一方に分岐すること以外は、基本的に実施例１の場合と略同様である。つまり、安全側出力の場合の処理の流れ、すなわち検証処理部７０→判定処理部６６ｂ→照合処理部７１ｂ→判定処理部６６ｄの処理の流れは、上記実施例１における検証処理部１９→判定処理部１７ｂ→照合処理部１６ｃ→判定処理部１７ｄの処理の流れと同じであってよく、また各々の処理内容も照合処理部６６が照合処理部１６とは多少異なる程度であり、基本的には略同様であってよい。よって、これらについては特に説明しない。
【０１６８】
危険側出力の場合の処理の流れについても同様である。すなわち、図１２に示す照合処理部７１ａ→判定処理部６６ｃの処理の流れは、上記実施例１における照合処理部１６ｂ→判定処理部１７ｃの処理の流れと同じであってよく、また各々の処理内容も照合処理部６６が照合処理部１６とは多少異なる程度であり、基本的には略同様であってよい。よって、これらについても特に説明しない。
【０１６９】
図１３（ａ）、（ｂ）は、実施例２における安全側出力タイムチャート、危険側出力タイムチャートである。
図１３（ａ）の安全側出力タイムチャート、及び図１３（ｂ）の危険側出力タイムチャートを、図２（ａ）、（ｂ）に示す実施例１のタイムチャートと比較すれば明らかな通り、実施例２は、タイムチャート的には、アプリケーション処理後に出力同定処理を行う点が実施例１と異なる（更に、危険側出力の場合にも入出力まとめて照合処理を行う点も異なるが、これは図２とは異なるが、上記実施例１の変形例と同じであると考えてよい）。
【０１７０】
そして、本例では、図１３（ａ）と（ｂ）を比較すれば明らかな通り、出力同定処理までは同じであり、出力同定処理による処理結果に応じて、図１３（ａ）に示す安全側出力の処理手順と、図１３（ｂ）に示す危険側出力の処理手順とに分岐する。
【０１７１】
図１３（ａ）、（ｂ）に示す通り、実施例２においても、図１３（ａ）に示す安全側出力の場合には照合処理を行うまえに“出力情報”を外部出力するので、図１３（ａ）に示す危険側出力に比べて、主に照合処理に掛かる時間分、レスポンスタイムを短縮することができる。実施例２では出力同定処理が加わるが、これは照合処理に比べて非常に短い時間で済む。危険側出力の場合には実施例１と同様に、安全性を優先した処理を行う。すな
わち、照合処理を行ったうえで照合ＯＫであれば“出力情報”を外部へ出力する。これによって、危険側に分類される出力が行われる場合でも、人的危害等が生じないようにでき、安全性が損なわれることはない。更に、安全側出力の場合だけでなく危険側出力の場合でも“入力情報”の照合と“出力情報”の照合をまとめて行うので、照合処理時間を短縮でき、ＣＰＵの処理負担を軽減できる。
【０１７２】
以下、図１４以降を参照して、実施例２について、主に実施例１と異なる点について説明するものとする。
図１４に、実施例２の安全管理テーブル６２のデータ構成例を示す。
【０１７３】
図示の安全管理テーブル６２は、番号８１、出力種別８２、出力区分８３の各データ項目より成る複数のレコードにより構成される。番号８１、出力種別８２、出力区分８３は、図３に示す安全管理テーブル１２の番号３１、出力種別３２、出力区分３４と同じであってよく特に説明しない。図３と異なる点は、入力種別３３が無い点である。これは上記の通り、本例では入力処理部６５の処理後に照合処理を行うことはないので、入力種別３３は必要ないからである。
【０１７４】
また、これに伴って、入力処理部６５においては、後段の処理を照合処理と判定処理のどちらにするかを（安全側出力と危険側出力のどちらのモードにするのかを）判定する処理は必要なくなる。
【０１７５】
図１５は、実施例２の入力処理部６５の処理フローチャート図である。
図示の通り、入力処理部６５の処理は、上記ステップＳ１１と同様の処理である入力処理を行った後（ステップＳ９１）、上記ステップＳ１４と同様の処理である判定処理部６６の起動処理（ステップＳ９２）を行うだけである。
【０１７６】
図１６は、実施例２のアプリケーション処理部６７の処理フローチャート図である。
図１６において、図示のステップＳ１１１，Ｓ１１２，Ｓ１１３の入力処理、アプリケーション処理、外部出力有無の判定処理は、上記図８のステップＳ３１，Ｓ３２，Ｓ３３の処理と略同様であり、特に説明しない。
【０１７７】
ステップＳ１１３において外部出力ありと判定された場合、まず入出力バッファ６９に今回のアプリケーション処理実行に係わる所定の情報を書き込む処理を実行する（ステップＳ１１４）。これについて、図１７も参照して説明する。
【０１７８】
図１７は、入出力バッファ６９のデータ構成例である。
図示の例では、入出力バッファ６９には、アプリケーション処理名９１、入力データ９２（入力データ項目９４と入力データ値９５から成る）、出力データ９３（出力データ項目９６と出力データ値９７から成る）より成るテーブルが格納される。
【０１７９】
入力データ９２が“入力情報”に相当し、入力データ項目９４が上記「入力種別」に相当すると考えてよい。同様に、出力データ９３が“出力情報”に相当し、出力データ項目９６が上記「出力種別」に相当すると考えてよい。既に述べた通り、実施例１においても入出力バッファ６９と同様のデータを記憶する記憶装置を設けてよく、各種処理機能部は、この記憶装置に“入力情報”や“出力情報”を記憶し、あるいはこの記憶装置から“入力情報”または／及び“出力情報”を取得するようにしてもよい。
【０１８０】
上記ステップＳ１１４の処理では、ステップＳ１１２で実行したアプリケーションのアプリケーション名をアプリケーション処理名９１に記憶し、このアプリケーション処理に係わる“入力情報”の入力種別とデータ値を入力データ項目９４と入力データ値９５に記
憶し、このアプリケーション処理の結果（“出力情報”）の出力種別と出力データ値を出力データ項目９６と出力データ値９７に記憶する。
【０１８１】
尚、図１７には１つのアプリケーション処理（速度範囲チェック処理）に対して１つの出力データ９３（緊急停止、ｏｎ）のみ示すが、上述してある通り、実施例２では１つのアプリケーション処理によって複数の“出力情報”が得られる場合に特に顕著な効果を奏するものであり、典型的な例は例えば図１７に示す速度範囲チェック処理に対して、出力データ９３に複数の“出力情報”が記憶されている場合である。よって、図１７には示されないが、以下の説明では、１つのアプリケーション処理に対して複数の“出力情報”が記憶されているものとして説明する。
【０１８２】
アプリケーション処理部６７は、上記ステップＳ１１４の処理完了後、出力同定処理部６８を起動する（ステップＳ１１５）。そしてステップＳ１１２で実行したアプリケーション処理の処理名を入力パラメータとして出力同定処理部６８に渡す。更に、上記「呼び出し元アプリケーション情報」も出力同定処理部６８に渡すが、出力同定処理部６８は検証処理部７０を起動した場合には「呼び出し元アプリケーション情報」を検証処理部７０に渡すが、照合処理部７１ａを起動した場合には「呼び出し元アプリケーション情報」は棄てる。尚、これは一例であり、例えばアプリケーション処理部６７は「呼び出し元アプリケーション情報」も入出力バッファ６９に記憶するものとし、検証処理部７０は起動されると入出力バッファ６９から「呼び出し元アプリケーション情報」も取得するようにしてもよい。
【０１８３】
起動された出力同定処理部６８は、図１８の処理を実行する。
図１８は、出力同定処理部６８の処理フローチャート図である。
図１８の処理では、まず、入出力バッファ６９と安全管理テーブル６２のデータを読み込む（ステップＳ１２１）。
【０１８４】
そして、入出力バッファ６９から上記入力パラメータとしての処理名に基づいて、このアプリケーション処理に対応する全ての出力データ項目９６（出力種別）を取得して（上記の通り、ここでは複数あるものとする）、各出力データ項目９６（出力種別）毎に安全管理テーブル６２を参照して、それが安全側出力か、危険側出力かを判定する（ステップＳ１２２）。そして、全ての出力データ項目９６（出力種別）が安全側出力であるか否かを判定する（ステップＳ１２３）。
【０１８５】
全ての出力データ項目９６（出力種別）が安全側出力である場合には（ステップＳ１２３，ＹＥＳ）、安全側モードとしての処理手順を順次実行していくことになり、検証処理部７０を起動する（ステップＳ１２４）。そして、出力を示す入力／出力識別情報と共に、上記「呼び出し元アプリケーション情報」を検証処理部７０に渡す。そして、検証処理、判定処理を経て、検証ＯＫ且つ判定ＯＫであれば、照合処理を行う前に、入出力バッファ６９に記憶されている出力データ９３（“出力情報”）が外部へ出力されることになる。
【０１８６】
一方、１つでも安全側出力では無かった場合には（ステップＳ１２３，ＮＯ）、基本的には危険側モードとしての処理手順を順次実行していくことになり、照合処理部７１を起動する（ステップＳ１２６）。そして、照合処理、判定処理を経て、照合ＯＫ且つ判定ＯＫであれば、入出力バッファ６９に記憶されている出力データ９３（“出力情報”）が外部へ出力されることになる。
【０１８７】
但し、図示の例では、出力として非安全関連出力を行う場合も考慮して、ステップＳ１２５の判定も行っている。ステップＳ１２５では、危険側出力が１以上あるか否かを判定
し、１つ以上ある場合には（ステップＳ１２５、ＹＥＳ）、上記ステップＳ１２６の処理を行う。もし、危険側出力が１つも無い場合には（ステップＳ１２５，ＮＯ）本処理を終了する。但し、ステップＳ１２５の処理は無くても良い。尚、アプリケーション処理部６７は、出力が非安全関連出力の場合、入出力バッファ６９に書き込むことなく、直接、外部へ出力する。入出力バッファ６９に何もデータが記憶されていない場合、すなわち出力が非安全関連出力のみの場合に、ステップＳ１２５の判定がＮＯとなる。この場合には、当然、後続の処理は行う必要はないので、起動処理は必要なく、本処理を終了する。
【０１８８】
次に、図１９を参照して、実施例２の照合処理について説明する。
図１９は、実施例２の照合処理部７１の処理フローチャート図である。
図１９の処理が上記実施例１の図１０の処理と異なる点は、既に述べた通り本例では危険側の場合でも入出力まとめて照合処理を行うことから、図１０のステップＳ５１〜Ｓ５４の処理は必要なくなり、代わりにステップＳ１３１の処理を実行することである。
【０１８９】
ステップＳ１３１の処理は、ステップＳ５４の処理と略同様である。すなわち、入力情報及び出力情報を他系のＣＰＵモジュール１に通知する処理である。尚、ステップＳ１３１では入出力バッファ６９から“入力情報”及び“出力情報”を取得する点でステップＳ５４とは異なるが、上記の通り実施例１においても入出力バッファを設けて入出力バッファから“入力情報”及び“出力情報”を取得するようにしてもよい。その逆に、図１９の処理において、実施例１と同様に、入力情報及び出力情報は前段の（照合処理部７１を起動した）処理機能部から渡されるものとしてもよい。
【０１９０】
尚、実施例２の場合、入力パラメータとしての入力／出力識別情報は必要ない。上記の通り、入出力バッファ６９には、“入力情報”、“出力情報”が区分されて格納されており、また上記の通り照合処理部７１は必ず、“入力情報”と“出力情報”の両方に関する処理を行うものと決まっているからである。また、判定処理部６６に関しても、例えば判定処理部６６ａとして動作する際には、入出力バッファ６９には“入力情報”のみが格納されている状態なので、これを以って“入力情報”に関して判定するものと判断できる。同様に、判定処理部６６ｂ〜６６ｃとして動作する際には、入出力バッファ６９には“入力情報”に加えて“出力情報”が格納されている状態なので、これを以って“出力情報”に関して判定するものと判断できる。尚、緊急停止出力を出す際には、入出力バッファ６９の情報を全て消去して、代わりに出力データ項目９６（出力種別）に緊急停止を記録しておけば、これを以って判定処理部６６が緊急停止出力に関する判定を行うようにすればよい。
【０１９１】
尚、図１９に示すステップＳ１３２以降の処理（ステップＳ１３２〜Ｓ１４０）は、図１０のステップＳ５５以降の処理（ステップＳ５５〜Ｓ６３）と同じであってよく、ここでは特に説明しない。
【０１９２】
上記のように、実施例２では、特に１つのアプリケーション処理によって複数の“出力情報”が出力される場合に、そのうちの１つでも危険側出力であった場合には危険側モードとしての処理手順を順次実行することで、安全性を確保することができる。勿論、更に、実施例１と同様の効果が得られる。また、“出力情報”に対応する“入力情報”を定義する必要がなくなり、入力処理部６５の処理負担が軽減され、照合処理の処理時間短縮が図れる。
【０１９３】
上記実施例２の二重化装置でも、上記実施例１と同様の効果が得られる。
すなわち、従来、二重化比較方式では二重の両系間のデータ照合を行ってから出力するため、照合処理に時間が掛かる分、「入力から出力までのレスポンスタイム」が悪化しており、特に他系が異常の場合などは照合の時間監視時間以上の安全側出力の遅れが発生し
ていたが、本方式により、「二重化／比較方式」の二重化装置において安全管理テーブルにより出力信号がフェールセーフ（安全側）であるか否かを識別し、安全側出力の場合、照合処理の前に外部への出力を行うことでレスポンスタイムを短縮することができる。また、当該安全側出力の場合、照合処理に必要なＣＰＵ間の伝送時間が出力の遅れに繋がらないため、安価な伝送装置で済むようになる。
【０１９４】
また、安全側出力の場合、検証処理を行ってから出力することで、アプリケーション処理のフォールトの検知およびフォールトコントロールすることにより安全性を強化することができ、照合処理を行う前に外部出力しても、危険が発生しないので安全性が減少することはない。
【０１９５】
そして、実施例２では上記の効果に加えて更に以下の効果が得られる。
特に１つのアプリケーション処理によって複数の出力データが得られる場合にも、安全性を確保することができる。
【０１９６】
また、安全側、危険側の何れの場合でも、照合処理において、入力の照合と安全側出力の照合を一括して行うことにより、入力照合と出力照合を個別に行うよりも伝送時間などの処理時間の短縮を実現することができ、照合の異常検知の早期化とＣＰＵ負荷の軽減が実現できる。
【符号の説明】
【０１９７】
１Ａ  ＣＰＵモジュール
１Ｂ  ＣＰＵモジュール
１１  判定テーブル
１２  安全管理テーブル
１３  判定テーブル
１４  診断処理部
１５  入力処理部
１６（１６ａ、１６ｂ、１６ｃ）  照合処理部
１７（１７ａ、１７ｂ、１７ｃ、１７ｄ）  判定処理部
１８  アプリケーション処理部
１９  検証処理部
３１  番号
３２  出力種別
３３  入力種別
３４  出力区分
４１  番号
４２  入力／出力
４３  出力区分
４４  入力条件または出力条件
５１  番号
５２  アプリケーション処理名
５３  制限時間
５４  入力パラメータ
５５  出力パラメータ
６１  判定テーブル
６２  安全管理テーブル
６３  判定テーブル
６４  診断処理部
６５  入力処理部
６６（６６ａ、６６ｂ、６６ｃ、６６ｄ）  判定処理部
６７  アプリケーション処理部
６８  出力同定処理部
６９  入出力バッファ
７０  検証処理部
７１（７１ａ、７１ｂ）  照合処理部
８１  番号
８２  出力種別
８３  出力区分
９１  アプリケーション処理名
９２  入力データ
９３  出力データ
９４  入力データ項目
９５  入力データ値
９６  出力データ項目
９７  出力データ値
【図１】
0005423473.tif 000002
【図６】
0005423473.tif 000003
【図７】
0005423473.tif 000004
【図８】
0005423473.tif 000005
【図９】
0005423473.tif 000006
【図１０】
0005423473.tif 000007
【図１１】
0005423473.tif 000008
【図１２】
0005423473.tif 000009
【図１５】
0005423473.tif 000010
【図１６】
0005423473.tif 000011
【図１８】
0005423473.tif 000012
【図１９】
0005423473.tif 000013
【図２】
0005423473.tif 000014
【図３】
0005423473.tif 000015
【図４】
0005423473.tif 000016
【図５】
0005423473.tif 000017
【図１３】
0005423473.tif 000018
【図１４】
0005423473.tif 000019
【図１７】
0005423473.tif 000020
【図２０】
0005423473.tif 000021