(57)【特許請求の範囲】
【請求項１】
所定の周期で動作する１つ又は複数のプログラムの異常を検出するプログラム異常検出装置であって、
１つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報を格納する実行値格納部と、
所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報を格納する設計値格納部と、
前記所定のタイミングで、前記動作状態情報及び前記予定動作状態情報を比較する比較部とを備え、
前記比較部は、前記比較の結果、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断し、
前記所定のタイミングは、前記プログラムの動作開始予定直後である第１のタイミングと、前記プログラムの動作終了予定直後である第２のタイミングとであることを特徴とするプログラム異常検出装置。
【請求項２】
前記所定のタイミングを示す比較トリガを生成するトリガ発生部をさらに備え、
前記比較部は、前記比較トリガに基づき前記所定のタイミングで前記比較を行うことを特徴とする請求項１に記載のプログラム異常検出装置。
【請求項３】
前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、
前記設計値格納部は、前記第１及び第２のタイミングにおける前記プログラムの動作予定を示す第１及び第２の予定動作状態情報を前記予定動作状態情報として格納し、
前記比較部は、前記第１のタイミングで前記動作状態情報及び前記第１の予定動作状態情報を比較し、前記第２のタイミングで前記動作状態情報及び前記第２の予定動作状態情報を比較することを特徴とする請求項１に記載のプログラム異常検出装置。
【請求項４】
前記所定のタイミングは、複数のプログラムが互いに関連して動作する場合に、前記第１及び第２のタイミングに代えて、前記複数のプログラムのうち所定のプログラムの動作が開始される第３のタイミングと、前記所定のプログラムの動作が終了する第４のタイミングとであることを特徴とする請求項１に記載のプログラム異常検出装置。
【請求項５】
前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、
前記設計値格納部は、前記第３及び第４のタイミングにおける前記複数のプログラムの動作予定を示す第３及び第４の予定動作状態情報を前記予定動作状態情報として格納し、
前記比較部は、
前記第３のタイミングで、前記所定のプログラムからの前記プログラム開始情報を受け取り、該プログラム開始情報に基づき前記動作状態情報及び前記第３の予定動作状態情報を比較し、
前記第４のタイミングで、前記所定のプログラムからの前記プログラム終了情報を受け取り、該プログラム終了情報に基づき前記動作状態情報及び前記第４の予定動作状態情報を比較することを特徴とする請求項４に記載のプログラム異常検出装置。
【請求項６】
所定の周期で動作する１つ又は複数のプログラムの異常を検出するプログラム異常検出方法であって、
１つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報と、前記プログラムの動作開始予定直後である第１のタイミング、及び前記プログラムの動作終了予定直後である第２のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報とを前記第１及び第２のタイミングで比較し、
前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とするプログラム異常検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム異常検出装置及びプログラム異常検出方法に関し、特に、検出結果に応じて異常を自己復旧することが可能な装置及び方法に関する。
【背景技術】
【０００２】
近年、加速度的な技術の進歩により、ＰＣ（Personal Computer）や通信機器等の電子機器の多機能化や、それに伴うファームウェアの複雑化・大規模化が進んでいる。また、電子機器の低消費電力化のため、電子機器を構成するデバイスのコア電圧の低電圧化や、デバイス構造の微細化が進んでいる。その一方では、電子機器の開発期間の短縮が求められている。
【０００３】
このような開発環境においては、十分な試験期間を設けることができないため、ファームウェアに内在するバグを取り切れず、装置動作上の不具合となるプログラム誤動作が発生することが多い。
【０００４】
また、最近では、デバイス構造の微細化により中性子線等の影響が深刻化しており、この中性子線等がソフトエラーを発生させる原因となっている。ソフトエラーは、プログラム誤動作やデータ領域のビット反転といった問題の原因となっており、設計完了後の電子機器の動作に大きな影響を及ぼす。特に、高所に設置される無人無線局等のマイクロ波無線装置では、地上や地下よりも中性子線等の影響をより多く受けるため、上述した問題の発生確率が上昇する。
【０００５】
ソフトエラーによる不具合としては、例えば、ファームウェアの基本部分にプログラム誤動作が発生し、ＣＰＵ（Central Processing Unit）全体が動作しなくなることが考えられる。この不具合の対策としては、例えば、ウォッチドッグタイマを用いてＣＰＵのリセットを実行することにより、自己復旧させる方法が一般的に用いられる（例えば、特許文献１）。
【０００６】
また、ソフトエラーによる他の不具合としては、例えば、データ領域にビット反転が発生し、ファームウェア自体は動作しているが、期待する動作とならないことが考えられる。この不具合の対策としては、例えば、データ領域に対してパリティチェックを実施することにより、エラー箇所を検出する方法が一般的に用いられる（例えば、特許文献２及び３）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−６７２２０号公報
【特許文献２】特開平４−３７３０４５号公報
【特許文献３】特開昭６３−１４２４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、中性子線等の影響によりプログラム格納領域にソフトエラーが発生し、プログラムが誤動作する場合について考える。この場合、プログラムの誤動作により、ファームウェアや一部のプログラムが不正ループに陥るなど、外部からの制御が不可能になる可能性がある。
【０００９】
このとき、ファームウェアとしては、内部プログラムが動作していると判断する可能性が高く、一部のプログラムが動作していると判断した場合には、ウォッチドッグタイマへのリセットパルスの発出が続けられる。そのため、ウォッチドッグタイマによるＣＰＵのリセットを期待することができないという問題があった。
【００１０】
また、データ領域だけでなく、プログラム格納領域全体に対するパリティチェックは、ファームウェアの負荷が大きく現実的ではない。そのため、プログラムの誤動作を有効的に検出することができないという問題があった。
【００１１】
そこで、本発明は、上記従来の技術における問題点に鑑みてなされたものであって、プログラムの動作異常を検出することができ、信頼性を向上させることが可能なプログラム異常検出装置及びプログラム異常検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明は、所定の周期で動作する１つ又は複数のプログラムの異常を検出するプログラム異常検出装置であって、１つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報を格納する実行値格納部と、所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報を格納する設計値格納部と、前記所定のタイミングで、前記動作状態情報及び前記予定動作状態情報を比較する比較部とを備え、前記比較部は、前記比較の結果、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断し、前記所定のタイミングは、前記プログラムの動作開始予定直後である第１のタイミングと、前記プログラムの動作終了予定直後である第２のタイミングとであることを特徴とする。
【００１３】
そして、本発明によれば、１つ又は複数のプログラムの動作状態が変化した際に生成される、プログラムの動作状態を示す動作状態情報と、所定のタイミングである第１及び第２のタイミングにおけるプログラムの動作予定を示す予定動作状態情報とを比較するため、第１及び第２のタイミングにおいて、プログラムが正常に動作しているか否かを判断することができる。
【００１４】
上記プログラム異常検出装置において、前記所定のタイミングを示す比較トリガを生成するトリガ発生部をさらに備え、前記比較部は、前記比較トリガに基づき前記所定のタイミングで前記比較を行うことができる。これにより、比較部は、予め設定された任意のタイミングで、プログラムの動作異常を検出することができる。
【００１６】
上記プログラム異常検出装置において、前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第１及び第２のタイミングにおける前記プログラムの動作予定を示す第１及び第２の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第１のタイミングで前記動作状態情報及び前記第１の予定動作状態情報を比較し、前記第２のタイミングで前記動作状態情報及び前記第２の予定動作状態情報を比較することができる。これにより、プログラムの動作開始予定及び動作終了予定のタイミングで、プログラムの動作異常を検出することができる。
【００１７】
上記プログラム異常検出装置において、前記所定のタイミングを、複数のプログラムが互いに関連して動作する場合に、前記第１及び第２のタイミングに代えて、前記複数のプログラムのうち所定のプログラムの動作が開始される第３のタイミングと、前記所定のプログラムの動作が終了する第４のタイミングとすることができる。
【００１８】
上記プログラム異常検出装置において、前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第３及び第４のタイミングにおける前記複数のプログラムの動作予定を示す第３及び第４の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第３のタイミングで、前記所定のプログラムからの前記プログラム開始情報を受け取り、該プログラム開始情報に基づき前記動作状態情報及び前記第３の予定動作状態情報を比較し、前記第４のタイミングで、前記所定のプログラムからの前記プログラム終了情報を受け取り、該プログラム終了情報に基づき前記動作状態情報及び前記第４の予定動作状態情報を比較することができる。これにより、所定のプログラムの動作開始及び動作終了のタイミングで、互いに関連して動作する複数のプログラムの動作異常を検出することができる。
【００１９】
また、本発明は、所定の周期で動作する１つ又は複数のプログラムの異常を検出するプログラム異常検出方法であって、１つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報と、前記プログラムの動作開始予定直後である第１のタイミング、及び前記プログラムの動作終了予定直後である第２のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報とを前記第１及び第２のタイミングで比較し、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とする。本発明によれば、前記発明と同様に、第１及び第２のタイミングにおいて、プログラムが正常に動作しているか否かを判断することができる。
【発明の効果】
【００２０】
以上のように、本発明によれば、プログラムの動作異常を検出することができ、信頼性を向上させることが可能になる。
【図面の簡単な説明】
【００２１】
【図１】本発明にかかるプログラム異常検出装置の第１の実施形態を示すブロック図である。
【図２】実行予定値テーブルの一例を示す略線図である。
【図３】プログラムが正常に動作する場合におけるプログラム異常検出処理について説明するためのシーケンス図である。
【図４】プログラムの動作に異常が発生した場合におけるプログラム異常検出処理について説明するためのシーケンス図である。
【図５】プログラム異常検出処理について説明するためのタイミングチャートであり、（ａ）はプログラムが正常に動作する場合、（ｂ）はプログラムの動作に異常が発生した場合を示す図である。
【図６】本発明にかかるプログラム異常検出装置の第２の実施形態を示すブロック図である。
【図７】実行予定値テーブルの一例を示す略線図である。
【図８】プログラムが正常に動作する場合におけるプログラム異常検出処理について説明するためのシーケンス図である。
【図９】プログラムの動作に異常が発生した場合におけるプログラム異常検出処理について説明するためのシーケンス図である。
【図１０】プログラム異常検出処理について説明するためのタイミングチャートであり、（ａ）はプログラムが正常に動作する場合、（ｂ）はプログラムの動作に異常が発生した場合を示す図である。
【発明を実施するための形態】
【００２２】
次に、本発明を実施するための形態について、図面を参照しながら詳細に説明する。
【００２３】
図１は、本発明にかかるプログラム異常検出装置の第１の実施形態を示し、このプログラム異常検出装置１０は、１つ又は複数のプログラム１Ａ、１Ｂ、・・・、１Ｎ、実行値格納部２、設計値格納部３、比較部４及びトリガ発生部５で構成される。
【００２４】
プログラム１Ａ、１Ｂ、・・・、１Ｎ（以下、各プログラムを特に区別する必要がない場合には、「プログラム１」とする）は、例えば、ファームウェア上で動作するプログラムであり、予め設定された所定のプログラム実行周期で開始及び／又は終了を繰り返すプログラムである。
【００２５】
プログラム１は、例えば、このプログラム異常検出装置１０全体を起動させた際のリセット信号に応じて動作を開始する。そして、プログラム１は、予め設定されたプログラム実行時間経過後に動作を終了すると共に、動作終了後、予め設定されたプログラム待機時間経過後に動作を開始する。
【００２６】
また、プログラム１は、自身の動作状態に応じて、動作状態を示す動作状態レポートを生成する。具体的には、プログラム１は、プログラムの開始及び／又は終了を検出し、プログラムの開始を示すプログラム開始レポート及び／又は終了を示すプログラム終了レポートを生成する。プログラム１で生成された動作状態レポートは、実行値格納部２に対して出力される。
【００２７】
実行値格納部２は、各プログラム１から出力された動作状態レポートを受け取り、各プログラム１の実行状態を示す実行実測値テーブルを生成して記録する。実行実測値テーブルには、動作状態レポートを受け取った時点における各プログラム１の実行状態を示す値が格納される。
【００２８】
各プログラム１の実行状態を示す値としては、例えば、各プログラム１に対して１ビットが割り当てられ、割り当てられた１ビットの値「０」又は「１」に対して、プログラム１の状態を対応させる。この例において、値「１」は、プログラム１が実行中であることを示し、値「０」は、プログラム１が待機中であることを示す。この実行実測値テーブルに格納される値は、動作状態レポートを受け取る毎に上書きされて更新される。
【００２９】
設計値格納部３は、予め設定された各プログラム１の実行状態の予定を示す実行予定値テーブルを保持する。実行予定値テーブルには、図２に示すように、所定のタイミングを示す項目「タイミング」と、項目「タイミング」に記述されたタイミングにおける各プログラム１の実行状態の予定を示す項目「プログラム」とが記述される。
【００３０】
項目「タイミング」は、後述する比較部４における比較処理を行うタイミングを示す。例えば、「比較Ａ」は、予定としてプログラムが実行中であるタイミングを示し、「比較Ｂ」は、予定としてプログラムが待機中であるタイミングを示す。
【００３１】
項目「プログラム」は、項目「タイミング」に記述されたタイミングにおけるプログラム１の実行状態の予定を示し、この実行状態の予定を示す値が格納される。各プログラム１の実行状態の予定を示す値としては、実行実測値テーブルと同様に、例えば、各プログラム１に対して１ビットが割り当てられ、割り当てられた１ビットの値「０」又は「１」に対して、プログラム１の状態を対応させる。この例において、値「１」は、プログラム１が実行中であることを示し、値「０」は、プログラム１が待機中であることを示す。
【００３２】
説明は図１に戻り、比較部４は、後述するトリガ発生部５から供給される比較トリガを受け取り、この比較トリガを受けたタイミングで、実行値格納部２に格納された実行実測値テーブルと設計値格納部３に格納された実行予定値テーブルとを参照し、各々のテーブルに格納された値を比較する。
【００３３】
比較部４は、比較の結果、動作が異常である判断した場合に、異常状態を示すエラーレポートを出力する。この場合、プログラム１は、比較部４から出力されたエラーレポートに基づき、ＣＰＵに対してリセット処理を実行し、プログラムの動作を正常な状態に復旧させる処理を行う。
【００３４】
トリガ発生部５は、比較部４における比較処理を行うタイミングを決定するための比較トリガを生成し、比較部４に対して出力する。トリガ発生部５は、例えばタイマを備え、プログラム１の動作が開始されるタイミングでタイマによるカウントを開始し、カウント値が予め設定された値になった時点で比較トリガを出力する。
【００３５】
尚、プログラム１は、上述したように、プログラム異常検出装置１０全体の起動時におけるリセット信号に基づき動作を開始する予定であるので、トリガ発生部５は、このリセット信号によりプログラム１の動作開始を検出し、タイマによるカウントを開始する。
【００３６】
比較トリガは、例えば、タイマによるカウントが開始されてから第１の比較待機時間経過後と、第１の比較待機時間経過後からさらに第２の比較待機時間経過後と、第２の比較待機時間経過後からさらに第３の比較待機時間経過後とにおける時点で出力される。
【００３７】
具体的には、第１の比較待機時間は、比較トリガがプログラム１の動作開始予定後、且つ動作終了予定前に出力されるように設定される。また、第２の比較待機時間は、比較トリガがプログラム１の動作終了予定後、且つ次のプログラム１の動作開始予定前に出力されるように設定される。さらに、第３の比較待機時間は、比較トリガが次のプログラム１の動作開始予定後、且つ動作終了予定前に出力されるように設定される。
【００３８】
尚、プログラム１の動作異常をより早く検出できるようにするため、比較トリガがプログラム１の動作に変化が生じる時点により近いタイミングで出力されるように、各々の比較待機時間を設定すると好ましい。すなわち、比較トリガがプログラム１の動作開始予定直後、動作終了予定直後、及び次のプログラム１の動作開始予定直後に出力されるように、第１、第２及び第３の比較待機時間を設定する。
【００３９】
次に、上記構成を有するプログラム異常検出装置１０の動作について、図３〜図５を参照して説明する。ここでは、説明を容易とするため、１つのプログラム１の実行状態に基づく動作を例にとって説明する。また、この例において、設計値格納部３に格納された実行予定値テーブルは、図２に示すように設定されたものとし、実行値格納部２に格納された実行実測値テーブルに記述されたプログラム１の実行状態を示す値の初期値は、プログラムが待機中であることを示す値「０」とする。
【００４０】
まず、プログラム１が正常に動作する場合の異常検出処理について、図３及び図５（ａ）を参照して説明する。正常動作時において、プログラム１は、図５（ａ）に示すように、動作開始からプログラム実行時間ｔ４経過後に動作を終了し、プログラム待機時間ｔ５経過後に動作を開始する。そして、プログラム実行時間ｔ４及びプログラム待機時間ｔ５で表されるプログラム実行周期ｔ６毎に、この動作が繰り返し行われる。
【００４１】
図３に示すように、ステップＳ１において、プログラム１は、プログラム異常検出装置１０全体のリセット信号に基づき動作を開始すると、プログラム開始レポートを生成し、実行値格納部２に対して通知する（シーケンスＳＥＱ１）。実行値格納部２は、プログラム１からのプログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値「０」から値「１」に更新する（ステップＳ２）。また、トリガ発生部５は、リセット信号に基づき、プログラム１の動作開始と同時にタイマによるカウントを開始する（ステップＳ３）。
【００４２】
次に、トリガ発生部５は、プログラム１の動作開始（カウント開始）から予め設定された第１の比較待機時間ｔ１（図５（ａ））経過後に比較パルスを生成し、比較部４に対して出力する（シーケンスＳＥＱ２）。比較部４は、第１の比較待機時間ｔ１経過後にトリガ発生部５から供給される比較トリガに基づき、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ３、ＳＥＱ４）、実行実測値テーブルに記述された現在のプログラム１の実行状態を示す値と、実行予定値テーブルの「比較Ａ」の欄に記述された値とを比較する（ステップＳ４）。
【００４３】
このとき、実行実測値テーブルに記述された値が「１」であり、且つ、実行予定値テーブルに記述された値が「１」であるため、比較の結果が一致する。従って、比較部４は、エラーレポートを出力せず、次の比較トリガがトリガ発生部５から供給されるまで待機する。
【００４４】
次に、ステップＳ５において、プログラム１は、動作開始からプログラム実行時間ｔ４経過後に動作を終了すると、プログラム終了レポートを生成し、実行値格納部２に対して通知する（シーケンスＳＥＱ５）。実行値格納部２は、プログラム１からのプログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値「１」から値「０」に更新する（ステップＳ６）。
【００４５】
一方、トリガ発生部５は、第１の比較待機時間経過後から予め設定された第２の比較待機時間ｔ２（図５（ａ））経過後に比較パルスを生成し、比較部４に対して出力する（シーケンスＳＥＱ６）。
【００４６】
比較部４は、ステップＳ４における比較から第２の比較待機時間ｔ２経過後にトリガ発生部５から供給される比較トリガに基づき、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ７、ＳＥＱ８）、実行実測値テーブルに記述された値と、実行予定値テーブルの「比較Ｂ」の欄に記述された値とを比較する（ステップＳ７）。
【００４７】
このとき、実行実測値テーブルに記述された値が「０」であり、且つ、実行予定値テーブルに記述された値が「０」であるため、比較の結果が一致する。従って、比較部４は、エラーレポートを出力せず、次の比較トリガがトリガ発生部５から供給されるまで待機する。
【００４８】
次に、トリガ発生部５は、第２の比較待機時間ｔ２経過後から予め設定された第３の比較待機時間ｔ３（図５（ａ））経過後に比較トリガを生成し、比較部４に対して出力する。以下、上述したステップＳ１〜Ｓ６、及びシーケンスＳＥＱ１〜ＳＥＱ８に示す処理を繰り返し、プログラム１の異常検出処理を行う。
【００４９】
尚、初めてプログラム１の動作が開始される場合以外においては、ステップＳ３におけるトリガ発生部５のカウント開始処理は行われず、ステップＳ４における比較処理は、第３の比較待機時間ｔ３経過後にトリガ発生部５から供給される比較トリガに基づき行われる。
【００５０】
次に、プログラム１の動作に異常が発生した場合の異常検出処理について、図４を参照して説明する。プログラム１の動作異常としては、以下に示す（１）〜（４）の場合が考えられる。
（１）プログラム１が終了しない
（２）プログラム１が開始しない
（３）プログラム１が予定より早く終了する
（４）プログラム１が予定より早く開始する
【００５１】
ここでは、プログラム１の動作開始後に不正ループ等が発生し、（１）に示すプログラム１が終了しない場合を例にとって説明する。尚、図４において、上述した図３に示す動作と共通する部分には、同一の符号を付し、詳細な説明を省略する。
【００５２】
図４に示すステップＳ１〜Ｓ４、及びシーケンスＳＥＱ１〜ＳＥＱ４に示すプログラム１の動作開始からステップＳ４における比較までの処理については、図３に示す処理と同一であるため、説明を省略する。
【００５３】
次に、プログラム１に不正ループが発生し、プログラムが終了しない場合、プログラム１は、図５（ｂ）に示すように、動作開始からプログラム実行時間ｔ４が経過しても動作を終了せず、プログラムが実行され続ける。そのため、プログラム１は、プログラム終了レポートを生成できず、実行値格納部２に対するプログラム終了レポートの通知が行われない。
【００５４】
この場合、比較部４は、図４に示すように、ステップＳ７において、ステップＳ４における比較から第２の比較待機時間経過後にトリガ発生部５から供給される比較トリガに基づき、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ７、ＳＥＱ８）、実行実測値テーブルに記述された値と、実行予定値テーブルの「比較Ｂ」の欄に記述された値とを比較する。
【００５５】
このとき、実行実測値テーブルに記述された値は、プログラムの不正ループによりプログラム１の動作が終了していないため、「１」である。一方、実行予定値テーブルに記述された値は、「０」である。従って、ステップＳ７における比較の結果が一致しないため、比較部４は、エラーレポートを出力する（シーケンスＳＥＱ９）。このように出力されたエラーレポートにより、ＣＰＵのリセットが実行され、プログラム１の動作が正常に復旧する。
【００５６】
尚、上述した（２）の動作異常は、第１の比較待機時間ｔ１経過後に行われる比較処理（図３のステップＳ４）において、実行実測値テーブルに記述された値「０」と実行予定値テーブルに記述された値「１」とが一致しないため、プログラム１の動作異常を検出することができる。
【００５７】
また、（３）及び（４）の動作異常は、１回のプログラム実行周期ｔ６内で動作異常を検出することができない。しかしながら、この場合には、プログラム１の実行時間又は待機時間が短くなるため、実際のプログラム実行周期ｔ６が予定の周期と比較して短くなる。従って、プログラムの実行を複数回繰り返して行うことで、ステップＳ４又はステップＳ７における比較処理の際に、実行実測値テーブルに記述された値と実行予定値テーブルに記述された値とが一致しなくなる。これにより、プログラム１の動作異常を検出することができる。
【００５８】
以上のように、第１の実施形態によれば、プログラムの予定動作に応じて比較待機時間を予め設定し、比較待機時間経過後に出力される比較トリガに基づき、プログラムの実行状態を示す実行実測値テーブルに記述された値と、プログラムの実行状態の予定を示す実行予定値テーブルに記述された値とを比較するため、比較結果に応じて実際のプログラムの実行状態を判断し、プログラムの動作異常を検出することができる。また、動作異常を検出した場合には、動作異常を示すエラーレポートを出力するため、エラーレポートに基づいてプログラムを自己復旧させることができる。
【００５９】
次に、第２の実施形態について説明する。上述した第１の実施形態では、プログラムの予定動作の時間に基づいて行われる比較処理に応じた実行予定値テーブルを用いたが、例えば、関数や応答動作によって関連して動作する複数のプログラムに対して、割り込み処理等が発生する場合には、時間による管理だけでは、プログラムの実行予定が計画できないことが考えられる。
【００６０】
そこで、第２の実施形態では、プログラムから出力される動作状態レポートを比較トリガとし、プログラムのシーケンス動作に基づいて設定したプログラム実行予定の設計値を用いることにより、プログラムの動作異常を検出する。
【００６１】
図６は、本発明にかかるプログラム異常検出装置の第２の実施形態を示す。尚、以下の説明において、上述した第１の実施形態と共通する部分については、同一の符号を付し、詳細な説明を省略する。プログラム異常検出装置２０は、複数のプログラム１Ａ、１Ｂ、・・・、１Ｎ、実行値格納部２、設計値格納部３及び比較部１４で構成される。
【００６２】
プログラム１Ａ、１Ｂ、・・・、１Ｎは、自身の動作状態に応じた、プログラム開始レポート及び／又はプログラム終了レポートからなる動作状態レポートを生成する。プログラム１で生成された動作状態レポートは、実行値格納部２に対して出力される。また、複数のプログラム１Ａ、１Ｂ、・・・、１Ｎのうち、所定のプログラムの動作状態レポート（プログラム開始レポート及びプログラム終了レポート）は、比較部１４に対して出力される。
【００６３】
尚、以下の説明では、複数のプログラム１Ａ、１Ｂ、・・・、１Ｎのうち、２つのプログラム１Ａ及び１Ｂ（以下、プログラム１Ａを「第１プログラム１Ａ」、プログラム１Ｂを「第２プログラム１Ｂ」とする）を用いた場合を例にとり、第１プログラム１Ａの動作状態レポート（第１プログラム開始レポート及び第１プログラム終了レポート）が比較部１４に対して出力されるものとする。
【００６４】
また、この例では、第１及び第２プログラム１Ａ、１Ｂの動作には、互いに関連があり、第１プログラム１Ａの動作開始後に第２プログラム１Ｂの動作が開始され、第２プログラム１Ｂの動作開始後に第１プログラム１Ａの動作が終了し、最後に第２プログラム１Ｂの動作が終了するものとする。
【００６５】
設計値格納部３に保持される実行予定値テーブルには、図７に示すように、所定のタイミングを示す項目「タイミング」と、項目「タイミング」に記述されたタイミングにおける各プログラム１の実行状態の予定を示す項目「ビット」とが記述される。
【００６６】
項目「タイミング」は、第１の実施形態と同様に、後述する比較部１４における比較処理を行うタイミングを示す。例えば、「比較Ｃ」は、第１プログラム１Ａの動作が開始したタイミングを示し、後述する比較部１４において、第１プログラム開始レポートを比較トリガとした場合の比較処理の際に参照される。また、「比較Ｄ」は、第１プログラム１Ａの動作が終了したタイミングを示し、比較部１４において、第１プログラム終了レポートを比較トリガとした場合の比較処理の際に参照される。
【００６７】
ここで、項目「タイミング」に記述されるタイミングは、第１及び第２プログラム１Ａ、１Ｂの実行状態が互いに反転するタイミング、すなわち、一方のプログラムが実行中であり、他方のプログラムが待機中であるタイミングが設定される。これは、様々なプログラムの動作異常を検出できるようにするためである。この例の場合、設定されるタイミングは、第１プログラム１Ａが実行中且つ第２プログラム１Ｂが待機中であるタイミング、及び第１プログラム１Ａが待機中且つ第２プログラム１Ｂが実行中であるタイミングである。
【００６８】
項目「ビット」は、項目「タイミング」に記述されたタイミングにおける各プログラム１の実行状態の予定を示し、この実行状態の予定を示す値が格納される。各プログラム１の実行状態の予定を示す値としては、第１の実施形態と同様に、例えば、各プログラム１に対して１ビットが割り当てられ、割り当てられた１ビットの値「０」又は「１」に対して、プログラム１の状態を対応させる。
【００６９】
この例では、プログラムとして第１及び第２プログラム１Ａ、１Ｂを用いるので、第１プログラム１Ａに対応する値が項目「上位ビット」に格納され、第２プログラム１Ｂに対応する値が項目「下位ビット」に格納される。例えば、「比較Ｃ」のタイミングは、第１プログラム１Ａの動作が開始されたタイミングであるので、第１プログラム１Ａのみが実行中の予定である。従って、項目「ビット」の値は、上位ビット及び下位ビットの順に「１０」となる。また、「比較Ｄ」のタイミングは、第１プログラム１Ａの動作が終了したタイミングであるので、第２プログラム１Ｂのみが実行中の予定である。従って、項目「ビット」の値は、「０１」となる。
【００７０】
説明は図６に戻り、比較部１４は、プログラム１から供給された動作状態レポートを比較トリガとして受け取り、この比較トリガを受けたタイミングで、実行値格納部２に格納された実行実測値テーブルと設計値格納部３に格納された実行予定値テーブルとを参照し、各々のテーブルに格納された値を比較する。比較部１４は、比較の結果、動作が異常であると判断した場合に、異常状態を示すエラーレポートを出力する。
【００７１】
次に、上記構成を有するプログラム異常検出装置２０の動作について、図８〜図１０を参照して説明する。ここでは、上述したように、第１及び第２プログラム１Ａ、１Ｂの実行状態に基づく動作を例にとって説明する。また、この例において、設計値格納部３に格納された実行予定値テーブルは、図７に示すように設定されたものとし、実行値格納部２に格納された実行実測値テーブルに記述された第１及び第２プログラム１Ａ、１Ｂの実行状態を示す値の初期値は、プログラムが待機中であることを示す値「００」とする。
【００７２】
まず、第１及び第２プログラム１Ａ、１Ｂが正常に動作する場合の異常検出処理について、図８及び図１０（ａ）を参照して説明する。正常動作時において、第１プログラム１Ａは、図１０（ａ）に示すように、プログラム異常検出装置２０全体のリセット信号に基づく動作開始から第１プログラム実行時間ｔ７経過後に動作を終了し、第１プログラム待機時間ｔ８経過後に動作を開始する。そして、第１プログラム実行時間ｔ７及び第１プログラム待機時間ｔ８で表される第１プログラム実行周期ｔ９毎に、この動作が繰り返し行われる。
【００７３】
また、第２プログラム１Ｂは、リセット信号に基づく第１プログラム１Ａの動作開始から第２プログラム待機時間ｔ１０経過後に動作を開始し、動作開始から第２プログラム実行時間ｔ１１経過後に動作を終了し、第２プログラム待機時間ｔ１２経過後、さらに第２プログラム待機時間ｔ１０が経過した後に動作を開始する。そして、第２プログラム待機時間ｔ１０、第２プログラム実行時間ｔ１１及び第２プログラム待機時間ｔ１２で表される第２プログラム実行周期ｔ１３毎に、この動作が繰り返し行われる。
【００７４】
図８に示すように、ステップＳ１１において、第１プログラム１Ａは、プログラム異常検出装置２０全体のリセット信号に基づき動作を開始すると、第１プログラム開始レポートを生成し、実行値格納部２及び比較部１４に対して通知する（シーケンスＳＥＱ１１、ＳＥＱ１２）。
【００７５】
実行値格納部２は、第１プログラム１Ａからの第１プログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値「０」から値「１」に更新する（ステップＳ１２）。これにより、実行実測値テーブルに記述された値は、上位ビット及び下位ビットの順に「１０」となる。
【００７６】
次に、比較部１４は、第１プログラム１Ａから供給される第１プログラム開始レポートを比較トリガとして、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ１３、ＳＥＱ１４）、実行実測値テーブルに記述された現在の第１プログラム１Ａの実行状態を示す値と、実行予定値テーブルに記述された値とを比較する（ステップＳ１３）。
【００７７】
このとき、比較部１４は、第１プログラム開始レポートを比較トリガとするため、実行予定値テーブルを参照する際に、「比較Ｃ」の欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が「１０」であり、且つ、実行予定値テーブルに記述された値が「１０」であるため、比較の結果が一致する。従って、比較部１４は、エラーレポートを出力せず、次の比較トリガが供給されるまで待機する。
【００７８】
次に、ステップＳ１４において、第２プログラム１Ｂは、リセット信号に基づく第１プログラム１Ａの動作開始から第２プログラム待機時間ｔ１０経過後に動作を開始すると、第２プログラム開始レポートを生成し、実行値格納部２に対して通知する（シーケンスＳＥＱ１５）。
【００７９】
実行値格納部２は、第２プログラム１Ｂからの第２プログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値「０」から値「１」に更新する（ステップＳ１５）。これにより、実行実測値テーブルに記述された値は、「１１」となる。
【００８０】
次に、ステップＳ１６において、第１プログラム１Ａは、動作開始から第１プログラム実行時間ｔ７経過後に動作を終了すると、第１プログラム終了レポートを生成し、実行値格納部２及び比較部１４に対して通知する（シーケンスＳＥＱ１６、ＳＥＱ１７）。
【００８１】
実行値格納部２は、第１プログラム１Ａからの第１プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値「１」から値「０」に更新する（ステップＳ１７）。これにより、実行実測値テーブルに記述された値は、「０１」となる。
【００８２】
次に、比較部１４は、第１プログラム１Ａから供給される第１プログラム終了レポートを比較トリガとして、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ１８、ＳＥＱ１９）、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較する（ステップＳ１８）。
【００８３】
このとき、比較部１４は、第１プログラム終了レポートを比較トリガとするため、実行予定値テーブルを参照する際に、「比較Ｄ」の欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が「０１」であり、且つ、実行予定値テーブルに記述された値が「０１」であるため、比較の結果が一致する。従って、比較部１４は、エラーレポートを出力せず、次の比較トリガが供給されるまで待機する。
【００８４】
次に、ステップＳ１９において、第２プログラム１Ｂは、動作開始から第２プログラム実行時間ｔ１１経過後に動作を終了すると、第２プログラム終了レポートを生成し、実行値格納部２に対して通知する（シーケンスＳＥＱ２０）。その後、第２プログラム１Ｂは、次の第１プログラム１Ａの動作開始までの第２プログラム待機時間ｔ１２が経過するまで待機する。
【００８５】
実行値格納部２は、第２プログラム１Ｂからの第２プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値「１」から値「０」に更新する（ステップＳ２０）。これにより、実行実測値テーブルに記述された値は、「００」となる。
【００８６】
以下、上述したステップＳ１１〜Ｓ２０、及びシーケンスＳＥＱ１１〜ＳＥＱ２０に示す処理を繰り返し、第１及び第２プログラム１Ａ、１Ｂの異常検出処理を行う。
【００８７】
次に、第１及び第２プログラム１Ａ、１Ｂの動作に異常が発生した場合の異常検出処理について、図９を参照して説明する。第１及び第２プログラム１Ａ、１Ｂの動作異常としては、以下に示す（１）〜（４）の場合が考えられる。
（１）第１プログラム１Ａが第２プログラム１Ｂ開始前に終了する
（２）第１プログラム１Ａが第２プログラム１Ｂ終了後に終了する
（３）第１プログラム１Ａが第２プログラム１Ｂ開始後に開始する
（４）第１プログラム１Ａが第２プログラム１Ｂ終了後に開始する
【００８８】
ここでは、（１）に示す第１プログラム１Ａが第２プログラム１Ｂ開始前に終了する場合を例にとって説明する。尚、図９において、上述した図８に示す動作と共通する部分には、同一の符号を付し、詳細な説明を省略する。
【００８９】
図９に示すステップＳ１１〜Ｓ１３、及びシーケンスＳＥＱ１１〜ＳＥＱ１４に示す第１プログラム１Ａの動作開始からステップＳ１３における比較までの処理については、図８に示す処理と同一であるため、説明を省略する。
【００９０】
次に、第１プログラム１Ａが第２プログラム１Ｂの動作開始前に終了する場合、第１プログラム１Ａは、図１０（ｂ）に示すように、第２プログラム１Ｂの第２プログラム待機時間ｔ１０が経過する前に、第１プログラム実行時間ｔ７’経過後に動作を終了する（図９のステップＳ１６）。この場合、第１プログラム１Ａは、第１プログラム終了レポートを生成し、実行値格納部２及び比較部１４に対して通知する（シーケンスＳＥＱ１６、ＳＥＱ１７）。
【００９１】
実行値格納部２は、第１プログラム１Ａからの第１プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値「１」から値「０」に更新する（ステップＳ１７）。このとき、第２プログラム１Ｂは、動作を開始していないので、第２プログラム１Ｂの動作に対応する下位ビットの値は「０」である。従って、実行実測値テーブルに記述された値は、「００」となる。
【００９２】
次に、比較部１４は、第１プログラム１Ａから供給される第１プログラム終了レポートを比較トリガとして、実行値格納部２に格納された実行実測値テーブルと、設計値格納部３に格納された実行予定値テーブルとを参照し（シーケンスＳＥＱ１８、ＳＥＱ１９）、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較する（ステップＳ１８）。
【００９３】
このとき、比較部１４は、第１プログラム終了レポートを比較トリガとするため、実行予定値テーブルを参照する際に、「比較Ｄ」の欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が「００」であり、且つ、実行予定値テーブルに記述された値が「０１」であるため、比較の結果が一致しない。従って、比較部１４は、エラーレポートを出力する（シーケンスＳＥＱ２１）。このように出力されたエラーレポートにより、ＣＰＵのリセットが実行され、第１プログラム１Ａの動作が正常に復旧する。
【００９４】
尚、上述した（２）及び（４）の動作異常は、第１プログラム１Ａの動作終了後に行われる比較処理において、実行実測値テーブルに記述された値「００」と実行予定値テーブルに記述された値「０１」とが一致しないため、プログラム１の動作異常を検出することができる。
【００９５】
また、（３）の動作異常は、第１プログラム１Ａの動作開始後に行われる比較処理において、実行実測値テーブルに記述された値「１１」と実行予定値テーブルに記述された値「１０」とが一致しないため、プログラム１の動作異常を検出することができる。
【００９６】
以上のように、第２の実施形態によれば、プログラムのシーケンス動作に基づき出力される動作状態レポートを比較トリガとし、この比較トリガに基づき、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較するため、比較結果に応じて実際のプログラムの実行状態を判断し、プログラムの動作異常を検出することができる。また、動作異常を検出した場合には、第１の実施形態と同様に、動作異常を示すエラーレポートを出力するため、エラーレポートに基づいてプログラムを自己復旧させることができる。
【００９７】
以上、本発明の第１及び第２の実施形態について説明したが、本発明は、上述した本発明の第１及び第２の実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【００９８】
例えば、第１の実施形態では、１つのプログラムが動作する場合を例にとって説明したが、これはこの例に限られない。例えば、複数のプログラムが動作する場合についても、動作する複数のプログラムの各々について比較待機時間を設定すると共に、複数のプログラムについての実行予定値テーブルを準備することで適用可能である。
【００９９】
また、第１の実施形態では、プログラムの開始予定及び終了予定のタイミングでプログラムの実行状態を判断するように比較待機時間を設定したが、これに限られず、例えば、プログラム異常検出装置が搭載されたシステム毎に最適なタイミングでプログラムの実行状態を判断できるように、比較待機時間を任意に設定してもよい。これにより、プログラムの動作異常をより早く検出することができるので、異常発生から復旧までに要する時間を短縮することができる。
【０１００】
さらに、第２の実施形態では、比較トリガとして第１プログラム１Ａの動作状態レポートを用いたが、これに限られず、さらに、第２プログラム１Ｂの動作状態レポートをも比較トリガとし、比較処理の回数を増加させてもよい。こうすることにより、プログラムの動作異常より確実に検出することができる。ただし、比較処理の回数を増加させることにより、異常検出処理による負荷が増大するため、システムの状態を考慮して比較トリガとする動作状態レポートを決定すると好ましい。
【０１０１】
さらにまた、第１及び第２の実施形態では、実行予定値テーブルに記述される値として、各プログラム１に対して１ビットを割り当てるように説明したが、これに限られず、例えば２ビット以上のビットを割り当ててもよい。このように、各プログラム１に対して割り当てるビット数を増やし、多くの情報を持たせることにより、異常検出処理の精度を向上させることができる。
【０１０２】
さらにまた、第１及び第２の実施形態を組み合わせ、予め設定された比較待機時間と、プログラムのシーケンス動作に基づく動作状態レポートとの両方を比較トリガとして用いてもよい。
【符号の説明】
【０１０３】
１  プログラム
１Ａ  第１プログラム
１Ｂ  第２プログラム
２  実行値格納部
３  設計値格納部
４、１４  比較部
５  トリガ発生部
１０、２０  プログラム異常検出装置
【図１】
0005534466.tif 000002
【図２】
0005534466.tif 000003
【図３】
0005534466.tif 000004
【図４】
0005534466.tif 000005
【図５】
0005534466.tif 000006
【図６】
0005534466.tif 000007
【図７】
0005534466.tif 000008
【図８】
0005534466.tif 000009
【図９】
0005534466.tif 000010
【図１０】
0005534466.tif 000011