JP2022093876A - 制御装置およびその保守支援装置 - Google Patents
制御装置およびその保守支援装置 Download PDFInfo
- Publication number
- JP2022093876A JP2022093876A JP2020206592A JP2020206592A JP2022093876A JP 2022093876 A JP2022093876 A JP 2022093876A JP 2020206592 A JP2020206592 A JP 2020206592A JP 2020206592 A JP2020206592 A JP 2020206592A JP 2022093876 A JP2022093876 A JP 2022093876A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- function
- fixed
- program
- history
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012423 maintenance Methods 0.000 title claims description 21
- 230000006870 function Effects 0.000 claims abstract description 186
- 238000012545 processing Methods 0.000 claims abstract description 126
- 238000012544 monitoring process Methods 0.000 claims abstract description 100
- 230000005856 abnormality Effects 0.000 claims description 11
- 238000000034 method Methods 0.000 description 43
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000000737 periodic effect Effects 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
Description
本発明は、オペレーティングシステム(以下、「OS」という。)を使用しない定周期割り込みのプログラムを実行する制御装置およびその保守支援装置に係り、特に予め設定された複数の定周期プログラムからなる処理グループごとに、そのプログラムの実行シーケンスが正常か否かを監視することのできる制御装置およびその保守支援装置に関する。
一般に、車載機器(モータ駆動装置)などの制御装置では、OSは使用されず、異なる優先順位の定周期割込みで動作するプログラムが複数実装される。このような制御装置のプログラムの実行監視には、ウォッチドッグタイマ(WDT)が用いられることが多い。このとき、ハードウェアのウォッチドッグタイマは通常は装置に1個のみであるため、複数の定周期割込みプログラムの実行監視には、各プログラムに対応してソフトウェアカウンタが設けられる。そして、各定周期割り込みプログラムの実行時に、対応するソフトウェアカウンタを更新し、このソフトウェアカウンタが定期的に更新されているか否かを確認することで監視を行う。
この場合、各定周期割込み処理が監視時間内に動作しているか否かの確認はできるものの、実行シーケンスの監視、即ち各定周期が正しい順序で動作しているか否かの監視はできない。実行シーケンスの監視に関しては下記の先行技術がある。
特許文献1では、プログラム内のモジュールの予想経路と実際に動作した経路を比較して実行経路を検証する方法が提案されている。特許文献2では、プログラム内のモジュールのシーケンス番号と処理時間を対応付けて管理を行い、予めシーケンス番号と処理時間を対応付けた情報をテーブルに格納しておき、実際に動作したモジュールのシーケンス(順番)が予め格納した順番と一致するかどうか、および処理時間が所定時間以内であるかを検証する方法が提案されている。また、特許文献3では、関数の実行履歴をメモリに記録しておき、例えば、正常動作時(過去)とエラー発生時(今回)の関数の実行履歴を比較することで、プログラムの動作の差異を発見することを可能とするプログラム動作比較方法が提案されている。
しかしながら、特許文献1、2では、制御装置のプログラム構成全体を考慮したものではなく、例えば、制御装置のプログラムが、複数の優先順位の異なる定周期割込みのプログラムから構成されている場合については開示されていない。特許文献3では、プログラムの過去の実行履歴と現在の実行履歴を比較して検証を行う方式であり、実行履歴同士を比較するものである。このため、単に実行履歴の違いを検出できるに留まり、過去の実行履歴が正しいという保証は無い。また、特許文献3の技術によると、実行履歴の記録対象の関数がプログラム実行中に呼び出される全ての関数となるため、実行履歴記録用のメモリ領域が大量に必要になる。また、関数の実行履歴の記録有無、および比較対象とする実行履歴の範囲は外部ツールからの指示(例えば、デバッガからの指示)による制御が必要と考えられる。従って、デバッガと組み合わせて実現するような用途には適しているものの、制御装置内で動作しているプログラムで常時実行シーケンスの監視を行うような場合には上記のメモリ領域やデバッガの問題を解決する必要がある。
本発明は、上述のかかる事情に鑑みてなされたものであり、シーケンス監視や定周期プログラムの処理時間の監視等によって、正常に動作しているか否かを効率よく監視することのできる制御装置およびその保守支援装置を提供することを目的とする。
上記の目的を達成するため、本発明に係る制御装置は、複数の定周期プログラムによって実現される機能又は該機能の一部であり、任意に設定可能な処理グループごとに、前記複数の定周期プログラムのうち監視対象の定周期プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記監視対象の定周期プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、前記監視対象の定周期プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを監視する監視手段と、
を備えることを特徴とする。
前記監視対象の定周期プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、前記監視対象の定周期プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを監視する監視手段と、
を備えることを特徴とする。
本発明では、OSを使用せず、複数の定周期プログラムを実行する制御装置において、制御装置内の監視対象の定周期プログラムの実行履歴を処理グループ単位で記録する一方、当該実行履歴と予め実行シーケンスを定義した内容とを比較することで、正しい実行シーケンスで動作しているか否かを監視する。
また、定義テーブルに登録した定周期プログラム(関数)のみを監視対象とし、この監視対象の定周期プログラムの実行シーケンスに着目して監視することにより、簡便かつ効率的に実行シーケンス異常を検知することができる。
さらに、監視手段が異常を検知したときにエラーを通知する手段を設けることで、エラー発生時に安全対策を実施することが可能となり、安全を担保することができる。
また、本発明に係る制御装置は、さらに監視対象の定周期プログラムごとに、前記監視対象の定周期プログラムの実行履歴を記録するか否かを判定するための履歴記録条件判定関数を備え、
前記定義テーブルは、夫々の前記監視対象の定周期プログラムの識別情報に関連付けて前記履歴記録条件判定関数のポインタを保存し、
前記記録手段は、前記定義テーブルに保存されている前記履歴記録条件判定関数のポインタを参照して該履歴記録条件判定関数を実行し、該履歴記録条件判定関数の判定結果に基づいて、該履歴記録条件判定関数に関連付けられた前記監視対象の定周期プログラムの実行履歴を前記メモリに記録することを特徴とする。
前記定義テーブルは、夫々の前記監視対象の定周期プログラムの識別情報に関連付けて前記履歴記録条件判定関数のポインタを保存し、
前記記録手段は、前記定義テーブルに保存されている前記履歴記録条件判定関数のポインタを参照して該履歴記録条件判定関数を実行し、該履歴記録条件判定関数の判定結果に基づいて、該履歴記録条件判定関数に関連付けられた前記監視対象の定周期プログラムの実行履歴を前記メモリに記録することを特徴とする。
本発明では、監視対象の定周期プログラムごとに履歴記録条件判定関数を備える。この履歴記録条件判定関数は、対応する定周期プログラムが処理グループの目的とする機能を実現するための条件(履歴記録条件)を満たしているか否かを判定し、条件を満たしている場合は実行履歴を記録する。監視手段は、この実行履歴に基づいて、当該定周期プログラムが定義テーブルに定めた実行順序で動作しているか否かを監視する。
履歴記録条件判定関数を定周期プログラムとは別に管理可能にすることにより、安全機能の構築が容易になり、またシステム変更等に対して保守性、融通性が向上する。
好ましくは、前記定義テーブルは、処理グループを構成する監視対象の定周期プログラムごとに、ある定周期プログラムの実行時から次の定周期プログラムの実行時までの時間間隔に関する閾値を含み、前記監視手段は、当該閾値と前記実行履歴とに基づいて、異常を検知すると良い。実行シーケンス(順番)通りかつ規定時間内で動作していることを確認することで、制御装置の安全性をさらに向上させることができる。
なお、前記記録手段は、前記定周期プログラムの特定の命令文が実行されることにより起動することにより、効率的に実行履歴の記録処理を行うことができる。
好ましくは、前記定周期プログラムは、前記特定の命令文をreturn文にするのがよい。これにより、プログラムコードに実行履歴を記録する処理の呼び出しを直接記述する必要がなくなり、保守性の向上や柔軟な対応が可能となる。
好ましくは、前記定周期プログラムは、前記特定の命令文をreturn文にするのがよい。これにより、プログラムコードに実行履歴を記録する処理の呼び出しを直接記述する必要がなくなり、保守性の向上や柔軟な対応が可能となる。
また、本発明に係る保守支援装置は、上記の制御装置と通信可能な保守支援装置であって、
前記定周期プログラムコンパイル時のMAPファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする。
これにより、実行シーケンスを変更する際に、プログラムコードの変更をする必要が無く、柔軟な対応が可能となる。
前記定周期プログラムコンパイル時のMAPファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする。
これにより、実行シーケンスを変更する際に、プログラムコードの変更をする必要が無く、柔軟な対応が可能となる。
本発明によれば、OSを使用しない制御装置において、監視対象の定周期プログラムの実行履歴を処理グループ単位で記録し、当該実行履歴と予め実行シーケンスを定義した内容とを比較することで、正しい実行シーケンスで動作しているか否かを効率よく監視することができる。
また、定義テーブルに実行履歴に時間情報を追加することにより、実行シーケンス監視に加えて、定周期プログラムの実行間隔の監視を行うことができ、処理遅延の検出を迅速に行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、システム構築における融通性の向上およびメモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
以下、本発明の実施の形態について図面を参照しながら説明する。制御装置として、リアルタイム性の要求される車載機器を例にする。車載機器用のプログラムは、例えばC言語を用いた複数の関数で構築することができる。
図1に示すように、本実施の形態では、車載機器1の保守や開発支援を行う保守支援装置5において、処理グループごとに実行シーケンスの監視に必要な情報を登録した実行シーケンス監視対象関数定義テーブル(以下、「定義テーブル」という。)21を作成し、これを車載機器1へ転送する。車載機器1は、この定義テーブル21を参照しながら、車載機器1上で動作する複数の定周期プログラムの実行シーケンス監視を行う。
ここで、処理グループとは、複数の定周期関数が順次実行されることによって実現される機能あるいはその機能の一部を意味し、論理的なグループとして任意に設定することができる。
保守支援装置5は、汎用のコンピュータ装置(以下、単に「PC」という。)で実現することができる。車載機器1と保守支援装置5との間は、CAN(Controller Area Network)等のシリアル通信I/Fを用いてデータの送受信を行う。
保守支援装置5は、汎用のコンピュータ装置(以下、単に「PC」という。)で実現することができる。車載機器1と保守支援装置5との間は、CAN(Controller Area Network)等のシリアル通信I/Fを用いてデータの送受信を行う。
図1において、車載機器1のプログラムは定周期処理を実行する複数のプログラム(以下、本実施の形態において「関数」ともいう。)11~13、処理グループごとに設けられる実行シーケンス監視処理プログラム14、および関数実行履歴記録処理プログラム15から構成される。なお本実施形態では、定周期処理として、A周期処理、B周期処理、C周期処理(例えば、A周期=1ms、B周期=2ms、C周期=3ms)の3種類として説明するが、周期の数や長さはこれに限られない。ここで、A周期処理11は、A周期で実行される関数である。B周期処理、C周期処理についても同様である。
車載機器1のメモリ空間は、データ(ROM)領域20、データ(RAM)領域30、プログラム(ROM)領域10に割り付けられる。データ(ROM)領域20には処理グループごとに定義テーブル21(21a~21n)が保存される。データ(RAM)領域30には、定周期プログラム(関数)の実行履歴が記録される領域である実行履歴記録領域31が処理グループごとに配置される。プログラム(ROM)領域10には、車載機器1の機能を実現する各定周期プログラム(関数)、定周期プログラム(関数)の実行履歴を実行履歴記録領域31に保存する関数実行履歴記録処理プログラム15、および処理グループごとに設けられ、定義テーブル21の内容と実行履歴とを比較して夫々の処理グループの監視を行う実行シーケンス監視処理プログラム14が格納される。この他、プログラム(ROM)領域10には、各定周期プログラムに対応して、夫々の定周期プログラムの履歴記録条件を判定するプログラムである履歴記録条件判定関数(図示せず)が格納される。
(定義テーブル21の作成方法)
次に、保守支援装置5側での定義テーブル21の作成方法について説明する。
図1に示すように、定義テーブル21の作成は、保守支援装置5のディスプレイに表示される実行シーケンス監視登録画面51を通して行われる。ユーザは、この画面を通して、定義テーブル21の作成に必要な情報を登録する。実行シーケンス監視登録画面51は、処理グループごとに定周期関数(定周期処理を実行する関数)を登録する画面領域54を有し、処理グループごとの定義テーブル21に対する読出しおよび書込みを行うためのボタン52,53が設けられている。
次に、保守支援装置5側での定義テーブル21の作成方法について説明する。
図1に示すように、定義テーブル21の作成は、保守支援装置5のディスプレイに表示される実行シーケンス監視登録画面51を通して行われる。ユーザは、この画面を通して、定義テーブル21の作成に必要な情報を登録する。実行シーケンス監視登録画面51は、処理グループごとに定周期関数(定周期処理を実行する関数)を登録する画面領域54を有し、処理グループごとの定義テーブル21に対する読出しおよび書込みを行うためのボタン52,53が設けられている。
また、保守支援装置5は制御装置1で実行される関数のMAPファイル61を備えている。このMAPファイル61は一般にプログラムコードのコンパイル・リンク時に生成・出力されるファイルであり、例えば関数シンボル名、エントリアドレス、サイズ等の情報を含んでいる。このMAPファイル61の内容を参照することにより、効率的に定義テーブル21に関数情報を登録することができる。
図2に定義テーブル21の構成例を示す。
定義テーブル21(21a~21n)は処理グループ共通および処理グループ(1~n)ごとに作成されるものである。また各定義テーブル21はその処理グループに含まれる定周期関数の周期ごとに構成される。本実施の形態では、処理グループは、3種類の定周期(A周期,B周期,C周期)で夫々実行される関数を持つものとして説明する。この場合、当該処理グループの定義テーブル21は、図2に示すように、定周期関数の周期ごとにA周期用テーブル、B周期用テーブル、C周期用テーブルの3種類のテーブルで構成される。
定義テーブル21(21a~21n)は処理グループ共通および処理グループ(1~n)ごとに作成されるものである。また各定義テーブル21はその処理グループに含まれる定周期関数の周期ごとに構成される。本実施の形態では、処理グループは、3種類の定周期(A周期,B周期,C周期)で夫々実行される関数を持つものとして説明する。この場合、当該処理グループの定義テーブル21は、図2に示すように、定周期関数の周期ごとにA周期用テーブル、B周期用テーブル、C周期用テーブルの3種類のテーブルで構成される。
以下、定義テーブル21の項目例について簡単に説明する。
1)処理グループ共通定義として「処理シーケンス全体監視時間」を設ける。本項目は、処理グループ内の監視「開始」から「終了」までの関数が実行される監視時間を示す。
以降は周期ごとに定義する項目である。
2)「登録数」は、当該周期内で実行シーケンスの監視対象として登録した関数の数である。
3)「周期」は、当該周期の時間を示す。
4)「優先順位」は、当該周期処理の動作優先順位(優先レベル)である。図2では最小の番号(優先順位:1)の優先順位が最も高いことを示す。
5)「関数シンボル名」は、当該周期内で実行シーケンスの監視対象とする関数名である。
6)「関数先頭アドレス」は、当該周期内で実行シーケンスの監視対象とする関数の先頭アドレスである。
7)「関数終端アドレス」は、当該周期内で実行シーケンスの監視対象とする関数の終端アドレスである。
1)処理グループ共通定義として「処理シーケンス全体監視時間」を設ける。本項目は、処理グループ内の監視「開始」から「終了」までの関数が実行される監視時間を示す。
以降は周期ごとに定義する項目である。
2)「登録数」は、当該周期内で実行シーケンスの監視対象として登録した関数の数である。
3)「周期」は、当該周期の時間を示す。
4)「優先順位」は、当該周期処理の動作優先順位(優先レベル)である。図2では最小の番号(優先順位:1)の優先順位が最も高いことを示す。
5)「関数シンボル名」は、当該周期内で実行シーケンスの監視対象とする関数名である。
6)「関数先頭アドレス」は、当該周期内で実行シーケンスの監視対象とする関数の先頭アドレスである。
7)「関数終端アドレス」は、当該周期内で実行シーケンスの監視対象とする関数の終端アドレスである。
8)「識別番号(実行番号)」では、処理グループ内の直前の関数の処理結果の条件に基づいて、条件が成立した場合に次の関数の処理が行われる順番を定義する。保守支援装置5の実行シーケンス監視登録画面を通して、処理グループごとにユニークな番号が付される。
9)「履歴記録条件判定関数ポインタ」:履歴記録条件判定関数は、これに紐付けられた監視対象の関数の実行履歴情報を記録するかどうかの判定処理を行う関数である。定義テーブル21には、この履歴記録条件判定関数のポインタを登録しておき、対象関数の実行後にこのポインタを参照して対応する履歴記録条件判定関数を呼び出す。
10)「監視開始/終了情報」では、処理グループ内で監視の開始および終了の情報を設定する。処理グループ内で最初に実行する関数に監視開始情報(フラグ)を設定し、処理グループ内で最後に実行する関数に監視終了情報(フラグ)を設定する。後述するように、監視開始情報がセットされている関数が実行されると、履歴への記録を有効とし、終了時すなわち監視終了情報がセットされている関数の実行後に処理グループ内での実行シーケンスをチェックする。
11)「監視時間(ms)」は、自身の関数の直前の関数の実行後、自身の関数が実行されるまでの監視時間である。実行シーケンスチェック時には、この監視時間のチェックも行う。
9)「履歴記録条件判定関数ポインタ」:履歴記録条件判定関数は、これに紐付けられた監視対象の関数の実行履歴情報を記録するかどうかの判定処理を行う関数である。定義テーブル21には、この履歴記録条件判定関数のポインタを登録しておき、対象関数の実行後にこのポインタを参照して対応する履歴記録条件判定関数を呼び出す。
10)「監視開始/終了情報」では、処理グループ内で監視の開始および終了の情報を設定する。処理グループ内で最初に実行する関数に監視開始情報(フラグ)を設定し、処理グループ内で最後に実行する関数に監視終了情報(フラグ)を設定する。後述するように、監視開始情報がセットされている関数が実行されると、履歴への記録を有効とし、終了時すなわち監視終了情報がセットされている関数の実行後に処理グループ内での実行シーケンスをチェックする。
11)「監視時間(ms)」は、自身の関数の直前の関数の実行後、自身の関数が実行されるまでの監視時間である。実行シーケンスチェック時には、この監視時間のチェックも行う。
保守支援装置5で作成された定義テーブル21は、通信I/F経由から車載機器1へ転送され、車載機器1のデータ(ROM)領域20に書き込まれる。
各定周期処理(A周期処理、B周期処理、C周期処理)は、定義テーブル21に登録されている関数実行時に、当該関数から呼び出す関数実行履歴記録処理プログラム15によって当該実行情報を実行履歴記録領域31に記録する。実行シーケンス監視処理プログラム14は、処理グループ内の最後の関数実行時に、後述する手順により、定義テーブル21と実行履歴記録領域31の内容を比較し、実行シーケンスの正常/異常を判断する。
車載機器1の実行履歴記録領域31に記録される関数実行履歴情報のデータ構成を図3に示す。この関数実行履歴情報は処理グループごとに作成される。
1)「監視開始フラグ」は、処理グループ内の実行シーケンスの監視状態を示すフラグである。例えば、1で開始、0で停止を示す。
開始条件は履歴記録条件判定関数の処理結果が「記録有効」かつ定義テーブル21の監視開始/終了情報が「開始」の場合に開始(1)とする。終了条件は履歴記録判定関数の処理結果が「記録有効」かつ定義テーブル21の監視開始/終了情報が「終了」の場合に終了(2)とする。その他の場合は、無し(0)とする。
2)「履歴情報フラグ」は、対象関数が実行済であることを示すフラグである。識別番号(実行番号)に対応するビット位置のフラグを操作する。フラグセット条件は履歴記録条件判定関数の処理結果が「記録有効」かつ対象関数の実行履歴情報への記録が初回時の場合とする。フラグクリア条件は監視開始/終了情報が終了時とする。
3)「履歴記録カウンタ」は、関数の実行履歴情報の記録数である。カウンタ更新条件は履歴記録判定関数の処理結果が「記録有効」かつ対象関数の実行履歴情報への記録が初回時の場合とする。カウンタクリア条件は監視開始/終了情報が終了時とする。
4)「識別番号(実行番号)」は、実行された監視対象の関数の識別番号(実行番号)である。定義テーブル21の内容がコピーされる。
5)「監視時間」は、実行された監視対象の関数の監視時間である。定義テーブル21の内容がコピーされる。
6)「タイムスタンプ」には、監視対象の関数実行時に取得したタイムスタンプが格納される。
1)「監視開始フラグ」は、処理グループ内の実行シーケンスの監視状態を示すフラグである。例えば、1で開始、0で停止を示す。
開始条件は履歴記録条件判定関数の処理結果が「記録有効」かつ定義テーブル21の監視開始/終了情報が「開始」の場合に開始(1)とする。終了条件は履歴記録判定関数の処理結果が「記録有効」かつ定義テーブル21の監視開始/終了情報が「終了」の場合に終了(2)とする。その他の場合は、無し(0)とする。
2)「履歴情報フラグ」は、対象関数が実行済であることを示すフラグである。識別番号(実行番号)に対応するビット位置のフラグを操作する。フラグセット条件は履歴記録条件判定関数の処理結果が「記録有効」かつ対象関数の実行履歴情報への記録が初回時の場合とする。フラグクリア条件は監視開始/終了情報が終了時とする。
3)「履歴記録カウンタ」は、関数の実行履歴情報の記録数である。カウンタ更新条件は履歴記録判定関数の処理結果が「記録有効」かつ対象関数の実行履歴情報への記録が初回時の場合とする。カウンタクリア条件は監視開始/終了情報が終了時とする。
4)「識別番号(実行番号)」は、実行された監視対象の関数の識別番号(実行番号)である。定義テーブル21の内容がコピーされる。
5)「監視時間」は、実行された監視対象の関数の監視時間である。定義テーブル21の内容がコピーされる。
6)「タイムスタンプ」には、監視対象の関数実行時に取得したタイムスタンプが格納される。
(関数実行履歴記録処理)
関数実行履歴記録処理プログラム15は、関数が実行されたときに、図4に示す関数実行履歴情報を実行履歴記録領域31へ記録する。当該領域31のサイズは各周期処理での実行履歴記録数と実行シーケンス監視を行うタイミングを考慮してサイズを決定する。
関数実行履歴記録処理プログラム15は、関数が実行されたときに、図4に示す関数実行履歴情報を実行履歴記録領域31へ記録する。当該領域31のサイズは各周期処理での実行履歴記録数と実行シーケンス監視を行うタイミングを考慮してサイズを決定する。
関数実行履歴記録処理プログラム15の呼び出し(起動)タイミングは、関数の特定のコードを読み出したときである。例えば、プログラムコードがC言語で記述される場合、対象関数のreturn文が実行されるタイミングで呼ばれる構成とすることができる。この場合、C言語コンパイラのプリプロセッサ機能を利用して、return文を関数実行履歴記録処理プログラム15を呼び出すマクロに置き換えることができる。マクロ置換の具体例を下記に示す。この方法により、制御処理のプログラムコードでは関数実行履歴記録処理プログラム15の呼び出しを記述する必要がなくなる。
マクロ置換の具体例:#define return trace_func(); return
ここで、trace_func()は関数実行履歴記録処理プログラム15の関数である。
マクロ置換の具体例:#define return trace_func(); return
ここで、trace_func()は関数実行履歴記録処理プログラム15の関数である。
次に、図5を用いて関数実行履歴記録処理プログラム15の手順を説明する。
関数実行履歴記録処理プログラム15は、監視対象判定処理部15a、処理グループ初回実行判定処理部15b、処理グループ内関数初回実行判定処理部15c、及び異常検出処理部15dによって構成される。
関数実行履歴記録処理プログラム15は、監視対象判定処理部15a、処理グループ初回実行判定処理部15b、処理グループ内関数初回実行判定処理部15c、及び異常検出処理部15dによって構成される。
ここで、監視対象判定処理部15aは、本関数実行履歴記録処理プログラム15が監視対象の関数から呼び出されているかをチェックし、監視対象の関数から呼び出されている場合には、処理グループ初回実行判定処理部15b又は処理グループ内関数初回実行判定処理部15cの処理を行う。
処理グループ初回実行判定処理部15bは、まだ監視が開始されておらず、処理グループ内で最初に実行される関数(監視開始/終了情報が開始)であり、かつ履歴記録条件判定が記録有効であった場合、関数実行履歴情報を実行履歴記録領域へ記録する。
処理グループ内関数初回実行判定処理部15cは、すでに監視が開始されており、履歴記録条件判定が記録有効かつ、当該関数の実行が初回の場合に関数実行履歴情報を実行履歴記録領域へ記録する。
異常検出処理部15dは、すでに監視が開始されており、処理グループ内で最後に実行される関数(監視開始/終了情報が終了)であった場合、実行シーケンスチェックを行う。実行シーケンスチェック結果がエラーの場合はエラー情報をセットする。
本関数実行履歴記録処理プログラム15の呼び出しタイミングは、対象関数の出口処理(処理終了の直前)である。関数実行履歴記録処理プログラム15は呼び出されると、図5のフローチャートに例示した処理を実行して、関数実行履歴情報(監視開始フラグ、履歴情報フラグ、履歴記録カウンタ、識別番号(実行番号)、監視時間、タイムスタンプ)を実行履歴記録領域へ記録する。
以下に関数実行履歴記録処理プログラム15の処理手順について説明する。
図5において、関数実行履歴記録処理プログラム15は起動されると、まず実行履歴記録領域の格納ポインタをセットする(ステップS101)。そして、タイムスタンプと関数復帰アドレスを取得する(ステップS102,S103)。その後、関数復帰アドレスをもとに以下に述べる定義テーブル21の検索処理を実行する(ステップS104)。
図5において、関数実行履歴記録処理プログラム15は起動されると、まず実行履歴記録領域の格納ポインタをセットする(ステップS101)。そして、タイムスタンプと関数復帰アドレスを取得する(ステップS102,S103)。その後、関数復帰アドレスをもとに以下に述べる定義テーブル21の検索処理を実行する(ステップS104)。
まず、定義テーブル21に当該関数の登録が有るか否かを判定し(ステップS105)、登録されていない場合は終了する。一方、ステップS105で登録がある場合は、次に監視開始フラグがセットされているか否かを判定する(S106)。この判定の結果、監視開始フラグがセットされていない場合は、監視開始/終了情報が「開始」か否かを判定する(S107)。この判定の結果、開始でない場合は終了し、「開始」の場合は、次に、履歴記録条件判定関数ポインタを取得する(S108)。そして、取得したポインタの履歴記録条件判定関数を実行する(S109)。この実行の結果、復帰値が「記録有効」の場合は(S110で「YES」)、監視開始フラグのセット、履歴情報フラグに識別番号に対応するビット情報をセット、履歴情報に識別番号を格納、履歴情報に定義テーブルの監視時間を格納、履歴情報にタイムスタンプを格納、履歴記録カウンタを1にセットの一連の処理を行う(S111~S116)
一方、ステップS106で監視開始フラグがセット済みの場合は、次に開始時のタイムスタンプと今回のタイムスタンプの差分から、処理シーケンス全体監視時間のチェックを行う(S117)。当該差分が監視時間内でない場合は(S118で「NO」)、エラー情報をセットして終了する(S119)。当該差分が監視時間内の場合は(S118で「YES」)、次に履歴記録条件判定関数ポインタを取得して、取得したポインタの履歴記録条件判定関数を実行する(S120,S121)。この実行の結果、復帰値が「記録有効であり」、かつ、履歴情報フラグに識別番号に対応するビット情報が未セットの場合は(S122,S123で「YES」)、履歴情報フラグに識別番号に対応するビット情報をセット、履歴情報に識別番号を格納、履歴情報に定義テーブルの監視時間を格納、履歴情報にタイムスタンプを格納、履歴記録カウンタの更新の一連の処理を行う(S124~S128)。
その後、監視開始/終了情報が「終了」の場合は(S129で「YES」)、実行シーケンス監視処理プログラム14を起動して、実行シーケンスチェックを行い(S130)、エラーがあればエラー情報をセットして(S132)、終了する。
上記において、監視対象判定処理部15aはステップS101~ステップS105、処理グループ初回実行判定処理部15bはステップS107~ステップS116、処理グループ内関数初回実行判定処理部15cはステップS106及びステップS117~ステップS128、異常検出処理部15dはステップS129~ステップS132の処理にそれぞれ対応する。
上記の処理手順により、定周期プログラムが起動されるごとに、return文の実行タイミングで関数実行履歴記録処理も実行され、監視対象の関数の実行履歴のみが実行履歴記録領域31に保存される。
(実行シーケンス監視処理)
次に、車載機器1で実行される実行シーケンス監視処理プログラム14について図6に基づいて説明する。
実行シーケンス監視処理プログラム14は、主に、定義テーブルに登録されている関数が全て実行されたか否かを判定する第一の実行シーケンスチェック部14a、実行された関数が定義テーブルに登録された順番に実行されたか否かを判定する第二の実行シーケンスチェック部14b、および、処理グループ内の直前の関数の実行後、次の関数の実行までの時間間隔が監視時間以内であるか否かを判定する実行時間チェック部14cによって構成される。
次に、車載機器1で実行される実行シーケンス監視処理プログラム14について図6に基づいて説明する。
実行シーケンス監視処理プログラム14は、主に、定義テーブルに登録されている関数が全て実行されたか否かを判定する第一の実行シーケンスチェック部14a、実行された関数が定義テーブルに登録された順番に実行されたか否かを判定する第二の実行シーケンスチェック部14b、および、処理グループ内の直前の関数の実行後、次の関数の実行までの時間間隔が監視時間以内であるか否かを判定する実行時間チェック部14cによって構成される。
ここで、第一の実行シーケンスチェック部14aは、実行履歴記録領域の当該処理グループの実行履歴情報より履歴情報フラグを読出し、履歴情報フラグに対象関数のフラグが全てセットされているかを確認し、全てセットされている場合は正常とみなし、全てセットされていない場合は結果を実行シーケンス異常と判定する。
第二の実行シーケンスチェック部14bは、実行履歴記録領域の当該処理グループの実行履歴情報の識別番号について、先頭から終端まで隣り合わせ(iとi+1番目)の2つの識別番号を順次比較し、昇順になっていれば、正常と判定する。比較結果が昇順になっていない場合は実行シーケンス異常と判定する。
実行時間チェック部14c実行履歴記録領域の当該処理グループの実行履歴情報のタイムスタンプについて、先頭から終端まで隣り合わせ(iとi+1番目)の2つのタイムスタンプの差分を算出し、その差分時間とi+1番目の監視時間を順次比較する。差分時間が監視時間以内の場合は結果を正常と判定する。差分時間が監視時間を超えている場合は実行時間異常と判定する。
以下に実行シーケンス監視処理プログラム14の処理手順について説明する。
図6において、実行シーケンス監視処理プログラム14は、関数実行履歴記録処理プログラム15のステップS130の処理によって呼び出されると、まず「結果」変数に「正常」を保存する(S201)。続いて、実行履歴記録領域のアドレスを取得して、履歴情報フラグを取得する(S202,S203)。そして、履歴情報フラグに対象関数のフラグが全てセット済みか否かを判定し(S204)、判定結果が「NO」の場合は、「結果」変数に「実行シーケンス異常」を格納する(S205)。ステップS204の判定の結果が「YES」の場合は、次に変数nに履歴記録カウンタの値を入力する共に(S206)、変数iに0を入力する(S207)。そして、i番目と(i+1)番目の識別番号を取得して(S208)、(i+1)番目の識別番号の方がi番目の識別番号よりも大きいか否かを判定する(S209)。この判定の結果が「NO」の場合は、「結果」変数に「実行シーケンス異常」を格納する(S210)。
図6において、実行シーケンス監視処理プログラム14は、関数実行履歴記録処理プログラム15のステップS130の処理によって呼び出されると、まず「結果」変数に「正常」を保存する(S201)。続いて、実行履歴記録領域のアドレスを取得して、履歴情報フラグを取得する(S202,S203)。そして、履歴情報フラグに対象関数のフラグが全てセット済みか否かを判定し(S204)、判定結果が「NO」の場合は、「結果」変数に「実行シーケンス異常」を格納する(S205)。ステップS204の判定の結果が「YES」の場合は、次に変数nに履歴記録カウンタの値を入力する共に(S206)、変数iに0を入力する(S207)。そして、i番目と(i+1)番目の識別番号を取得して(S208)、(i+1)番目の識別番号の方がi番目の識別番号よりも大きいか否かを判定する(S209)。この判定の結果が「NO」の場合は、「結果」変数に「実行シーケンス異常」を格納する(S210)。
ステップS209の判定の結果が「YES」の場合は、次にi番目と(i+1)番目のタイムスタンプの差を計算する(S211)。そして、このタイムスタンプの差が予め設定した監視時間以上の場合は(S212で「NO」)、「結果」変数に「実行時間異常」を入力する(S213)。一方ステップS212の判定の結果、タイムスタンプの差が予め設定した監視時間よりも小さい場合は(S212で「YES」)、次の識別番号iについて、ステップS208~ステップS213の処理を繰り返す(S215)。すなわち、記録領域に保存されている全識別番号について、第二のシーケンスチェック部14bと実行時間チェック部14cの処理を実行する。その後、記録領域の履歴情報フラグ、履歴記録カウンタ、監視開始フラグをクリアして(S216~S218)、「結果」変数の値を復帰値として終了する(S219)。
実行シーケンス監視処理プログラム14は、以上の処理手順によって処理グループごとに実行シーケンス異常、実行時間異常を検出する。
実行シーケンス監視処理プログラム14は、以上の処理手順によって処理グループごとに実行シーケンス異常、実行時間異常を検出する。
(実施例)
次に、車載機器1が保守支援装置5などの上位装置からCANメッセージで指令を受けたときのモータ制御処理の例について図面を参照しながら説明する。
本実施例による車載装置1は、上位通信制御処理を実行する定周期プログラム(以下、「上位通信制御関数」)13、制御コマンド処理を実行する定周期プログラム(以下、「制御コマンド処理関数」)12、モータ制御処理を実行する定周期プログラム(以下、「モータ制御関数」)11を備える。動作周期としては、上位通信制御関数13が5ms周期、制御コマンド処理関数12が1ms、モータ制御関数11が100μsとする。
次に、車載機器1が保守支援装置5などの上位装置からCANメッセージで指令を受けたときのモータ制御処理の例について図面を参照しながら説明する。
本実施例による車載装置1は、上位通信制御処理を実行する定周期プログラム(以下、「上位通信制御関数」)13、制御コマンド処理を実行する定周期プログラム(以下、「制御コマンド処理関数」)12、モータ制御処理を実行する定周期プログラム(以下、「モータ制御関数」)11を備える。動作周期としては、上位通信制御関数13が5ms周期、制御コマンド処理関数12が1ms、モータ制御関数11が100μsとする。
図8に上位装置からモータ制御指令を受けたときのシーケンス概要を示す。図8において、破線で囲んだ部分が処理グループとして定義テーブル21に登録し、実行順序や動作時間の監視を行うシーケンス部分である。このモータ制御処理の処理グループに関する定義テーブル21のデータ例を図7に示す。
以下、本処理グループに属する定周期関数の動作について簡単に説明する。図8において、車載機器1は上位装置からCANメッセージを受信すると、図示しない受信バッファに受信メッセージを格納する。そして、5ms周期で起動する上位通信制御関数13によって受信バッファに格納されているメッセージを取り出し、受信処理を実行し正常受信であることを確認すると、制御コマンド処理関数12に対してCAN受信メッセージを送信する。そして、履歴記録条件判定処理(1)を実行して終了し、次の周期を待つ。
制御コマンド処理関数12は、定周期(1ms)の起動時にこのCAN受信メッセージを受信すると、受信データの解析処理を行い、モータ制御関数11に対してコマンド(指令)データを送信する。そして、履歴記録条件判定処理(2)を実行して終了する。
モータ制御関数11は100μs周期で起動し、コマンド(指令)データからモータ制御データを作成してモータの制御を実行する。そして、履歴記録条件判定処理(3)を実行して終了する。
上述したように、各定周期関数13~11はそれぞれ終了前に履歴記録条件判定処理を実行する。具体的には、関数実行履歴記録処理プログラム15が実行され、図5のフローチャートのステップS109、ステップ121において履歴記録条件判定関数が起動されることによって、履歴記録条件判定処理(1)~(3)が夫々実行される。
履歴記録条件判定処理(1)~(3)は、定周期関数ごとに異なる。本実施例による上位通信制御関数13、制御コマンド処理関数12、モータ制御関数11の夫々の履歴記録条件判定処理手順を図9に示す。
図9(a)は、上位通信制御関数13の履歴記録条件判定処理(1)のフローチャートである。履歴記録条件判定処理(1)では、CAN受信メッセージがあり、かつ、受信フレームが運転(モータ制御)指令のとき、すなわちステップS301,ステップS302の判定結果が共に「YES」のときに、復帰値が「記録有効」となる(S303)。その他の場合は復帰値が「記録無効」となる(S304)。
一方、上位通信制御関数13で実行される関数実行履歴記録処理プログラム15の処理においては、上位装置からCANメッセージを受信した時点では、監視開始フラグはセットされていないため(図5のステップS106で「NO」)、ステップS107の方へ分岐し、ステップS110において履歴記録が有効であれば、ステップS111~S116の処理が実行され、実行履歴が記録される。
図9(b)は、制御コマンド処理関数12の履歴記録条件判定処理(2)のフローチャートである。履歴記録条件判定処理(2)では制御コマンドが運転(モータ制御)指令のときに(S401で「YES」)、復帰値が「記録有効」となる(S402)。その他の場合は復帰値が「記録無効」となる(S403)。
この処理グループにおいて、制御コマンド処理関数12が起動するときは、既に監視開始フラグはセットされているため、関数実行履歴記録処理プログラム15のステップS106の判定は「YES」となる。したがって、ステップS121で、この履歴記録条件判定処理(2)が実行されることになる。
図9(c)は、モータ制御関数11の履歴記録条件判定処理(3)のフローチャートである。履歴記録条件判定処理(3)では、運転状態が運転中であり、かつ、運転(モータ制御)指令コマンドの場合、すなわちステップS501,ステップ502の判定結果が共に「YES」の場合に、復帰値が「記録有効」となる(S503)。その他の場合は復帰値が「記録無効」となる(S504)。
この処理グループにおいて、モータ制御関数11が起動するときは、既に監視開始フラグはセットされているため、関数実行履歴記録処理プログラム15のステップS106の判定は「YES」となる。したがって、ステップS121で、この履歴記録条件判定処理(3)が実行されることになる。また、ステップS129において、監視終了となるため、実行シーケンスチェック(S130)が実行される。
本実施例による関数実行履歴情報の例を図10に示す。この例は、実行シーケンス、監視時間ともに正常の場合である。
以上、本実施の形態によれば、保守支援装置側で処理グループごとに定周期プログラム(関数)の実行順序を規定した定義テーブルを生成し、この定義テーブルを制御装置へ転送する。制御装置は、定周期プログラム(関数)の実行履歴を保存する一方、実行履歴と定義テーブルの内容とを比較することにより、実行シーケンスの監視を効率よく行うことができる。
また、定義テーブルおよび実行履歴に時間情報を追加することにより、実行シーケンスに加え、定周期プログラム(関数)の処理時間や実行間隔の監視を行うことができる。さらに、予め実行シーケンスを定義したプログラムのみ実行履歴を記録することにより、メモリの使用量を節約できる。このため、限られたメモリ資源の制御装置においても、その運用中に常時監視が可能となり、制御装置の安全性が担保される。
1 制御装置(車載機器)
5 保守支援装置
10 プログラム(ROM)領域
11~13 定周期プログラム(関数)
14 実行シーケンス監視処理プログラム(監視手段)
15 関数実行履歴記録処理プログラム(記録手段)
20 データ(ROM)領域
21(21a~21n) 実行シーケンス監視対象関数定義テーブル(定義テーブル)
30 データ(RAM)領域
31 実行履歴記録領域
51 実行シーケンス監視登録画面
61 MAPファイル
5 保守支援装置
10 プログラム(ROM)領域
11~13 定周期プログラム(関数)
14 実行シーケンス監視処理プログラム(監視手段)
15 関数実行履歴記録処理プログラム(記録手段)
20 データ(ROM)領域
21(21a~21n) 実行シーケンス監視対象関数定義テーブル(定義テーブル)
30 データ(RAM)領域
31 実行履歴記録領域
51 実行シーケンス監視登録画面
61 MAPファイル
Claims (6)
- 複数の定周期プログラムによって実現される機能又は該機能の一部であり、任意に設定可能な処理グループごとに、前記複数の定周期プログラムのうち監視対象の定周期プログラムの識別情報を実行順序識別可能に登録した定義テーブルと、
前記監視対象の定周期プログラムの実行履歴をメモリに記録する記録手段と、
前記実行履歴に基づいて、前記監視対象の定周期プログラムが前記定義テーブルに定めた実行順序で動作しているか否かを監視する監視手段と、
を備えることを特徴とする制御装置。 - 前記監視対象の定周期プログラムごとに、前記監視対象の定周期プログラムの実行履歴を記録するか否かを判定するための履歴記録条件判定関数を備え、
前記定義テーブルは、夫々の前記監視対象の定周期プログラムの識別情報に関連付けて前記履歴記録条件判定関数のポインタを保存し、
前記記録手段は、前記定義テーブルに保存されている前記履歴記録条件判定関数のポインタを参照して該履歴記録条件判定関数を実行し、該履歴記録条件判定関数の判定結果に基づいて、該履歴記録条件判定関数に関連付けられた前記監視対象の定周期プログラムの実行履歴を前記メモリに記録することを特徴とする請求項1に記載の制御装置。 - 前記定義テーブルは、処理グループを構成する監視対象の定周期プログラムごとに、ある定周期プログラムの実行時から次の定周期プログラムの実行時までの時間間隔に関する閾値を含み、
前記監視手段は、当該閾値と前記実行履歴とに基づいて、異常を検知することを特徴とする請求項1又は2に記載の制御装置。 - 前記記録手段は、前記定周期プログラムの特定の命令文が実行されることにより起動することを特徴とする請求項1~3のいずれか一項に記載の制御装置。
- 前記特定の命令文はreturn文であることを特徴とする請求項4に記載の制御装置。
- 請求項1~5のいずれか一項に記載の制御装置と通信可能な保守支援装置であって、
前記定周期プログラムコンパイル時のMAPファイルと登録画面を通して入力された情報から前記定義テーブルを生成する手段と、
生成した前記定義テーブルを前記制御装置へ転送する手段と、
を備えたことを特徴とする保守支援装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020206592A JP2022093876A (ja) | 2020-12-14 | 2020-12-14 | 制御装置およびその保守支援装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020206592A JP2022093876A (ja) | 2020-12-14 | 2020-12-14 | 制御装置およびその保守支援装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022093876A true JP2022093876A (ja) | 2022-06-24 |
Family
ID=82081260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020206592A Pending JP2022093876A (ja) | 2020-12-14 | 2020-12-14 | 制御装置およびその保守支援装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2022093876A (ja) |
-
2020
- 2020-12-14 JP JP2020206592A patent/JP2022093876A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8190864B1 (en) | APIC implementation for a highly-threaded x86 processor | |
CN109656782A (zh) | 可视化调度监控方法、装置及服务器 | |
CN100362476C (zh) | 任务管理系统 | |
EP3619610A1 (en) | Systems and methods for detecting anomalies in execution of computer programs | |
CN110109741B (zh) | 循环任务的管理方法、装置、电子设备及存储介质 | |
CN114328102A (zh) | 设备状态监控方法、装置、设备及计算机可读存储介质 | |
US7168075B1 (en) | Automation device and updating method | |
CN106020984B (zh) | 电子设备中进程的创建方法及装置 | |
US20090187792A1 (en) | Circuit Arrangement and Method for Supporting and Monitoring a Microcontroller | |
EP3722945B1 (en) | Program operation system and program operation method | |
JP2022093876A (ja) | 制御装置およびその保守支援装置 | |
CN108733536B (zh) | 监控管理系统及方法 | |
CN105474174A (zh) | 控制时间密集的指令 | |
JP7379875B2 (ja) | 制御装置およびその保守支援装置 | |
CN111475684B (zh) | 数据处理网络系统及其计算图生成方法 | |
CN108062224A (zh) | 基于文件句柄的数据读写方法、装置及计算设备 | |
JP2009048358A (ja) | 情報処理装置及びスケジューリング方法 | |
US11315693B2 (en) | Method and system for managing operation associated with an object on IoT enabled devices | |
CN114310879A (zh) | 一种机器人控制方法、控制柜及系统 | |
US20120204184A1 (en) | Simulation apparatus, method, and computer-readable recording medium | |
JP2013061783A (ja) | マルチコア・プロセッサ | |
JP7419157B2 (ja) | プログラム生成装置、並列演算デバイス、及び、並列演算デバイスに並列演算を実行させるためのコンピュータプログラム | |
CN117349775B (zh) | 一种面向集群计算的异常子任务识别方法及装置 | |
CN114816566B (zh) | 一种指令搬移方法、系统、设备以及介质 | |
CN114706542A (zh) | 日志打印方法及装置、电子设备和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20231113 |