特開2020-204844(P2020-204844A)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士電機株式会社の特許一覧
<>
  • 特開2020204844-制御装置およびその保守支援装置 図000003
  • 特開2020204844-制御装置およびその保守支援装置 図000004
  • 特開2020204844-制御装置およびその保守支援装置 図000005
  • 特開2020204844-制御装置およびその保守支援装置 図000006
  • 特開2020204844-制御装置およびその保守支援装置 図000007
  • 特開2020204844-制御装置およびその保守支援装置 図000008
  • 特開2020204844-制御装置およびその保守支援装置 図000009
  • 特開2020204844-制御装置およびその保守支援装置 図000010
  • 特開2020204844-制御装置およびその保守支援装置 図000011
  • 特開2020204844-制御装置およびその保守支援装置 図000012
  • 特開2020204844-制御装置およびその保守支援装置 図000013
  • 特開2020204844-制御装置およびその保守支援装置 図000014
  • 特開2020204844-制御装置およびその保守支援装置 図000015
  • 特開2020204844-制御装置およびその保守支援装置 図000016
  • 特開2020204844-制御装置およびその保守支援装置 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2020-204844(P2020-204844A)
(43)【公開日】2020年12月24日
(54)【発明の名称】制御装置およびその保守支援装置
(51)【国際特許分類】
   G06F 11/07 20060101AFI20201127BHJP
【FI】
   G06F11/07 157
   G06F11/07 140R
【審査請求】未請求
【請求項の数】8
【出願形態】OL
【全頁数】16
(21)【出願番号】特願2019-111527(P2019-111527)
(22)【出願日】2019年6月14日
(71)【出願人】
【識別番号】000005234
【氏名又は名称】富士電機株式会社
(74)【代理人】
【識別番号】100112003
【弁理士】
【氏名又は名称】星野 裕司
(74)【代理人】
【識別番号】100177312
【弁理士】
【氏名又は名称】辰己 雄一
(72)【発明者】
【氏名】澤田 孝雄
(72)【発明者】
【氏名】小高 章弘
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA05
5B042GB08
5B042JJ10
5B042JJ21
5B042JJ27
5B042JJ29
5B042MA17
5B042MC12
5B042MC35
5B042MC40
(57)【要約】
【課題】 定周期処理プログラムがシーケンス通りに実行されていることを効率よく監視すること。
【解決手段】 制御装置に、定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、を備える。
【選択図】 図1
【特許請求の範囲】
【請求項1】
複数の定周期処理プログラムを実行する制御装置であって、
前記定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、
を備えることを特徴とする制御装置。
【請求項2】
前記定義テーブルは、前記実行周期ごとに定められた優先順位を含み、
前記監視手段は、前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定められた優先順位で実行されているか否かを監視して異常を検知することを特徴とする請求項1に記載の制御装置。
【請求項3】
前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムの実行間隔に関する第1の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻との差が前記第1の閾値以上になると異常を検知することを特徴とする請求項1又は2に記載の制御装置。
【請求項4】
前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムのうち、実行順序が最終の定周期処理プログラムが動作してから、実行順序が最先の定周期プログラムが動作するまでの実行間隔に関する第2の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻の差が前記第2の閾値以下になると異常を検知することを特徴とする請求項1〜3のいずれか一項に記載の制御装置。
【請求項5】
前記記録手段は、前記定周期処理プログラムの特定の命令文が実行されることにより起動することを特徴とする請求項1〜4のいずれか一項に記載の制御装置。
【請求項6】
前記特定の命令文はreturn文であることを特徴とする請求項5に記載の制御装置。
【請求項7】
前記メモリ内の前記実行履歴を記録する領域はリングバッファで構成されていることを特徴とする請求項1〜6のいずれか一項に記載の制御装置。
【請求項8】
請求項1〜7のいずれか一項に記載の制御装置と通信可能な保守支援装置であって、
前記定周期処理プログラムコンパイル時のMAPファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする保守支援装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、OSを使用しない定周期割り込みのプログラムを実行する制御装置およびその保守支援装置に係り、特に複数のプログラムの実行シーケンスが正常か否かを監視することのできる制御装置およびその保守支援装置に関する。
【背景技術】
【0002】
一般に、車載機器(モータ駆動装置)などの制御装置では、OSは使用されず、異なる優先順位の定周期割込みで動作するプログラムが複数実装される。このような制御装置のプログラムの実行監視には、ウォッチドッグタイマ(WDT)が用いられることが多い。このとき、ハードウェアのウォッチドッグタイマは通常は装置に1個のみであるため、複数の定周期割込みプログラムの実行監視には、各プログラムに対応してソフトウェアカウンタが設けられる。そして、各定周期割り込みプログラムの実行時に、対応するソフトウェアカウンタを更新し、このソフトウェアカウンタが定期的に更新されているか否かを確認することで監視を行う。
【0003】
この場合、各定周期割込み処理が監視時間内に動作しているか否かの確認はできるものの、実行シーケンスの監視、即ち各定周期が正しい順序で動作しているか否かの監視はできない。実行シーケンスの監視に関しては下記の先行技術がある。
【0004】
特許文献1では、プログラム内のモジュールの予想経路と実際に動作した経路を比較して実行経路を検証する方法が提案されている。特許文献2では、プログラム内のモジュールのシーケンス番号と処理時間を対応付けて管理を行い、予めシーケンス番号と処理時間を対応付けた情報をテーブルに格納しておき、実際に動作したモジュールのシーケンス(順番)が予め格納した順番と一致するかどうか、および処理時間が所定時間以内であるかを検証する方法が提案されている。また、特許文献3では、関数の実行履歴をメモリに記録しておき、例えば、正常動作時(過去)とエラー発生時(今回)の関数の実行履歴を比較することで、プログラムの動作の差異を発見することを可能とするプログラム動作比較方法が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開昭63−244239号公報
【特許文献2】特許第5493929号公報
【特許文献3】特開2009−244969号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1、2では、制御装置のプログラム構成全体を考慮したものではなく、例えば、制御装置のプログラムが、複数の優先順位の異なる定周期割込みのプログラムから構成されている場合については開示されていない。特許文献3では、プログラムの過去の実行履歴と現在の実行履歴を比較して検証を行う方式であり、実行履歴同士を比較するものである。このため、単に実行履歴の違いを検出できるに留まり、過去の実行履歴が正しいという保証は無い。また、特許文献3の技術によると、実行履歴の記録対象の関数がプログラム実行中に呼び出される全ての関数となるため、実行履歴記録用のメモリ領域が大量に必要になる。また、関数の実行履歴の記録有無、および比較対象とする実行履歴の範囲は外部ツールからの指示(例えば、デバッガからの指示)による制御が必要と考えられる。従って、デバッガと組み合わせて実現するような用途には適しているものの、制御装置内で動作しているプログラムで常時実行シーケンスの監視を行うような場合には上記のメモリ領域やデバッガの問題を解決する必要がある。
【0007】
本発明は、上述のかかる事情に鑑みてなされたものであり、定周期処理プログラムの処理時間の監視を行うのみならず、シーケンス通りに実行されていることを効率よく監視することのできる制御装置およびその保守支援装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記の目的を達成するため、本発明では主に次の(1)〜(10)の特徴的な構成および処理によって、実行シーケンスの監視を行う。
(1)実行シーケンスをチェックする対象関数を定義するテーブル(定義テーブル)を用意し、予め当該テーブルに対象関数の情報(関数のシンボル名、先頭アドレス、終了アドレス等)を登録する。
(2)定義テーブルを作成する際は、作業を効率化するために、支援ツールを用意する。例えば、コンパイル・リンク時に出力されるMAPファイルを自動参照して、関数リストを表示し、選択した関数情報を定義テーブルに登録する手段を設ける。
(3)定義テーブルは周期別に作成できるようにする。そして、周期ごとに属性情報(動作周期、優先順位、実行間隔時間の許容値)の設定を行う。
(4)作成した定義テーブルを制御装置のメモリに書き込む手段を設ける。
(5)実行履歴を記録する処理は、コンパイラの機能を利用して制御装置内のプログラム動作時に呼び出される関数のreturn文実行時に呼び出すように置き換える。
(6)実行履歴を記録する処理は、定義テーブルを参照して、登録されている関数であれば実行履歴(関数の識別情報、タイムスタンプ等)をメモリに保存する。
(7)定義テーブルに登録されている関数の順番と実行履歴とを比較して、実行シーケンス通りに実行されていることを監視する実行シーケンス監視手段(監視手段)を設ける。
(8)前記監視手段は、さらに実行関数の周期処理の優先順位を参照して、周期処理間の実行シーケンスが正しいことを監視する。
(9)前記監視手段は、さらに実行履歴のタイムスタンプより、各周期の時間内で処理が終了していることを監視する。
(10)前記監視手段は、実行シーケンス異常と判断した場合は、エラーであることを通知(表示)する手段を設ける。
【0009】
具体的には、本発明に係る制御装置は、
複数の定周期処理プログラムを実行する制御装置であって、
前記定周期処理プログラムの実行周期ごとに、各実行周期に属する監視対象の定周期処理プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記定周期処理プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、複数の前記定周期処理プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを実行周期ごとに監視して異常を検知する監視手段と、
を備えることを特徴とする。
【0010】
本発明では、OSを使用せず、複数の優先順位の異なる定周期処理プログラムを実行する制御装置において、制御装置内のプログラムの実行履歴を記録する一方、当該実行履歴と予め実行シーケンスを定義した内容とを比較することで、正しい実行シーケンスで動作しているか否かを監視する。実行シーケンス(順番)通りに動作していることを確認することで、制御装置の安全性が向上する。
【0011】
また、定義テーブルに登録した定周期処理プログラム(関数)のみを監視対象とし、メモリ内の実行履歴を記録する領域をリングバッファで構成することによって、実行履歴を記録するメモリ領域を節約することができる。
【0012】
さらに、監視手段が異常を検知したときにエラーを通知する手段を設けることで、エラー発生時に安全対策を実施することが可能となり、安全を担保することができる。
【0013】
なお、定義テーブルには、実行周期ごとに定められた優先順位も登録しておき、監視手段は、実行履歴に基づいて、複数の定周期処理プログラムが定義テーブルに定められた優先順位で実行されているか否かを監視して異常を検知するのが好ましい。
【0014】
また、本発明に係る制御装置の前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムの実行間隔に関する第1の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻との差が前記第1の閾値以上になると異常を検知することを特徴とする。
【0015】
好ましくは、前記定義テーブルは、実行周期ごとに、該実行周期で動作する定周期処理プログラムのうち、実行順序が最終の定周期処理プログラムが動作してから、実行順序が最先の定周期プログラムが動作するまでの実行間隔に関する第2の閾値を含み、
前記監視手段は、前記実行履歴に基づいて、所定の実行順位の定周期処理プログラムの前回実行時刻と今回実行時刻の差が前記第2の閾値以下になると異常を検知するという構成にするのが良い。
【0016】
実行シーケンス(順番)通りかつ規定時間内で動作していることを確認することで、制御装置の安全性をさらに向上させることができる。
【0017】
なお、前記記録手段は、前記定周期処理プログラムの特定の命令文が実行されることにより起動することにより、効率的に実行履歴の記録処理を行うことができる。
【0018】
好ましくは、前記定周期処理プログラムは、前記特定の命令文をreturn文にするのがよい。これにより、プログラムコードに実行履歴を記録する処理の呼び出しを直接記述する必要がなくなり、保守性の向上や柔軟な対応が可能となる。
【0019】
また、本発明に係る保守支援装置は、
上記の制御装置と通信可能な保守支援装置であって、
前記定周期処理プログラムコンパイル時のMAPファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする。
【0020】
これにより、実行シーケンスを変更する際に、プログラムコードの変更をする必要が無く、柔軟な対応が可能となる。
【発明の効果】
【0021】
本発明によれば、実行周期に基づいて割り込み優先順を定め、保守支援装置側で実行周期ごとに定周期処理プログラムの実行順序を規定した定義テーブルを生成し、この定義テーブルを制御装置へ転送する。制御装置は、定周期プログラムの実行履歴を保存する一方、実行履歴と定義テーブルの内容とを比較することにより、実行シーケンスの監視を効率よく行うことができる。
【0022】
また、定義テーブルおよび実行履歴に時間情報を追加することにより、実行シーケンスに加え、定周期処理プログラムの処理時間や実行間隔の監視を行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、メモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
【図面の簡単な説明】
【0023】
図1】本発明の実施の形態による制御装置およびその保守支援装置の機能ブロック図である。
図2図1の実行シーケンス監視対象関数定義テーブルのデータ構成図である。
図3図1の実行履歴記録領域に保存される関数実行履歴情報のデータ構成図である。
図4図1の関数実行履歴記録処理の手順を示すフローチャートである。
図5図2の実行シーケンス監視対象関数定義テーブルのデータに基づくプログラム実行シーケンス例を示す説明図である。
図6図5の実行シーケンスの実行履歴情報例を示す図である。
図7図1の実行シーケンス監視処理の手順を示すフローチャートである。
図8A図7のステップS206で検出される実行シーケンスの異常パターンの例を示す説明図である。
図8B図7のステップS206で検出される実行シーケンスの異常パターンの他の例を示す説明図である。
図9図7のステップS207で検出される実行シーケンスの異常パターンの例を示す説明図である。
図10図9の実行シーケンスの関数実行履歴情報の例を示す説明図である。
図11図7のステップS208で検出される実行シーケンスの異常パターンの例を示す説明図である。
図12図11の実行シーケンスの関数実行履歴情報の例を示す説明図である。
図13図7のステップS215〜S217で検出される実行シーケンスの異常パターンの例を示す説明図である。
図14図13の実行シーケンスの関数実行履歴情報の例を示す説明図である。
【発明を実施するための形態】
【0024】
以下、本発明の実施の形態について図面を参照しながら説明する。制御装置として、リアルタイム性の要求される車載機器を例にする。車載機器用のプログラムは、例えばC言語を用いた複数の関数で構築することができる。
【0025】
図1に示すように、本実施の形態では、車載機器1の保守や開発支援を行う保守支援装置5において、実行シーケンスの監視に必要な情報を登録した実行シーケンス監視対象関数定義テーブル(以下、「定義テーブル」という。)21を作成し、これを車載機器1へ転送する。車載機器1は、この定義テーブル21を参照しながら、車載機器1上で動作する複数の定周期処理プログラムの実行シーケンス監視を行う。
【0026】
保守支援装置5は、汎用のコンピュータ装置(以下、単に「PC」という。)で実現することができる。車載機器1と保守支援装置5との間は、CAN(Controller Area Network)等のシリアル通信I/Fを用いてデータの送受信を行う。
【0027】
車載機器1のプログラムは定周期処理を実行する複数のプログラム(以下、本実施の形態において「関数」ともいう。)11〜13、実行シーケンス監視処理プログラム14、および関数実行履歴記録処理プログラム15から構成される。本実施形態では、定周期処理として、A周期処理、B周期処理、C周期処理(例えば、A周期=1ms、B周期=2ms、C周期=3ms)の3種類として説明するが、周期の数や長さはこれに限られない。ここで、A周期処理11は、A周期で実行される関数である。B周期処理、C周期処理についても同様である。
【0028】
車載機器1のメモリ空間は、データ(ROM)領域20、データ(RAM)領域30、プログラム(ROM)領域10に割り付けられる。データ(ROM)領域20には定義テーブル21が保存される。データ(RAM)領域30には、定周期処理プログラム(関数)の実行履歴が記録される領域である実行履歴記録領域31が配置される。またプログラム(ROM)領域10には、車載機器の機能を実現する各定周期処理プログラム(関数)、定周期プログラム(関数)の実行履歴を実行履歴記録領域31に保存する関数実行履歴記録処理プログラム15、および定義テーブル21の内容と実行履歴とを比較して監視を行う実行シーケンス監視処理プログラム14が格納される。
【0029】
(定義テーブル21の作成方法)
次に、保守支援装置5側での定義テーブル21の作成方法について説明する。
図1に示すように、定義テーブル21を作成は、保守支援装置5のディスプレイに表示される実行シーケンス監視登録画面51を通して行われる。ユーザは、この画面を通して、定義テーブル21の作成に必要な情報を登録する。実行シーケンス監視登録画面51は、周期毎に関数を登録する画面領域54を有し、定義テーブル21に対する読出しおよび書込みを行うためのボタン52,53が設けられている。
【0030】
また、保守支援装置5は制御装置1で実行される関数のMAPファイル61を備えている。このMAPファイル61は一般にプログラムコードのコンパイル・リンク時に生成・出力されるファイルであり、例えば関数シンボル名、エントリアドレス、サイズ等の情報を含んでいる。このMAPファイル61の内容を参照することにより、効率的に定義テーブル21に関数情報を登録することができる。
【0031】
図2に定義テーブル21の構成例を示す。
当該定義テーブル21は周期別のテーブル21a〜21cで構成される。図2にはA周期用テーブル21a、B周期用テーブル21b、C周期用テーブル21cの3種類のテーブルが示されている。
【0032】
以下、定義テーブル21(21a〜21c)の項目例について簡単に説明する。
1)登録数:当該周期内で実行シーケンスの監視対象として登録した関数の数
2)周期:当該周期の時間
3)優先順位:当該周期処理の動作優先順位(優先レベル)。図2では最小の番号(優先順位:1)の優先順位が最も高いことを示す。
4)前回先頭〜今回先頭関数許容最長実行間隔:当該周期テーブル内の最初に登録した関数(最初に実行される関数)の前回の実行時刻と今回の実行時刻の差(実行間隔)の閾値。後述する実行シーケンス監視処理手順により、実行間隔がこの閾値を超えた場合は実行シーケンス異常と判定される。
5)前回最後〜今回先頭関数許容最短実行間隔:当該周期テーブル内の最後に登録した関数(最後に実行される関数)の前回周期での実行時刻と、最初に登録した関数(最初に実行される関数)の今回周期での実行時刻の差の閾値。実行履歴に基づいて実際の間隔がこの閾値以下の場合は実行シーケンス異常と判定される。
6)関数シンボル名:当該周期内で実行シーケンスの監視対象とする関数名
7)関数先頭アドレス:当該周期内で実行シーケンスの監視対象とする関数の先頭アドレス
8)関数終端アドレス:当該周期内で実行シーケンスの監視対象とする関数の終端アドレス
9)識別番号(実行番号):当該周期内で実行シーケンスの監視対象とする関数の識別番号。識別番号は実行順の番号とし、登録順に連番とする。保守支援装置5の実行シーケンス監視登録画面を通して、全ての周期テーブルでユニークな番号が付される。
【0033】
保守支援装置5で作成された定義テーブル21は、通信I/F経由から車載機器1へ転送され、車載機器1のデータ(ROM)領域20に書き込まれる。
【0034】
各定周期処理(A周期処理、B周期処理、C周期処理)は、定義テーブル21に登録されている関数実行時に当該実行情報を実行履歴記録領域31に記録する。実行シーケンス監視処理プログラム14は、後述する手順により、定義テーブル21と実行履歴記録領域31の内容を比較し、実行シーケンスの正常/異常を判断する。
【0035】
図3は、車載機器1の実行履歴記録領域31に記録される関数実行履歴情報の例である。実行される関数ごとに、関数シンボル名、識別番号、優先順位、およびタイムスタンプが互いに関連付けられて意保存される。
【0036】
以下、各項目について簡単に説明する。
1)関数シンボル名:実行関数のシンボル名
2)識別番号:実行シーケンス監視対象関数定義テーブルに設定されている、当該実行関数の識別番号(実行番号)
3)優先順位:実行シーケンス監視対象関数定義テーブルに設定されている、当該周期処理の動作優先順位
4)タイムスタンプ:定義テーブル21に設定されている、当該関数が実行された時のタイムスタンプ(時間情報)。(ここでは単位は規定しない)
【0037】
(関数実行履歴記録処理)
関数実行履歴記録処理プログラム15は、関数が実行されたときに、図3に示す関数実行履歴情報(関数シンボル名、識別番号、優先順位、タイムスタンプ)を実行履歴記録領域31へ記録する。実行履歴記録領域31の構造はリングバッファとするのが好ましい。当該領域31のサイズは各周期処理での実行履歴記録数と実行シーケンス監視を行うタイミングを考慮して、オーバーフローしないサイズを確保する。
【0038】
関数実行履歴記録処理プログラム15の呼び出し(起動)タイミングは、関数の特定のコードを読み出したときである。例えば、プログラムコードがC言語で記述される場合、対象関数のreturn文が実行されるタイミングで呼ばれる構成とすることができる。この場合、C言語コンパイラのプリプロセッサ機能を利用して、return文を関数実行履歴記録処理プログラム15を呼び出すマクロに置き換えることができる。マクロ置換の具体例を下記に示す。この方法により、制御処理のプログラムコードでは関数実行履歴記録処理プログラム15の呼び出しを記述する必要がなくなる。
【0039】
マクロ置換の具体例:#define return trace_func(); return
ここで、trace_func()は関数実行履歴記録処理プログラム15の関数である。
【0040】
次に、図4を用いて関数実行履歴記録処理プログラム15の手順を説明する。
図4において、関数実行履歴記録処理は起動されると、まず実行履歴記録領域の格納ポインタをセットする(ステップS101)。そして、タイムスタンプと関数復帰アドレスを取得する(ステップS102,S103)。その後、関数復帰アドレスをもとに以下に述べる定義テーブル21の検索処理を実行する(ステップS104)。
【0041】
まず、定義テーブル21に当該関数の登録が有るか否かを判定し(ステップS105)、登録がある場合は、実行履歴記録領域31へ関数シンボル名、関数識別番号、優先順位、タイムスタンプを記録する(ステップS106〜S109)。そして実行履歴記録領域31の格納ポインタを更新する。なお、格納ポインタは所定の値に到達すると初期値にリセットされる。
【0042】
上記の処理手順により、定周期プログラムが起動されるごとに、return文の実行タイミングで関数実行履歴記録処理も実行され、監視対象の関数の実行履歴のみが実行履歴記録領域31に保存される。
【0043】
図2の定義テーブル21に基づいたブログラム実行シーケンスの例を図5に示す。
図2において、各関数群は、A周期処理(1ms)、B周期処理(2ms)、C周期処理(3ms)の定周期処理で、動作優先順位はA周期処理>B周期処理>C周期処理に設定されている。同時に動作可能状態となった場合は、優先順位の高い処理が動作する。例えば、図5の(a)時点でA周期処理、B周期処理、C周期処理が動作可能な場合、優先順位の最も高いA周期処理が先に動作する。そして、A周期処理の終了後に、次に優先順位の高いB周期処理が遅延して動作を開始する。B周期処理終了後、(b)時点では、C周期処理は待ち状態にあるものの、A周期の実行タイミングも到来しているので、優先順位の高いA周期処理が再び動作状態となるため、A周期処理の終了後にC周期処理が遅延して動作する。なお、実行シーケンスの安定動作のためには、実行周期の短い処理に高い優先順位を割り付けるのが効果的である。
【0044】
上述した関数実行履歴記録処理プログラム15により、図5の実行シーケンスに示す実行順番に関数の実行履歴が実行履歴記録領域31に記録される。このときの実行履歴記録領域31のデータ例を図6に示す。
【0045】
(実行シーケンス監視処理)
次に、車載機器1で実行される実行シーケンス監視処理プログラム14の手順について説明する。
図7は、実行シーケンス監視処理プログラム14の手順を示すフローチャートである。以下に処理手順の概要を説明する。
【0046】
実行シーケンス監視処理プログラム14は、一定の周期で起動されると、まず実行履歴記録領域31から関数実行履歴情報を読出し(ステップS201)、データ(RAM)領域30に、周期別に履歴情報を一時的に保存する領域を設ける(ステップS202)。そして、当該周期の履歴一時領域に実行番号、優先順位を保存し、保存個数を更新する(ステップS203)。
【0047】
その後、周期別の履歴保存個数が定義テーブル21の当該周期処理の関数登録数と同じであれば、履歴一時領域と定義テーブル21の内容同士を比較する(ステップS204〜S205)。
【0048】
ステップS205の比較結果が一致、即ち実行順番が定義テーブル21の登録内容(順番)と同じであれば(ステップS206で「YES」)、次に当該周期処理が定義テーブル21に設定されている規定時間を満たしているか否かを判定する(ステップS207〜S208)。ここで、ステップS207は、周期別に先頭関数のタイムスタンプの前回値と今回値の差分が設定値(関数許容最長実行間隔)以下か否かを判定することにより、周期性が維持されているかどうかを監視する。ステップS208は、周期別に前回最後の関数のタイムスタンプと今回先頭の関数のタイムスタンプとの差分が設定値(関数の許容最短実行間隔)よりも長いか否かを判定することによって、処理が渋滞傾向にあるかどうかを監視する。
【0049】
ステップS206〜S208の判定処理において条件を満たしていれば、実行シーケンスは正常とみなし、今回の先頭の関数実行番号,最後の関数実行番号,および優先順位を前回値として保存する(ステップS209)。そして、当該周期の履歴一時領域と保存個数をクリアする(ステップS210)。
【0050】
ステップS210の後、エラー有無を判断し(ステップS212)、エラーが無ければ、実行履歴情報ポインタを更新し(ステップS213)、実行履歴情報が残っている場合は(ステップS214で「NO」)、ステップS201に戻って処理を繰り返す。一方、ステップS214で実行履歴情報が残っていない場合は処理を終了する。
【0051】
ステップS206で比較結果が一致しない場合、即ち実行順番が定義テーブル21の登録内容と異なる場合、またはステップS207,S208で規定時間を満たさない場合は、実行シーケンス異常と判定し、エラー情報を設定して終了する(ステップS211〜S12)。
【0052】
ステップS204で周期別の履歴一時領域の保存個数が定義テーブル21の登録数と一致しない場合は、直前の実行関数の優先順位や実行番号をもとに優先順位通りに実行されているか否かの判定を行う(ステップS215〜S217)。
【0053】
具体的には、ステップS215では実行履歴にある直前の関数の優先順位と現在の関数の優先順位とが同一である場合は同一優先順位内での関数が連続して実行されているとみなし、正常と判断する。同一でない場合は、実行シーケンス異常の可能性があるとみなし、ステップS216へ移行する。ステップS216では実行履歴の直前の関数が現在の関数の優先順位より低い場合は正常とみなす。高い場合は、実行シーケンス異常の可能性があるとみなしてステップS217へ移行する。ステップS217では実行履歴の直前の関数の実行番号が最後である場合は正常とみなす。最後でない場合は、優先順位の低い関数が優先順位の高い最後の関数が実行される前に優先的に実行されているため、実行シーケンス異常とみなす。
【0054】
ステップS215〜S217において、それぞれ正常であると判断した場合は、実行シーケンスは正常とみなして、現在の実行番号と優先順位を直前の値として保存した後、実行履歴情報ポインタを更新する(ステップS219,S220)。そして、実行履歴情報が残っている場合は(ステップS221で「NO」)、ステップS201に戻って処理を繰り返し、残っていない場合は終了する。
【0055】
ステップS215〜S217の判定処理のいずれの条件も満たさなかった場合は、実行シーケンス異常(優先順位通りに実行されていない)と判定して、エラー情報を設定して処理を終了する(ステップS218,S212)。
【0056】
実行シーケンス監視処理プログラム14は、以上の処理手順によって実行シーケンス異常を検出する。
【0057】
(実行シーケンス異常検出の具体例)
実行シーケンス監視処理プログラム14で、異常と判定する実行シーケンスの例を図8A図8B図9図13に示す。
【0058】
まず、図8A(a)は、B周期処理の先頭の番号(識別番号4)が抜けているケースである。図8A(b)は、B周期処理の最後の番号(識別番号8)が抜けているケースである。図8B(c)は、B周期処理の間の番号(識別番号6)が抜けているケースである。図8B(d)は、B周期処理の番号がB周期用テーブル21bに登録した順番どおりでないケースである。これら図8A(a)(b)、図8B(c)(d)に示す各実行シーケンス例はB周期処理の関数実行順番が定義テーブル21(B周期用テーブル21b)の登録内容と異なるため、図7のステップS206で「NO」の判定となり、実行シーケンス異常が検出される。
【0059】
次に、図9図11図13の実施例に示す実行シーケンスに対応する関数実行履歴情報をそれぞれ図10図12図14に示す。なお、本実施例において、時間間隔関連の設定は以下とする。
【0060】
タイムスタンプの単位:1count=2.5us
A周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値:1.5ms(600count)
A周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値:0.1ms(40count)
B周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値:3ms(1200count)
B周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値:0.5ms(200count)
C周期用の前回先頭〜今回先頭関数許容最長実行間隔の設定値:4.5ms(1800count)
C周期用の前回最後〜今回先頭関数許容最短実行間隔の設定値:0.5ms(200count)
【0061】
まず、図9図10に示す実行シーケンス例はB周期処理の前回と今回の先頭関数の実行間隔が規定値を超える。すなわち、識別番号4の関数に着目すると、図10の関数実行履歴情報において、NO.4とNO.18の履歴のタイムスタンプの差分T1(1250)が、図2のB周期用テーブル21bの前回先頭〜今回先頭関数許容最長実行間隔の設定値(3ms:1200)よりも大きくなる。このため図7のステップS207で「NO」の判定となり、実行シーケンス異常が検出される。
【0062】
図11図12に示す実行シーケンス例はC周期処理の前回の最後の関数と今回の先頭の関数の実行間隔が規定値より短い。すなわち、識別番号13と識別番号9の関数に着目すると、図12の関数実行履歴情報において、NO.27とNO.28の履歴のタイムスタンプの差分T2(50)が、図2のC周期用テーブル21cの前回最後〜今回先頭関数許容最短実行間隔の設定値(0.5ms:200)以下になる。このため、図7のステップS208で「NO」の判定となり、実行シーケンス異常が検出される。
【0063】
図13図14に示す実行シーケンス例はB周期処理の実行途中でB周期処理よりも優先順位の低いC周期処理が実行されている。すなわち、識別番号5と識別番号13の関数に着目すると図14のNO.20とNO.21の履歴で、NO.21のC周期用関数の直前のNO.20のB周期用関数が登録関数の最後ではなく、B周期よりも優先順位の低いC周期用の関数が途中で実行されている。このため、図7のステップS215〜S217ですべて「NO」の判定となり、実行シーケンス異常が検出される。
【0064】
以上、本実施の形態によれば、実行周期に基づいて割り込み優先順を定め、保守支援装置側で実行周期ごとに定周期処理プログラム(関数)の実行順序を規定した定義テーブルを生成し、この定義テーブルを制御装置へ転送する。制御装置は、定周期プログラム(関数)の実行履歴を保存する一方、実行履歴と定義テーブルの内容とを比較することにより、実行シーケンスの監視を効率よく行うことができる。
【0065】
また、定義テーブルおよび実行履歴に時間情報を追加することにより、実行シーケンスに加え、定周期処理プログラム(関数)の処理時間や実行間隔の監視を行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、メモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
【符号の説明】
【0066】
1 制御装置(車載機器)
5 保守支援装置
10 プログラム(ROM)領域
11〜13 定周期処理プログラム(関数)
14 実行シーケンス監視処理プログラム(監視手段)
15 関数実行履歴記録処理プログラム(記録手段)
20 データ(ROM)領域
21 実行シーケンス監視対象関数定義テーブル(定義テーブル)
21a A周期用テーブル
21b B周期用テーブル
21c C周期用テーブル
30 データ(RAM)領域
31 実行履歴記録領域
51 実行シーケンス監視登録画面
61 MAPファイル
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図9
図10
図11
図12
図13
図14