(57)【特許請求の範囲】
【請求項１】
一定周期内において予め設定されたアプリケーションによる処理を複数回実行し、実行された複数の処理結果を比較して自己診断を行う自己診断装置であって、
ダイバース診断手法により設定された条件で前記アプリケーションを複数回実行する安全アプリ処理部と、
前記安全アプリ処理部により得られる複数の処理結果を所定の退避領域に格納するメモリと、
前記メモリに格納された複数の処理結果を比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断する第１後処理部と、
前記複数の処理結果を多数決することにより前記エラーの有無を判断する第２後処理部とを有し、
前記安全アプリ処理部は、前記第１後処理部においてエラーであると判断した場合に、更に前記ダイバース診断手法により設定された条件で１又は複数の前記アプリケーションを実行して処理結果を取得し、
前記第２後処理部は、取得した前記処理結果と、前記メモリに格納された複数の処理結果とを用いて、前記多数決することにより処理結果を補正することを特徴とする自己診断装置。
【請求項２】
前記安全アプリ処理部は、前記アプリケーションに含まれる複数のタスクを実行し、
前記第１後処理部は、前記複数のタスクから得られたそれぞれの処理結果に対して前記メモリに格納された複数のタスクの処理結果と比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断し、前記複数のタスク毎の判断結果を多数決することにより、前記アプリケーションの処理結果に対する前記エラーの有無を判断することを特徴とする請求項１に記載の自己診断装置。
【請求項３】
一定周期内において予め設定されたアプリケーションによる処理を複数回実行し、実行された複数の処理結果を比較して自己診断を行う自己診断方法であって、
ダイバース診断手法により設定された条件で前記アプリケーションを複数回実行する安全アプリ処理ステップと、
前記安全アプリ処理ステップにより得られる複数の処理結果をメモリの所定の退避領域に格納する格納ステップと、
前記メモリに格納された複数の処理結果を比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断する第１後処理ステップと、
前記複数の処理結果を多数決することにより前記エラーの有無を判断する第２後処理ステップとを有し、
前記安全アプリ処理ステップは、前記第１後処理ステップにおいてエラーであると判断した場合に、更に前記ダイバース診断手法により設定された条件で１又は複数の前記アプリケーションを実行して処理結果を取得し、
前記第２後処理ステップは、取得した前記処理結果と、前記メモリに格納された複数の処理結果とを用いて、前記多数決することにより処理結果を補正することを特徴とする自己診断方法。
【請求項４】
前記安全アプリ処理ステップは、前記アプリケーションに含まれる複数のタスクを実行し、
前記第１後処理ステップは、前記複数のタスクから得られたそれぞれの処理結果に対して前記メモリに格納された複数のタスクの処理結果と比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断し、前記複数のタスク毎の判断結果を多数決することにより、前記アプリケーションの処理結果に対する前記エラーの有無を判断することを特徴とする請求項３に記載の自己診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己診断装置及び自己診断方法に係り、特に、自己診断において安全かつ信頼性、可用性及びコスト面の改善を実現するための自己診断装置及び自己診断方法に関する。
【背景技術】
【０００２】
従来、例えば放射線等により生じるデータ処理後の一過性のソフトエラー現象を減少させるために処理後のデータに対して診断する技術が存在する。ここで、ソフトエラーとは、例えば、半導体チップの一部が壊れるのではなく、記憶しておいたデータの一部だけが反転してしまう不良であり、アルファ線や中性子線、陽子線、重イオン線等の粒子線が半導体チップに突入することで引き起こされ、粒子線が半導体チップを通過する時間は極めて短く、ほんの一瞬である等の特徴が知られている。
【０００３】
また、ソフトエラー対策としては、例えば、２ｂｉｔ以上のエラーに対応した複雑なＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）を搭載する例が知られている（例えば、非特許文献１参照）。また、他のソフトエラー対策としては、例えば、予め正データと反転データとを保存しておき、データをアクセスする時点でパリティのチェックや反転データの利用をする手法が知られている（例えば、特許文献１参照）。また、ソフトウェアエラーが生じたとき、そのソフトウェアの実行時に使用したハードウェアであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やメモリに対して診断する手法が知られている（例えば、非特許文献２参照）。
【０００４】
また、セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出し、読み出した各々のデータ値を比較し、一致していないデータ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行する故障攻撃の検知方法についても知られている（例えば、特許文献２参照）。また、同じプログラムを複数回実行させ、結果格納領域にある複数の実行結果を比較し実行結果が等しい場合には次のプログラム処理を実行するプログラムアドレスを制御し、実行結果が等しくない場合には再度同じプログラムを実行するプログラムアドレスを制御するデータ処理手法が知られている（例えば、特許文献３参照）。
【０００５】
更に、複数のプロセッサを有し、そのプロセッサによる演算経過／演算結果を逐次比較し、同一の場合にその処理は正当であると診断する比較装置を備えた制御装置において、複数の記憶装置内の内容を比較することにより記憶装置のエラー検知を行う手法についても知られている（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−２１６７７１号公報
【特許文献２】特開２００９−２５９１２６号公報
【特許文献３】特開平１１−３０６０８３号公報
【特許文献４】特開２００６−１１５７６号公報
【非特許文献】
【０００７】
【非特許文献１】２００８ＩＰＲＳレポート［ソフトエラー編］、ｈｔｔｐ：／／ｐｃ．ｗａｔｃｈ．ｉｍｐｒｅｓｓ．ｃｏ．ｊｐ／ｄｏｃｓ／２００８／０５０２／ｉｒｐｓ０３．ｈｔｍ
【非特許文献２】ＩＥＣ６１５０８  Ｆｕｎｃｔｉｏｎａｌ  ｓａｆｅｔｙ  ｏｆ  ｅｌｅｃｔｒｉｃａｌ／ｅｌｅｃｔｒｏｎｉｃ／ｐｒｏｇｒａｍｍａｂｌｅ  ｅｌｅｃｔｒｏｎｉｃ  ｓａｆｅｔｙ−ｒｅｌａｔｅｄ  ｓｙｓｔｅｍｓ（ＩＥＣ６１５０８−７；Ａ．５．７（Ｄｏｕｂｌｅ  ＲＡＭ  ｗｉｔｈ  ｈａｒｄｗａｒｅ  ｏｒ  ｓｏｆｔｗａｒｅ  ｃｏｍｐａｒｉｓｏｎ  ａｎｄ  ｒｅａｄ／ｗｒｉｔｅ  ｔｅｓｔ）、Ａ．３．５（Ｒｅｃｉｐｒｏｃａｌ  ｃｏｍｐａｒｉｓｏｎ  ｂｙ  ｓｏｆｔｗａｒｅ））
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した非特許文献１に記載されているように、複雑なＥＣＣを搭載するにはハードウェアコストが増大してしまう。また、特許文献１に記載されている技術は、メモリアクセス時にそれぞれの処理を行う必要があり、例えばＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等のブラックボックスになっているソフトウェアには適用できず、また既存ソフトウェアを使う場合もソフトウェア改造が必要となり、信頼性やコスト面で問題が発生する。
【０００９】
また、非特許文献２の「Ａ．５．７  Ｄｏｕｂｌｅ  ＲＡＭ」に記載されている技術についても同様に、メモリアクセス時にそれぞれの処理を行う必要があり、例えばＯＳ等のブラックボックスになっているソフトウェアには適用できず、また既存ソフトウェアを使う場合もソフトウェア改造が必要となり、信頼性やコスト面で問題が発生する。また、「Ａ．３．５  Ｒｅｃｉｐｒｏｃａｌ  ｃｏｍｐａｒｉｓｏｎ  ｂｙ  ｓｏｆｔｗａｒｅ」に記載されている技術は、最低２つのＣＰＵが必要となり、またＣＰＵ間の通信負荷やデータ照合のための処理が複雑になり、信頼性やコスト面で問題が発生する。更に、多数決によるデータの可用性のためにはＣＰＵが３つ以上必要となり、信頼性やコスト面で問題が発生する。
【００１０】
また、特許文献２に記載されている技術は、セキュリティデバイスの内部で実行する処理に利用するデータ値を複数回読み出してそのデータ値を比較している。また、特許文献３に記載されている技術は、同じプログラムを複数回実行させ、その実行結果を比較する。したがって、何れの文献も、例えば複数回の処理の実行において、時間経過に伴って生じる入力値（アナログデータ等）の誤差に対しては何ら考慮されておらず、その誤差範囲を含めた高精度な自己診断をすることができない。更に、特許文献４に記載されている技術は、複数のプロセッサを用いて処理されているため、上述と同様に信頼性やコスト面で問題が発生する。
【００１１】
本発明は、上述した課題に鑑みてなされたものであって、安全かつ信頼性、可用性及びコスト面の改善を実現し、高精度に自己診断するための自己診断装置及び自己診断方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決するために、本件発明は、以下の特徴を有する課題を解決するための手段を採用している。
【００１３】
本発明は、一定周期内において予め設定されたアプリケーションによる処理を複数回実行し、実行された複数の処理結果を比較して自己診断を行う自己診断装置であって、ダイバース診断手法により設定された条件で前記アプリケーションを複数回実行する安全アプリ処理部と、前記安全アプリ処理部により得られる複数の処理結果を所定の退避領域に格納するメモリと、前記メモリに格納された複数の処理結果を比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断する第１後処理部と、前記複数の処理結果を多数決することにより前記エラーの有無を判断する第２後処理部とを有し、前記安全アプリ処理部は、前記第１後処理部においてエラーであると判断した場合に、更に前記ダイバース診断手法により設定された条件で１又は複数の前記アプリケーションを実行して処理結果を取得し、前記第２後処理部は、取得した前記処理結果と、前記メモリに格納された複数の処理結果とを用いて、前記多数決することにより処理結果を補正することを特徴とする。
【００１５】
また本発明において、前記安全アプリ処理部は、前記アプリケーションに含まれる複数のタスクを実行し、前記第１後処理部は、前記複数のタスクから得られたそれぞれの処理結果に対して前記メモリに格納された複数のタスクの処理結果と比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断し、前記複数のタスク毎の判断結果を多数決することにより、前記アプリケーションの処理結果に対する前記エラーの有無を判断することが好ましい。
【００１６】
更に本発明は、一定周期内において予め設定されたアプリケーションによる処理を複数回実行し、実行された複数の処理結果を比較して自己診断を行う自己診断方法であって、ダイバース診断手法により設定された条件で前記アプリケーションを複数回実行する安全アプリ処理ステップと、前記安全アプリ処理ステップにより得られる複数の処理結果をメモリの所定の退避領域に格納する格納ステップと、前記メモリに格納された複数の処理結果を比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断する第１後処理ステップと、前記複数の処理結果を多数決することにより前記エラーの有無を判断する第２後処理ステップとを有し、前記安全アプリ処理ステップは、前記第１後処理ステップにおいてエラーであると判断した場合に、更に前記ダイバース診断手法により設定された条件で１又は複数の前記アプリケーションを実行して処理結果を取得し、前記第２後処理ステップは、取得した前記処理結果と、前記メモリに格納された複数の処理結果とを用いて、前記多数決することにより処理結果を補正することを特徴とする。
【００１８】
また本発明において、前記安全アプリ処理ステップは、前記アプリケーションに含まれる複数のタスクを実行し、前記第１後処理ステップは、前記複数のタスクから得られたそれぞれの処理結果に対して前記メモリに格納された複数のタスクの処理結果と比較し、比較した結果が一致しているか又は所定の誤差範囲にあるかに基づいてエラーの有無を判断し、前記複数のタスク毎の判断結果を多数決することにより、前記アプリケーションの処理結果に対する前記エラーの有無を判断することが好ましい。
【００１９】
なお、本発明の構成要素、表現又は構成要素の任意の組み合わせを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造等に適用したものも本発明の態様として有効である。
【発明の効果】
【００２０】
本発明によれば、安全かつ信頼性、可用性及びコスト面の改善を実現し、高精度に自己診断することができる。
【図面の簡単な説明】
【００２１】
【図１】自己診断装置のブロック構成の一例を示す図である。
【図２】本実施形態における管理テーブルの一例を示す図である。
【図３】処理結果領域の構成を説明するための図である。
【図４】本実施形態における前処理の一例を示すフローチャートである。
【図５】本実施形態における安全アプリ処理の一例を示すフローチャートである。
【図６】本実施形態における中間処理の一例を示すフローチャートである。
【図７】本実施形態における第１後処理の一例を示すフローチャートである。
【図８】本実施形態における第２後処理の一例を示すフローチャートである。
【図９】本実施形態における自己診断の各処理タイミングを説明するためのタイミングチャートである。
【発明を実施するための形態】
【００２２】
＜本発明について＞
本発明は、一定周期内で同一安全機能を持つ安全アプリ処理を複数回実行し、その実行結果を基準として、例えば、ＣＰＵやメモリのソフトエラー等の一過性エラーを検出する。また、本発明では、上述の安全アプリ処理をダイバース（ｄｉｖｅｒｓｅ）診断手法を用いて実施することで、同一出力であっても処理方式を別にすることにより一過性エラー以外のＣＰＵやメモリの異常等を診断することができる。
【００２３】
ここで、本発明における「ダイバース診断手法」を以下のように定義する。ダイバース診断手法とは、例えば、所定の入力データを読み込み、同一のデータを出力する場合に、その入力データの読み込む機器（計器等）や処理方式等を別にして得られる結果を診断するものである。更に具体的に説明すれば、例えば、ある固定位置から温度や圧力、電圧、流量等を計測する場合には、計測される計器の違い（ここで、計器の違いには、例えば同種類の２つの計器や他社製の異なる計器といった概念も含む）であったり、取得したデータに対して何らかのデータ処理を行う場合には、そのプログラム言語の違いやアルゴリズムの違い、バージョンの違い、コンパイラの違い、コンパイラのパラメータの違い、複数のタスクを実行する場合には、その実行順序の違い等といった、それぞれ異なる条件において処理された結果を用いて診断することをいう。なお、ダイバース診断手法における異なる条件については、本発明においてはこれに限定されるものではない。また、ダイバース診断手法により設定される条件は、上記の違いのうち何れか１つでもよく、複数を組み合わせてもよい。
【００２４】
また、本発明では、ダイバースにより得られるそれぞれの誤差範囲やデータの誤差範囲について、予め設定しておき、その設定された範囲において一致か否かを判断したり、適宜多数決により、その処理結果が正常か異常かを判断することによりソフトウェアエラーの安全性を向上させる。
【００２５】
以下に、本発明における自己診断装置及び自己診断方法を好適に実施した形態について、図面を用いて説明する。なお、以下に示す実施形態では、一例として、プラント等で適用される自己診断装置の例について説明するが、本発明においてはこれに限定されるものではない。
【００２６】
＜自己診断装置のブロック構成例＞
図１は、自己診断装置のブロック構成の一例を示す図である。図１に示す自己診断装置１は、ＣＰＵ１０と、メモリ２０とを有するように構成されている。ＣＰＵ１０における機能としては、前処理部１１と、安全アプリ処理部１２と、中間処理部１３と、第１後処理部１４と、第２後処理部１５と、自己診断・他処理部１６とを有している。なお、上記機能による各処理は、図１に示すように、予め設定された定周期起動により実行される。
【００２７】
また、本実施形態における安全アプリ処理部１２は、後述するように３回の安全アプリ処理による多数決処理も含んでいるため、図１に示すように、それぞれの処理を行う安全アプリ処理部１２−１〜１２−３を有しているが、本発明においてはこれに限定されるものではなく、例えば１つの安全アプリ処理部１２において所定のタイミングで複数の安全アプリ処理が実行されてもよい。
【００２８】
また、図１に示すメモリ２０は、管理テーブル２１と、処理結果領域２２と、処理結果初期退避領域２３と、処理結果１次処理退避領域２４と、処理結果２次処理退避領域２５とを有するよう構成されている。
【００２９】
前処理部１１は、安全アプリ処理部１２による最初の安全アプリ処理が実行される前に、安全アプリ処理の結果により書き変えられてしまうデータを、予めメモリ２０が有する処理結果初期退避領域２３に退避する処理を行う。
【００３０】
また、安全アプリ処理部１２−１〜１２−３は、安全機能を実現する１又は複数の予め設定されたタスクからなるアプリケーション処理を実行する。なお、安全アプリ処理部１２−１〜１２−３におけるそれぞれの安全アプリ処理としては、例えば入力点や入力データ、実行プログラムや計器等の設備、タスク順序も完全に同一として同一処理を実行する場合と、上述したダイバース診断手法により、例えば入力点や入力データ等は同一として、その他の実行プログラムや計器等の設備、タスク順序等の少なくとも１つを変えて別処理を実行する場合、若しくは同一処理と別処理とを組み合わせる場合とがある。したがって、安全アプリ処理部１２−１〜１２−３は、実行するタスクの内容や順序により時間経過に伴う複数のアナログデータ（プロセスデータ）を取得することができる。
【００３１】
なお、安全アプリ処理部１２−１〜１２−３における各安全アプリ処理としては、例えばプラント等を例にすると、所定の位置に対して、あるタスクでは温度を計測し、またあるタスクでは圧力を計測したり、またあるタスクでは電圧を計測するといった場合に、安全アプリ処理毎に、例えば同一の温度計や圧力計を用いたり、計器のバーションを変えたり、他社メーカーの温度計や圧力計を用いたりして、上述のダイバース診断手法により設定される条件で複数の処理を実行することができ、その結果、所定の位置に対して各安全アプリ処理から時間経過に伴うアナログデータ（プロセスデータ）を取得することができる。
【００３２】
また、本実施形態では、安全アプリ処理における入力値が、予め設定された上限値や下限値を超えているか等といった判断は行わず、安全アプリ処理により得られた実行結果をそのまま用いて後段の処理を行う。
【００３３】
中間処理部１３は、１回目の安全アプリ処理部１２−１における安全アプリ処理の後に、その処理結果を処理結果１次処理退避領域２４に退避する。また、中間処理部１３は、処理結果初期退避領域２３のデータにより初期状態を復元し、そのデータを用いて安全アプリ処理部１２−２における２回目の安全アプリ処理を起動して実行させる。
【００３４】
第１後処理部１４は、上述した安全アプリ処理部１２−１における１回目の処理結果と、安全アプリ処理部１２−２における２回目の処理結果とが一致しているか否かを判断する。第１後処理部１４は、上述した判断の結果、１回目と２回目の処理結果が一致していれば、ソフトエラーは発生していないと判断する。
【００３５】
なお、通常、１回目と２回目の処理タイミングが異なるため、その時間の違いにより入力されるアナログデータ等に誤差が生じる。具体的に説明すると、例えば、プラント等であれば、最初の起動時と起動後においては、その温度や圧力に違いが生じる。更に、ダイバース診断手法により１回目と２回目で異なるプログラム等を用いて処理を実行した場合にも数値の有効桁数（固定小数点、浮動小数点等）による誤差が発生する。そのため、本実施形態では、誤差範囲を予め計算等により設定しておき、誤差の範囲内なら一致とみなす。
【００３６】
つまり、第１後処理部１４は、１回目と２回目の処理結果とが一致していない場合、その誤差が所定の誤差範囲内であるか否かを判断する。なお、誤差範囲内であるか否かの判断は、例えば、管理テーブル２１に予め設定されている処理結果誤差範囲のデータに基づいて判断することができる。また、ディジタルデータの入力についても誤差が発生するが、その場合には後述する３回目の安全アプリ処理を実行し、多数決により処理結果を確定することができる。
【００３７】
ここで、上述した安全アプリ処理は、複数のタスクが実行される場合もある。そのため、１回目と２回目の処理結果には、それぞれ複数のタスクによる実行結果が含まれている場合がある。その場合、第１後処理部１４は、１回目と２回目の安全アプリ処理によって得られた複数のタスクのそれぞれの実行結果に対して上述した一致の判断を行う。したがって、第１後処理部１４は、例えば、処理結果が一致する場合又は所定の誤差範囲内である場合には「〇」とし、それ以外の場合には「×」として、全てのタスク毎の判断結果を多数決処理することで、安全アプリ処理における実行結果が一致しているか否かを判断することができる。
【００３８】
また、第１後処理部１４は、上述した判断の結果、１回目と２回目の処理結果が一致しておらず、また所定の誤差範囲内に含まれない場合に、第２後処理部１５により多数決処理を行うために安全アプリ処理部１２−３における３回目の安全アプリ処理を起動して実行させる。
【００３９】
第２後処理部１５は、第１後処理部１４において、１回目と２回目の処理結果が、一致しておらず、また所定の誤差範囲にない場合に、安全アプリ処理部１２−３における処理結果に基づいて、上述した１回目及び２回目の処理結果と、３回目の処理結果とを用いて、多数決により処理結果を確定する。ここでの多数決処理としては、上述したように、その処理結果が一致している場合又は所定の誤差範囲内である場合には「○」とし、それ以外の場合には「×」として、「○」の数が多ければ処理結果が正常であると判断する。
【００４０】
なお、上述したように、安全アプリ処理部１２−１〜１２−３における処理には、複数のタスクを含む場合もあるため、その場合には、上述したように全てのタスク毎の判断結果を多数決することで、その結果が一致しているか否かを判断する。
【００４１】
ここで、第２後処理部１５は、１回目〜３回目の安全アプリ処理による処理結果が多数決に達しない場合、すなわち上記の例でいえば「×」の数が「〇」の数より多い場合には、修復できないソフトエラーであると判断して予め設定されたエラー処理を行う。なお、エラー処理としては、例えば、ＣＰＵ１０における動作を停止させたり、その後の自己診断・他処理部１６における処理に制限を加えたりしてもよく、またエラーメッセージをメモリ２０の処理結果領域２２に格納したり、自己診断装置１が有する画面等に表示したり、警報を出力したりすることができる。
【００４２】
また、第２後処理部１５は、１回目〜３回目の安全アプリ処理による処理結果が多数決に達した場合には、例えば１回目〜３回目の処理結果の１つに「×」の判断があったとしても、その処理結果を正常として補正する。
【００４３】
なお、上述したように第１後処理部１４において、１回目と２回目の処理結果が一致した場合又は処理の誤差範囲である場合には、正常であるとして、その処理周期においては、図１に示すように上述した安全アプリ処理部１２−３における安全アプリ処理や第２後処理部１５の処理は行わない。
【００４４】
自己診断・他処理部１６は、例えば上述した安全アプリ処理による安全機能以外にける本装置の安全機能を果たす上で必要となるＣＰＵ１０やメモリ２０等の安全関連系についての自己診断処理や伝送処理、若しくは非安全機能等の処理を行う。具体的には、自己診断・他処理部１６は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の自己診断やＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）のＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）演算による自己診断の処理等が行われるが、本発明においてはこれに限定されるものではない。
【００４５】
また、本実施形態のメモリ２０において、管理テーブル２１は、本実施形態を実現するための各種データが格納する領域であり、例えばアナログ入力処理結果誤差や退避領域等のデータが管理される。なお、本実施形態における管理テーブルの詳細については後述する。
【００４６】
処理結果領域２２は、上述した安全アプリ処理部１２−１〜１２−３における安全アプリ処理の処理結果が書き込まれる領域である。なお、処理結果領域２２は、連続した領域である必要はない。また、処理結果領域２２に含まれるデータにおいては、処理中に一時的に発生する変数等のデータは、対象外とする。
【００４７】
処理結果初期退避領域２３は、処理周期開始時の処理結果領域のデータを退避する領域である。処理結果１次退避領域２４は、安全アプリ処理部１２−１における処理結果を退避する領域である。処理結果２次退避領域２５は、安全アプリ処理部１２−２における処理結果を退避する領域である。
【００４８】
ここで、本実施形態における自己診断処理では、３回の安全アプリ処理による処理結果を多数決処理する例を示している。つまり、本実施形態では、奇数回の実行により「〇」、「×」の何れかの数が必ず多くなるため、正常や異常かを容易に判断することができる。なお、本発明においてはこれに限定されるものではなく、偶数回実行されてもよい。偶数回実行される場合には、例えば「〇」、「×」の数が同一であれば、安全性を優先し「異常」とみなすといった処理を行うことで、適切に判断することもできる。また、安全アプリ処理の回数に応じて安全アプリ処理部１２やメモリ２０における処理結果の退避領域（処理結果初期退避領域２１，処理結果１次退避領域２２，処理結果２次退避領域２２）の数も適宜調整される。
【００４９】
本実施形態では、上述した安全機能を実行する安全アプリ処理を、予め決めた一定の周期、一定の順序で動作させる方式を採用する。したがって、本実施形態では、一定の周期の間に正常時には２回、異常時には３回以上の安全アプリ処理が実行されることになる。
【００５０】
また、本実施形態では、メモリ２０に処理結果領域２１と処理結果初期退避領域２１と処理結果Ｎ次処理退避領域とを設ける。なお、Ｎは、Ｎ＝Ｍ−１の関係とする。したがって、本実施形態では、３回目以上で最大Ｍ回まで安全アプリ処理を実行することも可能である。
【００５１】
ここで、Ｍ回目の当該処理の結果と、１回目からＭ−１回目のデータを処理結果１次処理退避領域から処理結果Ｎ次処理退避領域のデータにより多数決原理に従って判定し、多数決データを安全アプリの処理結果とする。また、安全アプリ処理の１回目からＭ回目の処理をダイバース診断手法により処理する場合は、その実施される安全アプリ処理の内容を適宜変更することで、ソフトエラーや発振によるエラーだけでなく、診断対象における固着や断線、ドリフトエラー等を検出することができる。
【００５２】
＜管理テーブル２１の具体例＞
ここで、上述した本実施形態における管理テーブル２１の具体例について説明する。図２は、本実施形態における管理テーブルの一例を示す図である。図２に示す管理テーブルは、（ａ）アナログ入力処理結果誤差、（ｂ）退避領域管理テーブル、（ｃ）後処理テーブルを含む各情報がテーブルとして格納されている。また、図２（ａ）〜（ｃ）における「処理結果」の項目は、安全アプリ処理毎に実行される１又は複数のタスク処理に対する処理結果等を示している。
【００５３】
管理テーブル２１において、（ａ）アナログ入力処理結果誤差は、予め安全アプリ処理の処理時刻のズレによるアナログ入力の誤差を設定しておくデータである。ここで、（ａ）アナログ入力処理結果誤差における具体的なデータ項目としては、例えば、「処理結果」、及び「処理結果誤差」等のデータが格納され、具体的には、「処理結果」と「処理結果誤差」との組で格納される。なお、図２（ａ）の例ではタスク１処理結果２に対する誤差を「０．１℃」とし、タスク３処理結果１に対する誤差を「０．１ｍＶ」としている。このように、タスク毎に上述した誤差範囲を詳細に設定することができる。
【００５４】
また、管理テーブル２１において、（ｂ）退避領域管理テーブルは、処理結果領域の各データについてのアドレスとバイト数を予め設定し、それに対応する初期退避領域、１次処理退避領域、２次処理退避領域のアドレスを予め設定するテーブルである。ここで、（ｂ）退避領域管理テーブルにおける具体的なデータ項目としては、例えば、「処理結果」、「処理結果領域数（アドレス）」、「処理結果領域数（バイト）」、「初期退避領域アドレス」、「１次処理退避領域アドレス」、「２次処理退避領域アドレス」等のデータが格納される。なお、格納されるデータの内容や形式については、特に制限されるものではなく、各アドレスに基づいて必要なデータを所定の退避領域から読み出したり、処理後のデータを所定の退避領域に書き込んだりするための管理情報であればよい。
【００５５】
また、管理テーブル２１において、（ｃ）後処理テーブルは、上述した第１後処理部１４、及び第２後処理部１５に示すような後処理で起動する各安全アプリの各タスクに対応して、例えばディジタル出力をしてフィードバックを確認する等の処理プロブラムを設置する。なお、第１後処理部１４及び第２後処理部１５における各後処理は、上述した安全アプリ処理部と同様に２回実施し結果の一致を確認する。また、一致しない場合は、安全アプリ処理を３回以上実施し、その結果に対して多数決処理を行う等のソフトエラー対策を行う。
【００５６】
＜処理結果領域２２の具体例＞
次に、上述した本実施形態における処理結果領域２２の具体例について説明する。図３は、処理結果領域の構成を説明するための図である。なお、図３に示す処理結果領域２２では、実行された安全アプリ処理における各タスクの処理結果が格納される。なお、処理結果領域２２は、連続領域である必要はない。また、図３に示すように処理結果領域２２に格納される処理結果には、一定周期を管理するために処理周期毎に加算するカウンタ等も含まれる。
【００５７】
＜前処理＞
次に、本実施形態における前処理部１１における処理の具体例についてフローチャートを用いて説明する。図４は、本実施形態における前処理の一例を示すフローチャートである。なお、図４に示すフローチャートは、所定の処理周期に対応して定周期で起動される。
【００５８】
本実施形態における前処理では、上述した管理テーブル２１を読み込み（Ｓ０１）、処理結果領域のデータを処理結果初期退避領域へ退避する（Ｓ０２）。
【００５９】
＜安全アプリケーション処理＞
次に、本実施形態の安全アプリ処理部１２−１、安全アプリ処理部１２−２、及び安全アプリ処理部１２−３における処理の具体例についてフローチャートを用いて説明する。図５は、本実施形態における安全アプリ処理の一例を示すフローチャートである。図５に示す安全アプリ処理は、安全機能に対応して予め設定された１又は複数のタスク等で構成される。なお、図５の例では、ｉ個のタスクを有する場合について説明する。
【００６０】
まず、タスク１の処理を行う（Ｓ１１）。Ｓ１１の処理では、データ（例えば、ディジタル入力、アナログ入力、定数、可変データ、処理結果領域のデータ等）を入力し（Ｓ１１−１）、次に、例えば入力データに対する所定のプログラムの実行（例えば、温度計算、圧力計算、その他の数値計算等）による処理を行い（Ｓ１１−２）、その処理結果を処理結果領域へ出力する（Ｓ１１−３）。
【００６１】
また、Ｓ１１の処理の後、次のタスク２の処理を行う（Ｓ１２）。なお、タスク２では、上述したタスク１に示すような処理が行われる。したがって、例えば、タスク１では温度チェックを行い、タスク２では圧力チェック処理を行うといった予め設定されたタスク処理が行われる。その後、予め設定されたタスク数（図５の例では、タスクｉ）まで、予め設定された順序で実行される（Ｓ１ｉ）。
【００６２】
なお、図５に示す安全アプリ処理は、例えば上述した安全アプリ処理部１２−１及び安全アプリ処理部１２−２、更には安全アプリ処理部１２−３において、上述したダイバース診断手法を用いて設定された条件に基づいて処理が行われる。なお、どのようなタスクを実行するかについては、診断対象等により予め設定され、例えばメモリ２０の管理テーブル２１等に格納することができる。
【００６３】
＜中間処理＞
次に、本実施形態の中間処理部１３における処理の具体例について、フローチャートを用いて説明する。図６は、本実施形態における中間処理の一例を示すフローチャートである。図６に示す処理では、上述した管理テーブル２１を読み込み（Ｓ２１）、次に、処理結果領域のデータを処理結果１次処理退避領域２４へ退避させる（Ｓ２２）。また、処理結果初期退避領域２３のデータを処理結果領域へ復元する（Ｓ２３）。これにより、後述する第１後処理において、安全アプリ処理部１２−１と安全アプリ処理部１２−２との間で比較させることができる。
【００６４】
＜第１後処理＞
次に、本実施形態の第１後処理における処理の具体例について、フローチャートを用いて説明する。図７は、本実施形態における第１後処理の一例を示すフローチャートである。図７に示す第１後処理では、上述した管理テーブル２１を読み込み（Ｓ３１）、次に、処理結果領域のデータとそれに対応する１次処理退避領域のデータを比較する（Ｓ３２）。
【００６５】
ここで、データが一致するか否かを判断し（Ｓ３３）、データが一致しない場合（Ｓ３３において、ＮＯ）、次に、その一致していないデータが予め設定された誤差範囲内か否かを判断する（Ｓ３４）。なお、誤差範囲内か否かの判断は、例えば上述した図２に示す管理テーブル２１の（ａ）アナログ入力処理結果誤差の誤差内か否かにより判定することができる。
【００６６】
上述したＳ３３の処理において、比較したデータが一致した場合（Ｓ３３において、ＹＥＳ）、又はＳ３４の処理において、誤差範囲内である場合（Ｓ３４において、ＹＥＳ）、例えば、図２の（ｃ）に示す後処理テーブルの後処理を実行する（Ｓ３５）。
【００６７】
ここで、各タスクの全データについて比較したか否かを判断し（Ｓ３６）、全データについて比較していない場合（Ｓ３６において、ＮＯ）、Ｓ３２に戻り以降の処理を行う。また、Ｓ３６の処理において、全データについて比較した場合（Ｓ３６において、ＹＥＳ）、自己診断・他処理を呼び出して終了する（Ｓ３７）。
【００６８】
また、上述したＳ３４の処理において、誤差範囲内でない場合（Ｓ３４において、ＮＯ）、処理結果領域のデータを処理結果２次処理退避領域へ退避する（Ｓ３８）。また、処理結果初期退避領域のデータを処理結果領域へ復元し（Ｓ３９）、上述した安全アプリ処理を呼び出して終了する（Ｓ４０）。
【００６９】
＜第２後処理＞
次に、本実施形態の第２後処理における処理の具体例について、フローチャートを用いて説明する。図８は、本実施形態における第２後処理の一例を示すフローチャートである。図８に示す第２後処理では、まず、退避領域管理テーブルを読み込み（Ｓ５１）、次に、処理結果領域のデータと、それに対応する１次処理退避領域のデータと、２次処理退避領域のデータとを比較する（Ｓ５２）。
【００７０】
ここで、上述３データのうち、何れか２データが一致するか否かを判断する（Ｓ５３）。３データのうち、何れか２データが一致しない場合（Ｓ５３において、ＮＯ）、次に、３データのうち、何れか２データが予め設定された誤差範囲内であるか否かを判断する（Ｓ５４）。なお、誤差範囲内か否かの判断は、例えば上述した図２に示す管理テーブル２１の（ａ）アナログ入力処理結果誤差の誤差内か否かにより判断することができる。
【００７１】
上述したＳ５３の処理において、何れか２データが一致する場合（Ｓ５３において、ＹＥＳ）、又は、Ｓ５４の処理において、何れか２データが誤差範囲内である場合（Ｓ５４において、ＹＥＳ）、当該データを処理結果領域へ格納し（Ｓ５５）、後処理テーブルの後処理を実行する（Ｓ５６）。なお、Ｓ５５において格納する当該データは、一致した２データのうちの１データとする。
【００７２】
ここで、全データの比較が終了したか否かを判断し（Ｓ５７）、全データの比較が終了していない場合（Ｓ５７において、ＮＯ）、Ｓ５２に戻り以降の処理を行う。
【００７３】
また、上述したＳ５４の処理において、３データのうち、２データが誤差範囲内でない場合（Ｓ５４において、ＮＯ）、エラー処理を実行する（Ｓ５８）。なお、エラー処理とは、ＣＰＵ異常と判定し、ＣＰＵを停止する等のＣＰＵエラー処理を実行する。
また、Ｓ５８又はＳ５９の処理が終了後、自己診断・他処理を呼び出して終了する（Ｓ５９）。
【００７４】
＜タイミングチャート＞
上述したように、本実施形態における処理結果を用いた自己診断処理については、予め設定された処理周期で繰り返し行われる。ここで、図９は、本実施形態における自己診断の各処理タイミングを説明するためのタイミングチャートである。なお、図９に示す例では、上述した第１後処理部１５における処理において異常と判断された場合のタイミングチャートを示している。
【００７５】
本実施形態では、図９に示すように、所定の処理周期（図９の例では、処理周期１，処理周期２）において、時間の経過と共に、「前処理」、「安全アプリ処理（１回目）」、「中間処理」、「安全アプリ処理（２回目）」、「第１後処理」、「安全アプリ処理（３回目）」、「第２後処理」、「自己診断・他処理」の順で実行される。
【００７６】
なお、第１後処理において、正常と判断された場合には、「安全アプリ処理（３回目）」及び「第２後処理」における処理は行わず、「第１後処理」の処理直後に「自己診断・他処理」が所定周期における残りの時間で行われる。
【００７７】
なお、図９の例では、各処理周期においては、処理が終了してから次の周期が始まるまでの時間誤差等を吸収するための余裕時間が設けられている。また、本実施形態における処理周期は、図９に示すように２回に限定されるものではない。
【００７８】
上述したように本発明によれば、安全かつ信頼性、可用性及びコスト面の改善を実現し、高精度に自己診断することができる。
【００７９】
具体的には、本発明によれば、例えば、ＲＡＭ等のソフトエラー（α線等によるデータ化けエラー）について、安全アプリ処理を複数回実行することによりＣＰＵの冗長化やハードウェアの検出機構を用いずに低コストで検出することができる。また、安全アプリ処理を、ダイバース診断手法により処理することによりソフトエラー以外のＣＰＵやメモリのエラーを検出することができ、自己診断処理を軽減することができる。また、本発明によれば、例えばＣＰＵやメモリのソフトエラーを検知し多数決により補正することで、安全かつ信頼性、可用性及びコスト面を改善することができる。
【００８０】
また、本発明は、ＯＳや市販ソフトウェア等、ブラックボックスのソフトウェアについても適用することができる。また、既存ソフトウェアを適用する場合にＤｏｕｂｌｅ  ＲＡＭ対応等のために処理に変更を加えることなく当該ソフトウェアを適用できる。また、自己診断や他の非安全関連処理は重複して処理する必要はなく、ＣＰＵの負荷を小さくすることができる。
【００８１】
なお、本発明における自己診断装置は、例えば安全インバータや安全コントローラ、その他各種プラント等に適宜組み込んで実施することができる。
【００８２】
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
【符号の説明】
【００８３】
１  自己診断装置
１０  ＣＰＵ
１１  前処理部
１２  安全アプリ処理部
１３  中間処理部
１４  第１後処理部
１５  第２後処理部
１６  自己診断・他処理部
２０  メモリ
２１  管理テーブル
２２  処理結果領域
２３  処理結果初期退避領域
２４  処理結果１次処理退避領域
２５  処理結果２次処理退避領域
【図１】
0005521684.tif 000002
【図２】
0005521684.tif 000003
【図３】
0005521684.tif 000004
【図４】
0005521684.tif 000005
【図５】
0005521684.tif 000006
【図６】
0005521684.tif 000007
【図７】
0005521684.tif 000008
【図８】
0005521684.tif 000009
【図９】
0005521684.tif 000010