(57)【要約】【課題】オブジェクトコードで提供される制御プログラムを利用して効率的にシミュレーション用の制御プログラムに変換可能なシミュレーションプログラム生成装置を提供する。【解決手段】マイクロコンピュータ（マイコン）に移植されるオブジェクトコードを逆アセンブルしてアセンブラコードを生成する逆アセンブル実行部と、アセンブラコードからマイコンのレジスタ操作コードを自動抽出するレジスタ操作コード抽出部と、アセンブラコードを逆コンパイルしてコンパイラコードを生成する逆コンパイル部と、コンパイラコードに、レジスタ操作コードにより仮想レジスタがアクセスされるように模擬する仮想レジスタ操作コードを付加するレジスタ操作コード付加部と、仮想レジスタ操作コードが付加されたコンパイラコードを汎用コンピュータで実行可能な制御プログラムに変換するクロスコンパイル部を含む。【選択図】図４
2010244377.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットとなるマイクロコンピュータのＣＰＵで実行される制御プログラムを、シミュレーション用の汎用コンピュータで実行可能な形式のプログラムに変換するシミュレーションプログラム生成装置であって、
前記マイクロコンピュータに移植されるオブジェクトコードを逆アセンブルしてアセンブラコードを生成する逆アセンブル実行部と、
前記逆アセンブル実行部で得られたアセンブラコードに含まれ、前記ＣＰＵにより前記マイクロコンピュータのレジスタをアクセスするレジスタ操作コードを自動抽出するレジスタ操作コード抽出部と、
前記アセンブラコードを逆コンパイルして汎用のコンパイラコードを生成する逆コンパイル部と、
前記逆コンパイル部で得られたコンパイラコードに、前記レジスタ操作コード抽出部で抽出されたレジスタ操作コードにより当該レジスタに替えて前記汎用コンピュータ上で定義される仮想レジスタがアクセスされるように模擬する仮想レジスタ操作コードを付加するレジスタ操作コード付加部と、
前記レジスタ操作コード付加部で前記仮想レジスタ操作コードが付加されたコンパイラコードを前記汎用コンピュータで実行可能な制御プログラムに変換するクロスコンパイル部を含むことを特徴とするシミュレーションプログラム生成装置。
【請求項２】
前記レジスタ操作コード抽出部は、前記アセンブラコードに含まれるレジスタ操作用のニーモニックまたはオペランドに基づいて前記レジスタ操作コードを抽出することを特徴とする請求項１記載のシミュレーションプログラム生成装置。
【請求項３】
ターゲットとなるマイクロコンピュータのＣＰＵで実行される制御プログラムを、シミュレーション用の汎用コンピュータで実行可能な形式のプログラムに変換するシミュレーションプログラム生成方法であって、
前記マイクロコンピュータに移植されるオブジェクトコードを逆アセンブルしてアセンブラコードを生成する逆アセンブルステップと、
前記逆アセンブルステップで得られたアセンブラコードに含まれ、前記ＣＰＵにより前記マイクロコンピュータのレジスタをアクセスするレジスタ操作コードを自動抽出するレジスタ操作コード抽出ステップと、
前記アセンブラコードを逆コンパイルして汎用のコンパイラコードを生成する逆コンパイルステップと、
前記逆コンパイルステップで得られたコンパイラコードに、前記レジスタ操作コード抽出ステップで抽出されたレジスタ操作コードにより当該レジスタに替えて前記汎用コンピュータ上で定義される仮想レジスタがアクセスされるように模擬する仮想レジスタ操作コードを付加するレジスタ操作コード付加ステップと、
前記レジスタ操作コード付加ステップで前記仮想レジスタ操作コードが付加されたコンパイラコードを前記汎用コンピュータで実行可能な制御プログラムに変換するクロスコンパイルステップを含むシミュレーションプログラム生成方法。
【請求項４】
請求項３記載のシミュレーションプログラム生成方法で生成された制御プログラムを実行する制御系モジュールと、前記制御プログラムにより制御される被制御部を模擬する被制御系モジュールと、前記制御系モジュールと被制御系モジュールを同期させて実行するシステム管理モジュールを備え、
前記システム管理モジュールは、前記制御系モジュールまたは被制御系モジュールで発生するイベントの起動時刻を管理して、前記制御系モジュール及び被制御系モジュールを各イベントに対応して時系列的に駆動させるイベント駆動型のシミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションプログラム生成装置、シミュレーションプログラム生成方法、及び、シミュレーションシステムに関する。
【背景技術】
【０００２】
機器を制御するためのマイクロコンピュータに組み込まれる制御プログラムを先行開発する場合、実在しない機器をコンピュータで模擬演算するシミュレータを用いて開発中の制御プログラムのロジック評価等が行なわれている。
【０００３】
例えば、車両のエンジンやブレーキ等を制御するマイクロコンピュータが組み込まれたＥＣＵ（Electronic Control Unit）の制御プログラムを実際の車両に先行して開発する場合、車両の動作をコンピュータで模擬演算する車両シミュレータとＥＣＵを接続して開発中の制御プログラムのロジック評価等を行なうシミュレーションシステムが構築されている。
【０００４】
特許文献１には、このようなシミュレーションシステムとして、ＨＩＬＳ（Hardware In the Loop Simulation）システムやＳＩＬＳ（Software In the Loop Simulation）システムが開示されている。
【０００５】
ＨＩＬＳシステムは、実ＥＣＵと車両シミュレータを接続して開発中の制御プログラムを検証するシステムであり、ＳＩＬＳシステムは、実ＥＣＵに替えてＥＣＵをコンピュータで模擬するＥＣＵシミュレータと車両シミュレータをパーソナルコンピュータ等の汎用コンピュータ上に構築して開発中の制御プログラムを検証するシステムである。
【０００６】
ＨＩＬＳシステムは、図１に示すように、ＥＣＵから出力された電気信号をＩ／Ｆボードを介して論理信号に変換し、車両動作を模擬するプログラムを実行する高性能なＣＰＵにその論理信号を入力して演算処理し、演算結果である論理信号を再びＩ／Ｆボードを介して電気信号に変換してＥＣＵにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ＥＣＵ、Ｉ／Ｆボード、高性能ＣＰＵ等のハードウェアによるフィードバックループが構築されている。
【０００７】
ＳＩＬＳシステムは、図２に示すように、ＥＣＵを構成するマイクロコンピュータや周辺回路の動作を模擬するプログラムを高性能なＣＰＵで実行する模擬ＥＣＵを構築し、模擬ＥＣＵから出力された論理信号を、Ｉ／Ｆボードを模擬するＩ／Ｆモデルを介して車両動作を模擬するプログラムを実行する高性能なＣＰＵに入力して演算処理し、演算結果である論理信号を再びＩ／Ｆモデルを介して模擬ＥＣＵにフィードバックする一連の動作を所定周期で実行する周期駆動型のシステムで、ＥＣＵ、Ｉ／Ｆボード、車両の全てがソフトウェアで実現され、ソフトウェアによるフィードバックループが構築されている。
【０００８】
さらに、ＳＩＬＳシステムでは、ＥＣＵのハードウェアや車両モデルのＩ／Ｆボードを詳細に模擬するプログラムに替えて、制御プログラムを実行するＥＣＵに組み込まれたマイクロコンピュータの論理演算部を模擬する制御系モジュールと、車両の動作を模擬する車両モデルでなる被制御系モジュールを構築し、夫々で発生した所定のイベントを時系列的に管理して、イベント毎に模擬ＥＣＵと車両モデルをステップ的に動作させるシステム管理モジュールを備えた演算周期が変動するイベント駆動型のシステムも構築されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−５２５８０号公報
【非特許文献】
【００１０】
【非特許文献１】日経ＢＰ社、２００８．５．２１発行、カー・エレクトロニクスのすべて２００８、多様化するＨＩＬＳ（２４４頁〜２４９頁）
【発明の概要】
【発明が解決しようとする課題】
【００１１】
周期駆動型のＳＩＬＳシステムでは、マイクロコンピュータの動作を当該マイクロコンピュータのＣＰＵで実行される命令セットレベルまで模擬するため、ターゲットとなるマイクロコンピュータのオブジェクトコードをそのまま移植できるという使い勝手の良さがあるものに、シミュレータに如何に高性能なＣＰＵが搭載されていても、マイクロコンピュータの命令セットレベルまで模擬するためにオーバヘッドが大きくなり、実時間よりもシミュレーション時間が長くなるという不都合がある。
【００１２】
そこで、イベント駆動型のＳＩＬＳシステムが注目されているが、命令セットレベルに対応してマイクロコンピュータの各種のレジスタレベルまで模擬するものではないため、制御プログラムのオブジェクトコードをそのまま移植することができず、予め評価用の制御プログラムを開発する段階で、マイクロコンピュータのレジスタをアクセスする部位に仮想レジスタを割り付けて、当該仮想レジスタをアクセスするドライバ関数を付加した制御プログラムを構築する必要があった。
【００１３】
しかし、近年、ターゲットとなるマイクロコンピュータに対応した制御プログラムが複数のモジュールに分割されて、互いに異なる多くの部署や外部組織で個別に開発されるのが常であり、そのような場合にＳＩＬＳシステムに移植するための制御プログラムを各部署で個別に開発するのは極めて困難な状況である。
【００１４】
特に外部組織で開発されたモジュールは、ターゲットとなるマイクロコンピュータのオブジェクトコードと仕様書のみ提示される場合も多く、そのような場合、仕様書に基づいて各モジュールに対応する仮の制御プログラムを作成して、イベント駆動型のＳＩＬＳシステムで動作可能な制御プログラムに統合しなければならなかった。
【００１５】
そのため、仮の制御プログラムが実際の制御プログラムを確実に再現している保証がないため、シミュレーションの精度に問題が生じる虞があるばかりでなく、そのための仮の制御プログラムの作成工数が増大するという問題があった。
【００１６】
本発明の目的は、上述した従来の問題点に鑑み、オブジェクトコードで提供される制御プログラムを利用して効率的にシミュレーション用の制御プログラムに変換可能なシミュレーションプログラム生成装置、シミュレーションプログラム生成方法を提供するとともに、そのようなシミュレーションプログラム生成方法で生成されたシミュレーションプログラムで実行されるシミュレーションシステムを提供する点にある。
【課題を解決するための手段】
【００１７】
上述の目的を達成するため、本発明によるシミュレーションプログラム生成装置の特徴構成は、ターゲットとなるマイクロコンピュータのＣＰＵで実行される制御プログラムを、シミュレーション用の汎用コンピュータで実行可能な形式のプログラムに変換するシミュレーションプログラム生成装置であって、前記マイクロコンピュータに移植されるオブジェクトコードを逆アセンブルしてアセンブラコードを生成する逆アセンブル実行部と、前記逆アセンブル実行部で得られたアセンブラコードに含まれ、前記ＣＰＵにより前記マイクロコンピュータのレジスタをアクセスするレジスタ操作コードを自動抽出するレジスタ操作コード抽出部と、前記アセンブラコードを逆コンパイルして汎用のコンパイラコードを生成する逆コンパイル部と、前記逆コンパイル部で得られたコンパイラコードに、前記レジスタ操作コード抽出部で抽出されたレジスタ操作コードにより当該レジスタに替えて前記汎用コンピュータ上で定義される仮想レジスタがアクセスされるように模擬する仮想レジスタ操作コードを付加するレジスタ操作コード付加部と、前記レジスタ操作コード付加部で前記仮想レジスタ操作コードが付加されたコンパイラコードを前記汎用コンピュータで実行可能な制御プログラムに変換するクロスコンパイル部を含む点にある。
【００１８】
上述の構成によれば、レジスタ操作コード抽出部により、逆アセンブル実行部で得られたアセンブラコードからレジスタ操作コードが自動抽出され、逆コンパイル部によりアセンブラコードが逆コンパイルされた汎用のコンパイラコード上で、レジスタ操作コード付加部により仮想レジスタ操作コードが付加されるため、提供されたオブジェクトコードに基づいて、シミュレーションに必要な制御プログラムの編集が極めて効率的且つ精度よく行われるようになる。
【発明の効果】
【００１９】
以上説明した通り、本発明によれば、オブジェクトコードで提供される制御プログラムを利用して効率的にシミュレーション用の制御プログラムに変換可能なシミュレーションプログラム生成装置、シミュレーションプログラム生成方法を提供するとともに、そのようなシミュレーションプログラム生成方法で生成されたシミュレーションプログラムで実行されるシミュレーションシステムを提供することができるようになった。
【図面の簡単な説明】
【００２０】
【図１】ＨＩＬＳシステムを用いたシミュレーションシステムの説明図
【図２】周期駆動型のＳＩＬＳシステムを用いたシミュレーションシステムの説明図
【図３】イベント駆動型のＳＩＬＳシステムを用いたシミュレーションシステムの説明図
【図４】ＳＩＬＳシステム及び本発明によるシミュレーションプログラム生成装置のブロック構成図
【図５】ＳＩＬＳシステムを構成する各モジュールの説明図
【図６】イベント駆動型のＳＩＬＳシステムの動作を示すタイミングチャート
【図７】イベントリストによるイベント管理に関する説明図
【図８】システム管理モジュールの動作を示すフローチャート
【図９】自動生成されるソースコードの説明図であり、（ａ）は、逆アセンブル実行部１５により生成されたアセンブラコード、（ｂ）は、逆コンパイル部１７により生成されたコンパイラコード、（ｃ）は、レジスタ操作コード付加部１８により生成された仮想レジスタ操作コードが付加されたコンパイラコードを例示する説明図
【図１０】本発明によりシミュレーションプログラムを生成する動作を示すフローチャート
【発明を実施するための形態】
【００２１】
以下に、本発明によるシミュレーションプログラム生成装置、シミュレーションプログラム生成方法、及び、シミュレーションシステムの実施形態について説明する。
【００２２】
図３に示すように、所定の処理速度で制御システムを模擬演算するシミュレーション実行部ＳＭと、シミュレーション実行部ＳＭで実行されるシミュレーションを管理する操作表示部ＨＳＴがＬＡＮで接続されてシミュレーションシステムが構成されている。
【００２３】
シミュレーション実行部ＳＭ、及び、操作表示部ＨＳＴは、夫々所定のオペレーティングシステム（以下、「ＯＳ」と記す。）の管理下でシミュレーション用のソフトウェアが実行される二台のパーソナルコンピュータＰＣによって実現されている。
【００２４】
図４に示すように、シミュレーション実行部ＳＭは、評価対象である車両の制御ソフトウェアを実行する制御系モジュール６と、当該制御ソフトウェアにより制御される車両を模擬する被制御系モジュール７と、制御系モジュール６または被制御系モジュール７の何れかで発生するイベントを管理し、時系列的に発生するイベントに基づいて制御系モジュール６または被制御系モジュール７を駆動するシステム管理モジュール５を備えたイベントドリブン型のＳＩＬＳシステムである。
【００２５】
各モジュール５，６，７は、所定のＯＳ１１上で動作するパーソナルコンピュータＰＣのＣＰＵボード１０上のメモリに格納されたシミュレーション用のソフトウェア及び制御ソフトウェアと、ＣＰＵタイマ１２と、ＣＰＵタイマ１２に従ってそれらソフトウェアを実行する高性能ＣＰＵにより具現化される。
【００２６】
システム管理モジュール５は、制御系モジュール６または被制御系モジュール７に関連して発生するイベントの起動時刻を設定管理するシステムタイマ５２と、制御系モジュール６と被制御系モジュール７との間で入出力データ（ＩＯデータ）を遣り取りするための共有メモリ５１とを備え、システムタイマ５２の値に基づいて各イベントに対応する制御系モジュール６または被制御系モジュール７の対応ブロックを起動する。
【００２７】
制御系モジュール６と被制御系モジュール７との間の入出力情報の受け渡しは、システム管理モジュール５を経由して行われる。制御系モジュール６とシステム管理モジュール５との間の入出力情報には、“起動（イベント時刻付）”や、“ＩＯデータ（時刻付）”や、“ＩＯデータ”が含まれる。システム管理モジュール５と被制御系モジュール７の間の入出力情報には、“起動（時刻付）”や、“ＩＯデータ（時刻付）”や、“ＩＯデータ”が含まれる。
【００２８】
システムタイマ５２は、当該シミュレーション実行部ＳＭの基準時刻を規定するもので、システム管理モジュール５により起動制御される制御系モジュール６及び被制御系モジュール７の所定の割込み処理ブロックは、システムタイマ５２に基づいて動作する。つまり、制御系モジュール６と被制御系モジュール７の夫々はシステムタイマ５２に基づいて同一の仮想時間上で動作する。
【００２９】
制御系モジュール６と被制御系モジュール７には、共有メモリ５１との間で、各イベントに関する時刻付のＩＯデータを書き込みまたは読み出す制御系モジュール側ＩＯドライバ６１及び被制御系モジュール側ＩＯドライバ７１を備えている。
【００３０】
例えば、制御系モジュール側ＩＯドライバ６１から共有メモリ５１に書き込まれる点火信号や燃料噴射信号等のパルス信号や、被制御系モジュール側ＩＯドライバ７１から共有メモリ５１に書き込まれるエンジン回転数や速度センサ信号等のパルス信号等のタイミング依存のＩＯデータは、システムタイマ５２の時刻と関連付けられて管理される（図中点線枠１３）。
【００３１】
また、例えば、制御系モジュール側ＩＯドライバ６１及び被制御系モジュール側ＩＯドライバ７１の双方において共有メモリ５１に読み書きされる、インテリジェントＩＣとの通信等におけるシリアル通信データや、ＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等の入出力データ等のタイミング非依存のＩＯデータは、システムタイマ５２の時刻と関連付けられることなく管理される（図中点線枠１４）。
【００３２】
つまり、システム管理モジュール５は、制御系モジュール６または被制御系モジュール７から共有メモリ５２に書き込まれたＩＯデータに基づいて、イベントの要求を検出すると、それらのイベント要求を集約してシステムタイマ５２により更新される時刻を各イベントに設定して共有メモリ５１に蓄積する。
【００３３】
ここで、制御系モジュール６または被制御系モジュール７のＩＯドライバを介して共有メモリ５２に書き込まれるＩＯデータは、システム管理モジュール５により管理されるイベントに関するデータのみならず、制御系モジュール６と被制御系モジュール７の間で制御演算または模擬演算に必要なＩＯデータも含まれる。
【００３４】
詳述すると、図５に示すように、共有メモリ５１は、仮想ＩＯレジスタ５４とイベントリスト５３を備えて構成されている。
【００３５】
仮想ＩＯレジスタ５４は、ＩＯデータを記憶する外部ＩＯデータ部５６と、当該ＩＯデータの入出力対象となる割込み処理ブロックに対応する割込みフラグを管理する割込管理部５５を備えている。
【００３６】
外部ＩＯデータ部５６に設定されるＩＯデータは、制御系モジュール６または被制御系モジュール７が組み込まれる制御装置の実機（以下、「実機装置」と記す。）に対して入出力されるパルス信号やシリアル通信データ等の制御信号を模擬して構成され、パルス信号のエッジ発生時刻やエッジ周期、あるいは、電圧値や電流値等の当該制御信号が、実機装置の入出力ポートで解析された後にレジスタ等の記憶領域に設定される電子データとして構成されている。
【００３７】
イベントリスト５３は、制御系モジュール６または被制御系モジュール７へのＩＯデータの入出力要求を示すイベント毎に、イベントの起動時刻と、ＩＯデータを入力または出力することを示すイベント内容と、当該ＩＯデータを外部ＩＯデータ部５６に設定した割込み処理ブロックや当該ＩＯデータの種類等、ＩＯデータ及びイベントの要求元に関連する情報を示す取得元情報と、イベント発生に関連して起動対象の割込み処理ブロックを示すアクション情報と、を記憶するように構成されている。
【００３８】
システム管理モジュール５は、システムタイマ５２の値に基づいて、イベントリスト５３から直近の起動時刻を示すイベントを抽出し、当該イベントのアクション情報に基づいて、割込管理部５５に設定された割込みフラグに対応する割込み処理ブロックを起動対象とし、当該割込み処理ブロックに対応するＩＯドライバ６１−１,７１を起動して、当該割込み処理ブロックを起動したことを示す割込みフラグを設定する。また、システム管理モジュール５は、当該イベントの取得元情報に基づいて、起動した割込み処理ブロックに対して入出力するＩＯデータを外部ＩＯデータ部５６から取得し、当該取得したＩＯデータを当該ＩＯドライバ６１−１,７１に入力する。
【００３９】
図５に示すように、制御系モジュール６は、仮想内部レジスタ６３と、ＩＯドライバ６１と、割込コントローラ６２と、制御ソフトウェア６８と、を備えている。
【００４０】
仮想内部レジスタ６３は、制御系モジュール６が組み込まれるＥＣＵのマイクロコンピュータ（以下、「実機マイコン」と記す。）に備えられたＲＡＭ、不揮発性メモリ、及び入出力ポート等に設けられたＥＣＵ内部のレジスタを模擬して、ＣＰＵボード１０上のメモリに構成されている。
【００４１】
仮想内部レジスタ６３は、割込み処理ブロックの処理内部で利用するデータの記憶領域としてだけでなく、割込み処理ブロックから制御系モジュール６の外部に対するＩＯデータの記憶領域としても利用されるように構成されている。
【００４２】
ＩＯドライバ６１−１は、割込コントローラ６２若しくは仮想内部レジスタ６３と共有メモリ５１との間に備えられ、割込み処理ブロックの実行時に実機マイコンに備えられた入出力ポートが実行する処理を模擬して構成されている。
【００４３】
具体的には、ＩＯドライバ６１−１は、システム管理モジュール５により起動され、さらに、外部ＩＯデータ部５６から取得したＩＯデータが入力されると、所定の割込み処理ブロックを起動するよう割込みコントローラ６２へ要求する。また、ＩＯドライバ６１−１は、入力されたＩＯデータを仮想内部レジスタ６３に設定するとともに、割込管理部５５の当該割込み処理ブロックに対応する割込みフラグをリセットする。
【００４４】
さらに、ＩＯドライバ６１−１は、後述する割込み処理ブロックからの制御系モジュール６の外部に対するＩＯデータの出力要求に基づいて、仮想内部レジスタ６３から当該ＩＯデータを取得し、当該取得したＩＯデータを外部ＩＯデータ部５６に設定するとともに、当該ＩＯデータの出力先の処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００４５】
ＩＯドライバ６１−１は、実機マイコンの入出力ポートの入出力処理に対応して、例えば、制御系モジュール６の外部からのパルス入力信号の入力処理を模擬するキャプチャ部６４、制御系モジュール６の外部へのパルス出力信号の出力処理を模擬するコンペア部６５、例えば外部のインテリジェントＩＣとシリアル通信データの通信を行う通信部６６、例えばＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、入力されるデータであればデータを読み込み、出力されるデータであればデータを出力するデータの入出力処理を兼用するＩＯポート部６７等を備えている。
【００４６】
割込コントローラ６２は、実機マイコンに備えられたＣＰＵにおける割込み処理制御を模擬して構成されている。具体的には、割込コントローラ６２は、ＩＯドライバ６１−１からの割込み処理ブロックの起動要求に基づいて、制御ソフトウェア６８に含まれる要求された割込み処理ブロックを起動するように構成されている。
【００４７】
ＩＯドライバ６１−２は、制御ソフトウェア６８と仮想内部レジスタ６３の間に備えられ、実機マイコンに備えられたＣＰＵにより実機マイコンに備えられたＲＡＭ、不揮発性メモリ及び入出力ポート等に設けられたＥＣＵ内部のレジスタをアクセスするレジスタ操作処理を模擬して構成されている。
【００４８】
具体的には、ＩＯドライバ６１−２は、割込み処理ブロックからのデータの入力要求に基づいて起動され、当該要求された入力データを仮想内部レジスタ６３から取得する。また、ＩＯドライバ６１−２は、割込み処理ブロックからのデータの出力要求に基づいて起動され、割込み処理ブロックの処理内部で利用するデータを仮想内部レジスタ６３に記憶する。
【００４９】
制御ソフトウェア６８は、実機マイコンに備えられたＣＰＵで稼働可能なオブジェクトコードで構成されている制御プログラムを模擬して構成され、複数の割込み処理ブロックを備え、ＣＰＵボード１０上のＣＰＵで稼働可能なオブジェクトコードで構成されている。
【００５０】
割込み処理ブロックが制御系モジュール６の外部へＩＯデータを出力する場合、割込み処理ブロックは、ＩＯドライバ６１−２を介して仮想内部レジスタ６３へ当該ＩＯデータを設定した後、当該ＩＯデータの出力先の割込み処理ブロックへの出力処理を模擬するＩＯドライバ６１−１を起動し、当該ＩＯデータを出力先の割込み処理ブロックへ出力するよう要求する。
【００５１】
ＩＯドライバ７１は、「ハードウェアモデル」とも呼ばれ、制御系モジュール６に備えられたＩＯドライバ６１−１と同様に、所定の処理ブロックの実行時に、被制御系モジュール７に対応する実機装置に備えられた入出力ポートが実行する入出力処理を模擬して構成されている。
【００５２】
具体的には、ＩＯドライバ７１は、システム管理モジュール５により起動され、さらに、外部ＩＯデータ部５６から取得したＩＯデータが入力されると、割込管理部５５の当該入力ポートに対応する割込みフラグをリセットし、所定の処理ブロックを起動する。
【００５３】
さらに、ＩＯドライバ７１は、処理ブロックの実行中に、例えば、エンジン回転数や速度センサ信号等、制御系モジュール６に対して出力される制御信号を模擬したＩＯデータを取得し、当該ＩＯデータを外部ＩＯデータ部５６に設定するとともに、当該ＩＯデータの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００５４】
ＩＯドライバ７１は、被制御系モジュール７が示す実機装置に備えられた入出力ポートの入出力処理に対応して、例えば、制御系モジュール６のキャプチャ部６４に対するパルス信号の出力処理を模擬するパルス出力部７２−１、制御系モジュール６のコンペア部６５からのパルス信号の入力処理を模擬するパルス入力部７２−２、例えば外部のインテリジェントＩＣとシリアル通信データの通信を行うシリアル通信部７３−１、例えばＩＧスイッチ、スタータスイッチやエアコンのマグネットクラッチ等から、出力するデータであればデータを書き込み、入力されるデータであればデータを入力するデータの入出力処理を兼用するＩＯポート部７３−２等を備えている。
【００５５】
即ち、車両を制御するＥＣＵと、ＥＣＵにより制御される例えばエンジン等の車両側装置により構成される制御システムがシミュレーション実行部ＳＭで模擬される。尚、シミュレーション実行部ＳＭで模擬される制御システムは、エンジンシステムに限るものではなく、ブレーキシステム、変速機システム等の車両を構成する任意の機能ブロックが対象となる。
【００５６】
以下、上述の構成に基づいて、シミュレーション実行部ＳＭの動作例を、図６に示すタイミングチャートに基づいて説明する。
【００５７】
図６の（ａ），（ｂ），（ｃ），（ｄ）の上下の各欄は、夫々システム管理モジュール５、制御系モジュール６、被制御系モジュール７、システムタイマ５２の動作を示し、横軸は時間軸として、各イベントに対応して時刻ｔ０，ｔ１，・・・，ｔ５が付されている。さらに、各イベントの内容が記憶されたイベントリスト５３を図７に示す。
【００５８】
システム管理モジュール５は、先ず、イベントリスト５３に格納された直近のイベントを抽出すると、システムタイマ５２の時刻ｔ０で、内部で１ｍｓｅｃ．インタバルの割込みイベントを発生させる。
【００５９】
システム管理モジュール５は、イベントの取得元情報に基づいて、１ｍｓｅｃ．を示す値を外部ＩＯデータ部５６に設定し、イベントのアクション情報に基づいて、制御系モジュール６のインタバル割込み処理ブロックに対応する割込みフラグ及び被制御系モジュール７のメイン処理ブロックに対応する割込みフラグを割込管理部５５に設定する。
【００６０】
尚、制御系モジュール６及び被制御系モジュール７は、それぞれの実機装置において、不定期に入出力ポートに対して入出力される割込み処理要求に応じるために、定時処理ブロックを所定周期で繰り返し実行し、各定時処理ブロックの実行後のタイミングと同期して、割込み処理要求に応じるように構成されている。この構成を模擬して、制御系モジュール６及び被制御系モジュール７では、各定時処理ブロックを模擬した、上述のインタバル割込み処理ブロックが実行される。以後、システム管理モジュール５では、後に発生する他のイベントと１ｍｓｅｃ．インタバルの割込みイベントが時系列的にスケジューリングされ、イベントリスト５３にスケジューリングしたデータが格納される。
【００６１】
図６及び図７に戻り、上述の割込みイベントに応じて、システム管理モジュール５は、インタバル割込み処理ブロックに対応したＩＯドライバ６１−１及びメイン処理ブロックに対応したＩＯドライバ７１を起動し、外部ＩＯデータ部５６に設定されたＩＯデータをＩＯドライバ６１−１に入力し、インタバル割込み処理ブロック及びメイン処理ブロックを起動したことを示す割込みフラグを割込管理部５５に設定する。
【００６２】
起動されたＩＯドライバ６１−１は、システム管理モジュール５から入力された１ｍｓｅｃ．を示すＩＯデータを制御系モジュール６の仮想内部レジスタ６３に設定し、割込コントローラ６２にインタバル割込み処理ブロックの起動を要求するとともに、割込管理部５５に設定されたインタバル割込み処理ブロックに対応する割込みフラグをリセットする。割込コントローラ６２は、ＩＯドライバ６１−１からの起動要求に基づいて、インタバル割込み処理ブロックを起動する。
【００６３】
一方、起動されたＩＯドライバ７１は、割込管理部５５に設定されたメイン処理ブロックに対応する割込みフラグをリセットして、メイン処理ブロックを起動する。
【００６４】
制御系モジュール６が１ｍｓｅｃ．のインタバル割込み処理ブロックの起動中に、図６のａ１のタイミングで、ＩＯドライバ６１−１を介して外部ＩＯデータ部５６に何らかのデータ（例えばＩＯパルス）を設定し、当該データの出力先の処理ブロックに対応する割込みフラグを割込管理部５５に設定すると、システム管理モジュール５はイベントリスト５３に当該データの出力に対応するイベントを追加する。
【００６５】
被制御系モジュール７でのメイン処理においても、図６のａ２のタイミングで、ＩＯドライバ７１を介して外部ＩＯデータ部５６に何らかのデータ（例えばＩＯパルス）を設定し、当該データの出力先の割込み処理ブロックに対応する割込みフラグを割込管理部５５に設定すると、システム管理モジュール５はイベントリスト５３に当該データの出力に対応するイベントを追加する。
【００６６】
時刻ｔ０での被制御系モジュール７によるメイン処理にて、外部ＩＯデータ部５６にパルス発生時刻を含む何らかの出力データが設定され、割込管理部５５に制御系モジュール６の「パルス１出力」処理ブロックに対応する割込みフラグが設定されることにより、システム管理モジュール５が被制御系モジュール７からの「パルス１出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール７に対する「パルス１入力」イベントをイベントリスト５３に設定する。
【００６７】
システム管理モジュール５は、イベントリスト５３から当該設定したイベントを直近のイベントとして抽出した場合に、イベントの起動時刻、例えば時刻ｔ１で、「パルス１入力」イベントを発生させる。
【００６８】
システム管理モジュール５は、図６のｂ１のタイミングで、発生させた当該「パルス１入力」イベントのアクション情報に基づいて、パルス１出力ブロックに対応するＩＯドライバ６１−１を起動して、当該パルス１出力ブロックの要求時に外部ＩＯデータ部５６に設定されたパルス発生時刻及び何らかの出力データ（例えば、エンジン回転数）をＩＯドライバ６１−１に入力し、パルス１出力ブロックを起動したことを示す割込みフラグを割込管理部５５に設定する。
【００６９】
当該起動されたＩＯドライバ６１−１は、パルス１出力ブロックの起動を割込コントローラ６２に要求するとともに、入力されたＩＯデータを仮想内部レジスタ６３に設定し、割込管理部５５に設定されたパルス１出力ブロックに対応する割込みフラグをリセットする。
【００７０】
割込コントローラ６２は、ＩＯドライバ６１−１の要求に応じて、パルス１出力ブロックを起動する。
【００７１】
パルス１出力ブロックは、ＩＯドライバ６１−２を介して仮想内部レジスタ６３からＩＯデータを取得し、システムタイマ５２のタイマ値を基に演算処理を実行する。ここで、演算処理とは、例えば、被制御モジュール７からのＩＯデータとして取得したエンジン回転数を利用し、その回転数に応じた次回タイミングの算出を行うことである。
【００７２】
尚、演算処理中に何らかのデータを外部に対して出力する場合は、ＩＯドライバ６１−２と、仮想内部レジスタ６３と、ＩＯドライバ６１−１を介して外部ＩＯデータ部５６に当該出力するデータを設定し、割込管理部５５に出力先の処理ブロックに対応する割込みフラグを設定する。
【００７３】
システム管理モジュール５が、時刻ｔ１での制御系モジュール６のパルス出力処理による割込管理部５５の更新により「パルス２出力」要求を受けると、更新したシステムタイマ５２のタイマ値（図６のタイミングａ３）をパラメータとして、これに対応するパルス発生時刻を起動時刻とした「パルス２出力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ２にて、制御系モジュール６による「パルス２出力」処理ブロックを起動する。
【００７４】
一方、システム管理モジュール５が被制御系モジュール７から「パルス３出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした、被制御系モジュール７に対する「パルス３入力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ３にて、制御系モジュール６による「パルス３入力」処理ブロックを起動する。
【００７５】
次にシステム管理モジュール５が制御系モジュール６から「パルス４出力」要求を受けると、これに対応するパルス発生時刻を起動時刻とした「パルス４出力」イベントをイベントリスト５３に設定する。システム管理モジュール５は、例えば時刻ｔ４にて、制御系モジュール６による「パルス４出力」処理ブロックを起動する。
【００７６】
時刻ｔ５では、通信仕様に応じてシステム管理モジュール５内部で生成した「受信イベント」が発生すると、これに応答して制御系モジュール６は、それに対応した「受信」処理ブロックを起動する。
【００７７】
このようにイベントリスト５３にイベントが蓄積され、蓄積されたイベントに基づいて時系列的に制御系モジュール６または被制御系モジュール７の該当する割込み処理ブロックが起動されることによりシミュレーションが進められる。
【００７８】
ここで、システムタイマ５２で規定される制御系モジュール６または被制御系モジュール７における処理中の時間は零であり、例えば、時刻ｔ０のステップでは、時間Ｔは零となっており、イベントの発生の無い区間は処理をスキップしながら、時系列で順番にイベントが実行され、イベントに設定された時刻により時間がステップ状に進むように構成されているが、各イベントに対応した割込み処理ブロックが起動される制御系モジュール６または被制御系モジュール７ではＣＰＵタイマ１２によりイベントの実処理時間が計時される。
【００７９】
図８に示すように、システム管理モジュール５は、イベントリスト５３から直近のイベントを抽出し（Ｓ１１）、抽出したイベントの起動時刻にシステムタイマの値を更新し（Ｓ１２）、当該システムタイマ時刻で更新されるＩＯデータをＩＯドライバ６１,７１に設定して（Ｓ１３）、発生するイベント情報（割込み処理ブロックに対応する割込みフラグ等）を設定することにより（Ｓ１４）、対応する制御系モジュール６または被制御モジュール７の割込み処理ブロックを起動する（Ｓ１５）。
【００８０】
制御系モジュール６または被制御モジュール７の割込み処理ブロックは所定の演算処理を実行して、システム管理モジュール５に対してＩＯ情報の更新、イベントリスト５３の更新を要求する（Ｓ１６）。その後、処理が実行されたイベントをイベントリスト５３から削除する（Ｓ１７）。
【００８１】
図４に示すように、操作表示部ＨＳＴは、上述したシミュレーション実行部ＳＭに対してシミュレーション条件を出力するとともに、シミュレーション実行部ＳＭからシミュレーション結果を入力して、制御系モジュール６で実行される制御プログラムの評価を行うための装置である。
【００８２】
詳述すると、図４及び図５に示すように、操作表示部ＨＳＴは、シミュレーション実行部ＳＭと同期して動作し、シミュレーション実行部ＳＭにシミュレーション条件を引き渡すとともに、シミュレーション実行部ＳＭからシミュレーション結果を受け取る入出力モジュール８１と、シミュレーション条件を入力する操作画面、またはシミュレーション結果を示す出力画面を生成して表示部である液晶表示装置にＧＵＩ表示するユーザインタフェースモジュール（以下、「ＧＵＩモジュール」と記す。）８２を備えている。
【００８３】
ＧＵＩモジュール８２は、シミュレーションシステムの起動時に、シミュレーション実行部ＳＭにより実行されるシミュレーションの環境条件をオペレータが設定するための環境操作画面を生成して表示部に表示し、環境操作画面を介して環境条件が設定されると、シミュレーションの起動や停止、さらにはシミュレーション条件を設定する操作画面や、シミュレーション実行部ＳＭにより実行されたシミュレーション結果を示す出力画面を生成して表示部に表示する。
【００８４】
環境操作画面では、シミュレーション実行部ＳＭの環境条件が設定される。例えば、システム管理モジュール５で管理されるイベントの選択、共有メモリ５１を介して制御系モジュール６と被制御系モジュール７との間で遣り取りされるＩＯデータの選択及びメモリマップの定義等である。
【００８５】
環境操作画面で設定された環境条件は、入出力モジュール８１を介してシミュレーション実行部ＳＭに送信され、システム管理モジュール５を介して制御系モジュール６、被制御系モジュール７の夫々に配信され、シミュレーション実行部ＳＭの初期条件が設定される。
【００８６】
図３に示すように、操作画面は、シミュレーションの起動スイッチや停止スイッチ、さらにはイグニッションスイッチ、アクセルペダル操作スイッチ、変速レバー操作スイッチ等のエンジンを操作するために必要な操作スイッチや、スピードメータ、タコメータ、水温計、電圧計等のエンジン状態をモニタする計器がグラフィック表示される操作画面である。
【００８７】
操作画面を介してオペレータにより設定された操作情報は、入出力モジュール８１を介してシミュレーション実行部ＳＭに送信され、システム管理モジュール５で対応するイベントが生成されて、対応するイベントが制御系モジュール６または被制御系モジュール７で処理される。
【００８８】
シミュレーション実行部ＳＭにより実行されたシミュレーション結果が、システム管理モジュール５を介して操作表示部ＨＳＴの入出力モジュール８１に送信され、ＧＵＩモジュール８２に引き渡される。
【００８９】
さらに、図４に示すように、ＣＰＵボード１０上には、上述のシミュレーションシステムを構成するシミュレーションプログラムの開発を行うプログラム開発部ＤＭが備えられている。プログラム開発部ＤＭは、逆アセンブル実行部１５と、レジスタ操作コード抽出部１６と、逆コンパイル部１７と、レジスタ操作コード付加部１８と、クロスコンパイル部１９と、を備えている。
【００９０】
逆アセンブル実行部１５は、実機マイコンに移植されるオブジェクトコードを逆アセンブルしてアセンブラコードを生成するよう構成されている。実機マイコン提供元の外部組織等から提供されたオブジェクトコードは、実機マイコンに備えられたＣＰＵにより動作可能に構成されているため、そのままでは、上述のシミュレーションシステムを稼働させるパソコンＰＣに備えられたＣＰＵで動作させることができない。したがって、逆アセンブル実行部１は、提供されたオブジェクトコードを逆アセンブルして、パソコンＰＣに備えられたＣＰＵのアーキテクチャに対応するアセンブラコードを生成する。
【００９１】
レジスタ操作コード抽出部１６は、逆アセンブル実行部１５で得られたアセンブラコードに含まれ、実機マイコンに備えられたＣＰＵにより実機マイコンのレジスタをアクセスするレジスタ操作コードを自動抽出するよう構成されている。
【００９２】
例えば、図５に示す制御ソフトウェア６８の割込み処理ブロックの一部は、図９（ａ）に示すアセンブラコードで構成されている。アセンブラコードは、ＣＰＵが処理する操作（以下、「命令」と記す。）毎に記載された、命令を示すニーモニックと、定数、レジスタ、あるいは、メモリ等の命令対象を示すオペランドにより構成されている。レジスタ操作コード抽出部１６は、例えば、図９（ａ）の下線部に示すように、オペランドにレジスタのアドレスが記載された行をレジスタ操作コードと判断し、当該行を自動抽出してＣＰＵボード１０上のメモリに記憶する。尚、レジスタ操作コード抽出部１６は、ニーモニックの内容に基づいて、レジスタ操作コードであるか否かを判断するように構成しても構わない。
【００９３】
逆コンパイル部１７は、逆アセンブル実行部１５で生成されたアセンブラコードを逆コンパイルして汎用のコンパイラコードを生成するように構成されている。アセンブラコードは、ＣＰＵに対する命令を詳細まで記載できる反面、人間にとってはわかりにくいコードであるため、逆コンパイル部１７は、アセンブラコードを逆コンパイルして、人間にとってわかりやすいコードである、Ｃ言語等の高級言語で記載されたソースコードであるコンパイラコードを生成する。例えば、図９（ａ）に示したアセンブラコードは、逆コンパイル部１７により、図９（ｂ）に示す、Ｃ言語で記載したコンパイラコードに変換される。
【００９４】
レジスタ操作コード付加部１８は、逆コンパイル部１７で得られたコンパイラコードに、レジスタ操作コード抽出部１６で抽出されたレジスタ操作コードにより実機マイコンのレジスタに替えて仮想内部レジスタ６３及び外部ＩＯデータ部５６がアクセスされるように模擬する仮想レジスタ操作コードを付加するように構成されている。
【００９５】
例えば、図９（ｃ）に示すように、レジスタ操作コード付加部１８は、レジスタ操作コード抽出部１６により抽出されたレジスタ操作コードを示す１行目から４行目の記載に続いて、５行目に仮想レジスタ操作コードを付加したコンパイラコードを生成する。
【００９６】
詳述すると、図９（ａ）（ｂ）に示すように、１行目及び４行目のコードは、実機マイコンの入出力ポートに備えられたＩＯレジスタに対する入出力処理を示し、２行目及び３行目のコードは、実機マイコンにおけるＣＰＵによりアクセスされる内部レジスタに対する入出力処理を示している。即ち、図５に示すように、当該ＩＯレジスタ及び内部レジスタは、上述のシミュレーションシステムにおける仮想内部レジスタ６３として模擬され、それぞれ、図９（ｂ）に示すコンパイラコードのｓｔ＿Ｉｏｒｅｇ、ｓｔ＿ＣｐｕＲｅｇとして構成されている。したがって、１行目から４行目のコードにより、仮想内部レジスタ６３への入出力処理を実現するＩＯドライバ６１−２が構成されている。
【００９７】
ただし、当該コンパイラコードを上述のシミュレーションシステムで稼働可能にするためには、図９（ｂ）に示すコンパイラコードに加えて、制御系モジュール６の外部とのＩＯデータの入出力処理を模擬するＩＯドライバ６１−１を介して、当該ＩＯデータを入出力先の割込み処理ブロックへ入出力する処理を付加する必要がある。
【００９８】
そこで、レジスタ操作コード付加部１８により付加された仮想レジスタ操作コードは、仮想内部レジスタ６３に設定されたＩＯデータを、ＩＯドライバ６１−１を介して取得し、当該取得したＩＯデータを出力先の割込み処理ブロックへ出力するように構成されている。尚、ここで、ｖＩＯＤ＿ＭｒｅｇＩｆは、ＩＯドライバ６１−１を起動する関数を示し、第一引数の「１２」は、外部ＩＯデータ部５６の所定の領域を示し、第二引数のｓｔ＿ＣｐｕＲｅｇ.ｅａｘは、仮想内部レジスタ６３に設定されたＩＯデータを示す。
【００９９】
クロスコンパイル部１９は、レジスタ操作コード付加部１８で仮想レジスタ操作コードが付加されたコンパイラコードをクロスコンパイルして、シミュレーションシステムを稼働させる汎用コンピュータのＣＰＵで実行可能なオブジェクトコードに変換するように構成されている。
【０１００】
即ち、上述のプログラム開発部ＤＭにより本発明によるシミュレーションプログラム生成装置が構成されている。
【０１０１】
以下では、上述の構成、または、図４、図５及び図１０に基づいて、プログラム開発部ＤＭによるシミュレーションプログラム生成方法について説明する。
【０１０２】
先ず、逆アセンブル実行部１５により、外部組織等から提供されたマイクロコンピュータに移植されるオブジェクトコードを、逆アセンブルしてアセンブラコードを生成する（逆アセンブルステップＳ２１）。
【０１０３】
続いて、レジスタ操作コード抽出部１６により、逆アセンブルステップＳ２１で得られたアセンブラコードに含まれ、ＣＰＵによりマイクロコンピュータのレジスタをアクセスするレジスタ操作コードを自動抽出する（レジスタ操作コード抽出ステップＳ２２）。
【０１０４】
続いて、逆コンパイル部１７により、逆アセンブルステップＳ２１で得られたアセンブラコードを逆コンパイルして汎用のコンパイラコードを生成する（逆コンパイルステップＳ２３）。
【０１０５】
続いて、レジスタ操作コード付加部１８により、逆コンパイルステップＳ２３で得られたコンパイラコードに、レジスタ操作コード抽出ステップＳ２２で抽出されたレジスタ操作コードにより当該レジスタに替えて汎用コンピュータ上で定義される仮想レジスタとしての仮想内部レジスタ６３及び外部ＩＯレジスタ５４がアクセスされるように模擬する仮想レジスタ操作コードを付加する（レジスタ操作コード付加ステップＳ２４）。
【０１０６】
続いて、クロスコンパイル部１９によりレジスタ操作コード付加ステップＳ２４で仮想レジスタ操作コードが付加されたコンパイラコードを汎用コンピュータで実行可能な制御プログラムに変換する（クロスコンパイルステップＳ２５）。
【０１０７】
従来から、新たに実機マイコンの開発に先行して制御プログラムを開発し、当該制御プログラムを上述のシミュレーションシステムに適用して、制御プログラムのロジックを評価するためには、実機マイコンを模擬する仮想内部レジスタ６３とＩＯドライバ６１と割込コントローラ６２とを合わせて開発する必要があった。
【０１０８】
この場合、割込みコントローラ６２や仮想内部レジスタ６３は、例えば、割込み処理ブロック名と起動する割込み処理ブロックモジュールが記憶されたＲＡＭ上のアドレスとを対応づけるテーブルとして構成する、あるいは、データ名とデータ内容を対応づけるテーブルとして構成する等、他の実機マイコンの制御ソフトウェア３８を作成する場合にも利用可能なように汎用化することは可能である。
【０１０９】
ただし、ＩＯドライバ６１は、実機マイコンの提供元毎に仕様が異なることがあり、実機マイコンの提供元毎に共通化することは可能であっても、実機マイコンの提供元が相違しても利用可能なように汎用化することは困難である。
【０１１０】
上述の構成によれば、制御プログラムは、既存の実機マイコンの提供元から提供されたオブジェクトコードを逆アセンブルあるいは逆コンパイルしてソースコードを自動生成し、さらに、データの入出力処理の記載された箇所に対して、新たに作成したＩＯドライバ６１を利用するソースコードを自動で付加するため、開発効率を向上することができる。
【０１１１】
また、開発した制御プログラムを上述のシミュレーションシステムを利用してロジック評価する場合において、評価対象の制御プログラムのロジック以外に、ＩＯドライバ６１等の入出力処理に関わるソースコードを追加する等の、当該制御プログラムのロジックを評価する以前にシミュレーションシステムを正常に動作させるために必要な労力を軽減することができる。
【０１１２】
以下、別実施形態を説明する。上述した実施形態では、車両を模擬したシミュレーションシステムにおけるシミュレーションプログラムを、本発明によるシミュレーションプログラム生成の対象としていたが、これに限るものではない。
【０１１３】
例えば、カメラ、携帯電話、航空機、電車、あるいは、家電製品等のマイクロコンピュータに組み込まれるプログラムをパソコンＰＣ上で稼働可能に模擬したシミュレーションプログラムを本発明によるシミュレーションプログラムの対象としても構わない。
【０１１４】
また、上述した実施形態では、逆コンパイル部１７により逆コンパイルして生成するコンパイラコードは、Ｃ言語で記載されるとしていたが、これに限るものではなく、逆コンパイル部１７は、Ｊａｖａ（Ｊａｖａは登録商標）、Ｃ＃、Ｃ＋＋言語等の高級言語で記載されたコンパイラコードを生成するように構成しても構わない。
【０１１５】
上述した実施形態は、本発明を実現する一実施例を説明するものであり、各部の具体的な構成は、本発明の作用効果を奏する限りにおいて、適宜変更設計することが可能である。
【符号の説明】
【０１１６】
５：システム管理モジュール
６：制御系モジュール
７：被制御系モジュール
１０：ＣＰＵボード
１５：逆アセンブル実行部
１６：レジスタ操作コード抽出部
１７：逆コンパイル部
１８：レジスタ操作コード付加部
１９：クロスコンパイル部
５１：共有メモリ
５２：システムタイマ
５３：イベントリスト
５４：仮想ＩＯレジスタ
５５：割込管理部
５６：外部ＩＯデータ部
６１：ＩＯドライバ（制御系モジュール）
６２：割込コントローラ
６３：仮想内部レジスタ
６８：制御ソフトウェア
６９：自己診断プログラム
７１：ＩＯドライバ（被制御系モジュール）
ＤＭ：プログラム開発部
ＨＳＴ：操作表示部
ＰＣ：パーソナルコンピュータ
ＳＭ：シミュレーション実行部
Ｓ２１：逆アセンブルステップ
Ｓ２２：レジスタ操作コード抽出ステップ
Ｓ２３：逆コンパイルステップ
Ｓ２４：レジスタ操作コード付加ステップ
Ｓ２５：クロスコンパイルステップ
【図４】
2010244377.tif 000003
【図５】
2010244377.tif 000004
【図６】
2010244377.tif 000005
【図７】
2010244377.tif 000006
【図８】
2010244377.tif 000007
【図９】
2010244377.tif 000008
【図１０】
2010244377.tif 000009
【図１】
2010244377.tif 000010
【図２】
2010244377.tif 000011
【図３】
2010244377.tif 000012