所定の周期で動作する1つ又は複数のプログラムの異常を検出するプログラム異常検出装置であって、1つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報を格納する実行値格納部と、所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報を格納する設計値格納部と、前記所定のタイミングで、前記動作状態情報及び前記予定動作状態情報を比較する比較部とを備え、前記比較部は、前記比較の結果、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とするプログラム異常検出装置。前記所定のタイミングを示す比較トリガを生成するトリガ発生部をさらに備え、前記比較部は、前記比較トリガに基づき前記所定のタイミングで前記比較を行うことを特徴とする請求項1に記載のプログラム異常検出装置。前記所定のタイミングは、前記プログラムの動作開始予定後且つ動作終了予定前である第1のタイミングと、前記プログラムの動作終了予定後且つ動作開始予定前である第2のタイミングとであることを特徴とする請求項1又は2に記載のプログラム異常検出装置。前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第1及び第2のタイミングにおける前記プログラムの動作予定を示す第1及び第2の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第1のタイミングで前記動作状態情報及び前記第1の予定動作状態情報を比較し、前記第2のタイミングで前記動作状態情報及び前記第2の予定動作状態情報を比較することを特徴とする請求項3に記載のプログラム異常検出装置。前記所定のタイミングは、複数のプログラムが互いに関連して動作する場合に、前記複数のプログラムのうち所定のプログラムの動作が開始される第3のタイミングと、前記所定のプログラムの動作が終了する第4のタイミングとであることを特徴とする請求項1に記載のプログラム異常検出装置。前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第3及び第4のタイミングにおける前記複数のプログラムの動作予定を示す第3及び第4の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第3のタイミングで、前記所定のプログラムからの前記プログラム開始情報を受け取り、該プログラム開始情報に基づき前記動作状態情報及び前記第3の予定動作状態情報を比較し、前記第4のタイミングで、前記所定のプログラムからの前記プログラム終了情報を受け取り、該プログラム終了情報に基づき前記動作状態情報及び前記第4の予定動作状態情報を比較することを特徴とする請求項5に記載のプログラム異常検出装置。所定の周期で動作する1つ又は複数のプログラムの異常を検出するプログラム異常検出方法であって、1つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報と、所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報とを前記所定のタイミングで比較し、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とするプログラム異常検出方法。ここで、中性子線等の影響によりプログラム格納領域にソフトエラーが発生し、プログラムが誤動作する場合について考える。この場合、プログラムの誤動作により、ファームウェアや一部のプログラムが不正ループに陥るなど、外部からの制御が不可能になる可能性がある。このとき、ファームウェアとしては、内部プログラムが動作していると判断する可能性が高く、一部のプログラムが動作していると判断した場合には、ウォッチドッグタイマへのリセットパルスの発出が続けられる。そのため、ウォッチドッグタイマによるCPUのリセットを期待することができないという問題があった。また、データ領域だけでなく、プログラム格納領域全体に対するパリティチェックは、ファームウェアの負荷が大きく現実的ではない。そのため、プログラムの誤動作を有効的に検出することができないという問題があった。そこで、本発明は、上記従来の技術における問題点に鑑みてなされたものであって、プログラムの動作異常を検出することができ、信頼性を向上させることが可能なプログラム異常検出装置及びプログラム異常検出方法を提供することを目的とする。上記目的を達成するため、本発明は、所定の周期で動作する1つ又は複数のプログラムの異常を検出するプログラム異常検出装置であって、1つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報を格納する実行値格納部と、所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報を格納する設計値格納部と、前記所定のタイミングで、前記動作状態情報及び前記予定動作状態情報を比較する比較部とを備え、前記比較部は、前記比較の結果、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とする。そして、本発明によれば、1つ又は複数のプログラムの動作状態が変化した際に生成される、プログラムの動作状態を示す動作状態情報と、所定のタイミングにおけるプログラムの動作予定を示す予定動作状態情報とを比較するため、所定のタイミングにおいて、プログラムが正常に動作しているか否かを判断することができる。上記プログラム異常検出装置において、前記所定のタイミングを示す比較トリガを生成するトリガ発生部をさらに備え、前記比較部は、前記比較トリガに基づき前記所定のタイミングで前記比較を行うことができる。これにより、比較部は、予め設定された任意のタイミングで、プログラムの動作異常を検出することができる。上記プログラム異常検出装置において、前記所定のタイミングを、前記プログラムの動作開始予定後且つ動作終了予定前である第1のタイミングと、前記プログラムの動作終了予定後且つ動作開始予定前である第2のタイミングとすることができる。上記プログラム異常検出装置において、前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第1及び第2のタイミングにおける前記プログラムの動作予定を示す第1及び第2の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第1のタイミングで前記動作状態情報及び前記第1の予定動作状態情報を比較し、前記第2のタイミングで前記動作状態情報及び前記第2の予定動作状態情報を比較することができる。これにより、プログラムの動作開始予定及び動作終了予定のタイミングで、プログラムの動作異常を検出することができる。上記プログラム異常検出装置において、前記所定のタイミングを、複数のプログラムが互いに関連して動作する場合に、前記複数のプログラムのうち所定のプログラムの動作が開始される第3のタイミングと、前記所定のプログラムの動作が終了する第4のタイミングとすることができる。上記プログラム異常検出装置において、前記実行値格納部は、前記プログラムの動作開始の際に、前記プログラムの動作開始を示すプログラム開始情報を前記動作状態情報として格納し、前記プログラムの動作終了の際に、前記プログラムの動作終了を示すプログラム終了情報を前記動作状態情報として格納し、前記設計値格納部は、前記第3及び第4のタイミングにおける前記複数のプログラムの動作予定を示す第3及び第4の予定動作状態情報を前記予定動作状態情報として格納し、前記比較部は、前記第3のタイミングで、前記所定のプログラムからの前記プログラム開始情報を受け取り、該プログラム開始情報に基づき前記動作状態情報及び前記第3の予定動作状態情報を比較し、前記第4のタイミングで、前記所定のプログラムからの前記プログラム終了情報を受け取り、該プログラム終了情報に基づき前記動作状態情報及び前記第4の予定動作状態情報を比較することができる。これにより、所定のプログラムの動作開始及び動作終了のタイミングで、互いに関連して動作する複数のプログラムの動作異常を検出することができる。また、本発明は、所定の周期で動作する1つ又は複数のプログラムの異常を検出するプログラム異常検出方法であって、1つ又は複数のプログラムの動作状態が変化した際に生成される、該プログラムの動作状態を示す動作状態情報と、所定のタイミングにおける前記プログラムの動作予定を示す予定動作状態情報とを前記所定のタイミングで比較し、前記動作状態情報及び前記予定動作状態情報が一致しない場合に、前記プログラムの動作が異常であると判断することを特徴とする。本発明によれば、前記発明と同様に、所定のタイミングにおいて、プログラムが正常に動作しているか否かを判断することができる。以上のように、本発明によれば、プログラムの動作異常を検出することができ、信頼性を向上させることが可能になる。次に、本発明を実施するための形態について、図面を参照しながら詳細に説明する。図1は、本発明にかかるプログラム異常検出装置の第1の実施形態を示し、このプログラム異常検出装置10は、1つ又は複数のプログラム1A、1B、、1N、実行値格納部2、設計値格納部3、比較部4及びトリガ発生部5で構成される。プログラム1A、1B、、1N以下、各プログラムを特に区別する必要がない場合には、プログラム1とするは、例えば、ファームウェア上で動作するプログラムであり、予め設定された所定のプログラム実行周期で開始及び/又は終了を繰り返すプログラムである。プログラム1は、例えば、このプログラム異常検出装置10全体を起動させた際のリセット信号に応じて動作を開始する。そして、プログラム1は、予め設定されたプログラム実行時間経過後に動作を終了すると共に、動作終了後、予め設定されたプログラム待機時間経過後に動作を開始する。また、プログラム1は、自身の動作状態に応じて、動作状態を示す動作状態レポートを生成する。具体的には、プログラム1は、プログラムの開始及び/又は終了を検出し、プログラムの開始を示すプログラム開始レポート及び/又は終了を示すプログラム終了レポートを生成する。プログラム1で生成された動作状態レポートは、実行値格納部2に対して出力される。実行値格納部2は、各プログラム1から出力された動作状態レポートを受け取り、各プログラム1の実行状態を示す実行実測値テーブルを生成して記録する。実行実測値テーブルには、動作状態レポートを受け取った時点における各プログラム1の実行状態を示す値が格納される。各プログラム1の実行状態を示す値としては、例えば、各プログラム1に対して1ビットが割り当てられ、割り当てられた1ビットの値0又は1に対して、プログラム1の状態を対応させる。この例において、値1は、プログラム1が実行中であることを示し、値0は、プログラム1が待機中であることを示す。この実行実測値テーブルに格納される値は、動作状態レポートを受け取る毎に上書きされて更新される。設計値格納部3は、予め設定された各プログラム1の実行状態の予定を示す実行予定値テーブルを保持する。実行予定値テーブルには、図2に示すように、所定のタイミングを示す項目タイミングと、項目タイミングに記述されたタイミングにおける各プログラム1の実行状態の予定を示す項目プログラムとが記述される。項目タイミングは、後述する比較部4における比較処理を行うタイミングを示す。例えば、比較Aは、予定としてプログラムが実行中であるタイミングを示し、比較Bは、予定としてプログラムが待機中であるタイミングを示す。項目プログラムは、項目タイミングに記述されたタイミングにおけるプログラム1の実行状態の予定を示し、この実行状態の予定を示す値が格納される。各プログラム1の実行状態の予定を示す値としては、実行実測値テーブルと同様に、例えば、各プログラム1に対して1ビットが割り当てられ、割り当てられた1ビットの値0又は1に対して、プログラム1の状態を対応させる。この例において、値1は、プログラム1が実行中であることを示し、値0は、プログラム1が待機中であることを示す。説明は図1に戻り、比較部4は、後述するトリガ発生部5から供給される比較トリガを受け取り、この比較トリガを受けたタイミングで、実行値格納部2に格納された実行実測値テーブルと設計値格納部3に格納された実行予定値テーブルとを参照し、各々のテーブルに格納された値を比較する。比較部4は、比較の結果、動作が異常である判断した場合に、異常状態を示すエラーレポートを出力する。この場合、プログラム1は、比較部4から出力されたエラーレポートに基づき、CPUに対してリセット処理を実行し、プログラムの動作を正常な状態に復旧させる処理を行う。トリガ発生部5は、比較部4における比較処理を行うタイミングを決定するための比較トリガを生成し、比較部4に対して出力する。トリガ発生部5は、例えばタイマを備え、プログラム1の動作が開始されるタイミングでタイマによるカウントを開始し、カウント値が予め設定された値になった時点で比較トリガを出力する。尚、プログラム1は、上述したように、プログラム異常検出装置10全体の起動時におけるリセット信号に基づき動作を開始する予定であるので、トリガ発生部5は、このリセット信号によりプログラム1の動作開始を検出し、タイマによるカウントを開始する。比較トリガは、例えば、タイマによるカウントが開始されてから第1の比較待機時間経過後と、第1の比較待機時間経過後からさらに第2の比較待機時間経過後と、第2の比較待機時間経過後からさらに第3の比較待機時間経過後とにおける時点で出力される。具体的には、第1の比較待機時間は、比較トリガがプログラム1の動作開始予定後、且つ動作終了予定前に出力されるように設定される。また、第2の比較待機時間は、比較トリガがプログラム1の動作終了予定後、且つ次のプログラム1の動作開始予定前に出力されるように設定される。さらに、第3の比較待機時間は、比較トリガが次のプログラム1の動作開始予定後、且つ動作終了予定前に出力されるように設定される。尚、プログラム1の動作異常をより早く検出できるようにするため、比較トリガがプログラム1の動作に変化が生じる時点により近いタイミングで出力されるように、各々の比較待機時間を設定すると好ましい。すなわち、比較トリガがプログラム1の動作開始予定直後、動作終了予定直後、及び次のプログラム1の動作開始予定直後に出力されるように、第1、第2及び第3の比較待機時間を設定する。次に、上記構成を有するプログラム異常検出装置10の動作について、図3~図5を参照して説明する。ここでは、説明を容易とするため、1つのプログラム1の実行状態に基づく動作を例にとって説明する。また、この例において、設計値格納部3に格納された実行予定値テーブルは、図2に示すように設定されたものとし、実行値格納部2に格納された実行実測値テーブルに記述されたプログラム1の実行状態を示す値の初期値は、プログラムが待機中であることを示す値0とする。まず、プログラム1が正常に動作する場合の異常検出処理について、図3及び図5aを参照して説明する。正常動作時において、プログラム1は、図5aに示すように、動作開始からプログラム実行時間t4経過後に動作を終了し、プログラム待機時間t5経過後に動作を開始する。そして、プログラム実行時間t4及びプログラム待機時間t5で表されるプログラム実行周期t6毎に、この動作が繰り返し行われる。図3に示すように、ステップS1において、プログラム1は、プログラム異常検出装置10全体のリセット信号に基づき動作を開始すると、プログラム開始レポートを生成し、実行値格納部2に対して通知するシーケンスSEQ1。実行値格納部2は、プログラム1からのプログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値0から値1に更新するステップS2。また、トリガ発生部5は、リセット信号に基づき、プログラム1の動作開始と同時にタイマによるカウントを開始するステップS3。次に、トリガ発生部5は、プログラム1の動作開始カウント開始から予め設定された第1の比較待機時間t1図5a経過後に比較パルスを生成し、比較部4に対して出力するシーケンスSEQ2。比較部4は、第1の比較待機時間t1経過後にトリガ発生部5から供給される比較トリガに基づき、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ3、SEQ4、実行実測値テーブルに記述された現在のプログラム1の実行状態を示す値と、実行予定値テーブルの比較Aの欄に記述された値とを比較するステップS4。このとき、実行実測値テーブルに記述された値が1であり、且つ、実行予定値テーブルに記述された値が1であるため、比較の結果が一致する。従って、比較部4は、エラーレポートを出力せず、次の比較トリガがトリガ発生部5から供給されるまで待機する。次に、ステップS5において、プログラム1は、動作開始からプログラム実行時間t4経過後に動作を終了すると、プログラム終了レポートを生成し、実行値格納部2に対して通知するシーケンスSEQ5。実行値格納部2は、プログラム1からのプログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値1から値0に更新するステップS6。一方、トリガ発生部5は、第1の比較待機時間経過後から予め設定された第2の比較待機時間t2図5a経過後に比較パルスを生成し、比較部4に対して出力するシーケンスSEQ6。比較部4は、ステップS4における比較から第2の比較待機時間t2経過後にトリガ発生部5から供給される比較トリガに基づき、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ7、SEQ8、実行実測値テーブルに記述された値と、実行予定値テーブルの比較Bの欄に記述された値とを比較するステップS7。このとき、実行実測値テーブルに記述された値が0であり、且つ、実行予定値テーブルに記述された値が0であるため、比較の結果が一致する。従って、比較部4は、エラーレポートを出力せず、次の比較トリガがトリガ発生部5から供給されるまで待機する。次に、トリガ発生部5は、第2の比較待機時間t2経過後から予め設定された第3の比較待機時間t3図5a経過後に比較トリガを生成し、比較部4に対して出力する。以下、上述したステップS1~S6、及びシーケンスSEQ1~SEQ8に示す処理を繰り返し、プログラム1の異常検出処理を行う。尚、初めてプログラム1の動作が開始される場合以外においては、ステップS3におけるトリガ発生部5のカウント開始処理は行われず、ステップS4における比較処理は、第3の比較待機時間t3経過後にトリガ発生部5から供給される比較トリガに基づき行われる。次に、プログラム1の動作に異常が発生した場合の異常検出処理について、図4を参照して説明する。プログラム1の動作異常としては、以下に示す1~4の場合が考えられる。1プログラム1が終了しない2プログラム1が開始しない3プログラム1が予定より早く終了する4プログラム1が予定より早く開始するここでは、プログラム1の動作開始後に不正ループ等が発生し、1に示すプログラム1が終了しない場合を例にとって説明する。尚、図4において、上述した図3に示す動作と共通する部分には、同一の符号を付し、詳細な説明を省略する。図4に示すステップS1~S4、及びシーケンスSEQ1~SEQ4に示すプログラム1の動作開始からステップS4における比較までの処理については、図3に示す処理と同一であるため、説明を省略する。次に、プログラム1に不正ループが発生し、プログラムが終了しない場合、プログラム1は、図5bに示すように、動作開始からプログラム実行時間t4が経過しても動作を終了せず、プログラムが実行され続ける。そのため、プログラム1は、プログラム終了レポートを生成できず、実行値格納部2に対するプログラム終了レポートの通知が行われない。この場合、比較部4は、図4に示すように、ステップS7において、ステップS4における比較から第2の比較待機時間経過後にトリガ発生部5から供給される比較トリガに基づき、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ7、SEQ8、実行実測値テーブルに記述された値と、実行予定値テーブルの比較Bの欄に記述された値とを比較する。このとき、実行実測値テーブルに記述された値は、プログラムの不正ループによりプログラム1の動作が終了していないため、1である。一方、実行予定値テーブルに記述された値は、0である。従って、ステップS7における比較の結果が一致しないため、比較部4は、エラーレポートを出力するシーケンスSEQ9。このように出力されたエラーレポートにより、CPUのリセットが実行され、プログラム1の動作が正常に復旧する。尚、上述した2の動作異常は、第1の比較待機時間t1経過後に行われる比較処理図3のステップS4において、実行実測値テーブルに記述された値0と実行予定値テーブルに記述された値1とが一致しないため、プログラム1の動作異常を検出することができる。また、3及び4の動作異常は、1回のプログラム実行周期t6内で動作異常を検出することができない。しかしながら、この場合には、プログラム1の実行時間又は待機時間が短くなるため、実際のプログラム実行周期t6が予定の周期と比較して短くなる。従って、プログラムの実行を複数回繰り返して行うことで、ステップS4又はステップS7における比較処理の際に、実行実測値テーブルに記述された値と実行予定値テーブルに記述された値とが一致しなくなる。これにより、プログラム1の動作異常を検出することができる。以上のように、第1の実施形態によれば、プログラムの予定動作に応じて比較待機時間を予め設定し、比較待機時間経過後に出力される比較トリガに基づき、プログラムの実行状態を示す実行実測値テーブルに記述された値と、プログラムの実行状態の予定を示す実行予定値テーブルに記述された値とを比較するため、比較結果に応じて実際のプログラムの実行状態を判断し、プログラムの動作異常を検出することができる。また、動作異常を検出した場合には、動作異常を示すエラーレポートを出力するため、エラーレポートに基づいてプログラムを自己復旧させることができる。次に、第2の実施形態について説明する。上述した第1の実施形態では、プログラムの予定動作の時間に基づいて行われる比較処理に応じた実行予定値テーブルを用いたが、例えば、関数や応答動作によって関連して動作する複数のプログラムに対して、割り込み処理等が発生する場合には、時間による管理だけでは、プログラムの実行予定が計画できないことが考えられる。そこで、第2の実施形態では、プログラムから出力される動作状態レポートを比較トリガとし、プログラムのシーケンス動作に基づいて設定したプログラム実行予定の設計値を用いることにより、プログラムの動作異常を検出する。図6は、本発明にかかるプログラム異常検出装置の第2の実施形態を示す。尚、以下の説明において、上述した第1の実施形態と共通する部分については、同一の符号を付し、詳細な説明を省略する。プログラム異常検出装置20は、複数のプログラム1A、1B、、1N、実行値格納部2、設計値格納部3及び比較部14で構成される。プログラム1A、1B、、1Nは、自身の動作状態に応じた、プログラム開始レポート及び/又はプログラム終了レポートからなる動作状態レポートを生成する。プログラム1で生成された動作状態レポートは、実行値格納部2に対して出力される。また、複数のプログラム1A、1B、、1Nのうち、所定のプログラムの動作状態レポートプログラム開始レポート及びプログラム終了レポートは、比較部14に対して出力される。尚、以下の説明では、複数のプログラム1A、1B、、1Nのうち、2つのプログラム1A及び1B以下、プログラム1Aを第1プログラム1A、プログラム1Bを第2プログラム1Bとするを用いた場合を例にとり、第1プログラム1Aの動作状態レポート第1プログラム開始レポート及び第1プログラム終了レポートが比較部14に対して出力されるものとする。また、この例では、第1及び第2プログラム1A、1Bの動作には、互いに関連があり、第1プログラム1Aの動作開始後に第2プログラム1Bの動作が開始され、第2プログラム1Bの動作開始後に第1プログラム1Aの動作が終了し、最後に第2プログラム1Bの動作が終了するものとする。設計値格納部3に保持される実行予定値テーブルには、図7に示すように、所定のタイミングを示す項目タイミングと、項目タイミングに記述されたタイミングにおける各プログラム1の実行状態の予定を示す項目ビットとが記述される。項目タイミングは、第1の実施形態と同様に、後述する比較部14における比較処理を行うタイミングを示す。例えば、比較Cは、第1プログラム1Aの動作が開始したタイミングを示し、後述する比較部14において、第1プログラム開始レポートを比較トリガとした場合の比較処理の際に参照される。また、比較Dは、第1プログラム1Aの動作が終了したタイミングを示し、比較部14において、第1プログラム終了レポートを比較トリガとした場合の比較処理の際に参照される。ここで、項目タイミングに記述されるタイミングは、第1及び第2プログラム1A、1Bの実行状態が互いに反転するタイミング、すなわち、一方のプログラムが実行中であり、他方のプログラムが待機中であるタイミングが設定される。これは、様々なプログラムの動作異常を検出できるようにするためである。この例の場合、設定されるタイミングは、第1プログラム1Aが実行中且つ第2プログラム1Bが待機中であるタイミング、及び第1プログラム1Aが待機中且つ第2プログラム1Bが実行中であるタイミングである。項目ビットは、項目タイミングに記述されたタイミングにおける各プログラム1の実行状態の予定を示し、この実行状態の予定を示す値が格納される。各プログラム1の実行状態の予定を示す値としては、第1の実施形態と同様に、例えば、各プログラム1に対して1ビットが割り当てられ、割り当てられた1ビットの値0又は1に対して、プログラム1の状態を対応させる。この例では、プログラムとして第1及び第2プログラム1A、1Bを用いるので、第1プログラム1Aに対応する値が項目上位ビットに格納され、第2プログラム1Bに対応する値が項目下位ビットに格納される。例えば、比較Cのタイミングは、第1プログラム1Aの動作が開始されたタイミングであるので、第1プログラム1Aのみが実行中の予定である。従って、項目ビットの値は、上位ビット及び下位ビットの順に10となる。また、比較Dのタイミングは、第1プログラム1Aの動作が終了したタイミングであるので、第2プログラム1Bのみが実行中の予定である。従って、項目ビットの値は、01となる。説明は図6に戻り、比較部14は、プログラム1から供給された動作状態レポートを比較トリガとして受け取り、この比較トリガを受けたタイミングで、実行値格納部2に格納された実行実測値テーブルと設計値格納部3に格納された実行予定値テーブルとを参照し、各々のテーブルに格納された値を比較する。比較部14は、比較の結果、動作が異常であると判断した場合に、異常状態を示すエラーレポートを出力する。次に、上記構成を有するプログラム異常検出装置20の動作について、図8~図10を参照して説明する。ここでは、上述したように、第1及び第2プログラム1A、1Bの実行状態に基づく動作を例にとって説明する。また、この例において、設計値格納部3に格納された実行予定値テーブルは、図7に示すように設定されたものとし、実行値格納部2に格納された実行実測値テーブルに記述された第1及び第2プログラム1A、1Bの実行状態を示す値の初期値は、プログラムが待機中であることを示す値00とする。まず、第1及び第2プログラム1A、1Bが正常に動作する場合の異常検出処理について、図8及び図10aを参照して説明する。正常動作時において、第1プログラム1Aは、図10aに示すように、プログラム異常検出装置20全体のリセット信号に基づく動作開始から第1プログラム実行時間t7経過後に動作を終了し、第1プログラム待機時間t8経過後に動作を開始する。そして、第1プログラム実行時間t7及び第1プログラム待機時間t8で表される第1プログラム実行周期t9毎に、この動作が繰り返し行われる。また、第2プログラム1Bは、リセット信号に基づく第1プログラム1Aの動作開始から第2プログラム待機時間t10経過後に動作を開始し、動作開始から第2プログラム実行時間t11経過後に動作を終了し、第2プログラム待機時間t12経過後、さらに第2プログラム待機時間t10が経過した後に動作を開始する。そして、第2プログラム待機時間t10、第2プログラム実行時間t11及び第2プログラム待機時間t12で表される第2プログラム実行周期t13毎に、この動作が繰り返し行われる。図8に示すように、ステップS11において、第1プログラム1Aは、プログラム異常検出装置20全体のリセット信号に基づき動作を開始すると、第1プログラム開始レポートを生成し、実行値格納部2及び比較部14に対して通知するシーケンスSEQ11、SEQ12。実行値格納部2は、第1プログラム1Aからの第1プログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値0から値1に更新するステップS12。これにより、実行実測値テーブルに記述された値は、上位ビット及び下位ビットの順に10となる。次に、比較部14は、第1プログラム1Aから供給される第1プログラム開始レポートを比較トリガとして、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ13、SEQ14、実行実測値テーブルに記述された現在の第1プログラム1Aの実行状態を示す値と、実行予定値テーブルに記述された値とを比較するステップS13。このとき、比較部14は、第1プログラム開始レポートを比較トリガとするため、実行予定値テーブルを参照する際に、比較Cの欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が10であり、且つ、実行予定値テーブルに記述された値が10であるため、比較の結果が一致する。従って、比較部14は、エラーレポートを出力せず、次の比較トリガが供給されるまで待機する。次に、ステップS14において、第2プログラム1Bは、リセット信号に基づく第1プログラム1Aの動作開始から第2プログラム待機時間t10経過後に動作を開始すると、第2プログラム開始レポートを生成し、実行値格納部2に対して通知するシーケンスSEQ15。実行値格納部2は、第2プログラム1Bからの第2プログラム開始レポートの通知に基づき、実行実測値テーブルに記述された値を初期値である値0から値1に更新するステップS15。これにより、実行実測値テーブルに記述された値は、11となる。次に、ステップS16において、第1プログラム1Aは、動作開始から第1プログラム実行時間t7経過後に動作を終了すると、第1プログラム終了レポートを生成し、実行値格納部2及び比較部14に対して通知するシーケンスSEQ16、SEQ17。実行値格納部2は、第1プログラム1Aからの第1プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値1から値0に更新するステップS17。これにより、実行実測値テーブルに記述された値は、01となる。次に、比較部14は、第1プログラム1Aから供給される第1プログラム終了レポートを比較トリガとして、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ18、SEQ19、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較するステップS18。このとき、比較部14は、第1プログラム終了レポートを比較トリガとするため、実行予定値テーブルを参照する際に、比較Dの欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が01であり、且つ、実行予定値テーブルに記述された値が01であるため、比較の結果が一致する。従って、比較部14は、エラーレポートを出力せず、次の比較トリガが供給されるまで待機する。次に、ステップS19において、第2プログラム1Bは、動作開始から第2プログラム実行時間t11経過後に動作を終了すると、第2プログラム終了レポートを生成し、実行値格納部2に対して通知するシーケンスSEQ20。その後、第2プログラム1Bは、次の第1プログラム1Aの動作開始までの第2プログラム待機時間t12が経過するまで待機する。実行値格納部2は、第2プログラム1Bからの第2プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値1から値0に更新するステップS20。これにより、実行実測値テーブルに記述された値は、00となる。以下、上述したステップS11~S20、及びシーケンスSEQ11~SEQ20に示す処理を繰り返し、第1及び第2プログラム1A、1Bの異常検出処理を行う。次に、第1及び第2プログラム1A、1Bの動作に異常が発生した場合の異常検出処理について、図9を参照して説明する。第1及び第2プログラム1A、1Bの動作異常としては、以下に示す1~4の場合が考えられる。1第1プログラム1Aが第2プログラム1B開始前に終了する2第1プログラム1Aが第2プログラム1B終了後に終了する3第1プログラム1Aが第2プログラム1B開始後に開始する4第1プログラム1Aが第2プログラム1B終了後に開始するここでは、1に示す第1プログラム1Aが第2プログラム1B開始前に終了する場合を例にとって説明する。尚、図9において、上述した図8に示す動作と共通する部分には、同一の符号を付し、詳細な説明を省略する。図9に示すステップS11~S13、及びシーケンスSEQ11~SEQ14に示す第1プログラム1Aの動作開始からステップS13における比較までの処理については、図8に示す処理と同一であるため、説明を省略する。次に、第1プログラム1Aが第2プログラム1Bの動作開始前に終了する場合、第1プログラム1Aは、図10bに示すように、第2プログラム1Bの第2プログラム待機時間t10が経過する前に、第1プログラム実行時間t7’経過後に動作を終了する図9のステップS16。この場合、第1プログラム1Aは、第1プログラム終了レポートを生成し、実行値格納部2及び比較部14に対して通知するシーケンスSEQ16、SEQ17。実行値格納部2は、第1プログラム1Aからの第1プログラム終了レポートの通知に基づき、実行実測値テーブルに記述された値を値1から値0に更新するステップS17。このとき、第2プログラム1Bは、動作を開始していないので、第2プログラム1Bの動作に対応する下位ビットの値は0である。従って、実行実測値テーブルに記述された値は、00となる。次に、比較部14は、第1プログラム1Aから供給される第1プログラム終了レポートを比較トリガとして、実行値格納部2に格納された実行実測値テーブルと、設計値格納部3に格納された実行予定値テーブルとを参照しシーケンスSEQ18、SEQ19、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較するステップS18。このとき、比較部14は、第1プログラム終了レポートを比較トリガとするため、実行予定値テーブルを参照する際に、比較Dの欄に記述された値を参照する。この場合、実行実測値テーブルに記述された値が00であり、且つ、実行予定値テーブルに記述された値が01であるため、比較の結果が一致しない。従って、比較部14は、エラーレポートを出力するシーケンスSEQ21。このように出力されたエラーレポートにより、CPUのリセットが実行され、第1プログラム1Aの動作が正常に復旧する。尚、上述した2及び4の動作異常は、第1プログラム1Aの動作終了後に行われる比較処理において、実行実測値テーブルに記述された値00と実行予定値テーブルに記述された値01とが一致しないため、プログラム1の動作異常を検出することができる。また、3の動作異常は、第1プログラム1Aの動作開始後に行われる比較処理において、実行実測値テーブルに記述された値11と実行予定値テーブルに記述された値10とが一致しないため、プログラム1の動作異常を検出することができる。以上のように、第2の実施形態によれば、プログラムのシーケンス動作に基づき出力される動作状態レポートを比較トリガとし、この比較トリガに基づき、実行実測値テーブルに記述された値と、実行予定値テーブルに記述された値とを比較するため、比較結果に応じて実際のプログラムの実行状態を判断し、プログラムの動作異常を検出することができる。また、動作異常を検出した場合には、第1の実施形態と同様に、動作異常を示すエラーレポートを出力するため、エラーレポートに基づいてプログラムを自己復旧させることができる。以上、本発明の第1及び第2の実施形態について説明したが、本発明は、上述した本発明の第1及び第2の実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。例えば、第1の実施形態では、1つのプログラムが動作する場合を例にとって説明したが、これはこの例に限られない。例えば、複数のプログラムが動作する場合についても、動作する複数のプログラムの各々について比較待機時間を設定すると共に、複数のプログラムについての実行予定値テーブルを準備することで適用可能である。また、第1の実施形態では、プログラムの開始予定及び終了予定のタイミングでプログラムの実行状態を判断するように比較待機時間を設定したが、これに限られず、例えば、プログラム異常検出装置が搭載されたシステム毎に最適なタイミングでプログラムの実行状態を判断できるように、比較待機時間を任意に設定してもよい。これにより、プログラムの動作異常をより早く検出することができるので、異常発生から復旧までに要する時間を短縮することができる。さらに、第2の実施形態では、比較トリガとして第1プログラム1Aの動作状態レポートを用いたが、これに限られず、さらに、第2プログラム1Bの動作状態レポートをも比較トリガとし、比較処理の回数を増加させてもよい。こうすることにより、プログラムの動作異常より確実に検出することができる。ただし、比較処理の回数を増加させることにより、異常検出処理による負荷が増大するため、システムの状態を考慮して比較トリガとする動作状態レポートを決定すると好ましい。さらにまた、第1及び第2の実施形態では、実行予定値テーブルに記述される値として、各プログラム1に対して1ビットを割り当てるように説明したが、これに限られず、例えば2ビット以上のビットを割り当ててもよい。このように、各プログラム1に対して割り当てるビット数を増やし、多くの情報を持たせることにより、異常検出処理の精度を向上させることができる。さらにまた、第1及び第2の実施形態を組み合わせ、予め設定された比較待機時間と、プログラムのシーケンス動作に基づく動作状態レポートとの両方を比較トリガとして用いてもよい。