JP5186307B2 - シミュレーション方法、システム及びプログラム - Google Patents

シミュレーション方法、システム及びプログラム Download PDF

Info

Publication number
JP5186307B2
JP5186307B2 JP2008217813A JP2008217813A JP5186307B2 JP 5186307 B2 JP5186307 B2 JP 5186307B2 JP 2008217813 A JP2008217813 A JP 2008217813A JP 2008217813 A JP2008217813 A JP 2008217813A JP 5186307 B2 JP5186307 B2 JP 5186307B2
Authority
JP
Japan
Prior art keywords
write
value
entry
read
logical process
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008217813A
Other languages
English (en)
Other versions
JP2010055249A (ja
Inventor
剛志 宮村
周一 清水
秀昭 小松
浩一 梶谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008217813A priority Critical patent/JP5186307B2/ja
Publication of JP2010055249A publication Critical patent/JP2010055249A/ja
Application granted granted Critical
Publication of JP5186307B2 publication Critical patent/JP5186307B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、自動車などの物理システムのシミュレーションに関し、より詳しくは、ソフトウェア・ベースでのシミュレーション・システムに関するものである。
自動車は、その初期の時代の20世紀初頭は、動力としてのエンジンと、ブレーキ、アクセル、ハンドル、トランスミッション、サスペンジョンを含む、機構部品からなっていたが、エンジンのプラグの点火、ヘッドライト以外は、電気的な仕組みはほとんど利用していなかった。
ところが、1970年代頃から、大気汚染、石油危機などに備えて、エンジンを効率的に制御する必要性が生じ、このためエンジンの制御に、ECUが使用されるようになってきた。ECUは、一般的に、センサからの入力信号を、例えばA/D変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部(マイクロコンピュータ)と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成される。
いまや、エンジンやトランスミッションなどの制御システム、Anti-lock Breaking System (ABS)、Electronic Stability Control (ESC)、パワーステアリングだけでなく、ワイパー制御やセキュリティ・モニタリング・システムなどに至るまで、最近の自動車では、機構部品だけでなく、エレクトロニクス部品やソフトウエアが重要な比率を占める。後者に関する開発費は全体の25%とも40%とも言われ、ハイブリッド型の自動車では70%を占める。
電子制御は、ECUを複数、配置して行われる。ECU間は車載ネットワーク、例えば、Controller Area Network (CAN) で相互に接続される。また、制御の対象である、エンジンやトランスミッションなどには、それぞれのECUから直接ワイヤリングして接続する。
ECUは、小さなコンピュータであり、センサ入力などからの割り込みに応じて動作する。一方、エンジンなどは連続的に機械的動作を行っている。すなわち、コンピュータ系のディジタル・システムと、機械系の物理システムが、自動車という単一システムにおいて、並列に協調動作を行っている。当然、これを支えるソフトウエアは複雑さがますます増大しており、ECU単体で動作を検証するだけでなく、複数を同時に検証する仕組みの実現が急務である。
ここで、ECUに信号を入力するセンサには、エンジンの温度などを計測する温度センサ、エンジンに吸入される圧力を推定するための圧力センサ、アクセスペダルの踏み量を測定するスロットル・ポジション・センサ、ステアリング舵角センサ、車高センサ、回転速度センサ、ノックセンサ、加速度センサ、流量センサ、酸素センサ、希薄空燃比センサなどがある。
一方、ECUの出力信号によって駆動されるアクチュエータには、電磁ソレノイド及びモータ等がある。ソレノイドは例えば、エンジンのインジェクタ、トランスミッションのシフト・コントロール、ブレーキのバルブ制御、ドアロックなどに使用される。
モータは、主としてサーボ機構として、エンジンのスタータ、エンジンのフューエル・コントロール、ブレーキの油圧ポンプ、舵角制御、ステアリング、ワイパ、パワーウインドウ、シートベルト、エアバックなどに使用される。
このようなテストにために従来行われている技法として、HILS(Hardware In the Loop Simulation)がある。特に、自動車全体のECUをテストする環境は、ホールビークルHILS(Whole Vehicle Hardware In the Loop Simulation)と呼ばれる。ホールビークルHILSにおいては、実験室内で、本物のECUが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ECUからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
しかし、HILSは、専用のハードウェア装置を使い、それと本物のECUの間を物理的に配線しなくてはならないので、準備が大変である。また、別のECUに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のECUを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、HILSのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、ソフトウェアで構成する手法が存在する。この手法は、SILS(Software In the Loop Simulation)と呼ばれ、ECUに搭載されるマイクロコンピュータ、入出力回路、制御のシナリオなどを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、ECUのハードウェアが存在しなくても、テストを実行可能である。
ところで、自動車用電子システムでは、上述のように、温度センサ、圧力センサ、変位センサ、角速度センサ、回転数センサ、加速度センサ、流量センサなどの多くのセンサが使用されている。例えば、ある温度センサは、エンジン冷却水温度を検出し、その検出信号は、所定のECUに入力される。このような処理を、自動車用SILSでシミュレーションしようとすると、温度センサの挙動をソフトウェア的にエミュレートするのではなく、1つの温度センサは、1つの共有メモリの区画として実現されるのが一般的である。
すると、温度センサが、エンジン冷却水温度を検出し、その検出信号が、所定のECUによって読み取られる、という処理は、SILSでは、エンジン・シミュレータが、共有メモリの所定の区画に、温度検出値としての数値を書込み、その区画に書かれた値を、ECUエミュレータが読取る、という処理としてシミュレートされる。
そこで一般化して、シミュレーション・システムの構成要素としてのエンジン・シミュレータやECUエミュレータを論理プロセス(LP)と呼ぶことにすると、センサとしての共有メモリの区画には、異なるタイミングで、異なる論理プロセスが値を読み書きする、という状況がありえる。
また、そこには内在的な順序が想定されていることを理解されたい。例えば、上記の例では、エンジン・シミュレータが、共有メモリの所定の区画に、温度検出値を書き込み、それから、ECUエミュレータが温度検出値を読取る、という順序が維持される必要があり、ECUエミュレータが温度検出値を読取るのが先で、エンジン・シミュレータが、温度検出値を書き込むのが後だと、ECUエミュレータが読み取った値は最新ではなく、正しくない、ということになる。
一方で、各論理プロセスは、実際の自動車用電子システムをシミュレートすることによって、異なるクロック・レートで動作するようになされている。例えば、エンジン・シミュレータは、エンジンの回転をシミュレートするため、相対的に低い速度で動作する。一方、ECUエミュレータは、相対的に高い速度で動作する。
このような論理プロセス間の動作速度の違いを前提として、上述した処理の順序を保証しようとすると、相対的に速い論理プロセスが、相対的に遅い論理プロセスの処理の完了を待つ、ということになる。すると、折角高速で且つマルチコアのコンピュータ・ハードウェアを使用しても、一番遅い論理プロセスに足並みを揃えなくてはならないので、シミュレーション・システム全体の処理速度をあまり向上させることができない、という問題が生じる。
特開平11−14507号公報に開示されている技術は、車両全体のロジックを机上で検証できるようにすることを課題とするものであり、エンジン制御模擬装置(ECU)と、車両制御模擬装置からなる車両シミュレーション装置を開示する。ECUは、エンジンモデルの制御パラメータを演算し、その演算結果を車両制御模擬装置に送信する。車両制御模擬装置は、ECUから送られてくる制御パラメータを用いて車両モデルの各部の状態量を演算してその演算結果をECUに返送する。車両モデルは、ドライバモデル、吸気系モデル、燃料系モデル、燃焼系モデル、エンジン温推定モデル、駆動系モデル、触媒モデル、A/Fセンサモデル、リアO2 センサモデルから構成されている。ドライバモデルは、目標車速の変化パターンを入力する車速パターン入力手段を有する。ここに開示されている技術は、SILSとしての背景技術であるが、センサのシミュレーションには、特に言及するものではない。
特開平11−85544号公報に開示されている技術は、複数のトランザクションプログラムから同一の資源の同時更新を試みるトランザクション処理機構を持った計算機システムの実行効率を向上させることを課題とするものであり、共有資源の更新を試みるトランザクションプログラムが、他のトランザクションプログラムにより共有資源70が更新中の場合、複製トランザクションプログラムを作成し、複製もとのトランザクションプログラムは排他ウェイトし、複製されたトランザクションプログラムが処理を継続するようにすることを開示する。ここに開示されている技術は、同一の資源に複数のプロセスがアクセスすることに関連するが、処理の順序や、プロセスの動作速度の違いに対処する技術を示唆するものではない。
特開平11−14507号公報 特開平11−85544号公報
この発明の目的は、共有メモリ領域に、異なる速度の論理プロセスがデータの読み書きを行うようなホールビークルSILSのようなシミュレーション・システムにおいて、シミュレーションの速度を向上することにある。
本発明の実施のために、必須ではないが、好適にはマルチCPUのワークステーションが用意される。また、各ECUのソフトウェア・エミュレータが用意される。一般的には、ECUのソフトウェア・エミュレータは、そのECUのメーカから入手可能である。
各ECUのソフトウェア・エミュレータは、好適には、マルチCPUのワークステーション上で走るように、ワークステーションのオペレーティング・システムの所定のレイヤとインターフェースする。各ECUのソフトウェア・エミュレータには、好適には、マルチCPUのうちの各々のCPUが割り当てられ、以って、各CPUによって、各ECUエミュレータは独立に動作可能である。ECUの数よりもCPUの数が少ない場合は、1つのCPUに、複数のECUエミュレータが割り当てられる。いずれにしても、オペレーティング・システムは、各ECUエミュレータ毎に1つのプロセスを割り当て、以って、各ECUエミュレータは、固有の異なるクロックで動作しているように、エミュレーションを行うことができる。すなわち、各ECUエミュレータは、異種ECUであってよい。
各ECUエミュレータには、ワークステーションのメモリの一部が、内部処理用のプライベート・メモリとして割り当てられる。さらに、ECUエミュレータは、ワークステーションの共用メモリとして割り当てられた箇所にもアクセス可能であり、この共用メモリを介して、各ECUエミュレータは、互いにデータをやりとりしたり、同期したり、通信したりすることが可能である。あるいは、ECUエミュレータは、CAN(controller area network)エミュレータで接続してもよい。
これらのECUエミュレータから入力を受け取る、エンジン・シミュレータ、トランスミッション・シミュレータなどの、物理装置シミュレータが用意され、やはりワークステーションの共用メモリ、またはCAN(controller area network)エミュレータで、ECUエミュレータと接続される。
このようなシミュレーション・システムにおいて、センサの値を保持するために、共有メモリに、好適にはセンサの数だけ、領域が確保される。コンピュータ・システムとしてみると、センサの1つの領域は、シミュレーション・システム全体に対する大域変数(global variable)と見なすことができる。
本発明の特徴によれば、その大域変数毎に、書込みテーブルと、読取りテーブルが、好適には共有メモリ内に確保される。基本的に、書込みテーブルは、大域変数毎に1つであるが、読取りテーブルは、大域変数毎に、シミュレーション・システムの論理プロセスの数だけ用意される。
本発明のシミュレーション・システムの前提として、個々のイベントに、シミュレーション全体で1つの統一された時間が付与される。しかし、前述のように、個々の論理プロセスで動作速度が異なり得るので、全く同じ時間で、個々の論理プロセスの足並みが揃うとは限らない。
さて、ある大域変数に、第1の論理プロセスによって書込みが行われると、その書いた時間と値が、その大域変数の書込みテーブルに書込まれる。一方、その大域変数の値を、第2の論理プロセスが読取ると、その読取った時間と値が、その大域変数の、第2の論理プロセス用に確保された読取りテーブルに書込まれる。ここで、読み取られる値とは、書込みテーブルで、読取り側の論理プロセスが指定した時間もしくはそれより前で、かつ、最も近い時間を持つエントリの値である。
こうして、その大域変数に、さまざまな論理プロセスが読み書きを行うと、書込みテーブルと、読取りテーブルのエントリは、次第に増加する。
本発明の更なる特徴によれば、論理プロセスの大域変数への書込み動作に応答して、シミュレーション・システムが、その大域変数の書込みテーブルと、各論理プロセス毎の読取りテーブルとの間で、整合性のチェックを行う。
すなわち、読取りテーブルの最新のエントリは、書込みテーブルのエントリを読取った結果であるから、書込みテーブルの最新のエントリよりも後の時間をもつはずである。
ところが、さまざまな論理プロセスの動作速度の違いから、書込みテーブルに対して、その最新のエントリよりも前の時間をもつエントリが書き込まれることがある。
そこで、整合性のチェックは、先ほど書込みテーブルに書込まれたエントリの時間の前後のエントリと読取りテーブルのエントリを比較して、これらのエントリよりも後の時間をもち、且つ先ほど書込みテーブルに書込まれたエントリとは異なる値をもつエントリが、読取りテーブルにあるかどうかをチェックするものである。
もしそのようなエントリが読取りテーブルにあると判断されると、読取りテーブルには、書込みテーブルに書込まれたエントリとは矛盾するエントリが存在することになるので、シミュレーション・システムは、そのような矛盾するエントリをもつ読取りテーブルに関連付けられた論理プロセスに、所定のメッセージ(例えば、ダウト・メッセージとも称する)を送る。ダウト・メッセージには好適には、先ほど書込みテーブルに書込まれたエントリの書込み時間と値が含まれる。
すると、ダウト・メッセージを受け取った論理プロセスは、そこに含まれている時間と値を、前に受け取った時間及び値と比較して、ロールバックが必要かどうか判断する。ここでいう判断とは、例えば、値は違っていたけれどもその差が許容範囲に含まれているので、ロールバックをしないというような判断である。
本発明の別の側面によれば、論理プロセス全体の調整を司るグローバル・スケジューラが設けられ、グローバル・スケジューラには、論理プロセス毎に、同期テーブルが設けられる。大域変数に書き込もうとする論理プロセスは、グローバル・スケジューラに一旦、書込み要求メッセージを送る。それを受けて、グローバル・スケジューラは、書込み要求メッセージで指定された大域変数に対応する共有メモリにおける、書込みテーブルにエントリを書き込む。グローバル・スケジューラは、そのような書込み動作の完了を確認してから、別の論理プロセスからの書込み要求メッセージを受け付ける。グローバル・スケジューラは、書込み動作の完了を確認すると、全ての論理プロセスの同期テーブルに完了時間のエントリ、もしくは、その論理プロセスがこの大域変数に書込みをしない旨のフラグが埋まると、それらのエントリのうち一番古い時間が、当該大域変数のコミット時間となり、コミット時間は共有メモリに参照可能にセットされる。同期テーブルの、コミット時間より古いエントリは、適当なタイミングで消去される。
このように、グローバル・スケジューラを介在させると、グローバル・スケジューラは、書き込みの完了を待って次の論理プロセスからの書き込みを処理するので、複数の論理プロセスからの、相次いでの書込みアクセスがあっても、競合が回避される。
一方、もしシミュレーション・システムにおいて、一度に1つの論理プロセスだけが書込みアクセスを行うような制御が行われるなら、グローバル・スケジューラを介した論理プロセスの書込みアクセスは不要で、論理プロセスは直接、書込みテーブルに書込み処理を行うことができる。
この発明によれば、複数の論理プロセスをもつ、ホールビークルSILSようなシミュレーション・システムにおいて、低速の論理プロセスに足並みを揃えることなく、高速の論理プロセスのペースで大域変数に値を書込み、矛盾が生じたときだけ、そのことをチェックして関連の論理プロセスでロールバックすることを可能ならしめるので、シミュレーション・システムの論理一貫性を維持しつつ、シミュレーションを高速化することができる。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
本発明を実現するための構成を説明する前に、その前提として、ECUについて説明する。ECUは、一般的に、センサからの入力信号を、例えばA/D変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部(マイクロコンピュータ)と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成されるものである。
この発明は、説明の便宜上、以下では、自動車のECUに関連して説明するが、それには限定されず、航空機、ロボットなどその他のECUをもつメカトロニクス機構全般に適用可能であることを理解されたい。
ECUは、周辺や環境状態、エンジンなどの駆動機構の状態、及び人間による指示操作の内容をセンサで検出して、信号として入力する。具体的には、水温センサ、吸気温センサ、過給圧センサ、ポンプ角センサ、クランク角センサ、車速センサ、アクセル位置センサ、A/Tシフト・ポジション、スタータ・スイッチ、エアコンECUなどからの信号がある。
ECUは、これらの信号を入力して、電磁スピル弁、フュエル・カット・ソレノイド、タイミング・コントロール・バルブ、吸気絞りVSV、グロー・プラグ・リレー、タコメータ及びエアコン・リレーなどを駆動する信号を出力しする。
1つのECUが複数の異なる機構を制御するための駆動信号を出力するようにすることは不可能ではないが、例えば、エンジンとエアコンのように、応答性やその制御の厳密性が異なるものを単一のECUで制御することは合理的でなく、従って、一般的に自動車にECUは複数個設けられる。
図1は、ECUの典型的な制御である、フィードバック閉ループ系の例を示す図である。すなわち、図1において、ある目標の信号が、ECUであるコントローラ102に入力され、ECUは、目標の信号を内部処理することによって、駆動信号を出力し、制御対象モデルである、エンジンなどのプラント104を駆動し、プラント104の出力は、センサ106を介して、コントローラ102の入力にフィードバックされる。
ここで目標信号として与えられるのは、例えば、スロットル開度、アイドル・コントロール、ブレーキ力、シフト、スタータON・OFF、バッテリ電圧、インジェクション通電時間、インジェクション通電回数、デポジット、ドウェル角、進角値、吸気完了フラグ、点火完了フラグ、大気圧、車両重量、転がり抵抗係数、道路勾配、粘着係数、吸気温、などのパラメータである。
また、センサ信号としてフィードバックされるのは、スロットル開度、吸気圧力、吸入空気量、シフト、エンジン回転数、車速、排気温、O、冷却水温、空燃比、ノック、点火異常、などである。
ECUが制御する対象は、ニュートンの力学方程式で解かれる、機構系システムであったり、電気回路の応答方程式で解かれる、電気駆動回路であったり、それらの組み合わせであったりする。これらは、基本的に微分方程式であり、制御工学によれば、ラプラス変換によって応答関数に変換されて、記述することができる。
図2は、そのような応答関数による記述の例である。図2で破線202で囲った箇所が、図1のコントローラ102に対応し、破線204で囲った箇所が、図1の制御対象モデル104に対応し、センサ106が、ブロック206に対応する。なお、図2は、応答関数による表現の一例であって、特に本発明を限定する意図はないことを理解されたい。
さて、例えば、ECUが制御する対象が、ニュートンの力学方程式で解かれる、機構系システムであるとする。すると、ある時点のECUの制御出力は、その機構系システムの可動部分の位置及び速度という内部状態変数をもち、その時点の入力だけでは決まらない。そのことは、電気回路にもあてはまり、電気回路のキャパシタに残っている電荷の量や、コイルのインダクタンスによる磁力などの内部状態変数が、やはり存在する。
従って、ECUは、図3に示すように、入力uに対して、その内部状態xを勘案した値yを出力することになる。
さて、前述したSILSのようなテストの目的で、自動車部品メーカーは、自社が提供する機器のECUのソフトウェア・エミュレータを提供する。すなわち、図2に示すような機能を、アセンブラまたはCなどの言語が書かれたコードをアセンブリまたはコンパイルした実行可能プログラムにより、純粋にソフトウェア的に実現する。
本発明のこの実施例では、ECUのソフトウェア・エミュレータの内部状態を取り出して利用する。ソフトウェア・エミュレータによっては、内部状態が取り出し可能である場合と、そのままでは、内部状態が取り出し可能でない場合がある。
そこで、ECUのソフトウェア・エミュレータの内部状態がそのままでは、内部状態が取り出し可能でない場合、ソースコード解析ツールによって、次のような処理を行う。
もし、ECUのソフトウェア・エミュレータのソースコードが入手可能であるならそれをそのまま利用し、実行可能バイナリ・ファイルしかなければ、所定のツールで、逆アセンブルまたは逆コンパイルする。そうして、ECUのソフトウェア・エミュレータのソースコードに対して、データーフロー解析という技法を適用して、ソースコードを基本ブロックに分割する。基本ブロックとは、ソースコードを、複数の制御が合流するところ、または、制御が複数に分岐するところで分断した、各々の部分のことである。このような基本ブロックをノードとして、その分岐の制御の流れのリンクで接続すると、有向グラフ構造になる。これは特に、制御フローグラフとも呼ばれる。制御フローグラフは、始点ノードと終点ノードをもち、プログラムで実行され得るノードは全て、始点ノードからの有効エッジをもつ。基本ブロックのうち、exit()やreturnなどのステートメントを含む制御の末端ノードは全て、終点ノードへの有効エッジをもつ。
次に、制御フローグラフの始点ノードと終点ノードの可能な全てのパスに対して、Use/Def解析を行う。ここで、Useとは、ある変数が、別の変数に値をストアするために使用される場合をいう。典型的には、代入式の右辺である。Defとは、ある変数に、値がストアされる場合をいう。典型的には、代入式の左辺である。
この場合、個々のパス毎に、Defの前あるいは、DefなしでUseされている変数、すなわち未定義参照変数があるかどうかがチェックされ、もし未定義参照変数があると、その変数名は一旦保存される。
こうして、全てのパスがスキャンされた後に保存されている変数名を用いて、後述するように、ラッパ(wrapper)コードが生成される。
ところで、実行フローのスキャンと、Use/Def解析は、データーフロー解析という技法を用いることによって、より効率的に実行することができるので、以下、それについて説明する。
その第1ステップは、各基本ブロックにおけるdefリストの計算である。具体的にはプログラム全体で使用される変数のリストを1ビットで表現し、各基本ブロックごとに定義される変数を1されないものを0としたビットベクタで表現する。
その第2ステップは、プログラム全体の到達可能なdefリストの計算である。すなわち、各基本ブロックでは、複数の入力がある場合には論理積(AND)してから,自身への入力とする。自身からの出力は、その入力と、自身で定義したdefリストの論理和(OR)をとり、後続の基本ブロックに渡す。実行していく順番は、制御フローグラフ上での深さ優先順序が効率的である。
第3ステップは、クロージャ解析アルゴリズムにより、到達可能なdefリストのクロージャを求めることである。そして、上記第2ステップを、全ての基本ブロックの出力defリストが変化しなくなるまで、繰り返す。ここで、クロージャとは、環境と結び付けられた値のことである。
第4ステップは、未定義変数の使用の発見である。すなわち、各基本ブロックの入力defリストが0として表現された変数が、useとして使用されているものを検出する。
なお、データフロー解析のより詳しい説明については、Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, "Compilers Principles, Technologies, and Tools", Addison-Wesley Publishing Company, 1986, p. 608-633などを参照されたい。
さて、例えば、元のECUシミュレーション・ソースコードが、関数 Func(x,y,z) であらわされるとする。また、未定義参照変数として、a, bが登録されていたとする。
すると、例えば、_Func(x,y,z,_a,_b)という関数が用意され、
_Func(x,y,z,_a,_b)
{
a = _a;
b = _b;
Func(x,y,z);
_a = a;
_b = b;
return;
}
_Func(x,y,z,_a,_b)
{
a = _a;
b = _b;
の部分のところを、入力用ラッパコードと呼び、
_a = a;
_b = b;
return;
}
の部分のところを、出力用ラッパコードと呼ぶ。
なお、 Func(x,y,z); のところは、関数呼び出しではなく、インライン展開でもよい。このような関数_Func(x,y,z,_a,_b)を、_a,_bに適当な値を入れて呼び出すことにより、Func(x,y,z)の内部状態をセットすることができ、また、_Func(x,y,z,_a,_b)を呼び出した結果、_a,_bに、処理後の内部状態の値がセットされるので、必要に応じて、それらの値を別途保存するなど、利用可能である。このようにラッパコードが付されたソースコードは、実行可能プログラムを生成するために、コンパイルまたはアセンブルされる。
また、C++など、特定の処理言語の仕様によっては、_Func(x,y,z,_a,_b)でなく、_Func(x,y,z,&_a,&_b)のように、参照演算子&をつけて関数に引数として与える必要があることもある。
こうして、内部状態あるいは、内部変数を取り出すことができるようになった後のECUのソフトウェア・エミュレータを図式的に、図4に示す。そこに示すように、ECUのソフトウェア・エミュレータ402は、内部ロジックfを示す部分と、内部状態または状態変数xとに好都合に分離される。
すると、内部ロジックfを用いて、出力y = f(t,x,u, ...) と記述することができる。ここでtは、時間である。また、状態変数xに係るコードが分離されたことによって、任意の時点、すなわち典型的には出力がなされるタイミングで、状態変数xと、好ましくは入力uも、状態リポジトリ404として、ハードディスクドライブに書き出すことができる。
状態変数xに係るコードを分離した効果はこれだけではない。すなわち、矢印406で示すように、ソフトウェア・エミュレータ402には、任意の時点で、状態変数xをセットすることができる。これによって、状態リポジトリ404から入力と状態変数xを選んでセットすることにより、ECUのソフトウェア・エミュレータ402を、その状態変数xが状態リポジトリ404に書き出された任意の時点の状態に戻して、すなわち、ロールバックして、そこから計算をやり直させることができる。
次に、図5を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図5において、ホスト・バス502には、複数のCPU0 504a、CPU1 504b、CPU2 504c、CPU3 504dが接続されている。ホスト・バス502にはさらに、CPU0 504a、CPU1 504b、CPU2 504c、CPU3 504dの演算処理のためのメイン・メモリ506が接続されている。
一方、I/Oバス508には、キーボード510、マウス512、ディスプレイ514及びハードティスク・ドライブ516が接続されている。I/Oバス508は、I/Oブリッジ518を介して、ホスト・バス502に接続されている。キーボード510及びマウス512は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ514は、後述する本発明に係るプログラムをGUIで操作するための画面イメージを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU0 504a、CPU1 504b、CPU2 504c、CPU3 504dは、例えば、インテル(R)Core 2 DUOであり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ516に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ516からメイン・メモリ506に読み込まれる。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、ECUエミュレータ・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。さらに、ECUエミュレータ・プログラムを高速で動作させるために、POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用してもよい。
ハードディスク・ドライブ516にはさらに、テストするための複数のECUエミュレータ・プログラム、及び、それら複数のECUエミュレータ・プログラムを協働させてテストするための、本発明に係るプログラムが格納され、キーボード510及びマウス512によって起動操作可能である。
好適には、ホールビークルSILSを実現するために、1台の自動車で使われるすべてのECUのエミュレータ・プログラムが、ハードティスク・ドライブ516に保存されている。そのECUのエミュレータ・プログラムが、そのままでは内部の状態変数を取り出せないものてある場合は、上述したラッパコードを被せることにより、予め、状態変数をセット及び取り出し可能としておくものとする。
ハードティスク・ドライブ516にはまた、後述する、本発明に係る、センサとしての共有メモリ領域に論理プロセスが値を読み書きする際の、一貫性維持のためのロールバック処理の機能を含む、のシミュレーション制御用のプログラムも保存されており、システム起動時にメイン・メモリ506に呼び出されて動作する。
ハードティスク・ドライブ516にはさらに、後述するECUエミュレータ・プログラムのためのスケジューラ、エンジン、トランスミッション、ステアリング、ワイパなどの物理装置(プラント)シミュレータ・プログラム、全体のシステムの入力を同期させるためのグローバル・スケジューラ及び、登り坂道、高速道路、つづら折道などの様々な、テストのためのシナリオを格納したシナリオ・ジェネレータのプログラムも格納されている。
なお、ここでの「エミュレータ」と、「シミュレータ」の用語の使い分けであるが、もともとの、別のプロセッサで動くことを想定して書かれていたECUのコードを、CPU0〜CPU3などをターゲットとして動くようにすることを、エミュレーションと呼び、それを行うプログラムを、エミュレータと呼ぶ。一方、エンジンなどの物理的システムの動作を仮想計算するシステムを、シミュレータと呼ぶ。
次に、図6を参照して、本発明のシミュレーション・システムの機能論理ブロック図を説明する。図6において、共有メモリ602は、実際は、図5に示すメイン・メモリ506の一部であってよい。共有メモリ602には、ECUエミュレータ・プログラム604a、604b、・・・604nと、グローバル・スケジューラ608と、物理装置シミュレータ・プログラム606a、・・・606mが論理的に結合されている。
グローバル・スケジューラ608は、ECUエミュレータ・プログラム604a、604b、・・・604n及び物理装置シミュレータ・プログラム606a、・・・606mの間のイベントのタイム・スタンプに基づき、それらのイベントの間の一貫性を維持するように動作する。グローバル・スケジューラ608のより詳しい動作は、後述する。
ECUのエミュレータ・プログラム604a、604b、・・・604nは、それぞれ、エンジン、ブレーキ、トランスミッション、ステアリングなど、車の異なる部分の制御に対応するもので、それぞれが異なる速度のクロックで動作するので、対応するECUのエミュレータ・プログラムも、それに比例するクロック比で動作するものとする。
一例として、スレッドを作成いることにより、複数のCPUに、ECUのエミュレータ・プログラムを割り当てるコードを、C言語を例にとって示す。
void* ecu_wrapper(void* parm)
{
...
/* define state_repository */
...
LOOP_BEGIN:
...
/* ECUのユニット処理を行う */
LOOP_END:
...
}
上記のようなコードを用意しておいて、
pthread_t thread_id;
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_create(&thread_id, thread_attr, ecu_wrapper, NULL);
pthread_attr_destroy(&thread_attr);
とすると、オペレーティング・システムがスレッドを生成して、それをECUのエミュレータ・プログラムに割り当てる。物理的には、そのスレッドは、CPU0〜CPU3のどれかに割り当てられるが、それはオペレーティング・システムに任され、エミュレータ・プログラムにとっては、透過的である。
このような割り当て処理は、ECUエミュレータ・プログラム604a、604b、・・・604n各々に個別に行われる。
なお、図6に示した論理構成では、ECUエミュレータ・プログラム604a、604b、・・・604n、物理装置シミュレータ・プログラム606a、・・・606m及びグローバル・スケジューラ608は、共有メモリ602を使用してデータを交換するが、代わりに、CAN(controller area network)エミュレータを使用してもよい。
図示しないが、図6の構成には、登り坂道、高速道路、つづら折道などの様々な、テストのためのシナリオを格納したシナリオ・ジェネレータも接続される。
図7は、図6に示したシミュレーション・システムにおいて、センサ702に、物理装置シミュレータ606a、606b、606iと、ECUエミュレータ604a、604b、604jが、値の書込み、あるいは読取り処理を行う様子を図式的に示す。
前述のように、センサ702は実は、図6の共有メモリ602、すなわち、図5のメイン・メモリ506の一区画の領域である。図6に示したシミュレーション・システムにとって、1つの大域変数(global variable)である、とも言える。図示するように、例えば、物理装置シミュレータ606aがセンサ702としてのメモリ領域に書込み、それからECUエミュレータ604aが、書かれた値を読取る、などの処理が行われる。
この際、当然であるが、読み書きの順序は重要である。すなわち、物理装置シミュレータ606aがセンサ702としてのメモリ領域に書込んだ後に、ECUエミュレータ604aが、書かれた値を読取るのと、物理装置シミュレータ606aがセンサ702としてのメモリ領域に書込む前に、ECUエミュレータ604aが、書かれた値を読取るのとでは、ECUエミュレータ604aが読取る値は、全く異なる。
なお、物理装置シミュレータやECUエミュレータなどの論理プロセスは、センサ702としてのメモリ領域に、単に値を書込むだけ、あるいは、単にそこから値を読取るだけ、という処理以外に、センサ702としてのメモリ領域から値xを読取って、直ちにx+Δxを、そのメモリ領域に書き込む、という値更新処理もありえる。
図8は、論理プロセスA、B及びCによる読書き動作を示すタイミングチャートの例である。図8(A)を参照すると、論理プロセスAが、時間t1で、所定の大域変数に10という値を書込む。さらに論理プロセスAは、時間t3で、その大域変数に15という値を書込む。
一方、論理プロセスCは、Δt間隔で周期的に、その大域変数から値を読取る。論理プロセスBは、この時点では、何もしない。
図8(B)には、その様子を図式的に示す。すなわち、論理プロセスAが、センサ(大域変数)に値を書込み、論理プロセスCが、センサ(大域変数)から値を読取る。
尚このとき、例えば、時間t1で、論理プロセスAが所定の大域変数に10という値を書込むとは、その書込みイベントに、時間t1が関連付けられる、ということを意味する。この時間は、単一の論理プロセス内では一貫性があるが、前述のように論理プロセスは、異なる速度で動作することがあるので、異なる論理プロセス間では、仮にti < tjだとしても、シミュレーション・システム内で、時間tiをもつ第1の論理プロセスのイベントが、時間tjをもつ第2の論理プロセスのイベントよりも、先に生起するとは限らない。
図8の処理では、時間の経過に沿って、一貫性を保って、論理プロセス間で値の読み書きが行われているので、矛盾は生じない。
ところが、図9に示すように、論理プロセスAが時間t3をもつイベントで、値15を大域変数に書込み、論理プロセスCがその値15を大域変数から読取った時点で、論理プロセスBが、時間t2 < t3をもつイベントで、値5を、大域変数に書き込むとする。これにより、大域変数の値は、時間t2以降、5となる。
すると、論理プロセスAは、自己の時間t3をもつイベントで値15を書いたことが、単なる書込みであるなら、論理プロセスA自体は、その論理プロセスBの書込みによって影響は受けないが、自己の時間t3をもつイベントで値15を書いたことが、もし大域変数の値を読取って、それに基づき書込み値を決定する変更書込みであるなら、その論理プロセスBの書込みによって最早有効ではなくなるので、キャンセルされなくてはならない。
同様に、論理プロセスCの、Δtでの周期的な大域変数の値の読取り動作も、時間t2以降、最早有効ではなくなるので、キャンセルされなくてはならない。
図9(B)には、その様子を図式的に示す。すなわち、論理プロセスAが、センサ(大域変数)に値を書込み、論理プロセスBも、センサ(大域変数)に値を書込み、論理プロセスCが、センサ(大域変数)から値を読取る。このとき、論理プロセスAの書込みが、変更書込みであるなら、点線矢印で示すように、書込み処理も付随している。
本発明は、ある論理プロセスの書込み処理によって、別の論理プロセスの読取り、あるいは書込み処理が無効になったかどうかをシミュレーション・システムが判断し、もし無効になったのなら、処理が無効化された論理プロセスに通知して、その論理プロセスが、必要に応じて、ロールバックなどの、処理の一貫性を取り戻す対処する処理を行うことを可能ならしめる。
図10は、図6に示したシミュレーション・システムの機能論理ブロック図を、特に本発明の機能に関連する箇所にフォーカスして示した機能論理ブロック図である。図10において、LP1、LP2、・・LPkは、論理プロセスであり、具体的には、図6に示したECUエミュレータ604a、604b、・・・604n、物理装置シミュレータ606a、606b、・・・606mのどれかである。
図示されているように、論理プロセスLP1、LP2、・・LPkと、グローバル・スケジューラ608とは、CANエミュレータまたは共有メモリ1002を介して、互いに接続されている。これは、基本的には、図6で、共有メモリ602として示されているものと同じである。
グローバル・スケジューラ608の基本的機能は、論理プロセスLP1、LP2、・・LPkから時間付きのイベントを受領し、そのうちのもっとも古い時間をもつイベントをもって確定時間を判断し、全論理プロセスに通知することである。
そこで、グローバル・スケジューラ608のメッセージ(イベントとも言う)を受領する機能を利用して、この実施例では、各大域変数毎に、各論理プロセスLP1、LP2、・・LPk毎の同期テーブル1004a、1004b、・・・1004kが設けられている。便宜上、大域変数1のための同期テーブルの領域をメモリ領域1006aで示し、大域変数2のための同期テーブルの領域をメモリ領域1006bで示し、シミュレーション・システムでセンサとして使用される全ての大域変数の各々に、メモリ区画1006a、1006b・・1006qが用意され、その各々に、各論理プロセスLP1、LP2、・・LPk毎の同期テーブルが存在することを理解されたい。
このようなメモリ区画1006a、1006b・・1006qは、グローバル・スケジューラ608だけがアクセスできるプライベート・メモリ領域として、メイン・メモリ506内に確保されている。
同期テーブルの役割は、グローバル・スケジューラ608に対して、所定の大域変数に対する書込みイベントが、ある論理プロセスから届いたとき、グローバル・スケジューラ608が、その実際の書込み動作の完了を確認して、その完了時間を、その所定の大域変数における、その論理プロセスに対応する同期テーブルに書込む。
同期テーブルがどのように利用されるかは、後述の具体的な動作例を参照することにより、より一層明らかになるであろう。
本発明の更なる特徴によれば、論理プロセスLP1、LP2、・・LPk及びグローバル・スケジューラ608がアクセス可能な、共有メモリ領域1008が、メイン・メモリ506内に確保されている。共有メモリ領域1008には、シミュレーション・システムでセンサとして使用される全ての大域変数の各々に、メモリ区画1010a、1010b・・1010qが用意されている。その大域変数毎の各メモリ区画には、書込みテーブル1012、読取りテーブル1014a、1014b、・・・1014k、及びコミット時間格納領域1016が設けられている。読取りテーブル1014a、1014b、・・・1014kは、その各々が、論理プロセスLP1、LP2、・・LPkに対応している。
すなわち、書込みテーブル1012は、好適な実施例では、大域変数につき1つであり、読取りテーブルも、好適な実施例では、大域変数毎に、論理プロセスの数だけ用意される。また、コミット時間格納領域1016は、大域変数につき1つである。なお、このような構成は、一実施例に過ぎず、シミュレーション・システム全体で単一の書込みテーブルにすることもできる。この場合、例えば、書込みテーブルに大域変数を指定する欄を設ければよい。コミット時間格納領域の欄も同様である。
書込みテーブル1012は、時間と、値と、書込みを行った論理プロセス(LP)を示すフィールドをもち、グローバル・スケジューラ608は、論理プロセスから、大域変数、時間及び値を指定する書込みイベントを受け取ると、その時間と値で、その大域変数に関連する書込みテーブル1012に値を書き込む。その書込みが完了すると、グローバル・スケジューラ608は、その完了時間を、その大域変数における、その論理プロセスの同期テーブルに書込む。
コミット時間格納領域1016には、すべての同期テーブルに完了時間のエントリが入れられたとき、そのうちの最も古い時間が格納される。
一方、論理プロセスの読取り動作は、グローバル・スケジューラ608を介することなく、論理プロセスが直接、共有メモリ領域1008の、値を読取るべき大域変数の書込みテーブル1012にアクセスすることにより、行われる。すなわちその際、論理プロセスは、書込みテーブル1012の一番新しい時間のエントリにアクセスして、その値を読取る。そうして、読取ったエントリの時間と値を、その大域変数における、その論理プロセス用の読取りテーブルに書込む。
このようにして格納される書込みテーブルと読取りテーブルのエントリは、論理プロセスが読取った値の一貫性チェックに使用されるが、そのチェック動作は、後述のフローチャート及び具体的な動作例を参照することにより、後で詳細に説明される。
次に、図11以下のフローチャートを参照し、且つ図10に示した書込みテーブル及び読取りテーブルも適宜参照しながら、本発明の実施例に係る処理を説明する。なお、図11から図14までと、図21のフローチャートで示す処理のプログラムは、ハードディスク・ドライブ516に保存され、シミュレーション・システムの起動時に、メイン・メモリ506にロードされて、動作する。このようなプログラムは、C、C++、System C、MATLAB/Simulinkなどのコンピュータ言語やツールで書かれたものである。
図11は、論理プロセスによる読取り動作を示すフローチャートである。このフローチャートにおいて、ステップ1102で、論理プロセス(LP)が、値を読もうとする大域変数の書込みテーブルの1012(図10を参照)の最新の時間をもつエントリの値を読取る。続いて、その論理プロセスは、ステップ1104で、その大域変数に関連して、その論理プロセス用に設けられた読取りテーブル1014に、その論理プロセスが指定した時刻に対応する時刻と、読取った値とを書き込む。
図12は、論理プロセスによる書込み動作を示すフローチャートである。ステップ1202では、論理プロセスが、グローバル・スケジューラ608に、書込みメッセージ(書込みイベントとも言う)を送る。書込みメッセージには、書き込む大域変数の指定と、時間と、書き込む値の情報が含まれている。このように、グローバル・スケジューラ608が、書込みメッセージを論理プロセスから一旦受け取ると、グローバル・スケジューラ608はそれらのメッセージを一旦キュー(図示しない)に入れ、順次処理するので、書込みテーブルへのアクセス競合が回避される。
ステップ1204では、グローバル・スケジューラ608が、書込みメッセージに含まれている値を使用して、その大域変数の書込みテーブル1012に、値と、時間と、書込みする論理プロセスのIDからなるエントリを挿入する。その書込みが完了したことに応答して、グローバル・スケジューラ608は、その完了時間を、その大域変数における、その論理プロセスの同期テーブル1004に、書き込む。通常、書込みテーブル1012への書込みと、その完了に応答して同期テーブル1004に完了時間か書き込まれるまでには、若干の遅延があるので、同期テーブル1004に書き込まれる値は、書込みテーブル1012に書かれる時間よりも少し後になる。
ステップ1206では、その大域変数における、読取りテーブル1014と書込みテーブル1012との一貫性がチェックされ、その結果、ステップ1208で有効と判断されるか否かによって、異なる処理が行われる。
図13は、ステップ1206とステップ1208の詳細を示すフローチャートである。ステップ1302では、その大域変数における、書込みテーブルの値の列を、{Vw(t1), Vw(t2), ... , Vw(tm)}とする。t1,t2, ..., tmは、書込みテーブルに書かれている時間である。
ステップ1304では、先ほど書かれた値を、Vw(tk)とする。k ∈ {1,2,..., m}であってすなわち、Vw(tk)は、{Vw(t1), Vw(t2), ... , Vw(tm)}のうちのどれかである。
ステップ1306では、その大域変数における、書込みを行った論理プロセスの読取りテーブル1014(図10では、論理プロセス毎に、読取りテーブル1014a、1014b・・・のように示されているが、ここでは総称的に、読取りテーブル1014と示す)の値の列を、{Vr(s1), Vr(s2), ... , Vr(sn)}とする。s1,s2, ..., snは、読取りテーブル1014に書かれている時間である。
ステップ1308では、Vr(si) = Vr(s1), Vr(s2), ... , Vr(sn)として、i = 1, 2, ... .nでループを廻す。
ステップ1310では、si >= tk-1且つsi < tk+1かどうかが判断される。この判断はすなわち、siという時間が、先ほど書込みテーブルに書かれた時間の前後の時間の範囲に入っているかどうかの判断である。もしそうでないなら、処理は、ステップ1308に戻って、次のiに進む。なお、もしtk-1に該当するエントリがない場合は、tk-1 = 0と想定し、tk+1に該当するエントリがない場合は、tk+1を仮想的に∞であるような非常に大きい時間と想定する。
ステップ1310での判断が肯定的であると、ステップ1312に進み、そこで、tk > siかどうかが判断される。tk > siであるということは、先ほど書込みテーブルに書かれた時間tkが、siという時間よりも大きいという意味なので、Vr(si)が、書込みテーブルにおけるVw(tk)よりも1つ前のエントリの値であるVw(tk-1)と等しいかどうかという判断が、ステップ1314で行われる。その結果、等しいと判断されると、ステップ1318で、ループを完了したかどうかが判断される。ループを完了したなら、書込みテーブルと読取りテーブルは矛盾がない、すなわち、有効と判断される。ループがまだ完了していないなら、ステップ1308に戻って、次のsiに進む。Vr(si)が、Vw(tk-1)と等しくないと、読取りテーブルには、書込みテーブルと一貫性のないエントリが含まれているということになり、ステップ1320に行って、読取りテーブルが無効である、という判断となる。
ステップ1312に戻って、tk > siでないと、先ほど書込みテーブルに書かれた時間tkが、siという時間よりも小さいか等しいという意味なので、Vr(si)が、書込みテーブルにおけるVw(tk)と等しいかどうかという判断が、ステップ1316で行われる。その結果、等しいと判断されると、ステップ1318に行って、ループを完了したかどうかが判断される。ループを完了したなら、書込みテーブルと読取りテーブルは矛盾がない、すなわち、有効と判断される。ループがまだ完了していないなら、ステップ1308に戻って、次のsiに進む。Vr(si)が、Vw(tk)と等しくないと、読取りテーブルには、書込みテーブルと一貫性のないエントリが含まれているということになり、ステップ1320に行って、読取りテーブルが無効である、という判断となる。
ステップ1310が否定的なままだと、ステップ1308のループが単に終端に達して、ステップ1318に至り、読取りテーブルは有効ということになる。
図12のフローチャートに戻って、図13のフローチャートにおける無効1320あるいは有効1318が、ステップ1208の判断となる。
なお、ステップ1206とステップ1208は、単一の書込みテーブル1012と、複数の読取りテーブル1014a、1014b・・・1014kの各々とで順次実行されることを理解されたい。従って、ステップ1208では、複数の論理プロセスの読取りテーブルが無効と判断される、ということがあり得る。
そこで、複数の論理プロセスの読取りテーブルの全てが有効であるなら、ステップ1208の判断が肯定的となって、図12のフローチャートで示す処理は、完了する。
ステップ1208で、読取りテーブルが無効と判断された論理プロセスが1つでもあると、ステップ1210で、グローバル・スケジューラ608が、読取りテーブルが無効と判断された論理プロセスに、ダウト(doubt)メッセージを送る。ダウト・メッセージは、ステップ1206でのチェックのもととなった書込みメッセージの、大域変数と、時間と、値の情報を含む。
ステップ1212で、ダウト・メッセージを受け取った論理プロセスは、それに従い、対応する読取りテーブルのエントリを変更する。ここでいう読取りテーブルのエントリの変更とは、図14のフローチャートに示すように、ステップ1402で論理プロセスがダウト・メッセージを受け取ると、ステップ1404で、ダウト・メッセージに含まれる大域変数の指定に対応する読取りテーブルにおいて、ダウト・メッセージに含まれる時間よりも後の時間をもつエントリを消去するか無効化し、ステップ1406で、ダウト・メッセージに含まれる時間と値のエントリを、読取りテーブルに書き込むことである。そうして、ステップ1408では、必要に応じて、ロールバック処理が行われる。すなわち、図4に示すように、論理プロセスが、内部状態と入力のヒストリを状態リポジトリ404に保存していると、更新された読取りテーブルのエントリに基づき、状態リポジトリ404を検索して、その状態に論理プロセスを戻して、そこから再開することができる。
図12に戻って、ステップ1214では、論理プロセスが、書込みをロールバックするかどうかを判断する。書込みロールバックが必要な処理は、図17以下を参照して、後で説明する。
そして、ステップ1216で、書込みロールバックが必要と判断されると、ステップ1218で、論理プロセスは、グローバル・スケジューラ608に、書込みキャンセルのメッセージを送る。このことも、図17以下を参照して、後で説明する。
ステップ1216で、書込みロールバックは不要と判断されると、処理は終了する。
これも後で詳しく説明するが、ステップ1220に示すように、書込みキャンセルが生じると、それによって指定されたエントリを書込みテーブルから除去した後、改めて、ステップ1206で、書込みテーブルと読取りテーブルの一貫性がチェックされる。この場合は、書込みキャンセルの後書込みテーブルに残った時間の最も新しいエントリと読取りテーブルとの一貫性をチェックすれば十分である。
次に、図15と図16を参照して、書込み処理による、読取りテーブルの無効化と変更処理の例を説明する。これらの図には、論理プロセスLP1、LP2・・、LPn、グローバル・スケジューラ608、及び書込みテーブル1012と読取りデーブル1014を含む共有メモリ領域1008が示されている。
ここでは、説明の便宜上、大域変数は、変数1だけのメモリ区画を図示する。また、同期テーブル1004も、論理プロセスLP1、LP2及びLP3の対応するもののみ、表示する。
なお、図15及び図16において、LP3の同期テーブル1004cが、アクセス不可となっているのは、LP3は、この変数1にアクセスしないと分かっているので、予めその旨フラグを立てておくという意味である。というのは、この実施例では、コミット時間の領域1016に格納される時間は、全てのLPの同期テーブルに完了時間が埋まった段階でそのうちの最も古い時間によって決定されるが、もしLP3の同期テーブル1004cをアクセス不可として認識しておかないと、そこの完了時間が埋まらないため、コミット時間が確定できなくなるからである。
さて、図15で、LP1が、変数1に対して時間10で100という値を書き込むメッセージを、グローバル・スケジューラ608に送る。すると、そのメッセージを以って、グローバル・スケジューラ608は、時間10で100という値を、書込みテーブル1012に書き込む。それから少し遅れて12という時間で、グローバル・スケジューラ608は、書込み完了を確認し、それによって、LP1の同期テーブル1004aに、12という数字を格納する。
そこで、時間15で、LPnが変数1の値を読みに来る。値を読むことは、変数1の書込みテーブル1012を読みに来ることである。その時点では、100という値が入ったエントリだけがあるので、LPnは、その値を読取って、その値を使った処理を行う。一方、LPnは、読取りの記録として、時間15で、読取った値の100を、LPn用の読取りテーブル1014に書き込む。なお、シミュレーション・システムでは、各LPでシミュレーション時間が異なることがあるので、上述のように、あるLPによる時間10での書込みの後に、時間15での、別のLPによる読取りが、その時間順序で起こるとは限らず、その逆の順序でも起こりえるということを理解されたい。
次に、LP1が、変数1に対して時間20で50という値を書き込むメッセージを、グローバル・スケジューラ608に送る。すると、そのメッセージを以って、グローバル・スケジューラ608は、時間20で50という値を、書込みテーブル1012に書き込む。それから少し遅れて12という時間で、グローバル・スケジューラ608は、書込み完了を確認し、それによって、LP1の同期テーブル1004aに、22という数字を格納する。
ここで、図12のフローチャートに戻って参照すると、このような書込み処理に応答して、ステップ1206で示す書込みテーブルと読取りテーブルの一貫性チェックが行われる。しかし、この場合、書込みテーブル1012に先ほど書かれたエントリの時間は20で、読取りテーブルのエントリの時間15よりも大きい。このことは、図13のフローチャートで、ステップ1310が決して肯定的にならないので、ループは、ステップ1318に抜けて、一貫性はOKであることになる。
さらにLP1が、変数1に対して時間30で10という値を書き込むメッセージを、グローバル・スケジューラ608に送って書込み処理を行う場合も同様であるので、詳細な処理の説明は省略する。
ここで再び、図12のフローチャートのステップ1206で示す書込みテーブルと読取りテーブルの一貫性チェックに着目する。今回書込みテーブル1012に追加されたエントリは、時間が11で値が110である。まず、時間が11ということで、読取りテーブルのエントリの時間15で以って、10 <= 15 < 20が成立し、このことは、図13のフローチャートのステップ1310の判断を肯定的にする。次に、11 < 15なので、ステップ1316の判断に行く。そこで、今回書込みテーブル1012に追加されたエントリの値である110と、読取りテーブル1014の時間15のエントリの値100が比較され、一致しないので、ステップ1320に行き、結局、ステップ1208が有効でない、という判断になる。そこで、ステップ1210に示すように、グローバル・スケジューラ608が、変数1で、時間11で、値110というダウト・メッセージを、LPnに送る。
LPnでは、このダウト・メッセージを受領すると、そこにある時間15で値100という読取りテーブル1014のエントリをキャンセルする。なぜなら、その時間15は、ダウト・メッセージに含まれている時間11よりも後で、そのエントリの値が異なっているからである。
そうして、キャンセルした最も古い時間15をそのまま使って、ダウト・メッセージに含まれている値110でもって、読取りテーブル1014に、時間15で値110のエントリを書き込む。論理プロセスLPnは、この更新された読取り値で以って、必要なロールバック処理を行う。LP2の処理が完了すると LP2が完了メッセージを、グローバル・スケジューラに送ってくる。これによって、LP2の完了時刻として 13が埋まる。
なお、このような書込みや読取り処理を行うと、同期テーブル、書込みテーブル、及び読取りテーブルのエントリは増えてくる。この実施例では、同期テーブルのエントリは、書込みが行われたタイミングで、コミット時間よりと同等かより古い時間のエントリを削除するように、グローバル・スケジューラ608が動作を行う。
書込みテーブル、及び読取りテーブルの場合は、この実施例では、特定サイズでメモリ区画を区切り、エントリが増えてきて、そのメモリ区画の終端に達したら、メモリ位置を指し示すインデックスを最初の位置に戻して、引き続きデータを書き込んでいくという方法で、エントリが増え続けるのを防いでいる。ただ、書込みテーブル、及び読取りテーブルの場合も、あるタイミングで、コミット時間と同等かより古いものを削除するようにしてもよい。
図17(1)は、書込みキャンセル動作の例を説明するための図である。ここでは、論理プロセスAと、論理プロセスBを考える。図17で先ず、ある大域変数に、あるタイミングで、論理プロセスAが値10を書き込むとする。その後のあるタイミングで、論理プロセスBが、その大域変数を読む。値は、10である。そこで論理プロセスBは、内部のロジックにより、その大域変数が0より大きいなら20を書き込み、そうでないなら、なにもしないとする。すると、このロジックにより、論理プロセスBは、値20を大域変数に書込む。
ところが、図17(2)のように、論理プロセスAが、値10の書込みをキャンセルして、値-10をその大域変数に書込むと、論理プロセスBが読取る大域変数も、-10となる。そこで論理プロセスBは、その大域変数が0より大きいなら20を書き込み、そうでないなら、なにもしないというロジックを再び適用するが、すると、大域変数の値は0より小さいのだから、論理プロセスBは何もしない、というオプションしか取りえない。しかし、論理プロセスBには、前の書込み値が正しくないことは認識している。これを解消するために、論理プロセスBが、グローバル・スケジューラ608に、書込みテーブルに既に書込んだエントリの取り消しを行うメッセージを出すことができるようにする。
図18、図19及び図20は、書込みの取り消し動作の例を説明する図である。図18において、論理プロセスLP1が、グローバル・スケジューラ608に、時間10で値100の書込みメッセージを送る。これによって、グローバル・スケジューラ608によって、書込みテーブル1012に対応するエントリが書かれる。次に時間20で、論理プロセスLP2が、書込みテーブル1012の値を読取って、読取りテーブル1014に読取った時間と値のエントリを書込む。すなわち、図18で前面に表示されている読取りテーブル1014は、LP2の読取りテーブルである。次にLP2が、グローバル・スケジューラ608に、時間30で値50の書込みメッセージを送る。これによって、グローバル・スケジューラ608によって、書込みテーブル1012に対応するエントリが書かれる。ここで留意すべきなのは、この書込む50という値は、時間20で読取った値100に依存している、ということである。従って、時間20で読取った値が100と異なれば、時間30で書く値も、50とは異なるということがありえる。
次に、図19において、LP1が、グローバル・スケジューラ608に、時間15で値110の書込みメッセージを送る。これによって、グローバル・スケジューラ608によって、書込みテーブル1012に対応するエントリが書かれる。すると、読取りテーブル1014の時間20で値100のエントリと、書込みテーブル1012のエントリとを比較すると、読取りテーブル1014の時間20で値100のエントリは、時間的に書込みテーブル1012の時間10のエントリと時間30の間にあって、時間15のエントリよりも時間が後なので、図13のフローチャートのステップ1316の比較が行われ、そこでの判断がNoなので、読取りテーブル1014の時間20で値100のエントリは、無効と判別される。
こうして、図16に関連して説明したのと同様の仕組みで、LP2は、読取りテーブル1014をロールバックする。その様子は、図19の読取りテーブル1014に示すとおりである。
しかし、ロールバックによって、読取りテーブル1014の時間20で値100のエントリが無効になってしまうと、その読取り内容に依存していた書込みテーブル1012における時間30で値50のエントリは最早無効である、ということを、LP2は論理的に認識することができる。これに従い、LP2は、グローバル・スケジューラ608に、書込みテーブル1012における時間30で値50のエントリをキャンセルするメッセージを送る。それに応答して、グローバル・スケジューラ608は、書込みテーブル1012における時間30で値50のエントリをキャンセルする。その様子が、図20に示されている。この処理は、図12のフローチャートのステップ1220に至る。こうして、ステップ1206での書込みテーブル1012と読取りテーブル1014の一貫性チェックが行われる。この場合、キャンセルされたエントリを除く、書込みテーブル1012の最も新しい時間のエントリと、読取りテーブル1014のエントリとの間で、一貫性チェックを行えば十分である。
ところで、もし書込みテーブルに対して、複数の論理プロセスが同時にアクセスすることがないような排他的な仕組みをシミュレーション・システムが用意しているなら、グローバル・スケジューラ608を介することなく、直接論理プロセスが、書込みテーブルと読取りテーブルにアクセスしてよい。よって、これは別の実施例である。以下、この場合の処理について説明する。
図21は、その場合の書込み処理をフローチャートを示す。なお、読取り処理は、図11のフローチャートで既に示したとおりである。図21において、ステップ2102では、論理プロセスが直接、書込みテーブルに、時間と値をもつエントリを書込む。
ステップ2104では、その大域変数における、読取りテーブル1014と書込みテーブル1012との一貫性がチェックされ、その結果、ステップ1206で有効と判断されるか否かによって、異なる処理が行われる。ステップ1206で有効と判断されると、処理は完了する。
ステップ2104とステップ2106は、より詳細には、図13のフローチャートで示した処理であるが、既に詳細に説明したので、ここでは説明を省略する。
こうして、ステップ2106で、書込みテーブルと読取りテーブルの間に一貫性がなく有効でないと判断されると、ステップ2108で、その読取りテーブルが書込みテーブルとの一貫性がないと判断された論理プロセスに、ダウト・メッセージを送る。
ダウト・メッセージを受け取った論理プロセスは、ステップ2110で、ダウト・メッセージに含まれる内容に従い、読取りテーブルのエントリを変更する。ここでいう読取りテーブルのエントリの変更とは、図14のフローチャートに示すように、ステップ1402で論理プロセスがダウト・メッセージを受け取ると、ステップ1404で、ダウト・メッセージに含まれる大域変数の指定に対応する読取りテーブルにおいて、ダウト・メッセージに含まれる時間よりも後の時間をもつエントリを消去するか無効化し、ステップ1406で、ダウト・メッセージに含まれる時間と値のエントリを、読取りテーブルに書き込むことである。その後、必要に応じてその他のロールバック処理を行う。こうして、処理は完了する。
次に、図22と図23を参照して、この別の実施例の処理について説明する。これらの図において、グローバル・スケジューラ608は、表示されているが、処理には関与しない。
図22において、LP1が、時間10で値100のエントリを、変数1の書込みテーブル1012に書き込む。次に、時間12、17、25でそれぞれ、LP2が書込みテーブル1012のエントリの値を読取り、LP2の読取りテーブル1014に、時間と値をエントリとして順次書込んでいく。
その後、図23に示すように、LP2がステップ2102に従い、時間20で値50のエントリを、変数1の書込みテーブル1012に書き込む。すると、その書込みエントリで以って、ステップ2104に従い書込みテーブルと読取りテーブルとの一貫性のチェックが行われると、読取りテーブル1014における時間25のエントリのところで、10 <= 25 < ∞で且つ、20 < 25なので、図13のステップで、ステップ1316の判断に行き、そこで書込みテーブルの時間20のエントリと、読取りテーブル1014の時間25のエントリとが比較されて、その値が一致しないので、読取りテーブル1014のエントリは無効と判断される。この判断に応答して、LP1が、LP2に、時間20で値50の書込みに関するダウト・メッセージを送る。これに応答して、LP2は、その読取りテーブル1014において、時間25のエントリを無効にし、時間25で値50のエントリを書込む。
尚、上記実施例では、1つの大域変数毎に1つの書込みテーブルが用意されたが、本発明は、このような構成に限定されることなく、書込みテーブルに大域変数を示す欄を入れることによって、シミュレーション・システムで単一の書込みテーブルを設けるようにしてもよい。
同様に、上記実施例では、1つの大域変数につき、論理プロセス毎に1つの読取りテーブルを用意したが、本発明はやはり、このような構成に限定されることなく、読取りテーブルに大域変数と論理プロセスを示す欄を入れることによって、シミュレーション・システムで単一の読取りテーブルを使用するようにすることも可能である。
以上、自動車用の複数のシミュレーション・システムに関連して、本発明の特定の実施例を説明してきたが、本発明はこのような特定の実施例に限定されず、飛行機用のシミュレーション・システムなど、一般的な電子機械制御系システムのシミュレーション・システムに適用可能であることを、この分野の当業者であるなら、理解するであろう。
ECUの典型的な制御である、フィードバック閉ループ系の例を示す図である。 フィードバック閉ループ系の、応答関数による記述の例である。 ECUソフトウェア・エミュレータのクロック応答の時間推移を示す図である。 内部変数を取り出すことができるようになった後のECUのソフトウェア・エミュレータのブロック図である。 本発明を実施するために使用されるコンピュータのハードウェアのブロック図である。 本発明のシミュレーション・システムの機能論理ブロック図である。 センサに対して、物理装置シミュレータ及びECUエミュレータが読み書きすることを示す図である。 論理プロセスによる、大域変数に対する値の読み書きを示すタイミング・チャートを示す図である。 論理プロセスによる、大域変数に対する値の読み書きを示すタイミング・チャートを示す図である。 本発明の一実施例の同期テーブル、書込みテーブル及び読取りテーブルの構成を示す図である。 読取り動作のフローチャートを示す図である。 書込み動作のフローチャートを示す図である。 読取りテーブルの書込みテーブルとの一貫性を調べるための処理のフローチャートを示す図である。 ロールバック処理のフローチャートを示す図である。 同期テーブル、書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 同期テーブル、書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 書込みキャンセル動作を説明するためのタイミング・チャートである。 同期テーブル、書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 同期テーブル、書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 同期テーブル、書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 別の実施例に係る書込み動作のフローチャートを示す図である。 書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。 書込みテーブル及び読取りテーブルのエントリと、読書き動作の対応を示す図である。
符号の説明
LP1、LP2・・・、LPn 論理プロセス
506、1008 メモリ
1012 書込みテーブル
1014 読取りテーブル
604a、604b・・・、604n ECUエミュレータ
606a、606b・・・、606m 物理装置シミュレータ
608 グローバル・スケジューラ

Claims (16)

  1. コンピュータに基づく、シミュレーション・システムにおいて、
    値を、前記コンピュータによって読書き可能なメモリと、
    前記メモリ内に設けられた、少なくとも1つの大域変数の領域と、
    前記大域変数から値を読取る、時間付きの読取りイベント、または、前記大域変数に値を書き込む、時間付きの書込みイベントを発生する複数の論理プロセスと、
    前記メモリ内に設けられた、時間及び値を含む複数のエントリをもつ書込みテーブルと、
    前記大域変数毎に、前記メモリ内に各論理プロセス毎に設けられ、時間及び値を含む複数のエントリをもつ読取りテーブルと、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における書込みテーブルに、前記書込みイベントの時間と値のエントリを格納する手段と、
    前記論理プロセスが、前記読取りイベントを発生することに応答して、前記大域変数における、前記論理プロセスの前記する読取りテーブルに、前記読取りイベントの時間と値のエントリを格納する手段と、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における、各論理プロセス毎の前記読取りテーブルのエントリを、前記大域変数における前記書込みテーブルのエントリと比較することにより、有効かどうかを判定する手段と、
    前記読取りテーブルが有効でないと判定された論理プロセスに、メッセージを送る手段と、
    前記メッセージを受領した前記論理プロセスにおいて、ロールバック処理を行う手段とを有する、
    シミュレーション・システム。
  2. 前記書込みテーブルは前記大域変数毎に設けられ、前記読取りテーブルは、前記大域変数毎に且つ前記各論理プロセス毎に設けられている、請求項1のシミュレーション・システム。
  3. 前記有効かどうかを判定する手段は、前記書込みイベントに応答して前記書込みテーブルに書込まれたエントリに対して、時間的に直前と直後のエントリの時間範囲にあって、時間が後で値が異なるエントリを前記読取りテーブルがもつことに応答して、前記読取りテーブルが無効と判定する、請求項1のシミュレーション・システム。
  4. 前記読取りテーブルの、前記時間が後で値が異なるエントリをキャンセルして、前記読取りテーブルに、前記書込みテーブルに書込まれたエントリの値をもつエントリを書き込む手段をさらに有する、請求項3のシミュレーション・システム。
  5. 前記論理プロセスが、物理装置シミュレータまたはECUエミュレータである、請求項1のシミュレーション・システム。
  6. 複数の前記論理プロセスからの前記書込みイベントを受け取って、前記書込みテーブルに書込みを行い、その完了に応答して順次前記書込みイベントを処理するグローバル・スケジューラをさらに有する、請求項1のシミュレーション・システム。
  7. コンピュータに基づく、シミュレーション方法において、
    前記コンピュータのメモリ内に、少なくとも1つの大域変数の領域を確保するステップと、
    前記大域変数から値を読取る、時間付きの読取りイベント、または、前記大域変数に値を書き込む、時間付きの書込みイベントを発生する複数の論理プロセスを実行するステップと、
    前記コンピュータのメモリ内に、時間及び値を含む複数のエントリをもつ書込みテーブルを確保するステップと、
    前記コンピュータのメモリ内に、時間及び値を含む複数のエントリをもつ読取りテーブルを、確保するステップと、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における書込みテーブルに、前記書込みイベントの時間と値のエントリを格納するステップと、
    前記論理プロセスが、前記読取りイベントを発生することに応答して、前記大域変数における、前記論理プロセスの前記する読取りテーブルに、前記読取りイベントの時間と値のエントリを格納するステップと、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における、各論理プロセス毎の前記読取りテーブルのエントリを、前記大域変数における前記書込みテーブルのエントリと比較することにより、有効かどうかを判定するステップと、
    前記読取りテーブルが有効でないと判定された論理プロセスに、メッセージを送るステップと、
    前記メッセージを受領した前記論理プロセスにおいて、ロールバック処理を行うステップとを有する、
    シミュレーション方法。
  8. 前記書込みテーブルは前記大域変数毎に設けられ、前記読取りテーブルは、前記大域変数毎に且つ前記各論理プロセス毎に設けられている、請求項7のシミュレーション方法。
  9. 前記有効かどうかを判定するステップは、前記書込みイベントに応答して前記書込みテーブルに書込まれたエントリに対して、時間的に直前と直後のエントリの時間範囲にあって、時間が後で値が異なるエントリを前記読取りテーブルがもつことに応答して、前記読取りテーブルが無効と判定する、請求項7のシミュレーション方法。
  10. 前記読取りテーブルの、前記時間が後で値が異なるエントリをキャンセルして、前記読取りテーブルに、前記書込みテーブルに書込まれたエントリの値をもつエントリを書き込む手段をさらに有する、請求項9のシミュレーション方法。
  11. 前記論理プロセスが、物理装置シミュレータまたはECUエミュレータである、請求項7のシミュレーション方法。
  12. コンピュータ上で実行される、シミュレーション・プログラムであって、
    前記コンピュータに、
    前記コンピュータのメモリ内に、少なくとも1つの大域変数の領域を確保するステップと、
    前記大域変数から値を読取る、時間付きの読取りイベント、または、前記大域変数に値を書き込む、時間付きの書込みイベントを発生する複数の論理プロセスを実行するステップと、
    前記コンピュータのメモリ内に、時間及び値を含む複数のエントリをもつ書込みテーブルを確保するステップと、
    前記コンピュータのメモリ内に、時間及び値を含む複数のエントリをもつ読取りテーブルを、確保するステップと、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における書込みテーブルに、前記書込みイベントの時間と値のエントリを格納するステップと、
    前記論理プロセスが、前記読取りイベントを発生することに応答して、前記大域変数における、前記論理プロセスの前記する読取りテーブルに、前記読取りイベントの時間と値のエントリを格納するステップと、
    前記論理プロセスが、前記書込みイベントを発生することに応答して、前記大域変数における、各論理プロセス毎の前記読取りテーブルのエントリを、前記大域変数における前記書込みテーブルのエントリと比較することにより、有効かどうかを判定するステップと、
    前記読取りテーブルが有効でないと判定された論理プロセスに、メッセージを送るステップと、
    前記メッセージを受領した前記論理プロセスにおいて、ロールバック処理を行うステップと実行させる、
    シミュレーション・プログラム。
  13. 前記書込みテーブルは前記大域変数毎に設けられ、前記読取りテーブルは、前記大域変数毎に且つ前記各論理プロセス毎に設けられている、請求項12のシミュレーション・プログラム。
  14. 前記有効かどうかを判定するステップは、前記書込みイベントに応答して前記書込みテーブルに書込まれたエントリに対して、時間的に直前と直後のエントリの時間範囲にあって、時間が後で値が異なるエントリを前記読取りテーブルがもつことに応答して、前記読取りテーブルが無効と判定する、請求項12のシミュレーション・プログラム。
  15. 前記読取りテーブルの、前記時間が後で値が異なるエントリをキャンセルして、前記読取りテーブルに、前記書込みテーブルに書込まれたエントリの値をもつエントリを書き込むステップをさらに有する、請求項14のシミュレーション・プログラム。
  16. 前記論理プロセスが、物理装置シミュレータまたはECUエミュレータである、請求項12のシミュレーション・プログラム。
JP2008217813A 2008-08-27 2008-08-27 シミュレーション方法、システム及びプログラム Expired - Fee Related JP5186307B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008217813A JP5186307B2 (ja) 2008-08-27 2008-08-27 シミュレーション方法、システム及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008217813A JP5186307B2 (ja) 2008-08-27 2008-08-27 シミュレーション方法、システム及びプログラム

Publications (2)

Publication Number Publication Date
JP2010055249A JP2010055249A (ja) 2010-03-11
JP5186307B2 true JP5186307B2 (ja) 2013-04-17

Family

ID=42071118

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008217813A Expired - Fee Related JP5186307B2 (ja) 2008-08-27 2008-08-27 シミュレーション方法、システム及びプログラム

Country Status (1)

Country Link
JP (1) JP5186307B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101139610B1 (ko) * 2010-07-29 2012-04-27 한국수력원자력 주식회사 데이터베이스화된 공유메모리를 이용한 공학적 분석용 프로그램들간의 동기화된 연계 방법 및 시스템
CN104461706B (zh) * 2014-11-24 2019-03-26 上海华为技术有限公司 一种将共享全局变量共享的方法和多处理装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10319827A (ja) * 1997-05-20 1998-12-04 Ishikawajima Harima Heavy Ind Co Ltd 訓練シミュレータのプロセスモデル及びその構成方法
JP3963092B2 (ja) * 2001-10-18 2007-08-22 トヨタ自動車株式会社 車両システム試験装置、及び方法
US7231334B2 (en) * 2002-04-18 2007-06-12 International Business Machines Corporation Coupler interface for facilitating distributed simulation of a partitioned logic design
JP2003308219A (ja) * 2002-04-18 2003-10-31 Nec Soft Ltd 排他制御方式

Also Published As

Publication number Publication date
JP2010055249A (ja) 2010-03-11

Similar Documents

Publication Publication Date Title
JP5179249B2 (ja) 制御装置シミュレーション方法、システム及びプログラム
JP5153465B2 (ja) シミュレーション方法、システム及びプログラム
Reif Automotive Mechatronics
JP5065344B2 (ja) シミュレーション方法、システム及びプログラム
Mubeen et al. Supporting timing analysis of vehicular embedded systems through the refinement of timing constraints
EP1703391B1 (en) Vehicle control software and vehicle control apparatus
JP5224957B2 (ja) シミュレーション方法、システム及びプログラム
JP5295355B2 (ja) シミュレーション方法、システム及びプログラム
JP5186290B2 (ja) シミュレーション方法、システム及びプログラム
JP5186307B2 (ja) シミュレーション方法、システム及びプログラム
JP5460010B2 (ja) シミュレーション方法、システム及びプログラム
Lee et al. Towards a seamless development process for automotive engine-control system
JP4852629B2 (ja) シミュレーション・システム、方法及びプログラム
Yeganefard et al. Evaluation of a guideline by formal modelling of cruise control system in Event-B
JP5500820B2 (ja) シミュレーション方法、システム及びプログラム
Simonot-Lion et al. Vehicle functional domains and their requirements
Harris Embedded software for automotive applications
Santos et al. On the timing analysis at automotive real-time embedded systems
Resmerita et al. Verification of embedded control systems by simulation and program execution control
Balluchi et al. Hybrid systems in automotive electronics design
Tsuzuki et al. [Industrial Paper] Performance Measurement and Finding Challenges in Using FMUs to Perform Scenario-Based Testing in a Cloud Environment
Gaglio Design and realization of an open-loop simulator for ICE control unit, developing the crankshaft and camshaft sensors simulation
Conrad et al. Towards a methodology for the design of hybrid systems in automotive electronics
Oral An effective modeling architecture for mil, hil and vdil testing
Ito et al. Model-based software validation for automotive control systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110805

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121211

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130121

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160125

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees