(57)【特許請求の範囲】
【請求項１】
電子制御ユニットによって制御される物理装置システムをシミュレートするためのシステムであって、
前記物理装置をソフトウェア的にシミュレートする物理装置シミュレータと、
前記物理装置シミュレータに、時刻付きの出力を与えるための、前記電子制御ユニットをソフトウェア的にエミュレートする、電子制御ユニット・エミュレータとを有し、
前記物理装置シミュレータは、前記物理装置シミュレータを固定の複数ステップ連続動作させる固定ステップ実行モジュールと、前記物理装置シミュレータを可変数のステップ動作させる可変ステップ実行モジュールと、前記固定ステップ実行モジュールまたは前記可変ステップ実行モジュールの実行完了時に、その時刻と入力と内部状態変数を、読み出し可能にロールバック表に記録するローカル・スケジューラと、前記電子制御ユニット・エミュレータからの出力を保持するためのキューをもち、
前記ローカル・スケジューラは、前記キューにある、相対的に古い前記電子制御ユニット・エミュレータからの出力の時刻に対応して、前記ロールバック表に記録されている入力と比較し、前記電子制御ユニット・エミュレータからの該出力が前記ロールバック表に記録されている該出力と不一致であることに応答して、前記電子制御ユニット・エミュレータからの該出力の時刻より前まで戻し、前記電子制御ユニット・エミュレータからの該出力の時刻まで、前記可変ステップ実行モジュールにより前記物理装置シミュレータを動作させ、その後は前記固定ステップ実行モジュールにより、前記物理装置シミュレータを動作させる、
シミュレーション・システム。
【請求項２】
前記物理装置シミュレータは、時刻付の出力を与えるものであり、
前記電子制御ユニット・エミュレータからの出力と、前記物理装置シミュレータからの出力を保持は、そのうちの最も古い出力の時刻を、確定時刻として、前記電子制御ユニット・エミュレータと、前記物理装置シミュレータに通知する、グローバル・スケジューラをさらに有する、
請求項１に記載のシミュレーション・システム。
【請求項３】
前記出力の一致の比較は、桁切り上げの数値での概数比較である、請求項１に記載のシミュレーション・システム。
【請求項４】
電子制御ユニットによって制御される物理装置システムをシミュレートするための方法であって、
コンピュータの処理により、前記物理装置システムをソフトウェア的にシミュレートする物理装置シミュレータと、前記物理装置シミュレータに、時刻付きの出力を与えるための、前記電子制御ユニットをソフトウェア的にエミュレートする、電子制御ユニット・エミュレータを実行させるステップと、
前記コンピュータの処理により、前記物理装置シミュレータを、固定の複数ステップ連続動作させる固定ステップ実行モードで動作させるステップと、
前記コンピュータの処理により、前記可変ステップ実行モジュールの実行完了時に、その時刻と入力と内部状態変数を、読み出し可能にロールバック表に記録するステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取るステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取ったことに応答して、該出力の時刻に対応して、前記ロールバック表に記録されている出力と比較し、前記電子制御ユニット・エミュレータからの該出力が前記ロールバック表に記録されている該出力と不一致であることに応答して、前記電子制御ユニット・エミュレータからの該出力の時刻より前まで戻し、前記電子制御ユニット・エミュレータからの該出力の時刻まで、可変ステップ実行モードにより前記物理装置シミュレータを動作させ、その後は前記固定ステップ実行モードで、前記物理装置シミュレータを動作させるステップを有する、
シミュレーション方法。
【請求項５】
前記出力の一致の比較は、桁切り上げの数値での概数比較である、請求項４に記載のシミュレーション方法。
【請求項６】
電子制御ユニットによって制御される物理装置システムを、コンピュータによってシミュレートするためのプログラムであって、
前記物理装置システムをソフトウェア的にシミュレートする物理装置シミュレータと、前記物理装置シミュレータと、
時刻付きの出力を与えるための、前記電子制御ユニットをソフトウェア的にエミュレートする、電子制御ユニット・エミュレータとをもち、
前記コンピュータに、
前記物理装置シミュレータを、固定の複数ステップ連続動作させる固定ステップ実行モードで動作させるステップと、
前記可変ステップ実行モジュールの実行完了時に、その時刻と入力と内部状態変数を、読み出し可能にロールバック表に記録するステップと、
前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取るステップと、
前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取ったことに応答して、該出力の時刻に対応して、前記ロールバック表に記録されている出力と比較し、前記電子制御ユニット・エミュレータからの該出力が前記ロールバック表に記録されている該出力と不一致であることに応答して、前記電子制御ユニット・エミュレータからの該出力の時刻より前まで戻し、前記電子制御ユニット・エミュレータからの該出力の時刻まで、可変ステップ実行モードにより前記物理装置シミュレータを動作させ、その後は前記固定ステップ実行モードで、前記物理装置シミュレータを動作させるステップを実行させる、
シミュレーション・プログラム。
【請求項７】
前記出力の一致の比較は、桁切り上げの数値での概数比較である、請求項６に記載のシミュレーション・プログラム。
【請求項８】
電子制御ユニットによって制御される物理装置システムをシミュレートするためのシステムにおいて、コンピュータの制御によって、前記物理装置をソフトウェア的にシミュレートする物理装置シミュレータの制御方法であって、
前記物理装置シミュレータを、固定の複数ステップ連続動作させる固定ステップ実行モードで動作させるステップと、
前記コンピュータの処理により、前記可変ステップ実行モジュールの実行完了時に、その時刻と入力と内部状態変数を、読み出し可能にロールバック表に記録するステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取るステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取ったことに応答して、該出力の時刻に対応して、前記ロールバック表に記録されている出力と比較し、前記電子制御ユニット・エミュレータからの該出力が前記ロールバック表に記録されている該出力と不一致であることに応答して、前記電子制御ユニット・エミュレータからの該出力の時刻より前まで戻し、前記電子制御ユニット・エミュレータからの該出力の時刻まで、可変ステップ実行モードにより前記物理装置シミュレータを動作させ、その後は前記固定ステップ実行モードで、前記物理装置シミュレータを動作させるステップを有する、
制御方法。
【請求項９】
前記出力の一致の比較は、桁切り上げの数値での概数比較である、請求項８に記載の制御方法。
【請求項１０】
電子制御ユニットによって制御される物理装置システムをシミュレートするためのシステムにおいて、コンピュータの制御によって、前記物理装置をソフトウェア的にシミュレートする物理装置シミュレータの制御プログラムであって、
前記コンピュータをして、
前記物理装置シミュレータを、固定の複数ステップ連続動作させる固定ステップ実行モードで動作させるステップと、
前記コンピュータの処理により、前記可変ステップ実行モジュールの実行完了時に、その時刻と入力と内部状態変数を、読み出し可能にロールバック表に記録するステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取るステップと、
前記コンピュータの処理により、前記物理装置シミュレータが、前記電子制御ユニット・エミュレータから出力を受け取ったことに応答して、該出力の時刻に対応して、前記ロールバック表に記録されている出力と比較し、前記電子制御ユニット・エミュレータからの該出力が前記ロールバック表に記録されている該出力と不一致であることに応答して、前記電子制御ユニット・エミュレータからの該出力の時刻より前まで戻し、前記電子制御ユニット・エミュレータからの該出力の時刻まで、可変ステップ実行モードにより前記物理装置シミュレータを動作させ、その後は前記固定ステップ実行モードで、前記物理装置シミュレータを動作させるステップを実行させる、
制御プログラム。
【請求項１１】
前記出力の一致の比較は、桁切り上げの数値での概数比較である、請求項１０に記載の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などに使用されるエンジンなどの機構装置のテストに関し、より詳しくは、ソフトウェア・ベースでの機構装置シミュレータのテストに関するものである。
【背景技術】
【０００２】
自動車は、その初期の時代の２０世紀初頭は、動力としてのエンジンと、ブレーキ、アクセル、ハンドル、トランスミッション、サスペンジョンを含む、機構部品からなっていたが、エンジンのプラグの点火、ヘッドライト以外は、電気的な仕組みはほとんど利用していなかった。
【０００３】
ところが、１９７０年代頃から、大気汚染、石油危機などに備えて、エンジンを効率的に制御する必要性が生じ、このためエンジンの制御に、ＥＣＵが使用されるようになってきた。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成される。
【０００４】
ここで、ＥＣＵに信号を入力するセンサには、エンジンの温度などを計測する温度センサ、エンジンに吸入される圧力を推定するための圧力センサ、アクセスペダルの踏み量を測定するスロットル・ポジション・センサ、ステアリング舵角センサ、車高センサ、回転速度センサ、ノックセンサ、加速度センサ、流量センサ、酸素センサ、希薄空燃比センサなどがある。
【０００５】
一方、ＥＣＵの出力信号によって駆動されるアクチュエータには、電磁ソレノイド及びモータ等がある。ソレノイドは例えば、エンジンのインジェクタ、トランスミッションのシフト・コントロール、ブレーキのバルブ制御、ドアロックなどに使用される。
【０００６】
モータは、主としてサーボ機構として、エンジンのスタータ、エンジンのフューエル・コントロール、ブレーキの油圧ポンプ、舵角制御、ステアリング、ワイパ、パワーウインドウ、シートベルト、エアバックなどに使用される。
【０００７】
１９７０年代は、ＥＣＵの主要な用途は、エンジンを効率的に制御することであったが、１９８０年代になると、それだけに限らず、より安全に、快適に自動車を走らせることに、ＥＣＵが使用され始めてきて、現在では、自動車一台に５０個を越えるＥＣＵが搭載されることが多くなってきている。このように多数のＥＣＵが自動車に搭載されると、開発段階で、複数のＥＣＵがきちんと適正に協働して動作するかどうかをテストするのが非常に大変になってくる。
【０００８】
このようなテストにために従来行われている技法として、ＨＩＬＳ(Hardware In the Loop Simulation)がある。特に、自動車全体のＥＣＵをテストする環境は、フルビークルＨＩＬＳと呼ばれる。フルビークルＨＩＬＳにおいては、実験室内で、本物のＥＣＵが、エンジン、トランスミッション機構などをシミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ＥＣＵからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
【０００９】
しかし、ＨＩＬＳは、専用のハードウェア装置を使い、それと本物のＥＣＵの間を実際に配線しなくてはならないので、準備が大変である。また、別のＥＣＵに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のＥＣＵを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、ＨＩＬＳのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
【００１０】
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、ソフトウェアで構成する手法が存在する。この手法は、ＳＩＬＳ(Software In the Loop Simulation)と呼ばれ、ＥＣＵに搭載されるマイクロコンピュータ、入出力回路、制御のシナリオ、エンジンやトランスミッション機構などの機構装置などを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、ＥＣＵのハードウェアが存在しなくても、テストを実行可能である。
【００１１】
特開平１１−１４５０７号公報は、車両全体のロジックを机上で検証できるようにすることを課題とするものであり、エンジン制御模擬装置（ＥＣＵ）と、車両制御模擬装置からなる車両シミュレーション装置を開示する。ＥＣＵは、エンジンモデルの制御パラメータを演算し、その演算結果を車両制御模擬装置に送信する。車両制御模擬装置は、ＥＣＵから送られてくる制御パラメータを用いて車両モデルの各部の状態量を演算してその演算結果をＥＣＵに返送する。車両モデルは、ドライバモデル、吸気系モデル、燃料系モデル、燃焼系モデル、エンジン温推定モデル、駆動系モデル、触媒モデル、Ａ／Ｆセンサモデル、リアＯ2 センサモデルから構成されている。ドライバモデルは、目標車速の変化パターンを入力する車速パターン入力手段を有する。
【００１２】
特開２００１−３３１３４６号公報は、実機が完成していなくてもあたかも実機があるかのように制御プログラムのデバッグを行うことが可能なシミュレータを提供するものであって、制御ＣＰＵにより制御情報をメモリに書き込み、シミュレーション用ＣＰＵによりメモリに書き込まれた制御情報をバスを介して読み出し、この制御情報に基づくシミュレーションを実行し、このシミュレーションの結果をバスを介してメモリに書き込み、制御ＣＰＵによりメモリに書き込まれたシミュレーションの結果を読み出すことを開示する。
【００１３】
特開２００３−３１６６０３号公報は、実機のハードウェア開発よりもプログラム開発の方が先行した場合でも、実機デバイスの完成を待たずにプログラム検証が可能な検証システムに関し、実機デバイスの仕様に対応したＩＣＥデバッガと、新規プログラムに対応する実機デバイスの仕様をシミュレーションする仮想デバイスとの間に、仮想デバイスからのコマンド等をＩＣＥデバッガに適合させるべく変換処理等を行うブリッジを設けることを開示する。
【００１４】
特開２００８−１２６１号公報は、車両制御のデータ処理装置において、マルチ入出力のデータバッファ機能を有するデータ授受処理部５により、初期設定状態ではデータ受信部が受信したデータを一時保持して入出力端子部に出力し、シミュレーション指令により初期設定状態からシミュレーション状態に切り替わることにより入出力端子部に入力された収集結果のデータを一時保持し、演算処理部６によりデータ授受処理部に一時保持されるデータに基づいて車両制御の演算を実行し、演算結果の車両制御のデータをバス接続端子部に出力することにより、開発・評価のデータ収集、シミュレーション及び常備搭載を可能にすることを開示する。
【００１５】
特開２００８−８４１２１号公報は、所定のシミュレーションを実行するシミュレータにおけるシミュレーションの環境条件を管理するスレーブ管理装置ＳＰＣを複数存在するシミュレータＳＭに対応させて複数備えるとともに、各スレーブ管理装置とネットワーク接続され、前記スレーブ管理装置を介して複数のシミュレータにおけるシミュレーションの環境条件を統括管理するマスタ管理装置を備える構成を開示する。
【００１６】
【特許文献１】特開平１１−１４５０７号公報
【特許文献２】特開２００１−３３１３４６号公報
【特許文献３】特開２００３−３１６６０３号公報
【特許文献４】特開２００８−１２６１号公報
【特許文献５】特開２００８−８４１２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかし、従来のシミュレーション技術で、フルビークルＳＩＬＳを実装しようとすると、さまざまなシナリオをテストする必要があるため、膨大な時間がかかり、現実的には、なかなか実用的なものにはならなかった。
【００１８】
この発明の目的は、フルビークルＳＩＬＳなどのシミュレーションシステムにおいて、処理速度を向上させることにある。
【課題を解決するための手段】
【００１９】
本発明によれば、好適にはマルチＣＰＵのワークステーションが使用される。また、各ＥＣＵのソフトウェア・エミュレータが用意される。一般的には、ＥＣＵのソフトウェア・エミュレータは、そのＥＣＵのメーカから入手可能である。
【００２０】
そして、これらのＥＣＵエミュレータの出力によって制御される、ソフトウェア・ベースの複数の機構装置シミュレータが用意される。機構装置シミュレータには、エンジン、ブレーキ、ドライブ・トレーン、エアコンなどに対応するものがある。ＥＣＵエミュレータと、機構装置シミュレータは、グローバル・スケジューラによって、統合的に制御される。
【００２１】
本発明によれば、物理装置シミュレータのソース・コードが事前に解析され、プログラム・コードがループ化され、固定ステップ実行モジュールと、可変ステップ実行モジュールが生成される。
【００２２】
そして、実行時、固定ステップ実行モジュールは、一気に固定数（例えば、１００）のステップを投機実行する。そして、その固定ステップ毎に、ロールバック表に入力と、内部状態と、出力を保存する。その間に、ＥＣＵエミュレータからの入力を受け付け、投機実行の結果の入力と、受け付けた入力が一致しているなら、投機成功とみなして、そのまま処理を進める。
【００２３】
もし投機実行の結果の入力と、受け付けた入力が不一致であるなら、物理装置シミュレータは、受け付けた入力に刻印されている時刻に最も近い過去の時刻まで戻って、その入力と内部状態から計算をやり直す。そして、可変ステップ実行モジュールで入力時刻まで実行したら、そこからまた、固定ステップ実行モジュールに処理を移して、高速処理を再開する。
【００２４】
グローバル・スケジューラは、ＥＣＵエミュレータと、物理装置シミュレータからの出力を受け取り、それらの出力のうち最も古い時間の出力が更新されたことに応答して、確定時刻を更新し、ＥＣＵエミュレータと物理装置シミュレータに通知する。そして、その確定時刻よりも古い出力を捨てることによって、リリース表を更新する。
【発明の効果】
【００２５】
この発明によれば、通常は物理装置シミュレータを高速で投機的に連続実行させ、実際の入力が入ってきたときのみ、投機的な入力と実際の入力を比較し、それらが不一致であることに応答して、実際の入力の時点に一番近い時点に物理装置シミュレータを戻し、実際の入力の時点まで可変ステップさせ、実際の入力の時点まで辿り着いたら、そこから高速連続実行に戻すことにより、シミュレータの処理速度を著しく向上することができる。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００２７】
本発明を実現するための構成を説明する前に、その前提として、ＥＣＵ及び物理装置について説明する。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成されるものである。
【００２８】
尚、この発明は、説明の便宜上、以下では、自動車のＥＣＵ及び物理装置に関連して説明するが、それには限定されず、航空機、ロボットなどその他のメカトロニクス物理全般に適用可能であることを理解されたい。
【００２９】
ＥＣＵは、周辺や環境状態、エンジン、ドライブ・トレーン、ブレーキ、サスペンジョン、エアコンなどの駆動物理の状態、及び人間による指示操作の内容をセンサで検出して、信号として入力する。具体的には、水温センサ、吸気温センサ、過給圧センサ、ポンプ角センサ、クランク角センサ、車速センサ、アクセル位置センサ、Ａ／Ｔシフト・ポジション、スタータ・スイッチ、エアコンＥＣＵなどからの信号がある。
【００３０】
ＥＣＵは、これらの信号を入力して、電磁スピル弁、フュエル・カット・ソレノイド、タイミング・コントロール・バルブ、吸気絞りＶＳＶ、グロー・プラグ・リレー、タコメータ及びエアコン・リレーなどを駆動する信号を出力する。
【００３１】
１つのＥＣＵが複数の異なる物理を制御するための駆動信号を出力するようにすることは不可能ではないが、例えば、エンジンとエアコンのように、応答性やその制御の厳密性が異なるものを単一のＥＣＵで制御することは合理的でなく、従って、一般的に自動車にＥＣＵは複数個、最近では好適には４０個以上設けられる。
【００３２】
図１は、ＥＣＵ及び物理装置からなるシステムの典型的な制御である、フィードバック閉ループ系の例を示す図である。すなわち、図１において、ある目標の信号が、ＥＣＵであるコントローラ１０２に入力され、ＥＣＵは、目標の信号を内部処理することによって、駆動信号を出力し、制御対象モデルである、エンジンなどの物理装置（プラント）１０４を駆動し、プラント１０４の出力は、センサ１０６を介して、コントローラ１０２の入力にフィードバックされる。
【００３３】
ここで目標信号として与えられるのは、例えば、スロットル開度、アイドル・コントロール、ブレーキ力、シフト、スタータＯＮ・ＯＦＦ、バッテリ電圧、インジェクション通電時間、インジェクション通電回数、デポジット、ドウェル角、進角値、吸気完了フラグ、点火完了フラグ、大気圧、車両重量、転がり抵抗係数、道路勾配、粘着係数、吸気温、などのパラメータである。
【００３４】
また、センサ信号としてフィードバックされるのは、スロットル開度、吸気圧力、吸入空気量、シフト、エンジン回転数、車速、排気温、Ｏ２、冷却水温、空燃比、ノック、点火異常、などである。
【００３５】
ＥＣＵが制御する対象は、ニュートンの力学方程式で解かれる、物理系システムであったり、電気回路の応答方程式で解かれる電気駆動回路であったり、ナビエ・ストークスの偏微分方程式で解かれる粘性流体系、あるいは、それらの組み合わせであったりする。これらは、制御工学によれば、ラプラス変換によって応答関数に変換されて、記述することができる。
【００３６】
図２は、そのような応答関数による記述の例である。図２で破線２０２で囲った箇所が、図１のコントローラ１０２に対応し、破線２０４で囲った箇所が、図１のプラント１０４に対応し、センサ１０６が、ブロック２０６に対応する。なお、図２は、応答関数による表現の一例であって、特に本発明を限定する意図はないことを理解されたい。
【００３７】
さて、前述したＳＩＬＳのようなシステムのテストの目的で、自動車部品メーカーは、自社が提供する機器のＥＣＵのソフトウェア・エミュレータを提供する。すなわち、図２に示すような機能を、アセンブラまたはＣなどの言語が書かれたコードをアセンブリまたはコンパイルした実行可能プログラムにより、純粋にソフトウェア的に実現する。
【００３８】
また、ＳＩＬＳにおけるドライブ・トレーン、ブレーキ、サスペンジョン、エアコンなどの駆動物理のシミュレータは、自動車メーカ、電機メーカその他によって提供される。これらも、アセンブラまたはＣなどのコンピュータ・プログラムによって、ソフトウェア的に実現されたものである。
【００３９】
次に、図３を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図３において、ホスト・バス３０２には、複数のＣＰＵ０  ３０４ａ、ＣＰＵ１  ３０４ｂ、ＣＰＵ２  ３０４ｃ、ＣＰＵ３  ３０４ｄが接続されている。ホスト・バス３０２にはさらに、ＣＰＵ０  ３０４ａ、ＣＰＵ１  ３０４ｂ、ＣＰＵ２  ３０４ｃ、ＣＰＵ３  ３０４ｄの演算処理のためのメイン・メモリ３０６が接続されている。
【００４０】
一方、Ｉ／Ｏバス３０８には、キーボード３１０、マウス３１２、ディスプレイ３１４及びハードティスク・ドライブ３１６が接続されている。Ｉ／Ｏバス３０８は、Ｉ／Ｏブリッジ３１８を介して、ホスト・バス３０２に接続されている。キーボード３１０及びマウス３１２は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ３１４は、後述する本発明に係るプログラムをＧＵＩで操作するための画面イメージを表示するために使用される。
【００４１】
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘがある。その際、ＣＰＵ０  ３０４ａ、ＣＰＵ１  ３０４ｂ、ＣＰＵ２  ３０４ｃ、ＣＰＵ３  ３０４ｄは、例えば、インテル（Ｒ）Ｃｏｒｅ  ２  ＤＵＯであり、オペレーティング・システムは、Ｗｉｎｄｏｗｓ（商標）Ｓｅｒｖｅｒ  ２００３である。オペレーティング・システムは、ハードティスク・ドライブ３１６に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ３１６からメイン・メモリ３０６に読み込まれる。
【００４２】
尚、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘに限定されず、ＥＣＵエミュレータ・プログラム及び物理装置シミュレータ・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Ｗｉｎｄｏｗｓ（Ｒ）に限定されず、Ｌｉｎｕｘ（Ｒ）、Ｍａｃ  ＯＳ（Ｒ）など、任意のオペレーティング・システムを使用することができる。さらに、ＥＣＵエミュレータ・プログラム及び物理装置シミュレータ・プログラムを高速で動作させるために、ＰＯＷＥＲ（商標）６ベースで、オペレーティング・システムがＡＩＸ（商標）のＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｐなどのコンピュータ・システムを使用してもよい。
【００４３】
ハードディスク・ドライブ３１６にはさらに、テストするための複数のＥＣＵエミュレータ・プログラム、複数の物理装置シミュレータ・プログラム、及び、それら複数のＥＣＵエミュレータ・プログラム及び物理装置シミュレータ・プログラムを協働させてテストするための、本発明に係るプログラムが格納され、キーボード３１０及びマウス３１２によって起動操作可能である。
【００４４】
好適には、フルビークルＳＩＬＳを実現するために、１台の自動車で使われるすべてのＥＣＵのエミュレータ・プログラム及び物理装置シミュレータ・プログラムが、ハードティスク・ドライブ３１６に保存されている。
【００４５】
ハードティスク・ドライブ３１６にはさらに、後述するグローバル・スケジューラ、及び、登り坂道、高速道路、つづら折道などの様々な、テストのためのシナリオを格納したシナリオ・ジェネレータのプログラムも格納されている。
【００４６】
尚、ここでの「エミュレータ」と、「シミュレータ」の用語の使い分けであるが、もともとの、別のプロセッサで動くことを想定して書かれていたＥＣＵのコードを、ＣＰＵ０〜ＣＰＵ３などをターゲットとして動くようにすることを、エミュレーションと呼び、それを行うプログラムを、エミュレータと呼ぶ。一方、エンジンなどの物理的システムの動作を仮想計算するシステムを、シミュレータと呼ぶ。
【００４７】
図４は、本発明に係るシミュレータ・システムの動作原理を説明するクロックの概要のタイムチャートである。先ず、比較のために、図４(a)に、従来のシミュレータ・システムの動作のクロックを示す。このような従来のシミュレータ・システムは、Δt間隔で所定のクロックで動作する同期実行モニタによって駆動される。図４(a)で「物理装置シミュレータ」として示すように、基本的に、エンジン・シミュレータなどの物理装置シミュレータは、そのΔt間隔で駆動され、そのクロック毎に、ＥＣＵエミュレータからの出力があるかどうかを確認する。
【００４８】
ＥＣＵエミュレータからの出力とは、例えば、エンジンＥＣＵエミュレータの場合、燃料噴射制御信号、点火時期制御信号、ノック判定制御信号などであるが、連続的なクロックにより実行されている物理装置シミュレータに比べると、ＥＣＵエミュレータからの出力は、非常に疎らであり、且つ非同期である。例えば、燃料噴射制御信号は、エンジンの１サイクルのうち限られたフェーズにしか提供されないし、それはエンジン・シミュレータの駆動クロックよりも、はるかに疎ら、という次第である。
【００４９】
本発明は、この性質をうまく利用する。そのタイミングチャートを、図４(b)に示す。すなわち、図４(b)に示すように、物理装置シミュレータは、全体の個々のクロックに同期して動作するのではなくて、Ｎステップを一気に駆動される。これによって、物理装置シミュレータの計算動作を高速化することができる。図４(b)で、白抜きの矢印は、実際はそのクロックのタイミングでシミュレータのモジュールが呼び出されていないことを示すす。
【００５０】
ただ、Ｎステップを一気に駆動されると、その間にＥＣＵエミュレータからの出力があると、Ｎステップ連続計算で使った値との不一致が生じることがある。そこで、本発明によれば、Ｎステップ駆動毎に、入力と出力を、ロールバック表に記録していく。そうして、Ｎステップ連続計算が完了した時点で、ＥＣＵエミュレータから、関連するパラメータが出力として入ってきていれば、それを、ロールバック表の対応する入力と比較し、一致していれば、Ｎステップ連続計算の投機実行が成功とみなして、次のＮステップ連続計算に移る。
【００５１】
もしＥＣＵエミュレータからの出力が、ロールバック表の対応する入力と一致しないなら、Ｎステップ連続計算の投機実行が失敗したとみなして、シミュレーション・システムは、そのＥＣＵエミュレータからの出力が指し示す時間より前の時点に戻して、そこからステップ駆動をはじめる。そうして、ＥＣＵエミュレータからの出力が指し示す時間に到達したら、また、Ｎステップ連続計算の投機実行を再開して、ロールバック表への記録を続ける。
【００５２】
図５は、本発明に係る物理装置シミュレータの論理構成の機能ブロック図を示す。図５において、プログラムコード５０２は、エンジン・シミュレータなどの物理装置シミュレータのソースコードである。物理装置シミュレータの実行可能バイナリファイルしか入手できない場合は、逆アセンブル、逆コンパイルなどにより、ソースコードが用意される。
【００５３】
本発明によれば、事前に、物理装置シミュレータのプログラムコード５０２から、好適にはプログラム処理により自動的に、可変ステップ実行モジュール５０４と、固定ステップ実行モジュール５０６が、生成される。
【００５４】
さて、簡単のために、プログラムコード５０２は、下記のような内容だとする。
Function Integer_X(Sum, X)
{
Sum = Sum + X;
Return(Sum);
}
【００５５】
プログラムコード５０２から、可変ステップ実行モジュール５０４として、下記のコードが生成される。
Function Integer_X_N(Sum, X,N)
{
DO i = 1, N
Sum = Sum + X;
END
Return(Sum);
}
【００５６】
また、プログラムコード５０２から、固定ステップ実行モジュール５０６として、下記のコードが生成される。
Function Integer_100_speculative(Sum, X)
{
DO i = 1, 100
Sum = Sum + X;
END
Return(Sum);
}
【００５７】
要するに、図４(a)のような場合だと、１クロック毎に、下記の関数を呼び出すので、その都度、入力変数セット、関数呼び出し、出力の戻し、というオーバーヘッドがかかる。
Function Integer_X(Sum, X)
{
Sum = Sum + X;
Return(Sum);
}
これを、下記で置き換えることにより、上記関数を１００回呼び出したのと同じ効果を実現し、且つ、関数個別呼び出しのオーバーヘッドを削減することができる。ただ、本発明は、投機失敗の場合に、ロールバックする手段を提供する。
Function Integer_100_speculative(Sum, X)
{
DO i = 1, 100
Sum = Sum + X;
END
Return(Sum);
}
【００５８】
ここで、固定ステップ実行モジュール５０６の１００というステップ数は、例示的な数であり、実際のクロック数の時間間隔により、５００、あるいは１０００など、任意の適切な数を選ぶことができる。
【００５９】
尚、下記のコードがあったとき、
Function Integer_100_speculative(Sum, X)
{
DO i = 1, 100
Sum = Sum + X;
END
Return(Sum);
}
これは、コンパイラの最適化機能で、下記のようなコードとして実行可能コードに変換されることがあり、以ってさらに処理が高速化される。
Function Integer_100_speculative(Sum, X)
{
Sum = Sum + 100 * X;
Return(Sum);
}
【００６０】
ローカル・スケジューラ５０８は、コミュニケーション・インターフェース・モジュール５１０を介して入力された、ＥＣＵエミュレータからの出力を、ロールバック表５１２に記録されている対応のエントリと比較して、投機実行が成功と判断すれば、固定ステップ実行モジュール５０６を実行し、投機実行が失敗と判断すれば、可変ステップ実行モジュール５０４を実行する、という処理を行う。この処理は後で詳しく説明する。
【００６１】
図６は、本発明に係るシミュレーション・システム全体の機能論理ブロック図である。図示されているように、シミュレーション・システムは、物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍと、その各々のロールバック表格納のための記憶部６１０ａ、６１０ｂ・・・６１０ｍと、ＥＣＵエミュレータ６０８ａ、６０８ｂ、・・・６０８ｎと、物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍ及び物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍの入出力をスケジューリングするグローバル・スケジューラ６０２からなる。
【００６２】
物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍ、ＥＣＵエミュレータ６０８ａ、６０８ｂ、・・・６０８ｎ、及びグローバル・スケジューラ６０２は、実行可能モジュールとして、ハードディスク・ドライブ３１６に保存され、図３のコンピュータ・システムの起動時に、メイン・メモリ３０６にオペレーティング・システムの処理によりロードされ、動作する。
【００６３】
物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍはそれぞれ、エンジン、ブレーキ、ドライブ・トレーン、エアコンなどに対応するものである。
【００６４】
グローバル・スケジューラ６０２は、物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍと、ＥＣＵ６０８ａ、６０８ｂ、・・・６０８ｎからの出力を受け取り、それらを一旦バッファして、確定時間に基づき、指定されたＥＣＵエミュレータ６０８ａ、６０８ｂ、・・・６０８ｎまたは物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍに差し向ける。
【００６５】
グローバル・スケジューラ６０２と、物理装置シミュレータ６０４ａ、６０４ｂ・・・６０４ｍ及びＥＣＵ６０８ａ、６０８ｂ、・・・６０８ｎの間は、図示しないが、共通メモリまたは、ＣＡＮ(controller area network)シミュレータで接続される。共有メモリ方式ならば、特定のメモリのアドレスに書いてシグナルされるし、ＣＡＮエミュレータ方式の場合、送り出すメッセージに、所定の宛先を含むヘッダを付けることになる。
【００６６】
図示しないが、図６の構成は、登り坂道、高速道路、つづら折道などの様々な、テストのためのシナリオを格納したシナリオ・ジェネレータも含む。そして、シナリオ・ジェネレータに記述されたシナリオに従って、ＥＣＵエミュレータ６０８ａ、６０８ｂ、・・・６０８ｎに入力が与えられ、様々な条件でシミュレーションが行われることになる。
【００６７】
図７に総称的に示すように、好適には各々の物理装置シミュレータ６０４が、可変ステップ実行モジュール５０４、固定ステップ実行モジュール５０６、ローカル・スケジューラ５０８及びコミュニケーション・インターフェース５１０をもつ。これらの機能は、図５に関連して説明したとおりである。記憶部６１０には、ロールバック表のエントリ５１２が格納される。また、図７には図示しないが、各々の物理装置シミュレータ６０４はそれぞれ、１つずつ、キューをもつ。
【００６８】
図示しないが、ＥＣＵエミュレータも、内部にロールバック表を維持して、投機的に実行してもよい。この処理は、例えば、本出願人に係る、特願２００８−１２４０５３号明細書に記述されているが、本発明にとって必ずしも本質的でないので、詳しい説明は省略する。
【００６９】
次に、図８のフローチャートを参照して、物理装置シミュレータ６０４における、ローカル・スケジューラ５０８の処理について説明する。まず、ステップ８０２では、物理装置シミュレータ６０４のキューにイベントがあるかどうかの判断が行われる。もし、キューにイベントがなければ、ステップ８０４では、新しい入力イベントが予測される。ここでいう予測とは、例えば、過去の入力イベントに基づく、入力イベントの予測であり、例えば、典型的には、前回と同じ入力イベントを使う、という方法がありえる。あるいは、タイミングの場合は、それまでの周期を維持するようにイベントを予測する、という方法をとることもできる。ここは、物理装置シミュレータが、エンジン・シミュレータであるか、ドライブ・トレーン・シミュレータがあるかなどの性質によって、最善の予測を行うように、予め、ローカル・スケジューラ５０８にプログラムしておくものとする。このようにして予測された入力イベントは、ステップ８０６でキューに入れられて、処理はステップ８０２に戻る。
【００７０】
ステップ８０２で、キューにイベントがある、すなわちキューが空でないと判断されると、ステップ８０８では、キューから、最も古いイベントが取り出される。その最も古いイベントのタイムスタンプをtとすると、ステップ８１０では、Tnext + N < tが成立するかどうかが、判断される。ここで、Tnextとは、次の実行時刻であり、Nは、固定ステップ実行モジュール５０６の１回の実行時間である。
【００７１】
もしTnext + N < tであるなら、ステップ８１２で、イベントは一旦キューに戻され、ステップ８１４で、時刻Tnextから、固定ステップ実行モジュール５０６が呼び出されて、Nステップの連続実行がなされる。そうして、ステップ８１６で、その実行後の内部状態が保存され、時刻TnextがNだけ増分されて、処理は、ステップ８０２に戻る。
【００７２】
もしステップ８１０で、Tnext + N < tが成立しないと判断されたなら、ステップ８１８で、Tnext < tが成立するかどうが、判断される。もしそうなら、ステップ８２０で、Tnextからtまで可変ステップ実行モジュールが実行され、ステップ８２２では、その結果の新しいエントリがロールバック表に挿入されて、Tnext = tとされ、そこから、固定ステップ実行モジュール５０６が呼び出されて、Nステップの連続実行がなされる。そうして、ステップ８１６で、その実行後の内部状態が保存され、時刻TnextがNだけ増分されて、処理は、ステップ８０２に戻る。
【００７３】
ステップ８１８で、Tnext < tが成立しないと判断されたら、ステップ８２４で、t=tkのようなtkをもつイベントがロールバック表にあるかどうか判断される。もし、t=tkのようなtkをもつイベントがないなら、ステップ８２６で、確定時間Tに最も近い時間までロールバックされる。すなわち、確定時間Tに最も近いエントリを残して、残りを削除する。そして、ステップ８２８で、tまで可変ステップ実行モジュールを実行し、ステップ８２２では、その結果の新しいエントリがロールバック表に挿入されて、Tnext = tとされる。次に、ステップ８１４で、時刻Tnextから、固定ステップ実行モジュール５０６が呼び出されて、Nステップの連続実行がなされる。そうして、ステップ８１６で、その実行後の内部状態が保存され、時刻TnextがNだけ増分されて、処理は、ステップ８０２に戻る。
【００７４】
ステップ８２４で、t=tkのようなtkをもつイベントがあると判断されたなら、キューから取り出されたイベントeと、時間tkをもつ、ロールバック表中のイベントekが比較され、e = ekであれば、投機実行成功なので、ステップ８０２に戻る。
【００７５】
e = ekでなければ、結局ステップ８２６に行き、そこで、確定時間Tに最も近い時間までロールバックされる。すなわち、確定時間Tに最も近いエントリを残して、残りを削除する。そして、ステップ８２８で、tまで可変ステップ実行モジュールを実行し、ステップ８２２では、その結果の新しいエントリがロールバック表に挿入されて、Tnext = tとされる。次に、ステップ８１４で、時刻Tnextから、固定ステップ実行モジュール５０６が呼び出されて、Nステップの連続実行がなされる。そうして、ステップ８１６で、その実行後の内部状態が保存され、時刻TnextがNだけ増分されて、処理は、ステップ８０２に戻る。
【００７６】
なお、イベントを比較するとは、それに含まれるパラメータが一致しているかどうかを調べることである。例えば、燃料噴射の量や温度などである。数値として一致を判断するときは、その量の性質に応じて有効数字（桁数）を変える。例えば、噴射量や温度なら上位の２桁で一致を判断すればよい。このような誤差に対する許容の高さによって、多くの投機実行を成功とみなすことが可能となる。このことは、すなわち、投機的シミュレーションを可能としている重要なポイントである。
【００７７】
なお、ロールバック表の確定フラグは，グローバル・スケジューラから別途，通知されるので，その都度更新する．ローカル・スケジューラは確定の判断をしない。また，確定エントリが取り消されることはないので，最後の確定エントリを除いて，それ以前のエントリは，ロールバック表から削除しても良い。
【００７８】
確定フラグは、グローバル・スケジューラ６０２から別途通知されるので、その都度更新する。ローカル・スケジューラは確定の判断をしない。また、確定エントリが取り消されることはないので、最後の確定エントリを除いて、それ以前のエントリは、ロールバック表から削除しても良い。
【００７９】
図９は、物理装置シミュレータに対する入力と、出力、及び予測入力の例を示すタイミング・チャートである。また、図１０は、図９に対応する、ロールバック表のエントリを示す図である。図示されているように、ロールバック表において、時間tより後のエントリは、まだ未確定であるとして、キャンセルすることができる。
【００８０】
図１１に示すように、グローバル・スケジューラ６０２は、論理プロセスＬＰ＃１〜ＬＰ＃Ｎ毎にキューＱ１〜Ｑｎをもつ。論理プロセスとは各々、図６に示す物理装置シミュレータ＃１〜＃ｍ、ＥＣＵエミュレータ＃１〜＃ｎのどれかである。
【００８１】
キューＱ１〜Ｑｎには、対応する論理プロセスＬＰ＃１〜ＬＰ＃Ｎから、随時にイベントが入来し、入来したイベントは、キューに一旦格納される。グローバル・スケジューラ６０２は、キューＱ１〜Ｑｎに格納されているイベントに基づき、確定イベントと、確定時間を出力する。
【００８２】
図１２は、そのためのグローバル・スケジューラ６０２の処理を示すフローチャートである。ステップ１２０２で、グローバル・スケジューラ６０２は、どれかのキューＱ１〜Ｑｎ（図１１）に、新しいイベントが到来するのを待つ。
【００８３】
ステップ１２０４では、空のキューにイベントが届いたかどうかが判断され、そうでなければ、処理は、ステップ１２０２に戻る。
【００８４】
ステップ１２０４で、空のキューにイベントが届いたと判断されると、ステップ１２０６に行って、そこで、すべてのキューＱ１〜Ｑｎが少なくとも１つのイベントをもつかどうかが判断される。そうでなければ、やはり処理は、ステップ１２０２に戻る。
【００８５】
ステップ１２０６で、すべてのキューＱ１〜Ｑｎが少なくとも１つのイベントをもつと判断されると、ステップ１２０８では、すべてのキューＱ１〜Ｑｎの中で、最も古いイベントが見出される。このことは、すべてのイベントには、タイムスタンプがつけられていることにより可能である。
【００８６】
ステップ１２１０では、見つけられた最も古いイベントが、確定イベントとされ、論理プロセスＬＰ＃１〜ＬＰ＃Ｎに通知される。
【００８７】
ステップ１２１２では、確定イベントがキューから取り除かれる。そして、ステップ１２０２に戻り、グローバル・スケジューラ６０２は、次のイベントの到着を待つ。
【００８８】
以上、自動車用の複数の物理装置シミュレータを含むシミュレーション・システムに関連して、本発明の特定の実施例を説明してきたが、本発明はこのような特定の実施例に限定されず、飛行機用のシミュレーション・システムなど、一般的な電子機械制御系システムのシミュレーション・システムに適用可能であることを、この分野の当業者であるなら、理解するであろう。
【図面の簡単な説明】
【００８９】
【図１】ＥＣＵの典型的な制御である、フィードバック閉ループ系の例を示す図である。
【図２】フィードバック閉ループ系の、応答関数による記述の例である。
【図３】本発明を実施するために使用されるコンピュータのハードウェアのブロック図である。
【図４】従来と本発明のシミュレーション・システムの動作の対比を示す、クロックのタイムチャートを示す図である。
【図５】本発明の一実施例に係る、物理装置シミュレータの論理構成ブロック図である。
【図６】本発明の一実施例に係る、シミュレーション・システム全体の機能ブロック図である。
【図７】本発明の一実施例に係る、物理装置シミュレータの機能ブロック図である。
【図８】物理装置シミュレータのローカル・スケジューラの処理のフローチャートである。
【図９】物理装置シミュレータのタイミング・チャートを示す図である。
【図１０】物理装置シミュレータのロールバック表のエントリを示す図である。
【図１１】グローバル・スケジューラのキューを示す図である。
【図１２】グローバル・スケジューラの処理のフローチャートである。
【図１】
0005153465.tif 000002
【図２】
0005153465.tif 000003
【図３】
0005153465.tif 000004
【図４】
0005153465.tif 000005
【図５】
0005153465.tif 000006
【図６】
0005153465.tif 000007
【図７】
0005153465.tif 000008
【図８】
0005153465.tif 000009
【図９】
0005153465.tif 000010
【図１０】
0005153465.tif 000011
【図１１】
0005153465.tif 000012
【図１２】
0005153465.tif 000013