(57)【要約】【課題】  定周期処理プログラムがシーケンス通りに実行されていることを効率よく監視すること。【解決手段】  制御装置に、定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、を備える。【選択図】      図１
2020204844.tif 000002
【特許請求の範囲】
【請求項１】
複数の定周期処理プログラムを実行する制御装置であって、
前記定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、
を備えることを特徴とする制御装置。
【請求項２】
前記定義テーブルは、前記実行周期ごとに定められた優先順位を含み、
前記監視手段は、前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定められた優先順位で実行されているか否かを監視して異常を検知することを特徴とする請求項１に記載の制御装置。
【請求項３】
前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムの実行間隔に関する第１の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻との差が前記第１の閾値以上になると異常を検知することを特徴とする請求項１又は２に記載の制御装置。
【請求項４】
前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムのうち、実行順序が最終の定周期処理プログラムが動作してから、実行順序が最先の定周期プログラムが動作するまでの実行間隔に関する第２の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻の差が前記第２の閾値以下になると異常を検知することを特徴とする請求項１〜３のいずれか一項に記載の制御装置。
【請求項５】
前記記録手段は、前記定周期処理プログラムの特定の命令文が実行されることにより起動することを特徴とする請求項１〜４のいずれか一項に記載の制御装置。
【請求項６】
前記特定の命令文はｒｅｔｕｒｎ文であることを特徴とする請求項５に記載の制御装置。
【請求項７】
前記メモリ内の前記実行履歴を記録する領域はリングバッファで構成されていることを特徴とする請求項１〜６のいずれか一項に記載の制御装置。
【請求項８】
請求項１〜７のいずれか一項に記載の制御装置と通信可能な保守支援装置であって、
前記定周期処理プログラムコンパイル時のＭＡＰファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする保守支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳを使用しない定周期割り込みのプログラムを実行する制御装置およびその保守支援装置に係り、特に複数のプログラムの実行シーケンスが正常か否かを監視することのできる制御装置およびその保守支援装置に関する。
【背景技術】
【０００２】
一般に、車載機器（モータ駆動装置）などの制御装置では、ＯＳは使用されず、異なる優先順位の定周期割込みで動作するプログラムが複数実装される。このような制御装置のプログラムの実行監視には、ウォッチドッグタイマ（ＷＤＴ）が用いられることが多い。このとき、ハードウェアのウォッチドッグタイマは通常は装置に１個のみであるため、複数の定周期割込みプログラムの実行監視には、各プログラムに対応してソフトウェアカウンタが設けられる。そして、各定周期割り込みプログラムの実行時に、対応するソフトウェアカウンタを更新し、このソフトウェアカウンタが定期的に更新されているか否かを確認することで監視を行う。
【０００３】
この場合、各定周期割込み処理が監視時間内に動作しているか否かの確認はできるものの、実行シーケンスの監視、即ち各定周期が正しい順序で動作しているか否かの監視はできない。実行シーケンスの監視に関しては下記の先行技術がある。
【０００４】
特許文献１では、プログラム内のモジュールの予想経路と実際に動作した経路を比較して実行経路を検証する方法が提案されている。特許文献２では、プログラム内のモジュールのシーケンス番号と処理時間を対応付けて管理を行い、予めシーケンス番号と処理時間を対応付けた情報をテーブルに格納しておき、実際に動作したモジュールのシーケンス（順番）が予め格納した順番と一致するかどうか、および処理時間が所定時間以内であるかを検証する方法が提案されている。また、特許文献３では、関数の実行履歴をメモリに記録しておき、例えば、正常動作時（過去）とエラー発生時（今回）の関数の実行履歴を比較することで、プログラムの動作の差異を発見することを可能とするプログラム動作比較方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６３−２４４２３９号公報
【特許文献２】特許第５４９３９２９号公報
【特許文献３】特開２００９−２４４９６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１、２では、制御装置のプログラム構成全体を考慮したものではなく、例えば、制御装置のプログラムが、複数の優先順位の異なる定周期割込みのプログラムから構成されている場合については開示されていない。特許文献３では、プログラムの過去の実行履歴と現在の実行履歴を比較して検証を行う方式であり、実行履歴同士を比較するものである。このため、単に実行履歴の違いを検出できるに留まり、過去の実行履歴が正しいという保証は無い。また、特許文献３の技術によると、実行履歴の記録対象の関数がプログラム実行中に呼び出される全ての関数となるため、実行履歴記録用のメモリ領域が大量に必要になる。また、関数の実行履歴の記録有無、および比較対象とする実行履歴の範囲は外部ツールからの指示（例えば、デバッガからの指示）による制御が必要と考えられる。従って、デバッガと組み合わせて実現するような用途には適しているものの、制御装置内で動作しているプログラムで常時実行シーケンスの監視を行うような場合には上記のメモリ領域やデバッガの問題を解決する必要がある。
【０００７】
本発明は、上述のかかる事情に鑑みてなされたものであり、定周期処理プログラムの処理時間の監視を行うのみならず、シーケンス通りに実行されていることを効率よく監視することのできる制御装置およびその保守支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的を達成するため、本発明では主に次の（１）〜（１０）の特徴的な構成および処理によって、実行シーケンスの監視を行う。
（１）実行シーケンスをチェックする対象関数を定義するテーブル（定義テーブル）を用意し、予め当該テーブルに対象関数の情報（関数のシンボル名、先頭アドレス、終了アドレス等）を登録する。
（２）定義テーブルを作成する際は、作業を効率化するために、支援ツールを用意する。例えば、コンパイル・リンク時に出力されるＭＡＰファイルを自動参照して、関数リストを表示し、選択した関数情報を定義テーブルに登録する手段を設ける。
（３）定義テーブルは周期別に作成できるようにする。そして、周期ごとに属性情報（動作周期、優先順位、実行間隔時間の許容値）の設定を行う。
（４）作成した定義テーブルを制御装置のメモリに書き込む手段を設ける。
（５）実行履歴を記録する処理は、コンパイラの機能を利用して制御装置内のプログラム動作時に呼び出される関数のｒｅｔｕｒｎ文実行時に呼び出すように置き換える。
（６）実行履歴を記録する処理は、定義テーブルを参照して、登録されている関数であれば実行履歴（関数の識別情報、タイムスタンプ等）をメモリに保存する。
（７）定義テーブルに登録されている関数の順番と実行履歴とを比較して、実行シーケンス通りに実行されていることを監視する実行シーケンス監視手段（監視手段）を設ける。
（８）前記監視手段は、さらに実行関数の周期処理の優先順位を参照して、周期処理間の実行シーケンスが正しいことを監視する。
（９）前記監視手段は、さらに実行履歴のタイムスタンプより、各周期の時間内で処理が終了していることを監視する。
（１０）前記監視手段は、実行シーケンス異常と判断した場合は、エラーであることを通知（表示）する手段を設ける。
【０００９】
具体的には、本発明に係る制御装置は、
複数の定周期処理プログラムを実行する制御装置であって、
前記定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、
を備えることを特徴とする。
【００１０】
本発明では、ＯＳを使用せず、複数の優先順位の異なる定周期処理プログラムを実行する制御装置において、制御装置内のプログラムの実行履歴を記録する一方、当該実行履歴と予め実行シーケンスを定義した内容とを比較することで、正しい実行シーケンスで動作しているか否かを監視する。実行シーケンス（順番）通りに動作していることを確認することで、制御装置の安全性が向上する。
【００１１】
また、定義テーブルに登録した定周期処理プログラム（関数）のみを監視対象とし、メモリ内の実行履歴を記録する領域をリングバッファで構成することによって、実行履歴を記録するメモリ領域を節約することができる。
【００１２】
さらに、監視手段が異常を検知したときにエラーを通知する手段を設けることで、エラー発生時に安全対策を実施することが可能となり、安全を担保することができる。
【００１３】
なお、定義テーブルには、実行周期ごとに定められた優先順位も登録しておき、監視手段は、実行履歴に基づいて、複数の定周期処理プログラムが定義テーブルに定められた優先順位で実行されているか否かを監視して異常を検知するのが好ましい。
【００１４】
また、本発明に係る制御装置の前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムの実行間隔に関する第１の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻との差が前記第１の閾値以上になると異常を検知することを特徴とする。
【００１５】
好ましくは、前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムのうち、実行順序が最終の定周期処理プログラムが動作してから、実行順序が最先の定周期プログラムが動作するまでの実行間隔に関する第２の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻の差が前記第２の閾値以下になると異常を検知するという構成にするのが良い。
【００１６】
実行シーケンス（順番）通りかつ規定時間内で動作していることを確認することで、制御装置の安全性をさらに向上させることができる。
【００１７】
なお、前記記録手段は、前記定周期処理プログラムの特定の命令文が実行されることにより起動することにより、効率的に実行履歴の記録処理を行うことができる。
【００１８】
好ましくは、前記定周期処理プログラムは、前記特定の命令文をｒｅｔｕｒｎ文にするのがよい。これにより、プログラムコードに実行履歴を記録する処理の呼び出しを直接記述する必要がなくなり、保守性の向上や柔軟な対応が可能となる。
【００１９】
また、本発明に係る保守支援装置は、
上記の制御装置と通信可能な保守支援装置であって、
前記定周期処理プログラムコンパイル時のＭＡＰファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする。
【００２０】
これにより、実行シーケンスを変更する際に、プログラムコードの変更をする必要が無く、柔軟な対応が可能となる。
【発明の効果】
【００２１】
本発明によれば、実行周期に基づいて割り込み優先順を定め、保守支援装置側で実行周期ごとに定周期処理プログラムの実行順序を規定した定義テーブルを生成し、この定義テーブルを制御装置へ転送する。制御装置は、定周期プログラムの実行履歴を保存する一方、実行履歴と定義テーブルの内容とを比較することにより、実行シーケンスの監視を効率よく行うことができる。
【００２２】
また、定義テーブルおよび実行履歴に時間情報を追加することにより、実行シーケンスに加え、定周期処理プログラムの処理時間や実行間隔の監視を行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、メモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施の形態による制御装置およびその保守支援装置の機能ブロック図である。
【図２】図１の実行シーケンス監視対象関数定義テーブルのデータ構成図である。
【図３】図１の実行履歴記録領域に保存される関数実行履歴情報のデータ構成図である。
【図４】図１の関数実行履歴記録処理の手順を示すフローチャートである。
【図５】図２の実行シーケンス監視対象関数定義テーブルのデータに基づくプログラム実行シーケンス例を示す説明図である。
【図６】図５の実行シーケンスの実行履歴情報例を示す図である。
【図７】図１の実行シーケンス監視処理の手順を示すフローチャートである。
【図８Ａ】図７のステップＳ２０６で検出される実行シーケンスの異常パターンの例を示す説明図である。
【図８Ｂ】図７のステップＳ２０６で検出される実行シーケンスの異常パターンの他の例を示す説明図である。
【図９】図７のステップＳ２０７で検出される実行シーケンスの異常パターンの例を示す説明図である。
【図１０】図９の実行シーケンスの関数実行履歴情報の例を示す説明図である。
【図１１】図７のステップＳ２０８で検出される実行シーケンスの異常パターンの例を示す説明図である。
【図１２】図１１の実行シーケンスの関数実行履歴情報の例を示す説明図である。
【図１３】図７のステップＳ２１５〜Ｓ２１７で検出される実行シーケンスの異常パターンの例を示す説明図である。
【図１４】図１３の実行シーケンスの関数実行履歴情報の例を示す説明図である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施の形態について図面を参照しながら説明する。制御装置として、リアルタイム性の要求される車載機器を例にする。車載機器用のプログラムは、例えばＣ言語を用いた複数の関数で構築することができる。
【００２５】
図１に示すように、本実施の形態では、車載機器１の保守や開発支援を行う保守支援装置５において、実行シーケンスの監視に必要な情報を登録した実行シーケンス監視対象関数定義テーブル（以下、「定義テーブル」という。）２１を作成し、これを車載機器１へ転送する。車載機器１は、この定義テーブル２１を参照しながら、車載機器１上で動作する複数の定周期処理プログラムの実行シーケンス監視を行う。
【００２６】
保守支援装置５は、汎用のコンピュータ装置（以下、単に「ＰＣ」という。）で実現することができる。車載機器１と保守支援装置５との間は、ＣＡＮ（Controller Area Network）等のシリアル通信Ｉ／Ｆを用いてデータの送受信を行う。
【００２７】
車載機器１のプログラムは定周期処理を実行する複数のプログラム（以下、本実施の形態において「関数」ともいう。）１１〜１３、実行シーケンス監視処理プログラム１４、および関数実行履歴記録処理プログラム１５から構成される。本実施形態では、定周期処理として、Ａ周期処理、Ｂ周期処理、Ｃ周期処理（例えば、Ａ周期＝１ｍｓ、Ｂ周期＝２ｍｓ、Ｃ周期＝３ｍｓ）の３種類として説明するが、周期の数や長さはこれに限られない。ここで、Ａ周期処理１１は、Ａ周期で実行される関数である。Ｂ周期処理、Ｃ周期処理についても同様である。
【００２８】
車載機器１のメモリ空間は、データ（ＲＯＭ）領域２０、データ（ＲＡＭ）領域３０、プログラム（ＲＯＭ）領域１０に割り付けられる。データ（ＲＯＭ）領域２０には定義テーブル２１が保存される。データ（ＲＡＭ）領域３０には、定周期処理プログラム（関数）の実行履歴が記録される領域である実行履歴記録領域３１が配置される。またプログラム（ＲＯＭ）領域１０には、車載機器の機能を実現する各定周期処理プログラム（関数）、定周期プログラム（関数）の実行履歴を実行履歴記録領域３１に保存する関数実行履歴記録処理プログラム１５、および定義テーブル２１の内容と実行履歴とを比較して監視を行う実行シーケンス監視処理プログラム１４が格納される。
【００２９】
（定義テーブル２１の作成方法）
次に、保守支援装置５側での定義テーブル２１の作成方法について説明する。
図１に示すように、定義テーブル２１を作成は、保守支援装置５のディスプレイに表示される実行シーケンス監視登録画面５１を通して行われる。ユーザは、この画面を通して、定義テーブル２１の作成に必要な情報を登録する。実行シーケンス監視登録画面５１は、周期毎に関数を登録する画面領域５４を有し、定義テーブル２１に対する読出しおよび書込みを行うためのボタン５２，５３が設けられている。
【００３０】
また、保守支援装置５は制御装置１で実行される関数のＭＡＰファイル６１を備えている。このＭＡＰファイル６１は一般にプログラムコードのコンパイル・リンク時に生成・出力されるファイルであり、例えば関数シンボル名、エントリアドレス、サイズ等の情報を含んでいる。このＭＡＰファイル６１の内容を参照することにより、効率的に定義テーブル２１に関数情報を登録することができる。
【００３１】
図２に定義テーブル２１の構成例を示す。
当該定義テーブル２１は周期別のテーブル２１ａ〜２１ｃで構成される。図２にはＡ周期用テーブル２１ａ、Ｂ周期用テーブル２１ｂ、Ｃ周期用テーブル２１ｃの３種類のテーブルが示されている。
【００３２】
以下、定義テーブル２１（２１ａ〜２１ｃ）の項目例について簡単に説明する。
１）登録数：当該周期内で実行シーケンスの監視対象として登録した関数の数
２）周期：当該周期の時間
３）優先順位：当該周期処理の動作優先順位（優先レベル）。図２では最小の番号（優先順位：１）の優先順位が最も高いことを示す。
４）前回先頭〜今回先頭関数許容最長実行間隔：当該周期テーブル内の最初に登録した関数（最初に実行される関数）の前回の実行時刻と今回の実行時刻の差（実行間隔）の閾値。後述する実行シーケンス監視処理手順により、実行間隔がこの閾値を超えた場合は実行シーケンス異常と判定される。
５）前回最後〜今回先頭関数許容最短実行間隔：当該周期テーブル内の最後に登録した関数（最後に実行される関数）の前回周期での実行時刻と、最初に登録した関数（最初に実行される関数）の今回周期での実行時刻の差の閾値。実行履歴に基づいて実際の間隔がこの閾値以下の場合は実行シーケンス異常と判定される。
６）関数シンボル名：当該周期内で実行シーケンスの監視対象とする関数名
７）関数先頭アドレス：当該周期内で実行シーケンスの監視対象とする関数の先頭アドレス
８）関数終端アドレス：当該周期内で実行シーケンスの監視対象とする関数の終端アドレス
９）識別番号（実行番号）：当該周期内で実行シーケンスの監視対象とする関数の識別番号。識別番号は実行順の番号とし、登録順に連番とする。保守支援装置５の実行シーケンス監視登録画面を通して、全ての周期テーブルでユニークな番号が付される。
【００３３】
保守支援装置５で作成された定義テーブル２１は、通信Ｉ／Ｆ経由から車載機器１へ転送され、車載機器１のデータ（ＲＯＭ）領域２０に書き込まれる。
【００３４】
各定周期処理（Ａ周期処理、Ｂ周期処理、Ｃ周期処理）は、定義テーブル２１に登録されている関数実行時に当該実行情報を実行履歴記録領域３１に記録する。実行シーケンス監視処理プログラム１４は、後述する手順により、定義テーブル２１と実行履歴記録領域３１の内容を比較し、実行シーケンスの正常／異常を判断する。
【００３５】
図３は、車載機器１の実行履歴記録領域３１に記録される関数実行履歴情報の例である。実行される関数ごとに、関数シンボル名、識別番号、優先順位、およびタイムスタンプが互いに関連付けられて意保存される。
【００３６】
以下、各項目について簡単に説明する。
１）関数シンボル名：実行関数のシンボル名
２）識別番号：実行シーケンス監視対象関数定義テーブルに設定されている、当該実行関数の識別番号（実行番号）
３）優先順位：実行シーケンス監視対象関数定義テーブルに設定されている、当該周期処理の動作優先順位
４）タイムスタンプ：定義テーブル２１に設定されている、当該関数が実行された時のタイムスタンプ（時間情報）。（ここでは単位は規定しない）
【００３７】
（関数実行履歴記録処理）
関数実行履歴記録処理プログラム１５は、関数が実行されたときに、図３に示す関数実行履歴情報（関数シンボル名、識別番号、優先順位、タイムスタンプ）を実行履歴記録領域３１へ記録する。実行履歴記録領域３１の構造はリングバッファとするのが好ましい。当該領域３１のサイズは各周期処理での実行履歴記録数と実行シーケンス監視を行うタイミングを考慮して、オーバーフローしないサイズを確保する。
【００３８】
関数実行履歴記録処理プログラム１５の呼び出し（起動）タイミングは、関数の特定のコードを読み出したときである。例えば、プログラムコードがＣ言語で記述される場合、対象関数のreturn文が実行されるタイミングで呼ばれる構成とすることができる。この場合、Ｃ言語コンパイラのプリプロセッサ機能を利用して、return文を関数実行履歴記録処理プログラム１５を呼び出すマクロに置き換えることができる。マクロ置換の具体例を下記に示す。この方法により、制御処理のプログラムコードでは関数実行履歴記録処理プログラム１５の呼び出しを記述する必要がなくなる。
【００３９】
マクロ置換の具体例：#define return trace_func（）; return
ここで、trace_func（）は関数実行履歴記録処理プログラム１５の関数である。
【００４０】
次に、図４を用いて関数実行履歴記録処理プログラム１５の手順を説明する。
図４において、関数実行履歴記録処理は起動されると、まず実行履歴記録領域の格納ポインタをセットする（ステップＳ１０１）。そして、タイムスタンプと関数復帰アドレスを取得する（ステップＳ１０２，Ｓ１０３）。その後、関数復帰アドレスをもとに以下に述べる定義テーブル２１の検索処理を実行する（ステップＳ１０４）。
【００４１】
まず、定義テーブル２１に当該関数の登録が有るか否かを判定し（ステップＳ１０５）、登録がある場合は、実行履歴記録領域３１へ関数シンボル名、関数識別番号、優先順位、タイムスタンプを記録する（ステップＳ１０６〜Ｓ１０９）。そして実行履歴記録領域３１の格納ポインタを更新する。なお、格納ポインタは所定の値に到達すると初期値にリセットされる。
【００４２】
上記の処理手順により、定周期プログラムが起動されるごとに、ｒｅｔｕｒｎ文の実行タイミングで関数実行履歴記録処理も実行され、監視対象の関数の実行履歴のみが実行履歴記録領域３１に保存される。
【００４３】
図２の定義テーブル２１に基づいたブログラム実行シーケンスの例を図５に示す。
図２において、各関数群は、Ａ周期処理（１ｍｓ）、Ｂ周期処理（２ｍｓ）、Ｃ周期処理（３ｍｓ）の定周期処理で、動作優先順位はＡ周期処理＞Ｂ周期処理＞Ｃ周期処理に設定されている。同時に動作可能状態となった場合は、優先順位の高い処理が動作する。例えば、図５の（a）時点でＡ周期処理、Ｂ周期処理、Ｃ周期処理が動作可能な場合、優先順位の最も高いＡ周期処理が先に動作する。そして、Ａ周期処理の終了後に、次に優先順位の高いＢ周期処理が遅延して動作を開始する。Ｂ周期処理終了後、（b）時点では、Ｃ周期処理は待ち状態にあるものの、Ａ周期の実行タイミングも到来しているので、優先順位の高いＡ周期処理が再び動作状態となるため、Ａ周期処理の終了後にＣ周期処理が遅延して動作する。なお、実行シーケンスの安定動作のためには、実行周期の短い処理に高い優先順位を割り付けるのが効果的である。
【００４４】
上述した関数実行履歴記録処理プログラム１５により、図５の実行シーケンスに示す実行順番に関数の実行履歴が実行履歴記録領域３１に記録される。このときの実行履歴記録領域３１のデータ例を図６に示す。
【００４５】
（実行シーケンス監視処理）
次に、車載機器１で実行される実行シーケンス監視処理プログラム１４の手順について説明する。
図７は、実行シーケンス監視処理プログラム１４の手順を示すフローチャートである。以下に処理手順の概要を説明する。
【００４６】
実行シーケンス監視処理プログラム１４は、一定の周期で起動されると、まず実行履歴記録領域３１から関数実行履歴情報を読出し（ステップＳ２０１）、データ（ＲＡＭ）領域３０に、周期別に履歴情報を一時的に保存する領域を設ける（ステップＳ２０２）。そして、当該周期の履歴一時領域に実行番号、優先順位を保存し、保存個数を更新する（ステップＳ２０３）。
【００４７】
その後、周期別の履歴保存個数が定義テーブル２１の当該周期処理の関数登録数と同じであれば、履歴一時領域と定義テーブル２１の内容同士を比較する（ステップＳ２０４〜Ｓ２０５）。
【００４８】
ステップＳ２０５の比較結果が一致、即ち実行順番が定義テーブル２１の登録内容（順番）と同じであれば（ステップＳ２０６で「ＹＥＳ」）、次に当該周期処理が定義テーブル２１に設定されている規定時間を満たしているか否かを判定する（ステップＳ２０７〜Ｓ２０８）。ここで、ステップＳ２０７は、周期別に先頭関数のタイムスタンプの前回値と今回値の差分が設定値（関数許容最長実行間隔）以下か否かを判定することにより、周期性が維持されているかどうかを監視する。ステップＳ２０８は、周期別に前回最後の関数のタイムスタンプと今回先頭の関数のタイムスタンプとの差分が設定値（関数の許容最短実行間隔）よりも長いか否かを判定することによって、処理が渋滞傾向にあるかどうかを監視する。
【００４９】
ステップＳ２０６〜Ｓ２０８の判定処理において条件を満たしていれば、実行シーケンスは正常とみなし、今回の先頭の関数実行番号，最後の関数実行番号，および優先順位を前回値として保存する（ステップＳ２０９）。そして、当該周期の履歴一時領域と保存個数をクリアする（ステップＳ２１０）。
【００５０】
ステップＳ２１０の後、エラー有無を判断し（ステップＳ２１２）、エラーが無ければ、実行履歴情報ポインタを更新し（ステップＳ２１３）、実行履歴情報が残っている場合は（ステップＳ２１４で「ＮＯ」）、ステップＳ２０１に戻って処理を繰り返す。一方、ステップＳ２１４で実行履歴情報が残っていない場合は処理を終了する。
【００５１】
ステップＳ２０６で比較結果が一致しない場合、即ち実行順番が定義テーブル２１の登録内容と異なる場合、またはステップＳ２０７，Ｓ２０８で規定時間を満たさない場合は、実行シーケンス異常と判定し、エラー情報を設定して終了する（ステップＳ２１１〜Ｓ１２）。
【００５２】
ステップＳ２０４で周期別の履歴一時領域の保存個数が定義テーブル２１の登録数と一致しない場合は、直前の実行関数の優先順位や実行番号をもとに優先順位通りに実行されているか否かの判定を行う（ステップＳ２１５〜Ｓ２１７）。
【００５３】
具体的には、ステップＳ２１５では実行履歴にある直前の関数の優先順位と現在の関数の優先順位とが同一である場合は同一優先順位内での関数が連続して実行されているとみなし、正常と判断する。同一でない場合は、実行シーケンス異常の可能性があるとみなし、ステップＳ２１６へ移行する。ステップＳ２１６では実行履歴の直前の関数が現在の関数の優先順位より低い場合は正常とみなす。高い場合は、実行シーケンス異常の可能性があるとみなしてステップＳ２１７へ移行する。ステップＳ２１７では実行履歴の直前の関数の実行番号が最後である場合は正常とみなす。最後でない場合は、優先順位の低い関数が優先順位の高い最後の関数が実行される前に優先的に実行されているため、実行シーケンス異常とみなす。
【００５４】
ステップＳ２１５〜Ｓ２１７において、それぞれ正常であると判断した場合は、実行シーケンスは正常とみなして、現在の実行番号と優先順位を直前の値として保存した後、実行履歴情報ポインタを更新する（ステップＳ２１９，Ｓ２２０）。そして、実行履歴情報が残っている場合は（ステップＳ２２１で「ＮＯ」）、ステップＳ２０１に戻って処理を繰り返し、残っていない場合は終了する。
【００５５】
ステップＳ２１５〜Ｓ２１７の判定処理のいずれの条件も満たさなかった場合は、実行シーケンス異常（優先順位通りに実行されていない）と判定して、エラー情報を設定して処理を終了する（ステップＳ２１８，Ｓ２１２）。
【００５６】
実行シーケンス監視処理プログラム１４は、以上の処理手順によって実行シーケンス異常を検出する。
【００５７】
（実行シーケンス異常検出の具体例）
実行シーケンス監視処理プログラム１４で、異常と判定する実行シーケンスの例を図８Ａ、図８Ｂ、図９〜図１３に示す。
【００５８】
まず、図８Ａ（ａ）は、Ｂ周期処理の先頭の番号（識別番号４）が抜けているケースである。図８Ａ（ｂ）は、Ｂ周期処理の最後の番号（識別番号８）が抜けているケースである。図８Ｂ（ｃ）は、Ｂ周期処理の間の番号（識別番号６）が抜けているケースである。図８Ｂ（ｄ）は、Ｂ周期処理の番号がＢ周期用テーブル２１ｂに登録した順番どおりでないケースである。これら図８Ａ（ａ）（ｂ）、図８Ｂ（ｃ）（ｄ）に示す各実行シーケンス例はＢ周期処理の関数実行順番が定義テーブル２１（Ｂ周期用テーブル２１ｂ）の登録内容と異なるため、図７のステップＳ２０６で「ＮＯ」の判定となり、実行シーケンス異常が検出される。
【００５９】
次に、図９，図１１，図１３の実施例に示す実行シーケンスに対応する関数実行履歴情報をそれぞれ図１０，図１２，図１４に示す。なお、本実施例において、時間間隔関連の設定は以下とする。
【００６０】
タイムスタンプの単位：1count=2.5us
Ａ周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値：1.5ms（600count）
Ａ周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値：0.1ms（40count）
Ｂ周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値：3ms（1200count）
Ｂ周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値：0.5ms（200count）
Ｃ周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値：4.5ms（1800count）
Ｃ周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値：0.5ms（200count）
【００６１】
まず、図９、図１０に示す実行シーケンス例はＢ周期処理の前回と今回の先頭関数の実行間隔が規定値を超える。すなわち、識別番号４の関数に着目すると、図１０の関数実行履歴情報において、ＮＯ．４とＮＯ．１８の履歴のタイムスタンプの差分Ｔ１（１２５０）が、図２のＢ周期用テーブル２１ｂの前回先頭〜今回先頭関数許容最長実行間隔の設定値（３ｍｓ：１２００）よりも大きくなる。このため図７のステップＳ２０７で「ＮＯ」の判定となり、実行シーケンス異常が検出される。
【００６２】
図１１、図１２に示す実行シーケンス例はＣ周期処理の前回の最後の関数と今回の先頭の関数の実行間隔が規定値より短い。すなわち、識別番号１３と識別番号９の関数に着目すると、図１２の関数実行履歴情報において、ＮＯ．２７とＮＯ．２８の履歴のタイムスタンプの差分Ｔ２（５０）が、図２のＣ周期用テーブル２１ｃの前回最後〜今回先頭関数許容最短実行間隔の設定値（０．５ｍｓ：２００）以下になる。このため、図７のステップＳ２０８で「ＮＯ」の判定となり、実行シーケンス異常が検出される。
【００６３】
図１３、図１４に示す実行シーケンス例はＢ周期処理の実行途中でＢ周期処理よりも優先順位の低いＣ周期処理が実行されている。すなわち、識別番号５と識別番号１３の関数に着目すると図１４のＮＯ．２０とＮＯ．２１の履歴で、ＮＯ．２１のＣ周期用関数の直前のＮＯ．２０のＢ周期用関数が登録関数の最後ではなく、Ｂ周期よりも優先順位の低いＣ周期用の関数が途中で実行されている。このため、図７のステップＳ２１５〜Ｓ２１７ですべて「ＮＯ」の判定となり、実行シーケンス異常が検出される。
【００６４】
以上、本実施の形態によれば、実行周期に基づいて割り込み優先順を定め、保守支援装置側で実行周期ごとに定周期処理プログラム（関数）の実行順序を規定した定義テーブルを生成し、この定義テーブルを制御装置へ転送する。制御装置は、定周期プログラム（関数）の実行履歴を保存する一方、実行履歴と定義テーブルの内容とを比較することにより、実行シーケンスの監視を効率よく行うことができる。
【００６５】
また、定義テーブルおよび実行履歴に時間情報を追加することにより、実行シーケンスに加え、定周期処理プログラム（関数）の処理時間や実行間隔の監視を行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、メモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
【符号の説明】
【００６６】
１    制御装置（車載機器）
５    保守支援装置
１０    プログラム（ＲＯＭ）領域
１１〜１３    定周期処理プログラム（関数）
１４    実行シーケンス監視処理プログラム（監視手段）
１５    関数実行履歴記録処理プログラム（記録手段）
２０    データ（ＲＯＭ）領域
２１    実行シーケンス監視対象関数定義テーブル（定義テーブル）
２１ａ    Ａ周期用テーブル
２１ｂ    Ｂ周期用テーブル
２１ｃ    Ｃ周期用テーブル
３０    データ（ＲＡＭ）領域
３１    実行履歴記録領域
５１    実行シーケンス監視登録画面
６１    ＭＡＰファイル
【図１】
2020204844.tif 000003
【図２】
2020204844.tif 000004
【図３】
2020204844.tif 000005
【図４】
2020204844.tif 000006
【図５】
2020204844.tif 000007
【図６】
2020204844.tif 000008
【図７】
2020204844.tif 000009
【図８Ａ】
2020204844.tif 000010
【図８Ｂ】
2020204844.tif 000011
【図９】
2020204844.tif 000012
【図１０】
2020204844.tif 000013
【図１１】
2020204844.tif 000014
【図１２】
2020204844.tif 000015
【図１３】
2020204844.tif 000016
【図１４】
2020204844.tif 000017