説明

プログラム変更検証装置及びプログラム変更検証方法

【課題】プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供する。
【解決手段】複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部2と、前記プログラム実行部2で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部3と、前記診断コード記憶処理部3によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部4と、を備え、前記診断コード表示処理部4は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証装置。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム変更検証装置及びプログラム変更検証方法に関する。
【背景技術】
【0002】
機器を制御するためのマイクロコンピュータに組み込まれる制御プログラムを先行開発する場合、実在しない機器をコンピュータで模擬演算するシミュレータを用いて開発中の制御プログラムのロジック評価等が行なわれている。
【0003】
例えば、車両のエンジンやブレーキ等を制御するマイクロコンピュータが組み込まれたECU(Electronic Control Unit)の制御プログラムを実際の車両に先行して開発する場合、車両の動作をコンピュータで模擬演算する車両シミュレータとECUを接続して開発中の制御プログラムのロジック評価等を行なうシミュレーションシステムが構築されている。
【0004】
特許文献1には、このようなシミュレーションシステムとして、HILS(Hardware In the Loop Simulation)システムやSILS(Software In the Loop Simulation)システムが開示されている。
【0005】
HILSシステムは、実ECUと車両シミュレータを接続して開発中の制御ソフトウェアを検証するシステムであり、SILSシステムは、実ECUに替えてECUをコンピュータで模擬するECUシミュレータと車両シミュレータをパーソナルコンピュータ等の汎用コンピュータ上に構築して開発中の制御ソフトウェアを検証するシステムである。
【0006】
HILSシステムは、図1に示すように、ECUから出力された電気信号をI/Fボードを介して論理信号に変換し、車両動作を模擬するソフトウェアを実行する高性能なCPUにその論理信号を入力して演算処理し、演算結果である論理信号を再びI/Fボードを介して電気信号に変換してECUにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ECU、I/Fボード、高性能CPU等のハードウェアによるフィードバックループが構築されている。
【0007】
SILSシステムは、図2に示すように、ECUを構成するマイクロコンピュータや周辺回路の動作を模擬するソフトウェアを高性能なCPUで実行する模擬ECUを構築し、模擬ECUから出力された論理信号を、I/Fボードを模擬するI/Fモデルを介して車両動作を模擬するソフトウェアを実行する高性能なCPUに入力して演算処理し、演算結果である論理信号を再びI/Fモデルを介して模擬ECUにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ECU、I/Fボード、車両の全てがソフトウェアで実現され、ソフトウェアによるフィードバックループが構築されている。
【0008】
さらに、SILSシステムでは、図3に示すように、ECUのハードウェアや車両モデルのI/Fボードを詳細に模擬するソフトウェアに替えて、制御プログラムを実行するECUに組み込まれたマイクロコンピュータのIOに関する論理演算部等を簡易的に模擬する制御系モジュールと、車両の動作を模擬する車両モデルでなる被制御系モジュールを構築し、夫々で発生した所定のイベントを時系列的に管理して、イベント毎に模擬ECUと車両モデルをステップ的に動作させるシステム管理モジュールを備えた演算周期が変動するイベント駆動型のシステムも構築されている。
【0009】
このようなHILSシステムやSILSシステムで構成されるシミュレーション実行部と、当該シミュレーション実行部と同期して動作し、シミュレーション実行部にシミュレーション条件を引き渡すとともに、シミュレーション実行部からシミュレーション結果を受け取る入出力モジュールと、シミュレーション条件を入力する操作画面、またはシミュレーション結果を示す出力画面を生成して表示部に表示するユーザインタフェースモジュールとを備えてシミュレーションシステムが実現されている。
【0010】
HILSシステムは、既存のECUを用いて制御ソフトウェアを開発する場合に有用であり、SILSシステムは、ターゲットとなるECUが無くても制御ソフトウェアを開発できる点で有用である。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開2007−52580号公報
【特許文献2】特開2005−59670号公報
【非特許文献】
【0012】
【非特許文献1】日経BP社、2008.5.21発行、カー・エレクトロニクスのすべて2008、多様化するHILS(244頁〜249頁)
【発明の概要】
【発明が解決しようとする課題】
【0013】
図3に示すイベント駆動型のSILSシステムは、評価対象である車両の制御ソフトウェアを実行する制御系モジュールと、当該制御ソフトウェアにより制御される車両を模擬する被制御系モジュールと、制御系モジュールまたは被制御系モジュールの何れかで発生するイベントを管理し、時系列的に発生するイベントに基づいて制御系モジュールまたは被制御系モジュールを駆動するシステム管理モジュール5を備えている。
【0014】
イベント駆動型のSILSシステムをシミュレータとして採用する場合、マイクロコンピュータで実行される機器の制御プログラムである評価対象プログラムを制御系モジュールでそのままの状態で実行することができないため、ターゲットとなるマイクロコンピュータに対応したIO処理等の演算処理を変更する必要がある。
【0015】
当該マイクロコンピュータのIO処理環境等の動作環境を、シミュレータ上で模擬するためである。
【0016】
例えば、エンジンから出力されたクランクパルス信号は、通常マイクロコンピュータのパルス入力ポートで受信され、当該パルス入力ポートにクランクパルス信号のエッジが入力されると、CPUに対してクランクパルス割込み処理が起動され、当該パルス入力ポートに組み込まれたキャプチャレジスタの値がクランクパルス周期として当該割込み処理で読み込まれる。
【0017】
しかし、パーソナルコンピュータ等で構成されるシミュレータには、パルス入力ポートが存在しないため、エンジンを模擬する被制御系モジュールで発生したクランクパルス信号を認識してクランクパルス信号のエッジで評価対象プログラムの割込み処理を起動するためのハードウェアモデルを構築するとともに、評価対象プログラム側にハードウェアモデルから起動される割込み処理に対応して割込み処理を起動するIOドライバを構築する必要がある。
【0018】
即ち、評価対象プログラムに実装したロジックを評価するためには、ロジックの入出力処理に関連するIOドライバ及びハードウェアモデルを構築する労力が必要となり、IOドライバ及びハードウェアモデルを構築してはじめて、シミュレータのデバッグ、即ち、評価対象プログラムとしての制御プログラムとIOドライバを含む制御系モジュールと、ハードウェアモデルを含む被制御系モジュールの全体を動作させ、実機と同様の動作をすることを検証することができる。
【0019】
実際にシミュレータを動作させた結果、異常が発生していた場合は、評価対象プログラムのロジック、IOドライバ、ハードウェアモデルの何れかから、当該異常の発生原因を特定して、特定した箇所の修正を行う。さらに、修正後に再び動作検証を行い、当該動作検証結果に基づいてプログラムの修正を行う。これを繰り返して、プログラム全体の品質を高めていくことができる。
【0020】
そこで、例えば、特許文献2では、制御系モジュールの故障診断で用いているダイアグノシスコードを評価指標として活用し、過去の動作検証時に異常を示したダイアグノシスコードと、現状の動作検証時に異常を示したダイアグノシスコードの両方を専用の携帯端末上の画面に表示して、過去の動作検証時に発生した異常内容と現状の動作検証時に発生した異常内容を対比して目視可能にすることが提案されている。
【0021】
この場合、過去の動作検証時に発生した異常内容と現状の動作検証時に発生した異常内容を対比して目視可能であるため、プログラムの変更により発生した異常内容の変動内容を把握することができるため、プログラムの変更の良否を効率よく判断することができる。しかし、ダイアグノシスコードは、リソース制限が厳しいマイクロコンピュータの制御プログラムにおいては、RAM上のある所定領域に連続したビットの値で構成されるため、開発者等が一見してダイアグノシスコードが示す内容を解釈するのは困難であった。また、前回の動作検証時と現状の動作検証時のそれぞれにおける、異常を示すビットの値を一つずつ目視により対比する労力が必要であった。
【0022】
本発明の目的は、上述した従来の問題点に鑑み、プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供する点にある。
【課題を解決するための手段】
【0023】
上述の目的を達成するため、本発明によるプログラム変更検証装置の特徴構成は、複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部と、前記プログラム実行部で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部と、前記診断コード記憶処理部によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部と、を備え、前記診断コード表示処理部は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示する点にある。
【0024】
上述の構成によれば、診断コード表示処理部により、前回評価対象プログラムの複数の演算処理を実行した際の診断コードと、当該プログラムに変更を加えたプログラムの複数の演算処理を実行した際の診断コードと、を対比して生成された診断コードの変動情報を表示可能であるため、プログラムを変更することにより生じた前回の診断処理結果からの変動情報を効率よく把握することができるようになる。
【発明の効果】
【0025】
以上説明した通り、本発明によれば、プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供することができるようになった。
【図面の簡単な説明】
【0026】
【図1】HILSシステムを用いたシミュレーションシステムの説明図
【図2】周期駆動型のSILSシステムを用いたシミュレーションシステムの説明図
【図3】イベント駆動型のSILSシステムを用いたシミュレーションシステムの説明図
【図4】SILSシステムを用いたシミュレーションシステムのブロック構成図
【図5】SILSシステムを構成する各モジュールの説明図
【図6】イベント駆動型のSILSシステムの動作を示すタイミングチャート
【図7】イベントリストによるイベント管理に関する説明図
【図8】システム管理モジュールの動作を示すフローチャート
【図9】正常及び異常を示す診断コードの件数を算出する動作を示すフローチャート
【図10】前回実行時及び今回実行時の診断コードの正常件数及び異常件数を対比する動作を示すフローチャート
【図11】診断コードに対応する文字列の表示を説明する説明図であり、(a)は、診断コードを文字列表示する動作を示すフローチャート、(b)診断コードと表示文字列の変換用テーブルの構成を例示する説明図
【図12】前回実行時の診断コードの表示色を設定する動作を示すフローチャート
【図13】前回実行時と今回実行時の診断コードを対比して、今回実行時の診断コードの表示色を設定する動作を示すフローチャート
【図14】変動情報を表示した画面の外観図であり、(a)は、正常件数及び異常件数の変動情報を表示した画面の外観図、(b)は、各診断コードの変動情報を表示した画面の外観図
【図15】バーンダウンチャートを画面に表示する動作を示すフローチャート
【図16】バーンダウンチャートを表示した画面の外観図であり、(a)は、異常件数をプロットしたバーンダウンチャートを表示した画面の外観図、(b)は、正常件数と異常件数を重ねてプロットしたバーンダウンチャートを表示した画面の外観図
【発明を実施するための形態】
【0027】
以下に、本発明によるプログラム変更検証装置及びプログラム変更検証方法の実施形態について説明する。
【0028】
図3に示すように、所定の処理速度で制御システムを模擬演算するシミュレーション実行部SMと、シミュレーション実行部SMで実行されるシミュレーションを管理する操作表示部HSTがLANで接続されてシミュレーションシステムが構成されている。
【0029】
シミュレーション実行部SM、及び、操作表示部HSTは、夫々所定のオペレーティングシステム(以下、「OS」と記す。)の管理下でシミュレーション用のソフトウェアが実行される二台のパーソナルコンピュータPCによって実現されている。
【0030】
図4に示すように、シミュレーション実行部SMは、評価対象である車両の制御ソフトウェアを実行する制御系モジュール6と、当該制御ソフトウェアにより制御される車両を模擬する被制御系モジュール7と、制御系モジュール6または被制御系モジュール7の何れかで発生するイベントを管理し、時系列的に発生するイベントに基づいて制御系モジュール6または被制御系モジュール7を駆動するシステム管理モジュール5を備えたイベントドリブン型のSILSシステムである。
【0031】
各モジュール5,6,7は、所定のOS11上で動作するパーソナルコンピュータPCのCPUボード1上のメモリに格納されたシミュレーション用のソフトウェア及び制御ソフトウェアと、CPUタイマ12と、CPUタイマ12に従ってそれらソフトウェアを実行する高性能CPUにより具現化される。
【0032】
システム管理モジュール5は、制御系モジュール6または被制御系モジュール7に関連して発生するイベントの起動時刻を設定管理するシステムタイマ52と、制御系モジュール6と被制御系モジュール7との間で入出力データ(IOデータ)を遣り取りするための共有メモリ51とを備え、システムタイマ52の値に基づいて各イベントに対応する制御系モジュール6または被制御系モジュール7の対応ブロックを起動する。
【0033】
制御系モジュール6と被制御系モジュール7との間の入出力情報の受け渡しは、システム管理モジュール5を経由して行われる。制御系モジュール6とシステム管理モジュール5との間の入出力情報には、“起動(イベント時刻付)”や、“IOデータ(時刻付)”や、“IOデータ”が含まれる。システム管理モジュール5と被制御系モジュール7の間の入出力情報には、“起動(時刻付)”や、“IOデータ(時刻付)”や、“IOデータ”が含まれる。
【0034】
システムタイマ52は、当該シミュレーション実行部SMの基準時刻を規定するもので、システム管理モジュール5により起動制御される制御系モジュール6及び被制御系モジュール7の所定の割込み処理ブロックは、システムタイマ52に基づいて動作する。つまり、制御系モジュール6と被制御系モジュール7の夫々はシステムタイマ52に基づいて同一の仮想時間上で動作する。
【0035】
制御系モジュール6と被制御系モジュール7には、共有メモリ51との間で、各イベントに関する時刻付のIOデータを書き込みまたは読み出す制御系モジュール側IOドライバ61及び被制御系モジュール側IOドライバ71を備えている。
【0036】
例えば、制御系モジュール側IOドライバ61から共有メモリ51に書き込まれる点火信号や燃料噴射信号等のパルス信号や、被制御系モジュール側IOドライバ71から共有メモリ51に書き込まれるエンジン回転数や速度センサ信号等のパルス信号等のタイミング依存のIOデータは、システムタイマ52の時刻と関連付けられて管理される(図中点線枠13)。
【0037】
また、例えば、制御系モジュール側IOドライバ61及び被制御系モジュール側IOドライバ71の双方において共有メモリ51に読み書きされる、インテリジェントICとの通信等におけるシリアル通信データや、IGスイッチ、スタータスイッチやエアコンのマグネットクラッチ等の入出力データ等のタイミング非依存のIOデータは、システムタイマ52の時刻と関連付けられることなく管理される(図中点線枠14)。
【0038】
つまり、システム管理モジュール5は、制御系モジュール6または被制御系モジュール7から共有メモリ52に書き込まれたIOデータに基づいて、イベントの要求を検出すると、それらのイベント要求を集約してシステムタイマ52により更新される時刻を各イベントに設定して共有メモリ51に蓄積する。
【0039】
ここで、制御系モジュール6または被制御系モジュール7のIOドライバを介して共有メモリ52に書き込まれるIOデータは、システム管理モジュール5により管理されるイベントに関するデータのみならず、制御系モジュール6と被制御系モジュール7の間で制御演算または模擬演算に必要なIOデータも含まれる。
【0040】
詳述すると、図5に示すように、共有メモリ51は、仮想IOレジスタ54とイベントリスト53を備えて構成されている。
【0041】
仮想IOレジスタ54は、IOデータを記憶する外部IOデータ部56と、当該IOデータの入出力対象となる割込み処理ブロックに対応する割込みフラグを管理する割込管理部55を備えている。
【0042】
外部IOデータ部56に設定されるIOデータは、制御系モジュール6または被制御系モジュール7が組み込まれる制御装置の実機(以下、「実機装置」と記す。)に対して入出力されるパルス信号やシリアル通信データ等の制御信号を模擬して構成され、パルス信号のエッジ発生時刻やエッジ周期、あるいは、電圧値や電流値等の当該制御信号が、実機装置の入出力ポートで解析された後にレジスタ等の記憶領域に設定される電子データとして構成されている。
【0043】
イベントリスト53は、制御系モジュール6または被制御系モジュール7へのIOデータの入出力要求を示すイベント毎に、イベントの起動時刻と、IOデータを入力または出力することを示すイベント内容と、当該IOデータを外部IOデータ部56に設定した割込み処理ブロックや当該IOデータの種類等、IOデータ及びイベントの要求元に関連する情報を示す取得元情報と、イベント発生に関連して起動対象の割込み処理ブロックを示すアクション情報と、を記憶するように構成されている。
【0044】
システム管理モジュール5は、システムタイマ52の値に基づいて、イベントリスト53から直近の起動時刻を示すイベントを抽出し、当該イベントのアクション情報に基づいて、割込管理部55に設定された割込みフラグに対応する割込み処理ブロックを起動対象とし、当該割込み処理ブロックに対応するIOドライバ61−1,71を起動して、当該割込み処理ブロックを起動したことを示す割込みフラグを設定する。また、システム管理モジュール5は、当該イベントの取得元情報に基づいて、起動した割込み処理ブロックに対して入出力するIOデータを外部IOデータ部56から取得し、当該取得したIOデータを当該IOドライバ61−1,71に入力する。
【0045】
図5に示すように、制御系モジュール6は、仮想内部レジスタ63と、IOドライバ61と、割込コントローラ62と、制御ソフトウェア68と、を備えている。
【0046】
仮想内部レジスタ63は、制御系モジュール6が組み込まれるECUのマイクロコンピュータ(以下、「実機マイコン」と記す。)に備えられたRAM、不揮発性メモリ、及び入出力ポート等に設けられたECU内部のレジスタを模擬して、CPUボード1上のメモリに構成されている。
【0047】
仮想内部レジスタ63は、割込み処理ブロックの処理内部で利用するデータの記憶領域としてだけでなく、割込み処理ブロックから制御系モジュール6の外部に対するIOデータの記憶領域としても利用されるように構成されている。
【0048】
IOドライバ61−1は、割込コントローラ62若しくは仮想内部レジスタ63と共有メモリ51との間に備えられ、割込み処理ブロックの実行時に実機マイコンに備えられた入出力ポートが実行する処理を模擬して構成されている。
【0049】
具体的には、IOドライバ61−1は、システム管理モジュール5により起動され、さらに、外部IOデータ部56から取得したIOデータが入力されると、所定の割込み処理ブロックを起動するよう割込みコントローラ62へ要求する。また、IOドライバ61−1は、入力されたIOデータを仮想内部レジスタ63に設定するとともに、割込管理部55の当該割込み処理ブロックに対応する割込みフラグをリセットする。
【0050】
さらに、IOドライバ61−1は、後述する割込み処理ブロックからの制御系モジュール6の外部に対するIOデータの出力要求に基づいて、仮想内部レジスタ63から当該IOデータを取得し、当該取得したIOデータを外部IOデータ部56に設定するとともに、当該IOデータの出力先の処理ブロックに対応する割込みフラグを割込管理部55に設定する。
【0051】
IOドライバ61−1は、実機マイコンの入出力ポートの入出力処理に対応して、例えば、制御系モジュール6の外部からのパルス入力信号の入力処理を模擬するキャプチャ部64、制御系モジュール6の外部へのパルス出力信号の出力処理を模擬するコンペア部65、例えば外部のインテリジェントICとシリアル通信データの通信を行う通信部66、例えばIGスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、入力されるデータであればデータを読み込み、出力されるデータであればデータを出力するデータの入出力処理を兼用するIOポート部67等を備えている。
【0052】
割込コントローラ62は、実機マイコンに備えられたCPUにおける割込み処理制御を模擬して構成されている。具体的には、割込コントローラ62は、IOドライバ61−1からの割込み処理ブロックの起動要求に基づいて、制御ソフトウェア68に含まれる要求された割込み処理ブロックを起動するように構成されている。
【0053】
IOドライバ61−2は、制御ソフトウェア68と仮想内部レジスタ63の間に備えられ、実機マイコンに備えられたCPUにより実機マイコンに備えられたRAM、不揮発性メモリ及び入出力ポート等に設けられたECU内部のレジスタをアクセスするレジスタ操作処理を模擬して構成されている。
【0054】
具体的には、IOドライバ61−2は、割込み処理ブロックからのデータの入力要求に基づいて起動され、当該要求された入力データを仮想内部レジスタ63から取得する。また、IOドライバ61−2は、割込み処理ブロックからのデータの出力要求に基づいて起動され、割込み処理ブロックの処理内部で利用するデータを仮想内部レジスタ63に記憶する。
【0055】
制御ソフトウェア68は、実機マイコンに備えられたCPUで稼働可能なオブジェクトコードで構成されている制御プログラムを模擬して構成され、複数の割込み処理ブロックを備え、CPUボード1上のCPUで稼働可能なオブジェクトコードで構成されている。
【0056】
割込み処理ブロックが制御系モジュール6の外部へIOデータを出力する場合、割込み処理ブロックは、IOドライバ61−2を介して仮想内部レジスタ63へ当該IOデータを設定した後、当該IOデータの出力先の割込み処理ブロックへの出力処理を模擬するIOドライバ61−1を起動し、当該IOデータを出力先の割込み処理ブロックへ出力するよう要求する。
【0057】
IOドライバ71は、「ハードウェアモデル」とも呼ばれ、制御系モジュール6に備えられたIOドライバ61−1と同様に、所定の処理ブロックの実行時に、被制御系モジュール7に対応する実機装置に備えられた入出力ポートが実行する入出力処理を模擬して構成されている。
【0058】
具体的には、IOドライバ71は、システム管理モジュール5により起動され、さらに、外部IOデータ部56から取得したIOデータが入力されると、割込管理部55の当該入力ポートに対応する割込みフラグをリセットし、所定の処理ブロックを起動する。
【0059】
さらに、IOドライバ71は、処理ブロックの実行中に、例えば、エンジン回転数や速度センサ信号等、制御系モジュール6に対して出力される制御信号を模擬したIOデータを取得し、当該IOデータを外部IOデータ部56に設定するとともに、当該IOデータの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部55に設定する。
【0060】
IOドライバ71は、被制御系モジュール7が示す実機装置に備えられた入出力ポートの入出力処理に対応して、例えば、制御系モジュール6のキャプチャ部64に対するパルス信号の出力処理を模擬するパルス出力部72−1、制御系モジュール6のコンペア部65からのパルス信号の入力処理を模擬するパルス入力部72−2、例えば外部のインテリジェントICとシリアル通信データの通信を行うシリアル通信部73−1、例えばIGスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、出力するデータであればデータを書き込み、入力されるデータであればデータを入力するデータの入出力処理を兼用するIOポート部73−2等を備えている。
【0061】
即ち、車両を制御するECUと、ECUにより制御される例えばエンジン等の車両側装置により構成される制御システムがシミュレーション実行部SMで模擬される。尚、シミュレーション実行部SMで模擬される制御システムは、エンジンシステムに限るものではなく、ブレーキシステム、変速機システム等の車両を構成する任意の機能ブロックが対象となる。
【0062】
以下、上述の構成に基づいて、シミュレーション実行部SMの動作例を、図6に示すタイミングチャートに基づいて説明する。
【0063】
図6の(a),(b),(c),(d)の上下の各欄は、夫々システム管理モジュール5、制御系モジュール6、被制御系モジュール7、システムタイマ52の動作を示し、横軸は時間軸として、各イベントに対応して時刻t0,t1,・・・,t5が付されている。さらに、各イベントの内容が記憶されたイベントリスト53を図7に示す。
【0064】
システム管理モジュール5は、先ず、イベントリスト53に格納された直近のイベントを抽出すると、システムタイマ52の時刻t0で、内部で1msec.インタバルの割込みイベントを発生させる。
【0065】
システム管理モジュール5は、イベントの取得元情報に基づいて、1msec.を示す値を外部IOデータ部56に設定し、イベントのアクション情報に基づいて、制御系モジュール6のインタバル割込み処理ブロックに対応する割込みフラグ及び被制御系モジュール7のメイン処理ブロックに対応する割込みフラグを割込管理部55に設定する。
【0066】
尚、制御系モジュール6及び被制御系モジュール7は、それぞれの実機装置において、不定期に入出力ポートに対して入出力される割込み処理要求に応じるために、定時処理ブロックを所定周期で繰り返し実行し、各定時処理ブロックの実行後のタイミングと同期して、割込み処理要求に応じるように構成されている。この構成を模擬して、制御系モジュール6及び被制御系モジュール7では、各定時処理ブロックを模擬した、上述のインタバル割込み処理ブロックが実行される。以後、システム管理モジュール5では、後に発生する他のイベントと1msec.インタバルの割込みイベントが時系列的にスケジューリングされ、イベントリスト53にスケジューリングしたデータが格納される。
【0067】
図6及び図7に戻り、上述の割込みイベントに応じて、システム管理モジュール5は、インタバル割込み処理ブロックに対応したIOドライバ61−1及びメイン処理ブロックに対応したIOドライバ71を起動し、外部IOデータ部56に設定されたIOデータをIOドライバ61−1に入力し、インタバル割込み処理ブロック及びメイン処理ブロックを起動したことを示す割込みフラグを割込管理部55に設定する。
【0068】
起動されたIOドライバ61−1は、システム管理モジュール5から入力された1msec.を示すIOデータを制御系モジュール6の仮想内部レジスタ63に設定し、割込コントローラ62にインタバル割込み処理ブロックの起動を要求するとともに、割込管理部55に設定されたインタバル割込み処理ブロックに対応する割込みフラグをリセットする。割込コントローラ62は、IOドライバ61−1からの起動要求に基づいて、インタバル割込み処理ブロックを起動する。
【0069】
一方、起動されたIOドライバ71は、割込管理部55に設定されたメイン処理ブロックに対応する割込みフラグをリセットして、メイン処理ブロックを起動する。
【0070】
制御系モジュール6が1msec.のインタバル割込み処理ブロックの起動中に、図6のa1のタイミングで、IOドライバ61−1を介して外部IOデータ部56に何らかのデータ(例えばIOパルス)を設定し、当該データの出力先の処理ブロックに対応する割込みフラグを割込管理部55に設定すると、システム管理モジュール5はイベントリスト53に当該データの出力に対応するイベントを追加する。
【0071】
被制御系モジュール7でのメイン処理においても、図6のa2のタイミングで、IOドライバ71を介して外部IOデータ部56に何らかのデータ(例えばIOパルス)を設定し、当該データの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部55に設定すると、システム管理モジュール5はイベントリスト53に当該データの出力に対応するイベントを追加する。
【0072】
時刻t0での被制御系モジュール7によるメイン処理にて、外部IOデータ部56にパルス発生時刻を含む何らかの出力データが設定され、割込管理部55に制御系モジュール6の「パルス1出力」処理ブロックに対応する割込みフラグが設定されることにより、システム管理モジュール5が被制御系モジュール7からの「パルス1出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール7に対する「パルス1入力」イベントをイベントリスト53に設定する。
【0073】
システム管理モジュール5は、イベントリスト53から当該設定したイベントを直近のイベントとして抽出した場合に、イベントの起動時刻、例えば時刻t1で、「パルス1入力」イベントを発生させる。
【0074】
システム管理モジュール5は、図6のb1のタイミングで、発生させた当該「パルス1入力」イベントのアクション情報に基づいて、パルス1出力ブロックに対応するIOドライバ61−1を起動して、当該パルス1出力ブロックの要求時に外部IOデータ部56に設定されたパルス発生時刻及び何らかの出力データ(例えば、エンジン回転数)をIOドライバ61−1に入力し、パルス1出力ブロックを起動したことを示す割込みフラグを割込管理部55に設定する。
【0075】
当該起動されたIOドライバ61−1は、パルス1出力ブロックの起動を割込コントローラ62に要求するとともに、入力されたIOデータを仮想内部レジスタ63に設定し、割込管理部55に設定されたパルス1出力ブロックに対応する割込みフラグをリセットする。
【0076】
割込コントローラ62は、IOドライバ61−1の要求に応じて、パルス1出力ブロックを起動する。
【0077】
パルス1出力ブロックは、IOドライバ61−2を介して仮想内部レジスタ63からIOデータを取得し、システムタイマ52のタイマ値を基に演算処理を実行する。ここで、演算処理とは、例えば、被制御モジュール7からのIOデータとして取得したエンジン回転数を利用し、その回転数に応じた次回タイミングの算出を行うことである。
【0078】
尚、演算処理中に何らかのデータを外部に対して出力する場合は、IOドライバ61−2と、仮想内部レジスタ63と、IOドライバ61−1を介して外部IOデータ部56に当該出力するデータを設定し、割込管理部55に出力先の処理ブロックに対応する割込みフラグを設定する。
【0079】
システム管理モジュール5が、時刻t1での制御系モジュール6のパルス出力処理による割込管理部55の更新により「パルス2出力」要求を受けると、更新したシステムタイマ52のタイマ値(図6のタイミングa3)をパラメータとして、これに対応するパルス発生時刻を起動時刻とした「パルス2出力」イベントをイベントリスト53に設定する。システム管理モジュール5は、例えば時刻t2にて、制御系モジュール6による「パルス2出力」処理ブロックを起動する。
【0080】
一方、システム管理モジュール5が被制御系モジュール7から「パルス3出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール7に対する「パルス3入力」イベントをイベントリスト53に設定する。システム管理モジュール5は、例えば時刻t3にて、制御系モジュール6による「パルス3入力」処理ブロックを起動する。
【0081】
次にシステム管理モジュール5が制御系モジュール6から「パルス4出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした「パルス4出力」イベントをイベントリスト53に設定する。システム管理モジュール5は、例えば時刻t4にて、制御系モジュール6による「パルス4出力」処理ブロックを起動する。
【0082】
時刻t5では、通信仕様に応じてシステム管理モジュール5内部で生成した「受信イベント」が発生すると、これに応答して制御系モジュール6は、それに対応した「受信」処理ブロックを起動する。
【0083】
このようにイベントリスト53にイベントが蓄積され、蓄積されたイベントに基づいて時系列的に制御系モジュール6または被制御系モジュール7の該当する割込み処理ブロックが起動されることによりシミュレーションが進められる。
【0084】
ここで、システムタイマ52で規定される制御系モジュール6または被制御系モジュール7における処理中の時間は零であり、例えば、時刻t0のステップでは、時間Tは零となっており、イベントの発生の無い区間は処理をスキップしながら、時系列で順番にイベントが実行され、イベントに設定された時刻により時間がステップ状に進むように構成されているが、各イベントに対応した割込み処理ブロックが起動される制御系モジュール6または被制御系モジュール7ではCPUタイマ12によりイベントの実処理時間が計時される。
【0085】
図8に示すように、システム管理モジュール5は、イベントリスト53から直近のイベントを抽出し(S11)、抽出したイベントの起動時刻にシステムタイマの値を更新し(S12)、当該システムタイマ時刻で更新されるIOデータをIOドライバ61,71に設定して(S13)、発生するイベント情報(割込み処理ブロックに対応する割込みフラグ等)を設定することにより(S14)、対応する制御系モジュール6または被制御モジュール7の割込み処理ブロックを起動する(S15)。
【0086】
制御系モジュール6または被制御モジュール7の割込み処理ブロックは所定の演算処理を実行して、システム管理モジュール5に対してIO情報の更新、イベントリスト53の更新を要求する(S16)。その後、処理が実行されたイベントをイベントリスト53から削除する(S17)。
【0087】
図4に示すように、操作表示部HSTは、上述したシミュレーション実行部SMに対してシミュレーション条件を出力するとともに、シミュレーション実行部SMからシミュレーション結果を入力して、制御系モジュール6で実行される制御プログラムの評価を行うための装置である。
【0088】
詳述すると、図4及び図5に示すように、操作表示部HSTは、シミュレーション実行部SMと同期して動作し、シミュレーション実行部SMにシミュレーション条件を引き渡すとともに、シミュレーション実行部SMからシミュレーション結果を受け取る入出力モジュール81と、シミュレーション条件を入力する操作画面、またはシミュレーション結果を示す出力画面を生成して表示部である液晶表示装置にGUI表示するユーザインタフェースモジュール(以下、「GUIモジュール」と記す。)82を備えている。
【0089】
GUIモジュール82は、シミュレーションシステムの起動時に、シミュレーション実行部SMにより実行されるシミュレーションの環境条件をオペレータが設定するための環境操作画面を生成して表示部に表示し、環境操作画面を介して環境条件が設定されると、シミュレーションの起動や停止、さらにはシミュレーション条件を設定する操作画面や、シミュレーション実行部SMにより実行されたシミュレーション結果を示す出力画面を生成して表示部に表示する。
【0090】
環境操作画面では、シミュレーション実行部SMの環境条件が設定される。例えば、システム管理モジュール5で管理されるイベントの選択、共有メモリ51を介して制御系モジュール6と被制御系モジュール7との間で遣り取りされるIOデータの選択及びメモリマップの定義等である。
【0091】
環境操作画面で設定された環境条件は、入出力モジュール81を介してシミュレーション実行部SMに送信され、システム管理モジュール5を介して制御系モジュール6、被制御系モジュール7の夫々に配信され、シミュレーション実行部SMの初期条件が設定される。
【0092】
図3に示すように、操作画面は、シミュレーションの起動スイッチや停止スイッチ、さらにはイグニッションスイッチ、アクセルペダル操作スイッチ、変速レバー操作スイッチ等のエンジンを操作するために必要な操作スイッチや、スピードメータ、タコメータ、水温計、電圧計等のエンジン状態をモニタする計器がグラフィック表示される操作画面である。
【0093】
操作画面を介してオペレータにより設定された操作情報は、入出力モジュール81を介してシミュレーション実行部SMに送信され、システム管理モジュール5で対応するイベントが生成されて、対応するイベントが制御系モジュール6または被制御系モジュール7で処理される。
【0094】
シミュレーション実行部SMにより実行されたシミュレーション結果が、システム管理モジュール5を介して操作表示部HSTの入出力モジュール81に送信され、GUIモジュール82に引き渡される。
【0095】
さらに、図4に示すように、CPUボード1上には、制御系モジュール6の開発を行うプログラム開発部DMが備えられている。プログラム開発部DMは、開発者がソースコードを編集する、編集したソースコードをコンパイル及びアセンブルしてオブジェクトコードを生成する、あるいは、オブジェクトコードを逆アセンブル及び逆コンパイルしてソースコードを生成する等の、プログラム編集用及びオブジェクトコード生成用の操作画面を備えている。
【0096】
開発者は、プログラム開発部DMを利用して上述のシミュレーションシステムに適用可能なプログラムを開発し、プログラムのロジック評価、及び、ロジック評価結果をフィードバックしてプログラムを修正変更し、再度シミュレーションによりロジック評価を行うことを繰り返す。これにより、制御プログラムの品質を高めていく。
【0097】
ただし、新たに実機マイコンの開発に先行して制御プログラムを開発し、当該制御プログラムを上述のシミュレーションシステムに適用して、制御プログラムのロジックを評価するためには、実機マイコンを模擬する仮想内部レジスタ63とIOドライバ61と割込コントローラ62とを合わせて開発する必要がある。
【0098】
割込みコントローラ62や仮想内部レジスタ63は、例えば、割込み処理ブロック名と起動する割込み処理ブロックモジュールが記憶されたRAM上のアドレスとを対応づけるテーブルとして構成する、あるいは、データ名とデータ内容を対応づけるテーブルとして構成する等、他の実機マイコンの制御ソフトウェア38を作成する場合にも利用可能なように汎用化することは可能である。
【0099】
ただし、IOドライバ61は、実機マイコンの提供元毎に仕様が異なることがあり、実機マイコンの提供元毎に共通化することは可能であっても、実機マイコンの提供元が相違しても利用可能なように汎用化することは困難である。
【0100】
制御プログラムは、既存の実機マイコンの提供元から提供されたオブジェクトコードを逆アセンブルあるいは逆コンパイルしてソースコードを生成し、カスタマイズすることにより、開発効率を向上することはできるが、データの入出力処理の記載された箇所に対して、新たに作成したIOドライバ61を利用するソースコードを埋め込む必要がある。
【0101】
このように、新たに開発した制御プログラムを上述のシミュレーションシステムを利用してロジック評価するためには、評価対象の制御プログラムのロジック以外にも、IOドライバ61等の入出力処理に関わるソースコードを追加する必要があり、即ち、当該制御プログラムのロジックを評価する以前に、シミュレーションシステムを正常に動作させるための労力が必要となる。
【0102】
そこで、図4に示すように、CPUボード上1には、上述の構成に加えて、プログラム実行部2と診断コード記憶処理部3と診断コード表示処理部4と、を備えたプログラム変更検証部PMが備えられている。さらに、図5に示すように、制御系モジュール6には、制御ソフトウェア2を構成する複数の割込み処理ブロックに対応する自己診断プログラム69が備えられている。
【0103】
プログラム実行部2は、環境操作画面に設けられたシミュレーション実行開始ボタン等の入力操作に応じて、シミュレーション実行部SMによるシミュレーションの実行を開始し、さらに、環境操作画面に設けられたタイミング設定画面等での設定操作により設定されたタイミングで、後述する自己診断プログラム69を実行するように構成されている。例えば、タイミング設定画面は、時間を入力設定するように構成され、プログラム実行部2は、シミュレーションの実行を開始し、当該タイミング設定画面で入力設定された時間が経過すると、自己診断プログラム69を実行する。
【0104】
自己診断プログラム69は、実機マイコンの制御プログラムで行われる自己診断処理を模擬して構成されている。自己診断処理は、実機マイコンに備えられたRAM及び不揮発性メモリに設定されたデータに基づいて、制御プログラムにより制御される機器の異常を検出し、検出結果に対応する診断コードを出力するように構成されている。
【0105】
即ち、自己診断プログラム69は、シミュレーションの実行により、割込み処理ブロック及び被制御モジュール7からIOドライバ61を介して仮想内部レジスタ63に入出力されたIOデータに基づいて、異常の有無を検出し、検出結果である診断コードを出力するように構成されている。
【0106】
例えば、トランスミッション異常を検出する場合に利用する診断コードは、第一ソレノイド異常を示す診断コード、第二ソレノイド異常を示す診断コード等、トランスミッションに備えられた検出装置等を構成する各電子素子の異常を識別する程度に細分化されており、車両全体にわたる機器の異常を検出する場合にあっては、診断コードの種類は膨大である。したがって、診断コードは、実機マイコンに備えられたRAM及び不揮発性メモリの制限されたリソースを考慮して、例えば16ビットのコード値で構成され、各ビットが示すコード値に基づいて異常の有無及び異常の種類を検出可能に構成されている。
【0107】
診断コード記憶処理部3は、自己診断プログラム69から出力される診断コードを共有メモリ51に設定するように構成されている。診断コード記憶処理部3は、シミュレーションを繰り返し実行して、過去の診断コードと今回の診断コードを対比して制御プログラムのロジックを評価することができるように、過去に設定した記憶領域とは別の記憶領域に診断コードを設定するように構成されている。
【0108】
診断コード表示処理部4は、共有メモリ51に記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、生成した変動情報を操作表示部HSTに備えられた入出力モジュール83を介してGUIモジュール82に出力して、当該変動情報を表示部に表示するように構成されている。
【0109】
尚、操作表示部HSTは、上述の構成に加えて、プログラム実行部2と同期して動作し、プログラム実行部2にシミュレーション及び自己診断プログラムの実行タイミングを引き渡すとともに、診断コード表示処理部4から過去の診断コードと今回の診断コードを対比して生成された変動情報を含む診断結果情報を受け取る入出力モジュール83を備えている。
【0110】
操作表示部HSTに備えられたGUIモジュール82は、上述の構成に加えて、診断コード表示処理部4から受け取った診断結果情報を表示する診断結果表示画面を生成して表示部である液晶表示装置にGUI表示するように構成されている。
【0111】
さらに、ビット値及びバイトインデックス値と表示文字列を対応付けるコメント情報テーブルが制御プログラムのソースコードファイルに定義されている。コメント情報テーブルは、例えば、ソースコードの開発効率を向上するために、あるいは、断結果表示画面に表示された診断結果の識別性を向上するために、診断コードのビット値、あるいは、診断コードの種類を示すバイトインデックス値と、当該ビット値及びバイトインデックス値が示す意味内容を文字列化した表示文字列との変換用テーブルとして構成されている。
【0112】
例えば、図11(b)に示すように、バイトインデックス値0が示す、表示文字列として「エンジン異常」、及びソースコード上の定数名(コード値名)として「DENGINE」が定義されている。また、バイトインデックスに対応する診断コードとしての16ビットのビット値と、当該ビット値の示す内容としての表示文字列が定義されている。例えば、「エンジン異常」を示すバイトインデックスに対応する診断コードの表示文字列として、「正常」「異常1」「異常2」が定義されている。
【0113】
即ち、上述の構成によれば、プログラム実行部1によりシミュレーションが実行され、さらに自己診断プログラム69が実行された後、診断コード記憶処理部3により共有メモリ51に設定された過去の診断コードと今回の診断コードを対比して生成された変動情報が、診断コード表示処理部4により診断結果表示画面に識別性よく表示されるようになる。
【0114】
したがって、プログラムを変更した場合に、当該プログラムの変更の良否の評価が一目でわかるようになり、また、画面に表示された変動情報に基づいて、プログラム変更の不具合を効率よく解消することができるため、シミュレーションシステムを正常に動作させるために必要な労力を削減することができる。
【0115】
以下では、上述の構成及び図9から図16に基づいて、プログラム変更検証部PMによるプログラム変更の検証手順について説明する。
【0116】
図9に示すように、操作者が、環境操作画面に設けられたシミュレーション実行開始ボタン等の入力操作に応じて、シミュレーション実行部SMによるシミュレーションの実行を開始すると、診断コード収集ステップSAが実行され、所定のタイミングで自己診断プログラム69が実行され(SA1)、診断コード記憶処理部3を介して、共有メモリ51に診断コードが設定される(SA2)。
【0117】
診断コード収集ステップSAが終了すると、診断コード表示処理部4により、正常数異常数表示ステップSBが実行される。
【0118】
正常数異常数表示ステップSBは、先ず、共有メモリ51から診断コードを全件取得後、処理件数を示す変数iを0に設定し(SB1)、取得した診断コードの値が正常を示しているかどうかを1件ずつ判定する(SB2)。診断コードの値が正常値を示す場合は、正常件数を1件カウントアップし(SB4)、診断コードの値が正常値を示さない場合は、さらに診断コードの値が未判定を示す値であるかどうかを判定し(SB3)、診断コードの値が未判定を示す値でない場合は、異常件数を1件カウントアップする(SB5)。
【0119】
正常数異常数表示ステップSBは、当該取得した診断コード全件分に対してステップSB2〜SB5の処理を繰り返し(SB6,SB7)、診断コード件数、正常件数及び異常件数を入出力モジュール83に出力する。入出力モジュール83は、当該入力された診断コード件数、正常件数及び異常件数を、例えば、図14(a)に示すように、GUIモジュール82を介して、診断結果表示画面の右上部のように表示する(SZ1)。
【0120】
図10に示すように、正常数異常数表示ステップSBが終了すると、診断コード表示処理部4により、前回値対比表示ステップSCが実行される。
【0121】
前回値対比表示ステップSCは、先ず、共有メモリ51から前回実行時に設定された診断コードを全件取得し(SC1)、当該取得した前回実行時の診断コードの正常件数及び異常件数を、正常数異常数表示ステップSBを介して算出する(SC2)。
【0122】
続いて、前回値対比表示ステップSCは、前回実行時の診断コードの正常件数と、当該(今回)実行時の診断コードの正常件数を比較し(SC3)、前回実行時の正常件数よりも今回実行時の正常件数が多い場合は、正常値の増減は正常と判定し(SC4)、前回実行時の正常件数よりも今回実行時の正常件数が少ない場合は、正常値の増減は異常であると判定する(SC5)。
【0123】
続いて、前回値対比表示ステップSCは、前回実行時の診断コードの異常件数と、当該(今回)実行時の診断コードの異常件数を比較し(SC6)、前回実行時の異常件数よりも今回実行時の異常件数が少ない場合は、異常値の増減は正常と判定し(SC7)、前回実行時の異常件数よりも今回実行時の異常件数が少ない場合は、異常値の増減は異常であると判定する(SC8)。
【0124】
前回値対比表示ステップSCは、ステップSC1〜SC8の処理結果得られた、正常値の判定結果と異常値の判定結果を入出力モジュール83に出力する。入出力モジュール83は、当該入力された正常値の判定結果と異常値の判定結果を、例えば、図14(a)に示すように、GUIモジュール82を介して、診断結果表示画面の右上部に表示する(SZ2)。
【0125】
図14(a)は、正常値の判定結果が正常であり、異常値の判定結果が異常である場合の診断結果表示画面を例示している。即ち、正常値を示す診断コードが増加した場合には、特に問題はないので色付けせずに表示し、異常値を示す診断コードが増加した場合には、色付けして表示することにより、異常が増えたことを一目で判断することができるようになる。
【0126】
図11(a)に示すように、前回値対比表示ステップSCが終了すると、診断コード表示処理部4により、診断コード意味情報表示ステップSDが実行される。
【0127】
診断コード内容情報表示ステップSDは、先ず、ソースファイルに定義されたコメント情報テーブルを読み込み、当該コメント情報テーブルを共有メモリ51に設定する(SD1)。続いて、処理件数を示す変数iを0に設定し(SD2)、診断コード収集ステップSAで取得した診断コードの値が異常値を示しているかどうかを1件ずつ判定する(SD3)。診断コードの値が異常値を示す場合は、共有メモリ51に設定されたコメント情報テーブルに基づいて、バイトインデックス値及びビット値が示す表示文字列を取得する(SD4)。
【0128】
診断コード内容情報表示ステップSDは、診断コード全件分に対してステップSD3,SD4の処理を繰り返し(SD5,SD6)、異常値を示す診断コードの表示文字列を入出力モジュール83に出力する。入出力モジュール83は、当該入力された異常値を示す診断コードの表示文字列を、例えば、図14(a)に示すように、GUIモジュール82を介して、診断結果表示画面の中部のように表示する(SZ3)。
【0129】
尚、図14(a)に示すように、前回の診断コードに対しても診断コード内容情報表示ステップSDを実行し、ステップSZ3を実行する前に当該前回の診断コードの異常値と今回の診断コードの異常値を対比して、残存している異常値を示す診断コードの表示文字列を、入出力モジュール83、及び、GUIモジュール82を介して、診断結果表示画面の下部のように表示しても構わない。
【0130】
図12に示すように、診断コード内容情報表示ステップSDが終了すると、診断コード表示処理部4により、変動情報表示ステップSEが実行される。
【0131】
変動情報表示ステップSEは、先ず、処理件数を示す変数iを0に設定し(SE1)、前回値対比表示ステップSCで取得した前回実行時の診断コードの値が未判定を示す値であるかどうかを1件ずつ判定する(SE2)。前回実行時の診断コードの値が未判定を示す値である場合は、当該診断コードの表示色を例えば白色に設定し(SE4)、当該診断コードの値が未判定を示す値でない場合は、さらに当該診断コードの値が正常を示す値であるかどうかを判定し(SE3)、当該診断コードの値が正常を示す値の場合は、当該診断コードの表示色を例えば水色に設定し(SE5)、当該診断コードの値が正常を示す値でない場合は、当該診断コードの表示色を例えばマゼンダに設定する(SE6)。尚、ステップSE4, SE5, SE6で設定する表示色は、例示にすぎず、別の色であっても構わない。
【0132】
変動情報表示ステップSEは、前回実行時の診断コード全件分に対してステップSE2〜SE6の処理を繰り返した後(SE7,SE8)、図13に示すように、処理件数を示す変数iを0に設定しなおし(SE9)、前回実行時の診断コードと今回実行時の診断コードの比較を行う(SE10)。
【0133】
前回実行時の診断コードが正常値を示さない場合であって、今回実行時の診断コードが正常値を示すとき(図13(1))は、今回診断コードの表示色を例えば青色に設定し(SE13)、前回実行時の診断コードが異常値を示さない場合であって、今回実行時の診断コードが異常値を示すとき(図13(2))は、今回診断コードの表示色を例えば赤色に設定する(SE14)。また、それ以外のとき(図13(1)(2)以外)は、さらに今回実行時の診断コードの値が未判定を示す値であるかどうかを判定し(SE11)、今回実行時の診断コードの値が未判定を示す値である場合は、今回診断コードの表示色を例えば白色に設定し(SE15)、今回実行時の診断コードの値が未判定を示す値でない場合は、さらに、今回実行時の診断コードの値が正常を示す値であるかどうかを判定し(SE12)、今回実行時の診断コードの値が正常を示す値である場合は、今回診断コードの表示色を例えば水色に設定し(SE16)、今回実行時の診断コードの値が正常を示す値でない場合は、今回診断コードの表示色を例えばマゼンダに設定する(SE17)。尚、ステップSE13〜SE17で設定する表示色は、例示にすぎず、別の色であっても構わない。
【0134】
変動情報表示ステップSEは、前回実行時の診断コードあるいは今回実行時の診断コード全件分に対して、ステップSE10〜SE17の処理を繰り返し(SE18,SE19)、前回実行時及び今回実行時の診断コードの表示色を入出力モジュール83に出力する。入出力モジュール83は、前回実行時及び今回実行時の診断コードの表示色を、例えば、図14(b)に示すように、GUIモジュール82を介して、診断結果表示画面の中下部のように一覧表示する(SZ4)。
【0135】
尚、変動情報表示ステップSEの構成を変更して、ステップ10による処理分岐を細分化し、前回の診断コード値と今回の診断コード値がともに異常値を示すような場合であっても、診断コードのビット値に相違がある場合には、今回実行時の診断コードの表示色に別の新たな色を設定するように構成しても構わない。
【0136】
即ち、上述の構成に基づいて、複数の演算処理としてのIOドライバ61と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理としての自己診断プログラム69を含む、制御系モジュール6を評価対象プログラムとして、IOドライバ61を変更した場合に制御系モジュール6のプログラムの変更を検証する方法は、以下の通りとなる。
【0137】
先ず、プログラム開発部DMを利用して任意のIOドライバを変更する(プログラム変更ステップ)。
【0138】
続いて、プログラム変更ステップでIOドライバ61が変更された制御系モジュール6をプログラム実行部2により実行し、自己診断プログラム69で生成された診断コードを共有メモリ51に記憶する(診断コード記憶ステップ)。
【0139】
続いて、診断コード記憶ステップで共有メモリ51に記憶された診断コードを表示部としての診断結果表示画面に表示する(診断コード表示ステップ)。
【0140】
続いて、診断コード表示ステップで診断結果表示画面に表示された診断コードに基づいて、当該診断コードに対応するIOドライバ61を、プログラム開発部DMを利用して修正変更する(プログラム再変更ステップ)。
【0141】
続いて、プログラム変更ステップからプログラム再変更ステップまでの各ステップを繰り返して制御系モジュール6に含まれるIOドライバ61の変更を確認する(プログラム変更確認ステップ)。
【0142】
尚、プログラム変更確認ステップでプログラム変更ステップからプログラム再変更ステップまでの各ステップを繰り返す際に、診断コード表示ステップは、共有メモリ51に記憶された過去の診断コードと今回の診断コードを対比して、診断コードに設定された表示色の情報及び診断コード内容を示す表示文字列に変換した情報を変動情報として生成し、当該変動情報を診断結果表示画面に表示する。したがって、プログラム再変更ステップで、診断結果表示画面に表示された診断コードの変動情報を利用して、効率よくプログラムの変更を検証することができる。
【0143】
以下、別実施形態を説明する。上述した実施形態では、制御プログラムを変更した場合における前回実行時と今回実行時の診断コードを対比して、プログラムの変更を検証する形態について説明したが、さらに、過去にプログラム変更の検証を行った際の正常値及び異常値の件数を表示して、制御プログラムの品質を把握し、例えば、品質管理だけでなく、進捗管理にも活用することができる。
【0144】
詳述すると、上述の構成に加えて、診断コード表示処理部4は、過去の診断コードと今回の診断コードを対比して、横軸に時間、縦軸に異常と診断された診断コードの数をプロットしたバーンダウンチャートを、入出力モジュール83及びGUIモジュール82を介して表示するバーンダウンチャート表示画面を備えている。
【0145】
診断結果表示画面は、上述の構成に加えて、バーンダウンチャート表示画面を起動するための起動ボタンを備えている。操作者は、診断結果表示画面を閲覧時に起動ボタンを押下すると、バーンダウンチャート表示画面を表示する。
【0146】
このとき、図15に示すように、診断コード表示処理部4は、バーンダウンチャート表示ステップSFを実行する。バーンダウンチャート表示ステップSFは、先ず、共有メモリ51に設定された過去の実行時及び今回実行時の診断コードを取得後(SF1)、処理件数を示す変数jを0に設定し(SF2)、j回目の実行時の診断コードに対して、正常数異常数表示ステップSBを実行する(SF3)。
【0147】
バーンダウンチャート表示ステップSFは、ステップSF1で取得した過去の実行時及び今回実行時の全ての診断コードの各実行時の診断コードに対して、ステップSF3の処理を繰り返し(SF4,SF5)、各実行時の診断コードに対する正常件数及び異常件数を入出力モジュール83に出力する。入出力モジュール83は、当該入力された各実行時の診断コードに対する正常件数及び異常件数を、GUIモジュール82を介して、バーンダウンチャート表示画面に表示する(SZ5)。
【0148】
バーンダウンチャート表示画面は、例えば、図16(a)に示すように、異常件数のみを表示しても構わないし、図16(b)に示すように、異常件数及び正常件数を重ねて表示しても構わない。また、図16(b)に示すように、凡例にチェックボックス等を設けて、正常値及び異常値の表示可否を決定するように構成しても構わない。
【0149】
即ち、バーンダウンチャート表示画面に表示された診断コードの正常値件数及び異常値件数の移り変わりを一目で把握することができ、制御プログラムの品質の把握を効率よく行え、また、異常件数が収束する時点を予測する等により進捗管理にも活用することができる。
【0150】
尚、バーンダウンチャート表示ステップSFのステップSF3の処理を変更して、j回目の実行時の診断コードに対して、正常数異常数表示ステップSBを実行した後に、前回値対比表示ステップSC及び変動情報表示ステップを実行して、バーンダウンチャート表示画面にプロットする正常値及び異常値の表示色を変更可能に構成しても構わない。
【0151】
また、上述の実施形態における、診断コード収集ステップSAから正常数異常数表示ステップSB、前回値対比表示ステップSC、診断コード内容情報表示ステップSD、変動情報表示ステップSEに至るまでの一連の処理を、過去にプログラム変更の検証を実行した回数分繰り返して行うように構成を変更し、診断結果情報表示画面に過去実行時の全ての診断コードが閲覧可能に表示されるように構成しても構わない。
【0152】
上述した実施形態では、演算処理としてのIOドライバ61と、診断処理としての自己診断プログラム69を含む、車両を模擬したシミュレーションシステムにおける制御系モジュール6を評価対象プログラムとしていたが、評価対象プログラムの構成はこれに限るものではない。
【0153】
例えば、航空機、電車、家電製品等のマイクロコンピュータに組み込まれるプログラムをパソコンPC上で稼働可能に模擬した制御プログラムを評価対象プログラムとして、マイクロコンピュータに内蔵されたRAM及び不揮発性メモリへの入出力処理を模擬した演算処理と、当該RAM及び不揮発性メモリを模擬した仮想レジスタに設定された値に基づいて、演算処理の異常の有無を検出する自己診断処理を含むように構成しても構わない。
【0154】
また、評価対象プログラムは、マイクロコンピュータに組み込まれる制御プログラムに限らず、パソコンPC上で稼働するソフトウェアを評価対象プログラムとして構成しても構わない。
【0155】
例えば、既存のソフトウェアをバージョンアップする場合において、新たに作成するモジュールのソースコードに、当該モジュールに入出力されるデータが所定の閾値を超えるような場合には入出力異常と判定する等の異常の有無を判定する等の異常判定ロジックを有し、当該判定結果を不揮発性メモリ、あるいは、不揮発性メモリに代えてハードディスク上のファイルとして記憶する関数を埋め込む。そして、当該新たなモジュールを組み込んだバージョンアップされたソフトウェアを動作させた場合に、不揮発性メモリあるいはファイルに出力された異常の有無を画面に表示可能な画面表示プログラムを作成する。
【0156】
この場合、新たに作成するモジュールを本発明による演算処理とし、ソースコードに埋め込んだ関数を本発明による診断処理とし、当該新たに作成されたモジュールが組み込まれたソフトウェアを本発明による評価対象プログラムとし、不揮発性メモリあるいはファイルに出力された異常の有無を画面に表示可能なプログラムを本発明による診断コード記憶処理部及び診断コード表示処理部として構成することができる。尚、当該ソフトウェアを実行するための、メニュー画面等が本発明によるプログラム実行部として構成されることは言うまでもない。
【0157】
尚、上述の実施形態において、プログラム変更検証部PMは、シミュレーション実行部SMと同じパソコンPC上に構成されていたが、シミュレーション実行部SMを備えたパソコンと、プログラム変更検証部PMを備えたパソコンとを、LANを介して接続するように構成されていても構わない。また、操作表示部HSTがシミュレーション実行部SMと同じパソコン上に構成されていても構わない。
【0158】
即ち、本発明を構成するプログラム変更検証部PM、シミュレーション実行部SM、プログラム開発部DM、操作表示部HST、あるいは、GUIモジュール82等の機能ブロックの配置箇所を適宜設計事項として、適切なパソコンに配置するよう変更しても構わない。
【0159】
上述した実施形態は、本発明を実現する一実施例を説明するものであり、各部の具体的な構成は、本発明の作用効果を奏する限りにおいて、適宜変更設計することが可能である。
【符号の説明】
【0160】
1:CPUボード
2:プログラム実行部
3:診断コード記憶処理部
4:診断コード表示処理部
5:システム管理モジュール
6:制御系モジュール
7:被制御系モジュール
51:共有メモリ
52:システムタイマ
53:イベントリスト
54:仮想IOレジスタ
55:割込管理部
56:外部IOデータ部
61:IOドライバ(制御系モジュール)
62:割込コントローラ
63:仮想内部レジスタ
68:制御ソフトウェア
69:自己診断プログラム
71:IOドライバ(被制御系モジュール)
DM:プログラム開発部
HST:操作表示部
PC:パーソナルコンピュータ
PM:プログラム変更検証部
SA:診断コード収集ステップ
SB:正常数異常数表示ステップ
SC:前回値対比表示ステップ
SD:診断コード内容情報表示ステップ
SE:変動情報表示ステップ
SF:バーンダウンチャート表示
SM:シミュレーション実行部

【特許請求の範囲】
【請求項1】
複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部と、
前記プログラム実行部で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部と、
前記診断コード記憶処理部によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部と、
を備え、
前記診断コード表示処理部は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証装置。
【請求項2】
前記評価対象プログラムがマイクロコンピュータで実行される機器の制御プログラムであり、前記演算処理が、前記評価対象プログラムを当該マイクロコンピュータのIO処理環境を模擬するシミュレータ上で実行するために必要なIO処理であり、前記診断処理が当該制御プログラムにより制御される機器の異常に対応する診断コードを生成する自己診断処理であることを特徴とする請求項1記載のプログラム変更検証装置。
【請求項3】
前記診断コード表示処理部は、前回の診断コードと今回の診断コードを対比して、診断コード毎に変動した診断コードの表示形態を異ならせて表示することを特徴とする請求項1または2記載のプログラム変更検証装置。
【請求項4】
前記診断コード表示処理部は、過去の診断コードと今回の診断コードを対比して、横軸に時間、縦軸に異常と診断された診断コードの数をプロットしたバーンダウンチャートを表示することを特徴とする請求項1から3の何れかに記載のプログラム変更検証装置。
【請求項5】
複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含む評価対象プログラムに対して、任意の演算処理を変更するプログラム変更ステップと、
前記プログラム変更ステップで演算処理が変更された評価対象プログラムを実行した結果、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶ステップと、
前記診断コード記憶ステップでメモリに記憶された診断コードを表示部に表示する診断コード表示ステップと、
前記診断コード表示ステップで表示部に表示された診断コードに基づいて、当該診断コードに対応する演算処理を変更するプログラム再変更ステップと、
前記プログラム変更ステップから前記プログラム再変更ステップまでの各ステップを繰り返して評価対象プログラムに含まれる演算処理の変更を確認するプログラム変更確認ステップと、
を含み、
前記診断コード表示ステップは、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証方法。

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2010−224758(P2010−224758A)
【公開日】平成22年10月7日(2010.10.7)
【国際特許分類】
【出願番号】特願2009−69907(P2009−69907)
【出願日】平成21年3月23日(2009.3.23)
【出願人】(000237592)富士通テン株式会社 (3,383)
【Fターム(参考)】