(57)【要約】【課題】プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供する。【解決手段】複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部２と、前記プログラム実行部２で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部３と、前記診断コード記憶処理部３によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部４と、を備え、前記診断コード表示処理部４は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証装置。【選択図】図４
2010224758.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部と、
前記プログラム実行部で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部と、
前記診断コード記憶処理部によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部と、
を備え、
前記診断コード表示処理部は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証装置。
【請求項２】
前記評価対象プログラムがマイクロコンピュータで実行される機器の制御プログラムであり、前記演算処理が、前記評価対象プログラムを当該マイクロコンピュータのＩＯ処理環境を模擬するシミュレータ上で実行するために必要なＩＯ処理であり、前記診断処理が当該制御プログラムにより制御される機器の異常に対応する診断コードを生成する自己診断処理であることを特徴とする請求項１記載のプログラム変更検証装置。
【請求項３】
前記診断コード表示処理部は、前回の診断コードと今回の診断コードを対比して、診断コード毎に変動した診断コードの表示形態を異ならせて表示することを特徴とする請求項１または２記載のプログラム変更検証装置。
【請求項４】
前記診断コード表示処理部は、過去の診断コードと今回の診断コードを対比して、横軸に時間、縦軸に異常と診断された診断コードの数をプロットしたバーンダウンチャートを表示することを特徴とする請求項１から３の何れかに記載のプログラム変更検証装置。
【請求項５】
複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含む評価対象プログラムに対して、任意の演算処理を変更するプログラム変更ステップと、
前記プログラム変更ステップで演算処理が変更された評価対象プログラムを実行した結果、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶ステップと、
前記診断コード記憶ステップでメモリに記憶された診断コードを表示部に表示する診断コード表示ステップと、
前記診断コード表示ステップで表示部に表示された診断コードに基づいて、当該診断コードに対応する演算処理を変更するプログラム再変更ステップと、
前記プログラム変更ステップから前記プログラム再変更ステップまでの各ステップを繰り返して評価対象プログラムに含まれる演算処理の変更を確認するプログラム変更確認ステップと、
を含み、
前記診断コード表示ステップは、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示することを特徴とするプログラム変更検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変更検証装置及びプログラム変更検証方法に関する。
【背景技術】
【０００２】
機器を制御するためのマイクロコンピュータに組み込まれる制御プログラムを先行開発する場合、実在しない機器をコンピュータで模擬演算するシミュレータを用いて開発中の制御プログラムのロジック評価等が行なわれている。
【０００３】
例えば、車両のエンジンやブレーキ等を制御するマイクロコンピュータが組み込まれたＥＣＵ（Electronic Control Unit）の制御プログラムを実際の車両に先行して開発する場合、車両の動作をコンピュータで模擬演算する車両シミュレータとＥＣＵを接続して開発中の制御プログラムのロジック評価等を行なうシミュレーションシステムが構築されている。
【０００４】
特許文献１には、このようなシミュレーションシステムとして、ＨＩＬＳ（Hardware In the Loop Simulation）システムやＳＩＬＳ（Software In the Loop Simulation）システムが開示されている。
【０００５】
ＨＩＬＳシステムは、実ＥＣＵと車両シミュレータを接続して開発中の制御ソフトウェアを検証するシステムであり、ＳＩＬＳシステムは、実ＥＣＵに替えてＥＣＵをコンピュータで模擬するＥＣＵシミュレータと車両シミュレータをパーソナルコンピュータ等の汎用コンピュータ上に構築して開発中の制御ソフトウェアを検証するシステムである。
【０００６】
ＨＩＬＳシステムは、図１に示すように、ＥＣＵから出力された電気信号をＩ／Ｆボードを介して論理信号に変換し、車両動作を模擬するソフトウェアを実行する高性能なＣＰＵにその論理信号を入力して演算処理し、演算結果である論理信号を再びＩ／Ｆボードを介して電気信号に変換してＥＣＵにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ＥＣＵ、Ｉ／Ｆボード、高性能ＣＰＵ等のハードウェアによるフィードバックループが構築されている。
【０００７】
ＳＩＬＳシステムは、図２に示すように、ＥＣＵを構成するマイクロコンピュータや周辺回路の動作を模擬するソフトウェアを高性能なＣＰＵで実行する模擬ＥＣＵを構築し、模擬ＥＣＵから出力された論理信号を、Ｉ／Ｆボードを模擬するＩ／Ｆモデルを介して車両動作を模擬するソフトウェアを実行する高性能なＣＰＵに入力して演算処理し、演算結果である論理信号を再びＩ／Ｆモデルを介して模擬ＥＣＵにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ＥＣＵ、Ｉ／Ｆボード、車両の全てがソフトウェアで実現され、ソフトウェアによるフィードバックループが構築されている。
【０００８】
さらに、ＳＩＬＳシステムでは、図３に示すように、ＥＣＵのハードウェアや車両モデルのＩ／Ｆボードを詳細に模擬するソフトウェアに替えて、制御プログラムを実行するＥＣＵに組み込まれたマイクロコンピュータのＩＯに関する論理演算部等を簡易的に模擬する制御系モジュールと、車両の動作を模擬する車両モデルでなる被制御系モジュールを構築し、夫々で発生した所定のイベントを時系列的に管理して、イベント毎に模擬ＥＣＵと車両モデルをステップ的に動作させるシステム管理モジュールを備えた演算周期が変動するイベント駆動型のシステムも構築されている。
【０００９】
このようなＨＩＬＳシステムやＳＩＬＳシステムで構成されるシミュレーション実行部と、当該シミュレーション実行部と同期して動作し、シミュレーション実行部にシミュレーション条件を引き渡すとともに、シミュレーション実行部からシミュレーション結果を受け取る入出力モジュールと、シミュレーション条件を入力する操作画面、またはシミュレーション結果を示す出力画面を生成して表示部に表示するユーザインタフェースモジュールとを備えてシミュレーションシステムが実現されている。
【００１０】
ＨＩＬＳシステムは、既存のＥＣＵを用いて制御ソフトウェアを開発する場合に有用であり、ＳＩＬＳシステムは、ターゲットとなるＥＣＵが無くても制御ソフトウェアを開発できる点で有用である。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００７−５２５８０号公報
【特許文献２】特開２００５−５９６７０号公報
【非特許文献】
【００１２】
【非特許文献１】日経ＢＰ社、２００８．５．２１発行、カー・エレクトロニクスのすべて２００８、多様化するＨＩＬＳ（２４４頁〜２４９頁）
【発明の概要】
【発明が解決しようとする課題】
【００１３】
図３に示すイベント駆動型のＳＩＬＳシステムは、評価対象である車両の制御ソフトウェアを実行する制御系モジュールと、当該制御ソフトウェアにより制御される車両を模擬する被制御系モジュールと、制御系モジュールまたは被制御系モジュールの何れかで発生するイベントを管理し、時系列的に発生するイベントに基づいて制御系モジュールまたは被制御系モジュールを駆動するシステム管理モジュール５を備えている。
【００１４】
イベント駆動型のＳＩＬＳシステムをシミュレータとして採用する場合、マイクロコンピュータで実行される機器の制御プログラムである評価対象プログラムを制御系モジュールでそのままの状態で実行することができないため、ターゲットとなるマイクロコンピュータに対応したＩＯ処理等の演算処理を変更する必要がある。
【００１５】
当該マイクロコンピュータのＩＯ処理環境等の動作環境を、シミュレータ上で模擬するためである。
【００１６】
例えば、エンジンから出力されたクランクパルス信号は、通常マイクロコンピュータのパルス入力ポートで受信され、当該パルス入力ポートにクランクパルス信号のエッジが入力されると、ＣＰＵに対してクランクパルス割込み処理が起動され、当該パルス入力ポートに組み込まれたキャプチャレジスタの値がクランクパルス周期として当該割込み処理で読み込まれる。
【００１７】
しかし、パーソナルコンピュータ等で構成されるシミュレータには、パルス入力ポートが存在しないため、エンジンを模擬する被制御系モジュールで発生したクランクパルス信号を認識してクランクパルス信号のエッジで評価対象プログラムの割込み処理を起動するためのハードウェアモデルを構築するとともに、評価対象プログラム側にハードウェアモデルから起動される割込み処理に対応して割込み処理を起動するＩＯドライバを構築する必要がある。
【００１８】
即ち、評価対象プログラムに実装したロジックを評価するためには、ロジックの入出力処理に関連するＩＯドライバ及びハードウェアモデルを構築する労力が必要となり、ＩＯドライバ及びハードウェアモデルを構築してはじめて、シミュレータのデバッグ、即ち、評価対象プログラムとしての制御プログラムとＩＯドライバを含む制御系モジュールと、ハードウェアモデルを含む被制御系モジュールの全体を動作させ、実機と同様の動作をすることを検証することができる。
【００１９】
実際にシミュレータを動作させた結果、異常が発生していた場合は、評価対象プログラムのロジック、ＩＯドライバ、ハードウェアモデルの何れかから、当該異常の発生原因を特定して、特定した箇所の修正を行う。さらに、修正後に再び動作検証を行い、当該動作検証結果に基づいてプログラムの修正を行う。これを繰り返して、プログラム全体の品質を高めていくことができる。
【００２０】
そこで、例えば、特許文献２では、制御系モジュールの故障診断で用いているダイアグノシスコードを評価指標として活用し、過去の動作検証時に異常を示したダイアグノシスコードと、現状の動作検証時に異常を示したダイアグノシスコードの両方を専用の携帯端末上の画面に表示して、過去の動作検証時に発生した異常内容と現状の動作検証時に発生した異常内容を対比して目視可能にすることが提案されている。
【００２１】
この場合、過去の動作検証時に発生した異常内容と現状の動作検証時に発生した異常内容を対比して目視可能であるため、プログラムの変更により発生した異常内容の変動内容を把握することができるため、プログラムの変更の良否を効率よく判断することができる。しかし、ダイアグノシスコードは、リソース制限が厳しいマイクロコンピュータの制御プログラムにおいては、ＲＡＭ上のある所定領域に連続したビットの値で構成されるため、開発者等が一見してダイアグノシスコードが示す内容を解釈するのは困難であった。また、前回の動作検証時と現状の動作検証時のそれぞれにおける、異常を示すビットの値を一つずつ目視により対比する労力が必要であった。
【００２２】
本発明の目的は、上述した従来の問題点に鑑み、プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供する点にある。
【課題を解決するための手段】
【００２３】
上述の目的を達成するため、本発明によるプログラム変更検証装置の特徴構成は、複数の演算処理と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理とを含み、任意の演算処理が変更された評価対象プログラムを実行するプログラム実行部と、前記プログラム実行部で実行されたときに、前記診断処理で生成された診断コードをメモリに記憶する診断コード記憶処理部と、前記診断コード記憶処理部によりメモリに記憶された診断コードを表示部に表示する診断コード表示処理部と、を備え、前記診断コード表示処理部は、メモリに記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、当該変動情報を表示部に表示する点にある。
【００２４】
上述の構成によれば、診断コード表示処理部により、前回評価対象プログラムの複数の演算処理を実行した際の診断コードと、当該プログラムに変更を加えたプログラムの複数の演算処理を実行した際の診断コードと、を対比して生成された診断コードの変動情報を表示可能であるため、プログラムを変更することにより生じた前回の診断処理結果からの変動情報を効率よく把握することができるようになる。
【発明の効果】
【００２５】
以上説明した通り、本発明によれば、プログラムの変更内容を効率よく評価できるプログラム変更検証装置を提供することができるようになった。
【図面の簡単な説明】
【００２６】
【図１】ＨＩＬＳシステムを用いたシミュレーションシステムの説明図
【図２】周期駆動型のＳＩＬＳシステムを用いたシミュレーションシステムの説明図
【図３】イベント駆動型のＳＩＬＳシステムを用いたシミュレーションシステムの説明図
【図４】ＳＩＬＳシステムを用いたシミュレーションシステムのブロック構成図
【図５】ＳＩＬＳシステムを構成する各モジュールの説明図
【図６】イベント駆動型のＳＩＬＳシステムの動作を示すタイミングチャート
【図７】イベントリストによるイベント管理に関する説明図
【図８】システム管理モジュールの動作を示すフローチャート
【図９】正常及び異常を示す診断コードの件数を算出する動作を示すフローチャート
【図１０】前回実行時及び今回実行時の診断コードの正常件数及び異常件数を対比する動作を示すフローチャート
【図１１】診断コードに対応する文字列の表示を説明する説明図であり、（ａ）は、診断コードを文字列表示する動作を示すフローチャート、（ｂ）診断コードと表示文字列の変換用テーブルの構成を例示する説明図
【図１２】前回実行時の診断コードの表示色を設定する動作を示すフローチャート
【図１３】前回実行時と今回実行時の診断コードを対比して、今回実行時の診断コードの表示色を設定する動作を示すフローチャート
【図１４】変動情報を表示した画面の外観図であり、（ａ）は、正常件数及び異常件数の変動情報を表示した画面の外観図、（ｂ）は、各診断コードの変動情報を表示した画面の外観図
【図１５】バーンダウンチャートを画面に表示する動作を示すフローチャート
【図１６】バーンダウンチャートを表示した画面の外観図であり、（ａ）は、異常件数をプロットしたバーンダウンチャートを表示した画面の外観図、（ｂ）は、正常件数と異常件数を重ねてプロットしたバーンダウンチャートを表示した画面の外観図
【発明を実施するための形態】
【００２７】
以下に、本発明によるプログラム変更検証装置及びプログラム変更検証方法の実施形態について説明する。
【００２８】
図３に示すように、所定の処理速度で制御システムを模擬演算するシミュレーション実行部ＳＭと、シミュレーション実行部ＳＭで実行されるシミュレーションを管理する操作表示部ＨＳＴがＬＡＮで接続されてシミュレーションシステムが構成されている。
【００２９】
シミュレーション実行部ＳＭ、及び、操作表示部ＨＳＴは、夫々所定のオペレーティングシステム（以下、「ＯＳ」と記す。）の管理下でシミュレーション用のソフトウェアが実行される二台のパーソナルコンピュータＰＣによって実現されている。
【００３０】
図４に示すように、シミュレーション実行部ＳＭは、評価対象である車両の制御ソフトウェアを実行する制御系モジュール６と、当該制御ソフトウェアにより制御される車両を模擬する被制御系モジュール７と、制御系モジュール６または被制御系モジュール７の何れかで発生するイベントを管理し、時系列的に発生するイベントに基づいて制御系モジュール６または被制御系モジュール７を駆動するシステム管理モジュール５を備えたイベントドリブン型のＳＩＬＳシステムである。
【００３１】
各モジュール５，６，７は、所定のＯＳ１１上で動作するパーソナルコンピュータＰＣのＣＰＵボード１上のメモリに格納されたシミュレーション用のソフトウェア及び制御ソフトウェアと、ＣＰＵタイマ１２と、ＣＰＵタイマ１２に従ってそれらソフトウェアを実行する高性能ＣＰＵにより具現化される。
【００３２】
システム管理モジュール５は、制御系モジュール６または被制御系モジュール７に関連して発生するイベントの起動時刻を設定管理するシステムタイマ５２と、制御系モジュール６と被制御系モジュール７との間で入出力データ（ＩＯデータ）を遣り取りするための共有メモリ５１とを備え、システムタイマ５２の値に基づいて各イベントに対応する制御系モジュール６または被制御系モジュール７の対応ブロックを起動する。
【００３３】
制御系モジュール６と被制御系モジュール７との間の入出力情報の受け渡しは、システム管理モジュール５を経由して行われる。制御系モジュール６とシステム管理モジュール５との間の入出力情報には、“起動（イベント時刻付）”や、“ＩＯデータ（時刻付）”や、“ＩＯデータ”が含まれる。システム管理モジュール５と被制御系モジュール７の間の入出力情報には、“起動（時刻付）”や、“ＩＯデータ（時刻付）”や、“ＩＯデータ”が含まれる。
【００３４】
システムタイマ５２は、当該シミュレーション実行部ＳＭの基準時刻を規定するもので、システム管理モジュール５により起動制御される制御系モジュール６及び被制御系モジュール７の所定の割込み処理ブロックは、システムタイマ５２に基づいて動作する。つまり、制御系モジュール６と被制御系モジュール７の夫々はシステムタイマ５２に基づいて同一の仮想時間上で動作する。
【００３５】
制御系モジュール６と被制御系モジュール７には、共有メモリ５１との間で、各イベントに関する時刻付のＩＯデータを書き込みまたは読み出す制御系モジュール側ＩＯドライバ６１及び被制御系モジュール側ＩＯドライバ７１を備えている。
【００３６】
例えば、制御系モジュール側ＩＯドライバ６１から共有メモリ５１に書き込まれる点火信号や燃料噴射信号等のパルス信号や、被制御系モジュール側ＩＯドライバ７１から共有メモリ５１に書き込まれるエンジン回転数や速度センサ信号等のパルス信号等のタイミング依存のＩＯデータは、システムタイマ５２の時刻と関連付けられて管理される（図中点線枠１３）。
【００３７】
また、例えば、制御系モジュール側ＩＯドライバ６１及び被制御系モジュール側ＩＯドライバ７１の双方において共有メモリ５１に読み書きされる、インテリジェントＩＣとの通信等におけるシリアル通信データや、ＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等の入出力データ等のタイミング非依存のＩＯデータは、システムタイマ５２の時刻と関連付けられることなく管理される（図中点線枠１４）。
【００３８】
つまり、システム管理モジュール５は、制御系モジュール６または被制御系モジュール７から共有メモリ５２に書き込まれたＩＯデータに基づいて、イベントの要求を検出すると、それらのイベント要求を集約してシステムタイマ５２により更新される時刻を各イベントに設定して共有メモリ５１に蓄積する。
【００３９】
ここで、制御系モジュール６または被制御系モジュール７のＩＯドライバを介して共有メモリ５２に書き込まれるＩＯデータは、システム管理モジュール５により管理されるイベントに関するデータのみならず、制御系モジュール６と被制御系モジュール７の間で制御演算または模擬演算に必要なＩＯデータも含まれる。
【００４０】
詳述すると、図５に示すように、共有メモリ５１は、仮想ＩＯレジスタ５４とイベントリスト５３を備えて構成されている。
【００４１】
仮想ＩＯレジスタ５４は、ＩＯデータを記憶する外部ＩＯデータ部５６と、当該ＩＯデータの入出力対象となる割込み処理ブロックに対応する割込みフラグを管理する割込管理部５５を備えている。
【００４２】
外部ＩＯデータ部５６に設定されるＩＯデータは、制御系モジュール６または被制御系モジュール７が組み込まれる制御装置の実機（以下、「実機装置」と記す。）に対して入出力されるパルス信号やシリアル通信データ等の制御信号を模擬して構成され、パルス信号のエッジ発生時刻やエッジ周期、あるいは、電圧値や電流値等の当該制御信号が、実機装置の入出力ポートで解析された後にレジスタ等の記憶領域に設定される電子データとして構成されている。
【００４３】
イベントリスト５３は、制御系モジュール６または被制御系モジュール７へのＩＯデータの入出力要求を示すイベント毎に、イベントの起動時刻と、ＩＯデータを入力または出力することを示すイベント内容と、当該ＩＯデータを外部ＩＯデータ部５６に設定した割込み処理ブロックや当該ＩＯデータの種類等、ＩＯデータ及びイベントの要求元に関連する情報を示す取得元情報と、イベント発生に関連して起動対象の割込み処理ブロックを示すアクション情報と、を記憶するように構成されている。
【００４４】
システム管理モジュール５は、システムタイマ５２の値に基づいて、イベントリスト５３から直近の起動時刻を示すイベントを抽出し、当該イベントのアクション情報に基づいて、割込管理部５５に設定された割込みフラグに対応する割込み処理ブロックを起動対象とし、当該割込み処理ブロックに対応するＩＯドライバ６１−１,７１を起動して、当該割込み処理ブロックを起動したことを示す割込みフラグを設定する。また、システム管理モジュール５は、当該イベントの取得元情報に基づいて、起動した割込み処理ブロックに対して入出力するＩＯデータを外部ＩＯデータ部５６から取得し、当該取得したＩＯデータを当該ＩＯドライバ６１−１,７１に入力する。
【００４５】
図５に示すように、制御系モジュール６は、仮想内部レジスタ６３と、ＩＯドライバ６１と、割込コントローラ６２と、制御ソフトウェア６８と、を備えている。
【００４６】
仮想内部レジスタ６３は、制御系モジュール６が組み込まれるＥＣＵのマイクロコンピュータ（以下、「実機マイコン」と記す。）に備えられたＲＡＭ、不揮発性メモリ、及び入出力ポート等に設けられたＥＣＵ内部のレジスタを模擬して、ＣＰＵボード１上のメモリに構成されている。
【００４７】
仮想内部レジスタ６３は、割込み処理ブロックの処理内部で利用するデータの記憶領域としてだけでなく、割込み処理ブロックから制御系モジュール６の外部に対するＩＯデータの記憶領域としても利用されるように構成されている。
【００４８】
ＩＯドライバ６１−１は、割込コントローラ６２若しくは仮想内部レジスタ６３と共有メモリ５１との間に備えられ、割込み処理ブロックの実行時に実機マイコンに備えられた入出力ポートが実行する処理を模擬して構成されている。
【００４９】
具体的には、ＩＯドライバ６１−１は、システム管理モジュール５により起動され、さらに、外部ＩＯデータ部５６から取得したＩＯデータが入力されると、所定の割込み処理ブロックを起動するよう割込みコントローラ６２へ要求する。また、ＩＯドライバ６１−１は、入力されたＩＯデータを仮想内部レジスタ６３に設定するとともに、割込管理部５５の当該割込み処理ブロックに対応する割込みフラグをリセットする。
【００５０】
さらに、ＩＯドライバ６１−１は、後述する割込み処理ブロックからの制御系モジュール６の外部に対するＩＯデータの出力要求に基づいて、仮想内部レジスタ６３から当該ＩＯデータを取得し、当該取得したＩＯデータを外部ＩＯデータ部５６に設定するとともに、当該ＩＯデータの出力先の処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００５１】
ＩＯドライバ６１−１は、実機マイコンの入出力ポートの入出力処理に対応して、例えば、制御系モジュール６の外部からのパルス入力信号の入力処理を模擬するキャプチャ部６４、制御系モジュール６の外部へのパルス出力信号の出力処理を模擬するコンペア部６５、例えば外部のインテリジェントＩＣとシリアル通信データの通信を行う通信部６６、例えばＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、入力されるデータであればデータを読み込み、出力されるデータであればデータを出力するデータの入出力処理を兼用するＩＯポート部６７等を備えている。
【００５２】
割込コントローラ６２は、実機マイコンに備えられたＣＰＵにおける割込み処理制御を模擬して構成されている。具体的には、割込コントローラ６２は、ＩＯドライバ６１−１からの割込み処理ブロックの起動要求に基づいて、制御ソフトウェア６８に含まれる要求された割込み処理ブロックを起動するように構成されている。
【００５３】
ＩＯドライバ６１−２は、制御ソフトウェア６８と仮想内部レジスタ６３の間に備えられ、実機マイコンに備えられたＣＰＵにより実機マイコンに備えられたＲＡＭ、不揮発性メモリ及び入出力ポート等に設けられたＥＣＵ内部のレジスタをアクセスするレジスタ操作処理を模擬して構成されている。
【００５４】
具体的には、ＩＯドライバ６１−２は、割込み処理ブロックからのデータの入力要求に基づいて起動され、当該要求された入力データを仮想内部レジスタ６３から取得する。また、ＩＯドライバ６１−２は、割込み処理ブロックからのデータの出力要求に基づいて起動され、割込み処理ブロックの処理内部で利用するデータを仮想内部レジスタ６３に記憶する。
【００５５】
制御ソフトウェア６８は、実機マイコンに備えられたＣＰＵで稼働可能なオブジェクトコードで構成されている制御プログラムを模擬して構成され、複数の割込み処理ブロックを備え、ＣＰＵボード１上のＣＰＵで稼働可能なオブジェクトコードで構成されている。
【００５６】
割込み処理ブロックが制御系モジュール６の外部へＩＯデータを出力する場合、割込み処理ブロックは、ＩＯドライバ６１−２を介して仮想内部レジスタ６３へ当該ＩＯデータを設定した後、当該ＩＯデータの出力先の割込み処理ブロックへの出力処理を模擬するＩＯドライバ６１−１を起動し、当該ＩＯデータを出力先の割込み処理ブロックへ出力するよう要求する。
【００５７】
ＩＯドライバ７１は、「ハードウェアモデル」とも呼ばれ、制御系モジュール６に備えられたＩＯドライバ６１−１と同様に、所定の処理ブロックの実行時に、被制御系モジュール７に対応する実機装置に備えられた入出力ポートが実行する入出力処理を模擬して構成されている。
【００５８】
具体的には、ＩＯドライバ７１は、システム管理モジュール５により起動され、さらに、外部ＩＯデータ部５６から取得したＩＯデータが入力されると、割込管理部５５の当該入力ポートに対応する割込みフラグをリセットし、所定の処理ブロックを起動する。
【００５９】
さらに、ＩＯドライバ７１は、処理ブロックの実行中に、例えば、エンジン回転数や速度センサ信号等、制御系モジュール６に対して出力される制御信号を模擬したＩＯデータを取得し、当該ＩＯデータを外部ＩＯデータ部５６に設定するとともに、当該ＩＯデータの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００６０】
ＩＯドライバ７１は、被制御系モジュール７が示す実機装置に備えられた入出力ポートの入出力処理に対応して、例えば、制御系モジュール６のキャプチャ部６４に対するパルス信号の出力処理を模擬するパルス出力部７２−１、制御系モジュール６のコンペア部６５からのパルス信号の入力処理を模擬するパルス入力部７２−２、例えば外部のインテリジェントＩＣとシリアル通信データの通信を行うシリアル通信部７３−１、例えばＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、出力するデータであればデータを書き込み、入力されるデータであればデータを入力するデータの入出力処理を兼用するＩＯポート部７３−２等を備えている。
【００６１】
即ち、車両を制御するＥＣＵと、ＥＣＵにより制御される例えばエンジン等の車両側装置により構成される制御システムがシミュレーション実行部ＳＭで模擬される。尚、シミュレーション実行部ＳＭで模擬される制御システムは、エンジンシステムに限るものではなく、ブレーキシステム、変速機システム等の車両を構成する任意の機能ブロックが対象となる。
【００６２】
以下、上述の構成に基づいて、シミュレーション実行部ＳＭの動作例を、図６に示すタイミングチャートに基づいて説明する。
【００６３】
図６の（ａ），（ｂ），（ｃ），（ｄ）の上下の各欄は、夫々システム管理モジュール５、制御系モジュール６、被制御系モジュール７、システムタイマ５２の動作を示し、横軸は時間軸として、各イベントに対応して時刻ｔ０，ｔ１，・・・，ｔ５が付されている。さらに、各イベントの内容が記憶されたイベントリスト５３を図７に示す。
【００６４】
システム管理モジュール５は、先ず、イベントリスト５３に格納された直近のイベントを抽出すると、システムタイマ５２の時刻ｔ０で、内部で１ｍｓｅｃ．インタバルの割込みイベントを発生させる。
【００６５】
システム管理モジュール５は、イベントの取得元情報に基づいて、１ｍｓｅｃ．を示す値を外部ＩＯデータ部５６に設定し、イベントのアクション情報に基づいて、制御系モジュール６のインタバル割込み処理ブロックに対応する割込みフラグ及び被制御系モジュール７のメイン処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００６６】
尚、制御系モジュール６及び被制御系モジュール７は、それぞれの実機装置において、不定期に入出力ポートに対して入出力される割込み処理要求に応じるために、定時処理ブロックを所定周期で繰り返し実行し、各定時処理ブロックの実行後のタイミングと同期して、割込み処理要求に応じるように構成されている。この構成を模擬して、制御系モジュール６及び被制御系モジュール７では、各定時処理ブロックを模擬した、上述のインタバル割込み処理ブロックが実行される。以後、システム管理モジュール５では、後に発生する他のイベントと１ｍｓｅｃ．インタバルの割込みイベントが時系列的にスケジューリングされ、イベントリスト５３にスケジューリングしたデータが格納される。
【００６７】
図６及び図７に戻り、上述の割込みイベントに応じて、システム管理モジュール５は、インタバル割込み処理ブロックに対応したＩＯドライバ６１−１及びメイン処理ブロックに対応したＩＯドライバ７１を起動し、外部ＩＯデータ部５６に設定されたＩＯデータをＩＯドライバ６１−１に入力し、インタバル割込み処理ブロック及びメイン処理ブロックを起動したことを示す割込みフラグを割込管理部５５に設定する。
【００６８】
起動されたＩＯドライバ６１−１は、システム管理モジュール５から入力された１ｍｓｅｃ．を示すＩＯデータを制御系モジュール６の仮想内部レジスタ６３に設定し、割込コントローラ６２にインタバル割込み処理ブロックの起動を要求するとともに、割込管理部５５に設定されたインタバル割込み処理ブロックに対応する割込みフラグをリセットする。割込コントローラ６２は、ＩＯドライバ６１−１からの起動要求に基づいて、インタバル割込み処理ブロックを起動する。
【００６９】
一方、起動されたＩＯドライバ７１は、割込管理部５５に設定されたメイン処理ブロックに対応する割込みフラグをリセットして、メイン処理ブロックを起動する。
【００７０】
制御系モジュール６が１ｍｓｅｃ．のインタバル割込み処理ブロックの起動中に、図６のａ１のタイミングで、ＩＯドライバ６１−１を介して外部ＩＯデータ部５６に何らかのデータ（例えばＩＯパルス）を設定し、当該データの出力先の処理ブロックに対応する割込みフラグを割込管理部５５に設定すると、システム管理モジュール５はイベントリスト５３に当該データの出力に対応するイベントを追加する。
【００７１】
被制御系モジュール７でのメイン処理においても、図６のａ２のタイミングで、ＩＯドライバ７１を介して外部ＩＯデータ部５６に何らかのデータ（例えばＩＯパルス）を設定し、当該データの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部５５に設定すると、システム管理モジュール５はイベントリスト５３に当該データの出力に対応するイベントを追加する。
【００７２】
時刻ｔ０での被制御系モジュール７によるメイン処理にて、外部ＩＯデータ部５６にパルス発生時刻を含む何らかの出力データが設定され、割込管理部５５に制御系モジュール６の「パルス１出力」処理ブロックに対応する割込みフラグが設定されることにより、システム管理モジュール５が被制御系モジュール７からの「パルス１出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール７に対する「パルス１入力」イベントをイベントリスト５３に設定する。
【００７３】
システム管理モジュール５は、イベントリスト５３から当該設定したイベントを直近のイベントとして抽出した場合に、イベントの起動時刻、例えば時刻ｔ１で、「パルス１入力」イベントを発生させる。
【００７４】
システム管理モジュール５は、図６のｂ１のタイミングで、発生させた当該「パルス１入力」イベントのアクション情報に基づいて、パルス１出力ブロックに対応するＩＯドライバ６１−１を起動して、当該パルス１出力ブロックの要求時に外部ＩＯデータ部５６に設定されたパルス発生時刻及び何らかの出力データ（例えば、エンジン回転数）をＩＯドライバ６１−１に入力し、パルス１出力ブロックを起動したことを示す割込みフラグを割込管理部５５に設定する。
【００７５】
当該起動されたＩＯドライバ６１−１は、パルス１出力ブロックの起動を割込コントローラ６２に要求するとともに、入力されたＩＯデータを仮想内部レジスタ６３に設定し、割込管理部５５に設定されたパルス１出力ブロックに対応する割込みフラグをリセットする。
【００７６】
割込コントローラ６２は、ＩＯドライバ６１−１の要求に応じて、パルス１出力ブロックを起動する。
【００７７】
パルス１出力ブロックは、ＩＯドライバ６１−２を介して仮想内部レジスタ６３からＩＯデータを取得し、システムタイマ５２のタイマ値を基に演算処理を実行する。ここで、演算処理とは、例えば、被制御モジュール７からのＩＯデータとして取得したエンジン回転数を利用し、その回転数に応じた次回タイミングの算出を行うことである。
【００７８】
尚、演算処理中に何らかのデータを外部に対して出力する場合は、ＩＯドライバ６１−２と、仮想内部レジスタ６３と、ＩＯドライバ６１−１を介して外部ＩＯデータ部５６に当該出力するデータを設定し、割込管理部５５に出力先の処理ブロックに対応する割込みフラグを設定する。
【００７９】
システム管理モジュール５が、時刻ｔ１での制御系モジュール６のパルス出力処理による割込管理部５５の更新により「パルス２出力」要求を受けると、更新したシステムタイマ５２のタイマ値（図６のタイミングａ３）をパラメータとして、これに対応するパルス発生時刻を起動時刻とした「パルス２出力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ２にて、制御系モジュール６による「パルス２出力」処理ブロックを起動する。
【００８０】
一方、システム管理モジュール５が被制御系モジュール７から「パルス３出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール７に対する「パルス３入力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ３にて、制御系モジュール６による「パルス３入力」処理ブロックを起動する。
【００８１】
次にシステム管理モジュール５が制御系モジュール６から「パルス４出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした「パルス４出力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ４にて、制御系モジュール６による「パルス４出力」処理ブロックを起動する。
【００８２】
時刻ｔ５では、通信仕様に応じてシステム管理モジュール５内部で生成した「受信イベント」が発生すると、これに応答して制御系モジュール６は、それに対応した「受信」処理ブロックを起動する。
【００８３】
このようにイベントリスト５３にイベントが蓄積され、蓄積されたイベントに基づいて時系列的に制御系モジュール６または被制御系モジュール７の該当する割込み処理ブロックが起動されることによりシミュレーションが進められる。
【００８４】
ここで、システムタイマ５２で規定される制御系モジュール６または被制御系モジュール７における処理中の時間は零であり、例えば、時刻ｔ０のステップでは、時間Ｔは零となっており、イベントの発生の無い区間は処理をスキップしながら、時系列で順番にイベントが実行され、イベントに設定された時刻により時間がステップ状に進むように構成されているが、各イベントに対応した割込み処理ブロックが起動される制御系モジュール６または被制御系モジュール７ではＣＰＵタイマ１２によりイベントの実処理時間が計時される。
【００８５】
図８に示すように、システム管理モジュール５は、イベントリスト５３から直近のイベントを抽出し（Ｓ１１）、抽出したイベントの起動時刻にシステムタイマの値を更新し（Ｓ１２）、当該システムタイマ時刻で更新されるＩＯデータをＩＯドライバ６１,７１に設定して（Ｓ１３）、発生するイベント情報（割込み処理ブロックに対応する割込みフラグ等）を設定することにより（Ｓ１４）、対応する制御系モジュール６または被制御モジュール７の割込み処理ブロックを起動する（Ｓ１５）。
【００８６】
制御系モジュール６または被制御モジュール７の割込み処理ブロックは所定の演算処理を実行して、システム管理モジュール５に対してＩＯ情報の更新、イベントリスト５３の更新を要求する（Ｓ１６）。その後、処理が実行されたイベントをイベントリスト５３から削除する（Ｓ１７）。
【００８７】
図４に示すように、操作表示部ＨＳＴは、上述したシミュレーション実行部ＳＭに対してシミュレーション条件を出力するとともに、シミュレーション実行部ＳＭからシミュレーション結果を入力して、制御系モジュール６で実行される制御プログラムの評価を行うための装置である。
【００８８】
詳述すると、図４及び図５に示すように、操作表示部ＨＳＴは、シミュレーション実行部ＳＭと同期して動作し、シミュレーション実行部ＳＭにシミュレーション条件を引き渡すとともに、シミュレーション実行部ＳＭからシミュレーション結果を受け取る入出力モジュール８１と、シミュレーション条件を入力する操作画面、またはシミュレーション結果を示す出力画面を生成して表示部である液晶表示装置にＧＵＩ表示するユーザインタフェースモジュール（以下、「ＧＵＩモジュール」と記す。）８２を備えている。
【００８９】
ＧＵＩモジュール８２は、シミュレーションシステムの起動時に、シミュレーション実行部ＳＭにより実行されるシミュレーションの環境条件をオペレータが設定するための環境操作画面を生成して表示部に表示し、環境操作画面を介して環境条件が設定されると、シミュレーションの起動や停止、さらにはシミュレーション条件を設定する操作画面や、シミュレーション実行部ＳＭにより実行されたシミュレーション結果を示す出力画面を生成して表示部に表示する。
【００９０】
環境操作画面では、シミュレーション実行部ＳＭの環境条件が設定される。例えば、システム管理モジュール５で管理されるイベントの選択、共有メモリ５１を介して制御系モジュール６と被制御系モジュール７との間で遣り取りされるＩＯデータの選択及びメモリマップの定義等である。
【００９１】
環境操作画面で設定された環境条件は、入出力モジュール８１を介してシミュレーション実行部ＳＭに送信され、システム管理モジュール５を介して制御系モジュール６、被制御系モジュール７の夫々に配信され、シミュレーション実行部ＳＭの初期条件が設定される。
【００９２】
図３に示すように、操作画面は、シミュレーションの起動スイッチや停止スイッチ、さらにはイグニッションスイッチ、アクセルペダル操作スイッチ、変速レバー操作スイッチ等のエンジンを操作するために必要な操作スイッチや、スピードメータ、タコメータ、水温計、電圧計等のエンジン状態をモニタする計器がグラフィック表示される操作画面である。
【００９３】
操作画面を介してオペレータにより設定された操作情報は、入出力モジュール８１を介してシミュレーション実行部ＳＭに送信され、システム管理モジュール５で対応するイベントが生成されて、対応するイベントが制御系モジュール６または被制御系モジュール７で処理される。
【００９４】
シミュレーション実行部ＳＭにより実行されたシミュレーション結果が、システム管理モジュール５を介して操作表示部ＨＳＴの入出力モジュール８１に送信され、ＧＵＩモジュール８２に引き渡される。
【００９５】
さらに、図４に示すように、ＣＰＵボード１上には、制御系モジュール６の開発を行うプログラム開発部ＤＭが備えられている。プログラム開発部ＤＭは、開発者がソースコードを編集する、編集したソースコードをコンパイル及びアセンブルしてオブジェクトコードを生成する、あるいは、オブジェクトコードを逆アセンブル及び逆コンパイルしてソースコードを生成する等の、プログラム編集用及びオブジェクトコード生成用の操作画面を備えている。
【００９６】
開発者は、プログラム開発部ＤＭを利用して上述のシミュレーションシステムに適用可能なプログラムを開発し、プログラムのロジック評価、及び、ロジック評価結果をフィードバックしてプログラムを修正変更し、再度シミュレーションによりロジック評価を行うことを繰り返す。これにより、制御プログラムの品質を高めていく。
【００９７】
ただし、新たに実機マイコンの開発に先行して制御プログラムを開発し、当該制御プログラムを上述のシミュレーションシステムに適用して、制御プログラムのロジックを評価するためには、実機マイコンを模擬する仮想内部レジスタ６３とＩＯドライバ６１と割込コントローラ６２とを合わせて開発する必要がある。
【００９８】
割込みコントローラ６２や仮想内部レジスタ６３は、例えば、割込み処理ブロック名と起動する割込み処理ブロックモジュールが記憶されたＲＡＭ上のアドレスとを対応づけるテーブルとして構成する、あるいは、データ名とデータ内容を対応づけるテーブルとして構成する等、他の実機マイコンの制御ソフトウェア３８を作成する場合にも利用可能なように汎用化することは可能である。
【００９９】
ただし、ＩＯドライバ６１は、実機マイコンの提供元毎に仕様が異なることがあり、実機マイコンの提供元毎に共通化することは可能であっても、実機マイコンの提供元が相違しても利用可能なように汎用化することは困難である。
【０１００】
制御プログラムは、既存の実機マイコンの提供元から提供されたオブジェクトコードを逆アセンブルあるいは逆コンパイルしてソースコードを生成し、カスタマイズすることにより、開発効率を向上することはできるが、データの入出力処理の記載された箇所に対して、新たに作成したＩＯドライバ６１を利用するソースコードを埋め込む必要がある。
【０１０１】
このように、新たに開発した制御プログラムを上述のシミュレーションシステムを利用してロジック評価するためには、評価対象の制御プログラムのロジック以外にも、ＩＯドライバ６１等の入出力処理に関わるソースコードを追加する必要があり、即ち、当該制御プログラムのロジックを評価する以前に、シミュレーションシステムを正常に動作させるための労力が必要となる。
【０１０２】
そこで、図４に示すように、ＣＰＵボード上１には、上述の構成に加えて、プログラム実行部２と診断コード記憶処理部３と診断コード表示処理部４と、を備えたプログラム変更検証部ＰＭが備えられている。さらに、図５に示すように、制御系モジュール６には、制御ソフトウェア２を構成する複数の割込み処理ブロックに対応する自己診断プログラム６９が備えられている。
【０１０３】
プログラム実行部２は、環境操作画面に設けられたシミュレーション実行開始ボタン等の入力操作に応じて、シミュレーション実行部ＳＭによるシミュレーションの実行を開始し、さらに、環境操作画面に設けられたタイミング設定画面等での設定操作により設定されたタイミングで、後述する自己診断プログラム６９を実行するように構成されている。例えば、タイミング設定画面は、時間を入力設定するように構成され、プログラム実行部２は、シミュレーションの実行を開始し、当該タイミング設定画面で入力設定された時間が経過すると、自己診断プログラム６９を実行する。
【０１０４】
自己診断プログラム６９は、実機マイコンの制御プログラムで行われる自己診断処理を模擬して構成されている。自己診断処理は、実機マイコンに備えられたＲＡＭ及び不揮発性メモリに設定されたデータに基づいて、制御プログラムにより制御される機器の異常を検出し、検出結果に対応する診断コードを出力するように構成されている。
【０１０５】
即ち、自己診断プログラム６９は、シミュレーションの実行により、割込み処理ブロック及び被制御モジュール７からＩＯドライバ６１を介して仮想内部レジスタ６３に入出力されたＩＯデータに基づいて、異常の有無を検出し、検出結果である診断コードを出力するように構成されている。
【０１０６】
例えば、トランスミッション異常を検出する場合に利用する診断コードは、第一ソレノイド異常を示す診断コード、第二ソレノイド異常を示す診断コード等、トランスミッションに備えられた検出装置等を構成する各電子素子の異常を識別する程度に細分化されており、車両全体にわたる機器の異常を検出する場合にあっては、診断コードの種類は膨大である。したがって、診断コードは、実機マイコンに備えられたＲＡＭ及び不揮発性メモリの制限されたリソースを考慮して、例えば１６ビットのコード値で構成され、各ビットが示すコード値に基づいて異常の有無及び異常の種類を検出可能に構成されている。
【０１０７】
診断コード記憶処理部３は、自己診断プログラム６９から出力される診断コードを共有メモリ５１に設定するように構成されている。診断コード記憶処理部３は、シミュレーションを繰り返し実行して、過去の診断コードと今回の診断コードを対比して制御プログラムのロジックを評価することができるように、過去に設定した記憶領域とは別の記憶領域に診断コードを設定するように構成されている。
【０１０８】
診断コード表示処理部４は、共有メモリ５１に記憶された過去の診断コードと今回の診断コードを対比して診断コードの変動情報を生成し、生成した変動情報を操作表示部ＨＳＴに備えられた入出力モジュール８３を介してＧＵＩモジュール８２に出力して、当該変動情報を表示部に表示するように構成されている。
【０１０９】
尚、操作表示部ＨＳＴは、上述の構成に加えて、プログラム実行部２と同期して動作し、プログラム実行部２にシミュレーション及び自己診断プログラムの実行タイミングを引き渡すとともに、診断コード表示処理部４から過去の診断コードと今回の診断コードを対比して生成された変動情報を含む診断結果情報を受け取る入出力モジュール８３を備えている。
【０１１０】
操作表示部ＨＳＴに備えられたＧＵＩモジュール８２は、上述の構成に加えて、診断コード表示処理部４から受け取った診断結果情報を表示する診断結果表示画面を生成して表示部である液晶表示装置にＧＵＩ表示するように構成されている。
【０１１１】
さらに、ビット値及びバイトインデックス値と表示文字列を対応付けるコメント情報テーブルが制御プログラムのソースコードファイルに定義されている。コメント情報テーブルは、例えば、ソースコードの開発効率を向上するために、あるいは、断結果表示画面に表示された診断結果の識別性を向上するために、診断コードのビット値、あるいは、診断コードの種類を示すバイトインデックス値と、当該ビット値及びバイトインデックス値が示す意味内容を文字列化した表示文字列との変換用テーブルとして構成されている。
【０１１２】
例えば、図１１（ｂ）に示すように、バイトインデックス値０が示す、表示文字列として「エンジン異常」、及びソースコード上の定数名（コード値名）として「ＤＥＮＧＩＮＥ」が定義されている。また、バイトインデックスに対応する診断コードとしての１６ビットのビット値と、当該ビット値の示す内容としての表示文字列が定義されている。例えば、「エンジン異常」を示すバイトインデックスに対応する診断コードの表示文字列として、「正常」「異常１」「異常２」が定義されている。
【０１１３】
即ち、上述の構成によれば、プログラム実行部１によりシミュレーションが実行され、さらに自己診断プログラム６９が実行された後、診断コード記憶処理部３により共有メモリ５１に設定された過去の診断コードと今回の診断コードを対比して生成された変動情報が、診断コード表示処理部４により診断結果表示画面に識別性よく表示されるようになる。
【０１１４】
したがって、プログラムを変更した場合に、当該プログラムの変更の良否の評価が一目でわかるようになり、また、画面に表示された変動情報に基づいて、プログラム変更の不具合を効率よく解消することができるため、シミュレーションシステムを正常に動作させるために必要な労力を削減することができる。
【０１１５】
以下では、上述の構成及び図９から図１６に基づいて、プログラム変更検証部ＰＭによるプログラム変更の検証手順について説明する。
【０１１６】
図９に示すように、操作者が、環境操作画面に設けられたシミュレーション実行開始ボタン等の入力操作に応じて、シミュレーション実行部ＳＭによるシミュレーションの実行を開始すると、診断コード収集ステップＳＡが実行され、所定のタイミングで自己診断プログラム６９が実行され（ＳＡ１）、診断コード記憶処理部３を介して、共有メモリ５１に診断コードが設定される（ＳＡ２）。
【０１１７】
診断コード収集ステップＳＡが終了すると、診断コード表示処理部４により、正常数異常数表示ステップＳＢが実行される。
【０１１８】
正常数異常数表示ステップＳＢは、先ず、共有メモリ５１から診断コードを全件取得後、処理件数を示す変数ｉを０に設定し（ＳＢ１）、取得した診断コードの値が正常を示しているかどうかを１件ずつ判定する（ＳＢ２）。診断コードの値が正常値を示す場合は、正常件数を１件カウントアップし（ＳＢ４）、診断コードの値が正常値を示さない場合は、さらに診断コードの値が未判定を示す値であるかどうかを判定し（ＳＢ３）、診断コードの値が未判定を示す値でない場合は、異常件数を１件カウントアップする（ＳＢ５）。
【０１１９】
正常数異常数表示ステップＳＢは、当該取得した診断コード全件分に対してステップＳＢ２〜ＳＢ５の処理を繰り返し（ＳＢ６,ＳＢ７）、診断コード件数、正常件数及び異常件数を入出力モジュール８３に出力する。入出力モジュール８３は、当該入力された診断コード件数、正常件数及び異常件数を、例えば、図１４（ａ）に示すように、ＧＵＩモジュール８２を介して、診断結果表示画面の右上部のように表示する（ＳＺ１）。
【０１２０】
図１０に示すように、正常数異常数表示ステップＳＢが終了すると、診断コード表示処理部４により、前回値対比表示ステップＳＣが実行される。
【０１２１】
前回値対比表示ステップＳＣは、先ず、共有メモリ５１から前回実行時に設定された診断コードを全件取得し（ＳＣ１）、当該取得した前回実行時の診断コードの正常件数及び異常件数を、正常数異常数表示ステップＳＢを介して算出する（ＳＣ２）。
【０１２２】
続いて、前回値対比表示ステップＳＣは、前回実行時の診断コードの正常件数と、当該（今回）実行時の診断コードの正常件数を比較し（ＳＣ３）、前回実行時の正常件数よりも今回実行時の正常件数が多い場合は、正常値の増減は正常と判定し（ＳＣ４）、前回実行時の正常件数よりも今回実行時の正常件数が少ない場合は、正常値の増減は異常であると判定する（ＳＣ５）。
【０１２３】
続いて、前回値対比表示ステップＳＣは、前回実行時の診断コードの異常件数と、当該（今回）実行時の診断コードの異常件数を比較し（ＳＣ６）、前回実行時の異常件数よりも今回実行時の異常件数が少ない場合は、異常値の増減は正常と判定し（ＳＣ７）、前回実行時の異常件数よりも今回実行時の異常件数が少ない場合は、異常値の増減は異常であると判定する（ＳＣ８）。
【０１２４】
前回値対比表示ステップＳＣは、ステップＳＣ１〜ＳＣ８の処理結果得られた、正常値の判定結果と異常値の判定結果を入出力モジュール８３に出力する。入出力モジュール８３は、当該入力された正常値の判定結果と異常値の判定結果を、例えば、図１４（ａ）に示すように、ＧＵＩモジュール８２を介して、診断結果表示画面の右上部に表示する（ＳＺ２）。
【０１２５】
図１４（ａ）は、正常値の判定結果が正常であり、異常値の判定結果が異常である場合の診断結果表示画面を例示している。即ち、正常値を示す診断コードが増加した場合には、特に問題はないので色付けせずに表示し、異常値を示す診断コードが増加した場合には、色付けして表示することにより、異常が増えたことを一目で判断することができるようになる。
【０１２６】
図１１（ａ）に示すように、前回値対比表示ステップＳＣが終了すると、診断コード表示処理部４により、診断コード意味情報表示ステップＳＤが実行される。
【０１２７】
診断コード内容情報表示ステップＳＤは、先ず、ソースファイルに定義されたコメント情報テーブルを読み込み、当該コメント情報テーブルを共有メモリ５１に設定する（ＳＤ１）。続いて、処理件数を示す変数ｉを０に設定し（ＳＤ２）、診断コード収集ステップＳＡで取得した診断コードの値が異常値を示しているかどうかを１件ずつ判定する（ＳＤ３）。診断コードの値が異常値を示す場合は、共有メモリ５１に設定されたコメント情報テーブルに基づいて、バイトインデックス値及びビット値が示す表示文字列を取得する（ＳＤ４）。
【０１２８】
診断コード内容情報表示ステップＳＤは、診断コード全件分に対してステップＳＤ３,ＳＤ４の処理を繰り返し（ＳＤ５,ＳＤ６）、異常値を示す診断コードの表示文字列を入出力モジュール８３に出力する。入出力モジュール８３は、当該入力された異常値を示す診断コードの表示文字列を、例えば、図１４（ａ）に示すように、ＧＵＩモジュール８２を介して、診断結果表示画面の中部のように表示する（ＳＺ３）。
【０１２９】
尚、図１４（ａ）に示すように、前回の診断コードに対しても診断コード内容情報表示ステップＳＤを実行し、ステップＳＺ３を実行する前に当該前回の診断コードの異常値と今回の診断コードの異常値を対比して、残存している異常値を示す診断コードの表示文字列を、入出力モジュール８３、及び、ＧＵＩモジュール８２を介して、診断結果表示画面の下部のように表示しても構わない。
【０１３０】
図１２に示すように、診断コード内容情報表示ステップＳＤが終了すると、診断コード表示処理部４により、変動情報表示ステップＳＥが実行される。
【０１３１】
変動情報表示ステップＳＥは、先ず、処理件数を示す変数ｉを０に設定し（ＳＥ１）、前回値対比表示ステップＳＣで取得した前回実行時の診断コードの値が未判定を示す値であるかどうかを１件ずつ判定する（ＳＥ２）。前回実行時の診断コードの値が未判定を示す値である場合は、当該診断コードの表示色を例えば白色に設定し（ＳＥ４）、当該診断コードの値が未判定を示す値でない場合は、さらに当該診断コードの値が正常を示す値であるかどうかを判定し（ＳＥ３）、当該診断コードの値が正常を示す値の場合は、当該診断コードの表示色を例えば水色に設定し（ＳＥ５）、当該診断コードの値が正常を示す値でない場合は、当該診断コードの表示色を例えばマゼンダに設定する（ＳＥ６）。尚、ステップＳＥ４, ＳＥ５, ＳＥ６で設定する表示色は、例示にすぎず、別の色であっても構わない。
【０１３２】
変動情報表示ステップＳＥは、前回実行時の診断コード全件分に対してステップＳＥ２〜ＳＥ６の処理を繰り返した後（ＳＥ７,ＳＥ８）、図１３に示すように、処理件数を示す変数ｉを０に設定しなおし（ＳＥ９）、前回実行時の診断コードと今回実行時の診断コードの比較を行う（ＳＥ１０）。
【０１３３】
前回実行時の診断コードが正常値を示さない場合であって、今回実行時の診断コードが正常値を示すとき（図１３（１））は、今回診断コードの表示色を例えば青色に設定し（ＳＥ１３）、前回実行時の診断コードが異常値を示さない場合であって、今回実行時の診断コードが異常値を示すとき（図１３（２））は、今回診断コードの表示色を例えば赤色に設定する（ＳＥ１４）。また、それ以外のとき（図１３（１）（２）以外）は、さらに今回実行時の診断コードの値が未判定を示す値であるかどうかを判定し（ＳＥ１１）、今回実行時の診断コードの値が未判定を示す値である場合は、今回診断コードの表示色を例えば白色に設定し（ＳＥ１５）、今回実行時の診断コードの値が未判定を示す値でない場合は、さらに、今回実行時の診断コードの値が正常を示す値であるかどうかを判定し（ＳＥ１２）、今回実行時の診断コードの値が正常を示す値である場合は、今回診断コードの表示色を例えば水色に設定し（ＳＥ１６）、今回実行時の診断コードの値が正常を示す値でない場合は、今回診断コードの表示色を例えばマゼンダに設定する（ＳＥ１７）。尚、ステップＳＥ１３〜ＳＥ１７で設定する表示色は、例示にすぎず、別の色であっても構わない。
【０１３４】
変動情報表示ステップＳＥは、前回実行時の診断コードあるいは今回実行時の診断コード全件分に対して、ステップＳＥ１０〜ＳＥ１７の処理を繰り返し（ＳＥ１８,ＳＥ１９）、前回実行時及び今回実行時の診断コードの表示色を入出力モジュール８３に出力する。入出力モジュール８３は、前回実行時及び今回実行時の診断コードの表示色を、例えば、図１４（ｂ）に示すように、ＧＵＩモジュール８２を介して、診断結果表示画面の中下部のように一覧表示する（ＳＺ４）。
【０１３５】
尚、変動情報表示ステップＳＥの構成を変更して、ステップ１０による処理分岐を細分化し、前回の診断コード値と今回の診断コード値がともに異常値を示すような場合であっても、診断コードのビット値に相違がある場合には、今回実行時の診断コードの表示色に別の新たな色を設定するように構成しても構わない。
【０１３６】
即ち、上述の構成に基づいて、複数の演算処理としてのＩＯドライバ６１と、各演算処理の結果に基づいて異常の有無を検出して対応する診断コードを生成する複数の診断処理としての自己診断プログラム６９を含む、制御系モジュール６を評価対象プログラムとして、ＩＯドライバ６１を変更した場合に制御系モジュール６のプログラムの変更を検証する方法は、以下の通りとなる。
【０１３７】
先ず、プログラム開発部ＤＭを利用して任意のＩＯドライバを変更する（プログラム変更ステップ）。
【０１３８】
続いて、プログラム変更ステップでＩＯドライバ６１が変更された制御系モジュール６をプログラム実行部２により実行し、自己診断プログラム６９で生成された診断コードを共有メモリ５１に記憶する（診断コード記憶ステップ）。
【０１３９】
続いて、診断コード記憶ステップで共有メモリ５１に記憶された診断コードを表示部としての診断結果表示画面に表示する（診断コード表示ステップ）。
【０１４０】
続いて、診断コード表示ステップで診断結果表示画面に表示された診断コードに基づいて、当該診断コードに対応するＩＯドライバ６１を、プログラム開発部ＤＭを利用して修正変更する（プログラム再変更ステップ）。
【０１４１】
続いて、プログラム変更ステップからプログラム再変更ステップまでの各ステップを繰り返して制御系モジュール６に含まれるＩＯドライバ６１の変更を確認する（プログラム変更確認ステップ）。
【０１４２】
尚、プログラム変更確認ステップでプログラム変更ステップからプログラム再変更ステップまでの各ステップを繰り返す際に、診断コード表示ステップは、共有メモリ５１に記憶された過去の診断コードと今回の診断コードを対比して、診断コードに設定された表示色の情報及び診断コード内容を示す表示文字列に変換した情報を変動情報として生成し、当該変動情報を診断結果表示画面に表示する。したがって、プログラム再変更ステップで、診断結果表示画面に表示された診断コードの変動情報を利用して、効率よくプログラムの変更を検証することができる。
【０１４３】
以下、別実施形態を説明する。上述した実施形態では、制御プログラムを変更した場合における前回実行時と今回実行時の診断コードを対比して、プログラムの変更を検証する形態について説明したが、さらに、過去にプログラム変更の検証を行った際の正常値及び異常値の件数を表示して、制御プログラムの品質を把握し、例えば、品質管理だけでなく、進捗管理にも活用することができる。
【０１４４】
詳述すると、上述の構成に加えて、診断コード表示処理部４は、過去の診断コードと今回の診断コードを対比して、横軸に時間、縦軸に異常と診断された診断コードの数をプロットしたバーンダウンチャートを、入出力モジュール８３及びＧＵＩモジュール８２を介して表示するバーンダウンチャート表示画面を備えている。
【０１４５】
診断結果表示画面は、上述の構成に加えて、バーンダウンチャート表示画面を起動するための起動ボタンを備えている。操作者は、診断結果表示画面を閲覧時に起動ボタンを押下すると、バーンダウンチャート表示画面を表示する。
【０１４６】
このとき、図１５に示すように、診断コード表示処理部４は、バーンダウンチャート表示ステップＳＦを実行する。バーンダウンチャート表示ステップＳＦは、先ず、共有メモリ５１に設定された過去の実行時及び今回実行時の診断コードを取得後（ＳＦ１）、処理件数を示す変数ｊを０に設定し（ＳＦ２）、ｊ回目の実行時の診断コードに対して、正常数異常数表示ステップＳＢを実行する（ＳＦ３）。
【０１４７】
バーンダウンチャート表示ステップＳＦは、ステップＳＦ１で取得した過去の実行時及び今回実行時の全ての診断コードの各実行時の診断コードに対して、ステップＳＦ３の処理を繰り返し（ＳＦ４,ＳＦ５）、各実行時の診断コードに対する正常件数及び異常件数を入出力モジュール８３に出力する。入出力モジュール８３は、当該入力された各実行時の診断コードに対する正常件数及び異常件数を、ＧＵＩモジュール８２を介して、バーンダウンチャート表示画面に表示する（ＳＺ５）。
【０１４８】
バーンダウンチャート表示画面は、例えば、図１６（ａ）に示すように、異常件数のみを表示しても構わないし、図１６（ｂ）に示すように、異常件数及び正常件数を重ねて表示しても構わない。また、図１６（ｂ）に示すように、凡例にチェックボックス等を設けて、正常値及び異常値の表示可否を決定するように構成しても構わない。
【０１４９】
即ち、バーンダウンチャート表示画面に表示された診断コードの正常値件数及び異常値件数の移り変わりを一目で把握することができ、制御プログラムの品質の把握を効率よく行え、また、異常件数が収束する時点を予測する等により進捗管理にも活用することができる。
【０１５０】
尚、バーンダウンチャート表示ステップＳＦのステップＳＦ３の処理を変更して、ｊ回目の実行時の診断コードに対して、正常数異常数表示ステップＳＢを実行した後に、前回値対比表示ステップＳＣ及び変動情報表示ステップを実行して、バーンダウンチャート表示画面にプロットする正常値及び異常値の表示色を変更可能に構成しても構わない。
【０１５１】
また、上述の実施形態における、診断コード収集ステップＳＡから正常数異常数表示ステップＳＢ、前回値対比表示ステップＳＣ、診断コード内容情報表示ステップＳＤ、変動情報表示ステップＳＥに至るまでの一連の処理を、過去にプログラム変更の検証を実行した回数分繰り返して行うように構成を変更し、診断結果情報表示画面に過去実行時の全ての診断コードが閲覧可能に表示されるように構成しても構わない。
【０１５２】
上述した実施形態では、演算処理としてのＩＯドライバ６１と、診断処理としての自己診断プログラム６９を含む、車両を模擬したシミュレーションシステムにおける制御系モジュール６を評価対象プログラムとしていたが、評価対象プログラムの構成はこれに限るものではない。
【０１５３】
例えば、航空機、電車、家電製品等のマイクロコンピュータに組み込まれるプログラムをパソコンＰＣ上で稼働可能に模擬した制御プログラムを評価対象プログラムとして、マイクロコンピュータに内蔵されたＲＡＭ及び不揮発性メモリへの入出力処理を模擬した演算処理と、当該ＲＡＭ及び不揮発性メモリを模擬した仮想レジスタに設定された値に基づいて、演算処理の異常の有無を検出する自己診断処理を含むように構成しても構わない。
【０１５４】
また、評価対象プログラムは、マイクロコンピュータに組み込まれる制御プログラムに限らず、パソコンＰＣ上で稼働するソフトウェアを評価対象プログラムとして構成しても構わない。
【０１５５】
例えば、既存のソフトウェアをバージョンアップする場合において、新たに作成するモジュールのソースコードに、当該モジュールに入出力されるデータが所定の閾値を超えるような場合には入出力異常と判定する等の異常の有無を判定する等の異常判定ロジックを有し、当該判定結果を不揮発性メモリ、あるいは、不揮発性メモリに代えてハードディスク上のファイルとして記憶する関数を埋め込む。そして、当該新たなモジュールを組み込んだバージョンアップされたソフトウェアを動作させた場合に、不揮発性メモリあるいはファイルに出力された異常の有無を画面に表示可能な画面表示プログラムを作成する。
【０１５６】
この場合、新たに作成するモジュールを本発明による演算処理とし、ソースコードに埋め込んだ関数を本発明による診断処理とし、当該新たに作成されたモジュールが組み込まれたソフトウェアを本発明による評価対象プログラムとし、不揮発性メモリあるいはファイルに出力された異常の有無を画面に表示可能なプログラムを本発明による診断コード記憶処理部及び診断コード表示処理部として構成することができる。尚、当該ソフトウェアを実行するための、メニュー画面等が本発明によるプログラム実行部として構成されることは言うまでもない。
【０１５７】
尚、上述の実施形態において、プログラム変更検証部ＰＭは、シミュレーション実行部ＳＭと同じパソコンＰＣ上に構成されていたが、シミュレーション実行部ＳＭを備えたパソコンと、プログラム変更検証部ＰＭを備えたパソコンとを、ＬＡＮを介して接続するように構成されていても構わない。また、操作表示部ＨＳＴがシミュレーション実行部ＳＭと同じパソコン上に構成されていても構わない。
【０１５８】
即ち、本発明を構成するプログラム変更検証部ＰＭ、シミュレーション実行部ＳＭ、プログラム開発部ＤＭ、操作表示部ＨＳＴ、あるいは、ＧＵＩモジュール８２等の機能ブロックの配置箇所を適宜設計事項として、適切なパソコンに配置するよう変更しても構わない。
【０１５９】
上述した実施形態は、本発明を実現する一実施例を説明するものであり、各部の具体的な構成は、本発明の作用効果を奏する限りにおいて、適宜変更設計することが可能である。
【符号の説明】
【０１６０】
１：ＣＰＵボード
２：プログラム実行部
３：診断コード記憶処理部
４：診断コード表示処理部
５：システム管理モジュール
６：制御系モジュール
７：被制御系モジュール
５１：共有メモリ
５２：システムタイマ
５３：イベントリスト
５４：仮想ＩＯレジスタ
５５：割込管理部
５６：外部ＩＯデータ部
６１：ＩＯドライバ（制御系モジュール）
６２：割込コントローラ
６３：仮想内部レジスタ
６８：制御ソフトウェア
６９：自己診断プログラム
７１：ＩＯドライバ（被制御系モジュール）
ＤＭ：プログラム開発部
ＨＳＴ：操作表示部
ＰＣ：パーソナルコンピュータ
ＰＭ：プログラム変更検証部
ＳＡ：診断コード収集ステップ
ＳＢ：正常数異常数表示ステップ
ＳＣ：前回値対比表示ステップ
ＳＤ：診断コード内容情報表示ステップ
ＳＥ：変動情報表示ステップ
ＳＦ：バーンダウンチャート表示
ＳＭ：シミュレーション実行部
【図４】
2010224758.tif 000003
【図５】
2010224758.tif 000004
【図６】
2010224758.tif 000005
【図７】
2010224758.tif 000006
【図８】
2010224758.tif 000007
【図９】
2010224758.tif 000008
【図１０】
2010224758.tif 000009
【図１１】
2010224758.tif 000010
【図１２】
2010224758.tif 000011
【図１３】
2010224758.tif 000012
【図１４】
2010224758.tif 000013
【図１５】
2010224758.tif 000014
【図１６】
2010224758.tif 000015
【図１】
2010224758.tif 000016
【図２】
2010224758.tif 000017
【図３】
2010224758.tif 000018