(57)【要約】      （修正有）【課題】シミュレーション実行中のハイブリッドモデルプログラムにおける状態遷移を可視化する。【解決手段】変数を有する連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述と、状態遷移の記録を行う付加処理の記述とを有するハイブリッドモデルプログラムを用いてシミュレーションを実行する装置であって、シミュレーション中に付加処理を実行し時刻と変数名と状態遷移の識別情報とを表す状態遷移履歴データを生成する付加処理実行部１００６と、数値積分により連続系方程式を解くことで、時刻と変数名と、変数の値とを表す変数値時間履歴データを生成する連続系シミュレーション部１０１１と、変数値時間履歴データから、変数値の時刻変化を示すグラフを生成して表示し、状態遷移履歴データから、変数の状態遷移の表示画像を生成し、グラフに重ね合わせて表示するシミュレーション結果表示部１０１４と、を具備する。【選択図】図１
2008243044.tif 000002
【特許請求の範囲】
【請求項１】
変数を有する連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述と、状態遷移の記録を行う付加処理の記述とを有するハイブリッドモデルプログラムを用いてシミュレーションを実行するハイブリッドモデルシミュレーション装置であって、
前記シミュレーション中に前記付加処理を実行することにより、時刻と、前記変数の変数名と、前記状態遷移の識別情報とを表す状態遷移履歴データを生成する付加処理実行部と、
時間軸に沿った数値積分により前記連続系方程式を解くことにより、時刻と、前記変数の変数名と、前記変数の値とを表す変数値時間履歴データを生成する連続系シミュレーション部と、
前記変数値時間履歴データから、時刻の変化に沿った前記変数の変数値の変化を示すグラフを生成して表示し、前記状態遷移履歴データから、前記変数の状態遷移を識別可能な表示画像を生成し、前記グラフに重ね合わせて表示するシミュレーション結果表示部と、を具備するハイブリッドモデルシミュレーション装置。
【請求項２】
前記連続系方程式の記述に基づいて、モデル方程式登録プログラムを生成する第１のプログラム生成手段と、
前記状態遷移に伴う連続系方程式の切り替えに関する記述に基づいて、イベント処理プログラムを生成する第２のプログラム生成手段と、
前記モデル方程式登録プログラムを実行することにより、前記連続系方程式をシミュレーション実行可能なデータ構造に変換する変換手段と、
シミュレーションの開始によって前記イベント処理プログラムを実行し、イベントの発生に応じて前記連続系方程式の有効・無効を切り替える切り替え手段と、をさらに具備し、
前記連続系シミュレーション部は、前記切り替え手段において有効とされた連続系方程式に対応する前記データ構造を用いて、前記連続系方程式を解くことを特徴とする請求項１に記載のハイブリッドモデルシミュレーション装置。
【請求項３】
前記シミュレーション結果表示部は、前記変数の状態遷移を識別可能な表示画像とともに、前記変数の状態遷移名を表示する請求項１又は２に記載のハイブリッドモデルシミュレーション装置。
【請求項４】
前記シミュレーション結果表示部は、複数の変数についての変数値の変化を示す複数のグラフを生成して表示し、指定手段により指定されたグラフについて、前記変数の状態遷移を識別可能な表示画像を表示する請求項１乃至３のいずれかに記載のハイブリッドモデルシミュレーション装置。
【請求項５】
変数を有する連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述と、状態遷移の記録を行う付加処理の記述とを有するハイブリッドモデルプログラムを用いてシミュレーションを実行するハイブリッドモデルシミュレーション方法であって、
付加処理実行部が、前記シミュレーション中に前記付加処理を実行することにより、時刻と、前記変数の変数名と、前記状態遷移の識別情報とを表す状態遷移履歴データを生成するステップと、
連続系シミュレーション部が、時間軸に沿った数値積分により前記連続系方程式を解くことにより、時刻と、前記変数の変数名と、前記変数の値とを表す変数値時間履歴データを生成するステップと、
シミュレーション結果表示部が、前記変数値時間履歴データから、時刻の変化に沿った前記変数の変数値の変化を示すグラフを生成して表示し、前記状態遷移履歴データから、前記変数の状態遷移を識別可能な表示画像を生成し、前記グラフに重ね合わせて表示するステップと、を具備するハイブリッドモデルシミュレーション方法。
【請求項６】
変数を有する連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述と、状態遷移の記録を行う付加処理の記述とを有するハイブリッドモデルプログラムを用いてシミュレーションを実行するハイブリッドモデルシミュレーションプログラムであって、
コンピュータに、
前記シミュレーション中に前記付加処理を実行することにより、時刻と、前記変数の変数名と、前記状態遷移の識別情報とを表す状態遷移履歴データを生成する手順と、
時間軸に沿った数値積分により前記連続系方程式を解くことにより、時刻と、前記変数の変数名と、前記変数の値とを表す変数値時間履歴データを生成する手順と、
前記変数値時間履歴データから、時刻の変化に沿った前記変数の変数値の変化を示すグラフを生成して表示し、前記状態遷移履歴データから、前記変数の状態遷移を識別可能な表示画像を生成し、前記グラフに重ね合わせて表示する手順と、を実行させるためのハイブリッドモデルシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハイブリッドモデルシミュレーション結果を可視化するためのシミュレーション装置に関する。
【背景技術】
【０００２】
機構シミュレーション等に用いられるハイブリッドモデルは、常微分方程式や代数方程式を連立させた連立方程式によって表現された連続系モデルと、システム内部の状態を表現する状態遷移モデル（離散系モデル）とが組み合わされたものである。ハイブリッドモデルのデータは、連続系モデルの記述と、状態遷移モデルの記述とが混在して記述された、少なくとも一行以上の文字列で構成されるテキストデータとして管理される（下記「特許文献１」を参照。）。
【０００３】
このようなハイブリッドモデルを用いるシミュレーション装置において、ハイブリッドモデル変数の時間変化を直感的に把握することができるようにするため、時間軸と値軸からなる時間変化履歴グラフによってシミュレーション結果を表示するものがある（例えば下記「特許文献２」を参照。）。
【特許文献１】特開２００３−２７１６７９号公報
【特許文献２】特開２００４−１７８３００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記時間変化履歴グラフを用いたシミュレーション結果表示においては、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握しづらいという問題点がある。
【０００５】
そこで本発明は、シミュレーション実行中のハイブリッドモデルプログラムにおける状態遷移を可視化でき、これによりハイブリッドモデルプログラムの挙動を直感的に把握できるようなシミュレーション装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一観点に係るハイブリッドモデルシミュレーション装置は、変数を有する連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述と、状態遷移の記録を行う付加処理の記述とを有するハイブリッドモデルプログラムを用いてシミュレーションを実行するハイブリッドモデルシミュレーション装置であって、前記シミュレーション中に前記付加処理を実行することにより、時刻と、前記変数の変数名と、前記状態遷移の識別情報とを表す状態遷移履歴データを生成する付加処理実行部と、時間軸に沿った数値積分により前記連続系方程式を解くことにより、時刻と、前記変数の変数名と、前記変数の値とを表す変数値時間履歴データを生成する連続系シミュレーション部と、前記変数値時間履歴データから、時刻の変化に沿った前記変数の変数値の変化を示すグラフを生成して表示し、前記状態遷移履歴データから、前記変数の状態遷移を識別可能な表示画像を生成し、前記グラフに重ね合わせて表示するシミュレーション結果表示部と、を具備する。
【発明の効果】
【０００７】
本発明によれば、シミュレーション実行中のハイブリッドモデルプログラムにおける状態遷移を可視化でき、これによりハイブリッドモデルプログラムの挙動を直感的に把握できるようなシミュレーション装置を提供できる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照しながら本発明の実施形態を説明する。
【０００９】
（第１の実施形態）
図１は、第１の実施形態に係るハイブリッドモデルシミュレーション装置を示すブロック図である。制御情報解析部１００２はハイブリッドモデルプログラム１００１を読み込み、モデル方程式登録プログラム１００３、イベント処理プログラム１００４、及びシミュレーション実行時付加処理プログラム１００５を生成する。方程式解析部１００７は主に常微分方程式などで記述されたモデル方程式登録プログラム１００３を読み込み、解析結果を方程式データ記憶部１０１０に格納する。イベント処理部１００８は、付加処理プログラムを実行するタイミングと連続系方程式を切り替えるタイミングを記述したイベント処理プログラム１００４を読み込む。付加処理実行部１００６はシミュレーション実行時付加処理プログラム１００５を読み、イベント処理部１００８は付加処理が実行可能になった場合に付加処理プログラムを実行する。付加処理プログラム中に状態遷移に関連するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）が呼ばれた場合には、その呼出履歴を状態遷移履歴記憶ＤＢ（データベース）１０１３に登録する。
【００１０】
連続系方程式切り替え部１００９は、イベント処理部１００８からの設定に従って登録された方程式のうちどの方程式をシミュレーション中に有効にして数値計算を行うかを決定し、方程式の有効・無効を決定する。連続系シミュレーション部１０１１は、有効な方程式の数値積分を時間軸に沿って実行し、方程式の変数の値を決定する。変数の時間履歴は変数値時間履歴記憶ＤＢ１０１２に保存される。シミュレーション結果表示部１０１４は状態遷移履歴記憶ＤＢ１０１３及び変数値時間履歴ＤＢ１０１２から、状態遷移の時間的変化及び変数値の時間的変化を表示する。
【００１１】
本実施形態は一般的なコンピュータを用いて構成することができ、そのハードウェア構成としてＣＰＵ、メモリ、外部記憶装置、通信インターフェース、表示装置、キーボード、マウス等を備える。またこれらのハードウェアを制御するためのオペレーティングシステムを備える。本実施形態に係るシミュレーション装置はこのようなオペレーティングシステム上で動作するアプリケーションソフトとして実装することができる。
【００１２】
以上において、シミュレーション実行時付加処理プログラム１００５の内容、状態遷移履歴記憶ＤＢ１０１３、及びシミュレーション結果表示部１０１４を除く構成要素については、特開２００４−１７８３００号公報及び特開２００４−２２０５７７号公報の記載を参考にすることができる。
【００１３】
ここで図２を参照し、ハイブリッドモデルプログラム１００１の一例を挙げながら、状態遷移とモデル方程式の関係について説明する。ハイブリッドモデルプログラム１００１はテキストで記述され、テキストエディタなどのテキスト編集ツールを用いて作成することができる。ハイブリッドモデルプログラム１００１は、主に、モデル方程式と、状態記述と、状態遷移条件の記述とから構成される。
【００１４】
図２に示されるハイブリッドモデルプログラム１００１のリスト行において、モデル方程式の記述はＬ８，Ｌ１１，Ｌ１４，Ｌ１７であり、状態記述はＬ７−Ｌ８のｄｏ−ｗａｔｃｈｉｎｇ構文、Ｌ１０−Ｌ１１のｄｏ−ｗａｔｃｈｉｎｇ構文、Ｌ１３−Ｌ１４のｄｏ−ｗａｔｃｈｉｎｇ構文、Ｌ１６−Ｌ１７のｄｏ−ｗａｔｃｈｉｎｇ構文などであり、状態遷移条件の記述は「ｕｐ（Ｌ６）」のイベント発行及び「ｃｏｎｓｔ（Ｌ９）」「ｄｏｗｎ（Ｌ１２）」「ｉｄｌｅ（Ｌ１５）」のｗｈｅｎ構文などである。
【００１５】
図２の左側に示されるのはハイブリッドモデルプログラム１００１の状態遷移図である。それぞれの状態記述は状態名を持ち、Ｌ７−Ｌ８は「立ち上げ」、Ｌ１０−Ｌ１１は「等速」、Ｌ１３−Ｌ１４は「減速」、Ｌ１６−Ｌ１７は「アイドル」である。
【００１６】
次に、状態遷移の記録指令がコード中に記述されたハイブリッドモデルプログラム１００１を用い、シミュレーション過程において状態遷移の記録情報がどのように生成され、状態遷移履歴記憶ＤＢ１０１３に登録されるかについて説明する。状態遷移の記録情報は、ある変数について、状態遷移を識別可能な情報である。
【００１７】
（Ｌ１）cont y;event up;event const;event 
（Ｌ２）down;event idle;
（Ｌ３）y=1;up;
（Ｌ４）when(up){
（Ｌ５）    do {always y'=y+1;}watching (const);}
（Ｌ６）process(up){SetStatus("y","立ち上げ");}
（Ｌ７）when (y=10) const;
（Ｌ８）when(const){
（Ｌ９）    do {always y'=0;}watching (down);}
（Ｌ１０）process(const){SetStatus("y","等速");}
（Ｌ１１）when (t=100) down;
（Ｌ１２）when(down){
（Ｌ１３）    do {always y'=-1;}watching (idle);}
（Ｌ１４）process(down){SetStatus("y","減速");}
（Ｌ１５）when (y=1) idle;
（Ｌ１６）when(idle){
（Ｌ１７）    do {always y'=0;}watching (up);}
（Ｌ１８）process(idle){SetStatus("y","アイドル");}
このハイブリッドモデルプログラムではｐｒｏｃｅｓｓ文を用いて付加処理を実行している（Ｌ６、Ｌ１０、Ｌ１４、Ｌ１８）。ｐｒｏｃｅｓｓ文はイベント「ｕｐ」「ｃｏｎｓｔ」「ｄｏｗｎ」「ｉｄｌｅ」によって付加処理プログラム（ここではＳｅｔＳｔａｔｕｓ関数）を実行する。つまり、状態遷移条件が成立するとｐｒｏｃｅｓｓ文によってＳｅｔＳｔａｔｕｓ関数が呼び出される。ＳｅｔＳｔａｔｕｓ関数は引数として変数名と状態遷移名を持つ。モデル方程式登録プログラム１００３、イベント処理プログラム１００４はＣ言語のプログラム（例えば、特開２００４−１７８３００号公報の段落［００６３］を参照。）として出力され、シミュレーション実行時付加処理プログラム１００５（ＳｅｔＳｔａｔｕｓ関数など）についてもＣ言語のプログラム（例えば、特開２００４−２２０５７７号公報の段落［００５２］［数２］を参照。）として出力される。ＳｅｔＳｔａｔｕｓ関数は例えば以下のようなプログラムとして記述する。
【００１８】
void SetStatus(const char* name, cont char* status_name ) {
FILE* fp = fopen("status_change_log.txt","a");
double time = getCurrentTime();
fprintf(fp,"%f, %s, %s\n",time,name,status_name);
fclose(fp);
}
ここでｇｅｔＣｕｒｒｅｔｎＴｉｍｅ（）関数は、現在のシミュレーション時刻を取得するＡＰＩである。以下のような関数によって「ｓｔａｔｕｓ＿ｃｈａｎｇｅ＿ｌｏｇ．ｔｘｔ」には以下のような出力になる。
【表１】
2008243044.tif 000003
【００１９】
次に、ハイブリッドモデルプログラムの前処理について詳細に説明する。
【００２０】
ハイブリッドモデルプログラム１００１は、まず制御情報解析部１００２において処理され、モデル方程式登録プログラム１００３、イベント処理プログラム１００４、及びシミュレーション実行時付加処理プログラム１００５が生成される。
【００２１】
ハイブリッドモデルシミュレーション装置を構成するソフトウェアモジュールとして、モデル方程式の登録を行うための関数及び連続系方程式を切り替えるための関数がＡＰＩ関数として提供される。モデル方程式登録プログラム１００３およびイベント処理プログラム１００４は、該当する上記ＡＰＩ関数を呼び出す記述を、入力されたハイブリッドモデルプログラム１００１に沿って適切に組み合わせたプログラムである。この観点から考えると、制御情報解析部１００２は、入力をハイブリッドモデルプログラム１００１とし、出力を例えばＣ言語のＡＰＩ関数呼び出しの記述を含むＣプログラム（ソース）とするような、一種のコンパイラと考えることもできる。このようなモデル方程式登録プログラム１００３とイベント処理プログラム１００４は、さらにＣ言語などのコンパイラによりコンパイルされ、例えば実行時に動的にリンク可能なライブラリが生成される。ハイブリッドモデルシミュレーション装置では、シミュレーション実行にあたって、生成された動的リンクライブラリがリンクされ、入力ハイブリッドモデルを忠実に再現するシミュレーションプログラムが完成し、実行可能になる。なお、生成されるこれらのライブラリは必ずしも動的リンクライブラリである必要はなく、静的なライブラリであってもよい。
【００２２】
ハイブリッドモデルシミュレーション装置のアプリケーションインターフェースを構成する具体的なソフトウェアモジュールの仕様などは様々考えられるが、ここでは説明の都合上、以下の３つのＡＰＩ関数が最低定義されているとする。なお、プログラミング言語はＣ言語とする。
【００２３】
int XXX_AddEqnData(char *eqn, int *err)  
int XXX_ActivateEqn(int eqnid)  
int XXX_DeActivateEqn(int eqnid)  
１つ目のＡＰＩ関数ＸＸＸ＿ＡｄｄＥｑｎＤａｔａは、１つの連続系方程式を表す文字列のポインタを引数に指定する。ＸＸＸ＿ＡｄｄＥｑｎＤａｔａは、この連続系方程式を構文解析し、連続系方程式の記述をシミュレーション実行可能なデータ構造（内部データ表現）に変換し、かかる内部データ表現を方程式データ記憶部１０１０に登録する処理を行う。なお、ここの連続系方程式には、ユニークなＩＤ番号が割り当てられる。たとえば「ａｂ／ｃｏｓ（ａ−（ｃ＋ｂ））−３ｃ」という式が与えられたと仮定すると、木構造の内部データ表現を生成する。この木構造は、例えば線形多項式の親ノード（節）、掛け算のノード、割り算のノード、外部関数（四則演算以外の意）のノード、線形多項式を構成する各項のノードから構成される。本例において、木構造の葉に相当するものはすべて変数（ａ，ｂ，ｃ）であり、これらに実数の係数が加わって線形式となる。線形式はｃｏｓなどの外部関数の引数になったり、掛け算や割り算の対象となる。変数には、別途、値が確定しているかどうかのフラグが設けられており、またこのような木構造のデータに基づいて該変数の現在の値が保持される。木構造のすべての葉の値（すなわち変数の値）が確定していれば、式の値を計算することができる。方程式データ記憶部１０１０では、式の値の計算などを高速に行うことができるように、予め内部のデータ構造をつなぎ合わせて木構造を構成してある。上記処理において何らかのエラーが発生した場合には、ｅｒｒ  にエラーコードがセットされる。正常に処理が終了した場合は、登録された方程式のＩＤ番号を返り値とする。
【００２４】
２番目のＡＰＩ関数ＸＸＸ＿ＡｃｔｉｖａｔｅＥｑｎは、引数に指定された方程式のＩＤ番号に相当する方程式を有効にする。もし、すでに有効となっている方程式が指定されている場合には何もしない。返り値はエラーコードである。
【００２５】
３番目のＡＰＩ関数ＸＸＸ＿ＤｅＡｃｔｉｖａｔｅＥｑｎは、ＸＸＸ＿ＡｃｔｉｖａｔｅＥｑｎとは逆に、引数に指定された方程式のＩＤ番号に相当する方程式を無効にする。すでに無効となっている方程式が指定された場合には何もしない。
【００２６】
制御情報解析部１００２は、まずＸＸＸ＿ＡｄｄＥｑｎＤａｔａを必要な方程式について順に呼ぶ関数（ＩｎｉｔＥｑｎＤａｔａ）を生成する。これがモデル方程式登録プログラム１００３（第１のプログラム）に相当する。
【００２７】
また、制御情報解析部１００２は、シミュレーション実行の際に、時間がΔｔ進むごとに条件のチェックおよび方程式の切り替えを行う関数（ＣｈａｎｇｅＥｑｎ）も生成する。これはイベント処理プログラム１００４（第２のプログラム）に相当する。
【００２８】
ここで、ＣｈａｎｇｅＥｑｎ関数は「ｕｐ」イベント、「ｃｏｎｓｔ」イベント、「ｄｏｗｎ」イベント、「ｉｄｌｅ」イベントの発生をＧｅｔＥｖｅｎｔ関数により検知する。ＣｈａｎｇｅＥｑｎ関数はシミュレーション実行時における時間ステップ毎にイベント処理部１００８から呼び出される。
【００２９】
ハイブリッドモデルシミュレーション装置では、図１から分かるようにイベント処理部１００８と連続系シミュレーション部１０１１とが分離されている。したがって、イベント処理プログラム１００４には時間積分などの時間に依存するモジュールは含まれず、これに対応するイベント処理部１００８は連続系方程式の有効・無効のフラグの切り替えのみを行う。
【００３０】
このようなシミュレータ構成を採ることにより、外部機器とのインターフェースに係るイベントとハイブリッド記述に係るイベントとを同一の処理（ｉｆ（ＧｅｔＥｖｅｎｔ（イベント）処理）で管理することができる。
【００３１】
また、制御情報解析部１００２は、ハイブリッドシミュレーションモデルをいったん付加処理と同一の言語として出力するため、容易にハイブリッドシミュレーション実行プログラムを生成可能である。したがって、ハイブリッドシミュレーションと外部機器との連携が容易になる。
【００３２】
また、制御情報解析部１００２は、図２のＬ６，Ｌ９，Ｌ１２，Ｌ１５のように内部でイベントを発生させる場合は、ＳｅｔＥｖｅｎｔ関数を生成する。ＳｅｔＥｖｅｎｔ関数はシミュレーション実行時に置ける時間ステップ毎にイベント処理部１００８から呼び出される。制御情報解析部１００２では、図２のＬ６の「ｕｐ」イベントは、
if(getCurrentTime()==0)SetEvent(“up”);
というＣ言語のソースプログラムに変換される。また図２のＬ９の「ｃｏｎｓｔ」イベントはシミュレーション中に各変数の値を取得するＧｅｔＶａｌｕｅ関数を用いて
if(GetValue(“y”)==10)SetEvent(“const”);
というＣ言語のソースプログラムに変換される。
【００３３】
さらに、制御情報解析部１００２は、付加処理の内容記述をハイブリッドモデルプログラム１００１から抽出する。この抽出された記述はシミュレーション実行部付加処理プログラム１００５（第３のプログラム）に相当する。シミュレーション実行部付加処理プログラム１００５はハイブリッドモデルプログラム１００１中でもともとＣ言語などにより記述されたプログラムのソースに相当する（例：上述のＳｅｔＳｔａｔｕｓ関数）。抽出されたシミュレーション実行部付加処理プログラム１００５は、Ｃ言語コンパイラによりコンパイルされ、動的にリンク可能なライブラリが生成される。付加処理実行部２０５は、この動的にリンク可能なライブラリを呼び出すインターフェースの役割を担う。なお、生成されるライブラリは必ずしも動的リンクライブラリである必要はなく、静的なライブラリであってもよい。また、付加処理の内容を記述する言語はＣ言語に限定されない。
【００３４】
上記したような制御情報解析部１００２における処理により、例えば、上述したハイブリッドモデルプログラム１００１について、以下のようなＣ言語のソースプログラムが自動生成される。
【００３５】
static char eqn1[]="y'=1*y+1";
static char eqn2[]="y'=0";
static char eqn3[]="y'=-1";
static char eqn4[]="y'=0";
static int eqn1id; 
static int eqn2id; 
static int eqn3id; 
static int eqn4id; 
int InitEqnData()
{
int err;
eqn1id = XXX_AddEqnData(eqn1, &err);
if(err!=0)return err;
eqn2id = XXX_AddEqnData(eqn2, &err);
if(err!=0)return err;
eqn3id = XXX_AddEqnData(eqn3, &err);
if(err!=0)return err;
eqn4id = XXX_AddEqnData(eqn4, &err);
if(err!=0)return err;
}
int ChangeEqn()
{
int err;
BOOL GetEvent(char *eventname);
if(GetEvent("up")){
Err=XXX_ActivateEqn(eqn1id);
if(err!=0)return err;
XXX_DeActiveteEqn(eqn4id);
if(err!=0)return err;
}
if(GetEvent("const")){
Err=XXX_ActivateEqn(eqn2id);
if(err!=0)return err;
XXX_DeActiveteEqn(eqn1id);
if(err!=0)return err;
}
if(GetEvent("down")){
Err=XXX_ActivateEqn(eqn3id);
if(err!=0)return err;
XXX_DeActiveteEqn(eqn2id);
if(err!=0)return err;
}
if(GetEvent("idle")){
Err=XXX_ActivateEqn(eqn4id);
if(err!=0)return err;
XXX_DeActiveteEqn(eqn2id);
if(err!=0)return err;
}
if(getCurrentTime()==0)SetEvent(“up");
if(GetValue(“y")==10)SetEvent(“const");
if(getCurrentTime()==100)SetEvent(“down");
if(GetValue(“y")==1)SetEvent(“idle");
}
なお、ＧｅｔＥｖｅｎｔは、引数に指定された名前（ｅｖｅｎｔｎａｍｅ）のイベントが生起しているかどうかをチェックする関数である。
【００３６】
以上のプログラムは、上述したようにＣ言語コンパイラによってコンパイルされ、さらに動的リンクライブラリの形式に整えられ、実行時にリンクされる。
【００３７】
なお、本実施形態では、プログラム言語としてＣ言語を用いた例について説明したが、本発明はこれに限定されるものではなく、例えばＣ＋＋言語、ＳｐｅｃＣ言語等の他のプログラム言語を用いてもよい。
【００３８】
次に、シミュレーションの実行について説明する。
【００３９】
シミュレーションが開始されると、連続系方程式の値を計算することでシミュレーション実行が行われる。このとき、連続系方程式切り替え部１００９は、イベント処理部１００８の内部で呼び出され、連続系方程式の切り替えを有効・無効のフラグを用いて実行する。イベント処理部１００８は前処理において生成されたイベント処理プログラム１００４（第２のプログラム；ＣｈａｎｇｅＥｑｎ）に対応する。
【００４０】
連続系シミュレーション部１０１１は、方程式データ記憶部１０１０を参照し、同記憶部１０１０に木構造の形式で格納されている連続系方程式の内部データ表現を演算対象として、時間ステップづつ数値積分を実行する。シミュレーションは、常微分方程式及び代数多項式の連立からなる非線形連立方程式についての初期値問題である。このため、例えば図２に示される初期状態が与えられている。具体的には、例えば一般によく使われているルンゲクッタアルゴリズムを用いて解の値を計算する。必要なデータは機構シミュレータから出力を行い、さらに連続系方程式切り替え部１００９の処理に戻り、上記の処理を繰り返すことにより必要な時間のシミュレーションを実行する。シミュレーション結果は、変数値時間履歴記憶ＤＢ１０１２に保存される。
【００４１】
以上説明したように、シミュレーションの開始から終了までのあいだに、付加処理実行部１００６の動作に伴い状態遷移履歴記憶ＤＢ１０１３に状態遷移の時間的変化を示す履歴データが記録される一方、連続系シミュレーション部１０１１の動作に伴い変数値時間履歴記憶ＤＢ１０１２には変数値の時間的変化を示す履歴データが記録されることになる。
【００４２】
図３はシミュレーション結果表示部１０１４による表示例を示している。シミュレーション結果表示部１０１４は、シミュレーション結果として例えば時間軸２００２と値軸２００３の２軸により変数値の時間変化履歴を示す時間変化履歴グラフ２００１を表示することに加え、特に本実施形態ではこの時間変化履歴グラフ２００１に重畳して状態遷移情報３００４及び状態遷移名３００５とを表示する。
【００４３】
状態遷移情報３００４は、時間変化履歴グラフ２００１に重ね合わせて表示され、状態遷移を視覚的に識別可能な表示画像であって、本実施形態では時間変化履歴グラフ２００１において、各状態の開始時刻（最小値）に相当する直線と終了時刻（最大値）に相当する直線とによって挟まれる矩形領域の画像とする。この矩形領域画像は、隣接する状態との区別のために、異なる色で塗りつぶすか、隣接する領域とは異なるハッチングを行う。 
状態遷移名３００５は状態遷移情報３００４内か、状態遷移情報３００４に対して一部重なる位置に配置される。また、状態遷移名３００５は時間変化履歴グラフ２００１とは重ならない領域に配置される。
【００４４】
図４はシミュレーション結果表示部１０１４の内部構成を示すブロック図である。シミュレーション結果表示部１０１４は、変数値時間履歴記憶ＤＢ１０１３を解析し、グラフ表示用データを作成する変数履歴解析部４００１と、状態遷移履歴記憶ＤＢ１０１２を解析し、状態遷移名３００５及び状態遷移情報３００４を作成する状態遷移履歴解析部４００２とにより構成される。変数値時間履歴記憶ＤＢ１０１３は例えば以下のようなテキストファイルで実現される。以下は変数ｘと変数ｙが時刻１．０から６．０まで変化したときの時刻履歴を保存したファイルである。
【表２】
2008243044.tif 000004
【００４５】
行の先頭がアルファベット文字列変数で開始し、タブ文字やスペース文字などの空白文字を含まずに改行がある箇所を変数の区切りとする。一行が３列で構成されている場合は一列目が時刻、２列目が下限値、３列目が上限値である。上限値と下限値が一致している場合は数値計算によって値が決定されている、異なる数値の場合は値が決定されていないことを示す。変数履歴解析部４００１では各変数に対してグラフをプロットするｘ座標、ｙ座標を決定する。ここではｘ軸は時刻を表しており、一列目のデータを利用する。またY軸は値を表し、２列目と３列目の数値が一致する場合は２列目の値を利用する。２列目と３列目の値が異なる場合（不定の場合）はグラフに表示しないなどの処理を行う。
【００４６】
状態遷移履歴解析部４００２は例えば状態遷移履歴記憶ＤＢ１０１２として以下のようなデータを解析する。
【表３】
2008243044.tif 000005
【００４７】
一列目は時刻、二列目は変数、三列目は状態遷移名である。状態遷移履歴解析部４００２は、上記データのファイルを読み込み、各変数に対して状態遷移情報３００４を決定する。各変数は、全ての時刻においていずれかの状態にあるものとする。この場合、上記データを解析すると、「立ち上げ」状態は時刻０．０〜１０．０、「等速」状態は時刻１０〜１００、「減速」状態は１００〜１５０、「アイドル」状態は１５０〜シミュレーション終了時刻となる。各時刻とグラフ上の表示位置との関係は変数履歴解析部４００１の処理により決定されているため、グラフ表示部４００３から取得することができる。状態遷移情報３００４の下限及び上限値はグラフ表示部の最小値及び最大値となる。状態遷移名３００５は三列目の文字列が表示可能な程度の大きさを持ち、状態遷移情報３００４の開示時刻と終了時刻の中間におけるｘ座標値、状態遷移情報３００４から一定座標下げたｙ座標値に配置する。以上の処理の処理フローを図５に示す。
【００４８】
以上説明した第１の実施形態によれば、図３の表示例から理解されるように、シミュレーション実行中のハイブリッドモデルプログラムにおける状態遷移を可視化できる。つまり、変数値の時間変化履歴を示す時間変化履歴グラフ２００１を単に表示するのみならず、状態遷移情報３００４及び状態遷移名３００５を表示することができる。したがって、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握しやすくなる。
【００４９】
（第２の実施形態）
図６は第２の実施形態に係るシミュレーション結果表示部を示すブロック図である。この図６に示すシミュレーション結果表示部１０１４は、変数値時間履歴記憶ＤＢ１０１３を解析してグラフ表示部４００３に表示するための時間変化履歴グラフ２００１を作成する変数履歴解析部４００１と、状態遷移履歴記憶ＤＢ１０１２を解析してグラフ表示部４００３に表示するための状態遷移情報３００４及び状態遷移名３００５を作成する状態遷移履歴解析部４００２と、状態遷移を表示する変数名を選択するための状態表示切り替え部５００１とから構成される。
【００５０】
図７は第２の実施形態に係るシミュレーション結果表示部の処理手順を示すフローチャートである。まず変数値時間履歴記憶ＤＢ１０１３のファイルを開く（１３００１）。次に状態遷移履歴記憶ＤＢ１０１２のファイルを開く（１３００２）。
【００５１】
これらファイルに記録された情報に基づいて、グラフ表示領域内の各変数データの表示位置を計算する（１３００３）。次に、状態表示対象の変数名を取得し、各状態の開始時刻及び終了時刻を算出し（１３００４）、各状態のグラフ表示域内の状態遷移情報３００４を計算する（１３００５）。さらに、各状態のグラフ表示域内のラベル位置を計算する（１３００６）。
【００５２】
そして、以上において算出された位置情報に従い、時間変化履歴グラフ２００１（グラフ）、状態遷移情報３００４（リージョン）、状態遷移名３００５（ラベル）を表示する。ここで、グラフ表示終了処理が行われた場合は終了処理を実行し、グラフ表示領域、例えば表示する時刻の範囲や表示する値の範囲に変更があった場合は１３００３の状態に戻る。
【００５３】
図８は、状態表示切替部５００１により状態遷移表示の対象となる変数名を指定可能に構成された画面の表示例を示す図である。グラフ表示部４００３はマウスポインタ８００２を持つ。このマウスポインタ８００２はＰＣに接続されたマウスの移動操作に応じて画面内を移動させることができる。時間変化履歴グラフ２００１上でマウスをクリックすると（例えば図８の例では実線で示されたライン上）、クリックされたグラフに関連付けられた変数名が取得される。
【００５４】
このクリック指定操作により、状態遷移履歴解析部４００２によって状態遷移履歴記憶ＤＢ１０１２から該変数名に関連する状態遷移履歴情報が読み取られ、状態遷移履歴表示が行われる。マウスでクリックする領域はグラフのライン上でも良いし、グラフの近傍（例えばフラグから数ピクセル離れた）位置をクリックしても良い。グラフの近傍のクリックを許可する場合は、グラフのライン上のクリックに比べて比較的容易にマウス操作を行うことができ、より簡単な状態遷移の切り替えを行うことができる。
【００５５】
図９は状態表示切替部５００１により状態遷移表示の対象となる変数名を指定可能に構成された別の画面の表示例を示す図である。シミュレーション結果表示部１０１４は、グラフ表示部４００３、メニューバー９００１を持ち、メニューバー９００１は変数表示メニュー９００２及び表示変数指示ボタン９００３を持つ。変数表示メニュー９００２は変数値時間履歴記憶ＤＢ１０１３から履歴が記憶されている変数名の一覧を作成し、メニューに表示する。例えば変数値時間履歴記憶ＤＢ１０１３が上記［数４］に示したものであるとする。各行の最初の文字列がアルファベットで記述されている場合は変数名として一覧に登録する。この場合、登録される変数は、「ｘ」及び「ｙ」である。メニューには、「ｘを表示する」「ｙを表示する」と表示を行う。ユーザがマウスポインタ８００２（図示せず）を用いて表示変数指示ボタン９００３をクリックすると、クリックされたボタンの隣に配置された変数表示メニュー９００２に関連付けられた変数名を取得し、状態遷移履歴解析部４００２によって状態遷移履歴記憶ＤＢ１０１２から変数名に関連する状態遷移履歴情報を読み取り、状態遷移履歴表示を行う。
【００５６】
図１０は状態表示切替部５００１により状態遷移表示の対象となる変数名を指定可能に構成された別の画面の表示例を示す図である。グラフ表示部４００３は変数名表示領域１０００３及び、第一の変数の有効ボタン１０００１及び第２の変数の有効ボタン１０００２を持つ。ユーザがマウスポインタ８００２（図示せず）を用いてボタンを押下すると、押下したボタンに関連付けられている変数名を読み込み、状態遷移履歴解析部４００２によって状態遷移履歴記憶ＤＢ１０１２から変数名に関連する状態遷移履歴情報を読み取り、状態遷移履歴表示を行う。
【００５７】
（第３の実施形態）
図１１は第３の実施形態に係り、シミュレーション結果表示部１０１４が２つの変数を同時に１つのグラフ領域に表示するよう構成した場合のグラフ表示部４００３の表示例を示している。第３の実施形態においてシミュレーション結果表示部１０１４は、第一の変数に関する時間変化履歴グラフ６００１と、第２の変数に関する時間変化履歴グラフ６００２とを同時に表示可能となっている。
【００５８】
以下は複数の変数に関して状態遷移の履歴を持つ状態遷移履歴記憶ＤＢ１０１２の例である。ここで第一の変数に関する時間変化履歴グラフ６００１は変数ｘに関して、第２の変数に関する時間変化履歴グラフ６００２は変数ｙに関して表示を行うものとする。
【表４】
2008243044.tif 000006
【００５９】
予め変数ｘに関して状態遷移の表示を行うと設定されている場合は、状態遷移履歴解析部４００２では変数ｘに関するデータのみの読み込みを行い、状態遷移情報３００４、状態遷移名３００５の表示を行う。
【００６０】
これに対し図１２は、予め変数ｙに関しての状態遷移の表示を行うと設定されている場合の表示例である。
【００６１】
（第４の実施形態）
図１３は２つの変数を同時に２つのグラフ領域に表示した場合の、グラフ表示部４００３の表示例である。グラフ表示部４００３は状態遷移補助線１１００１を持ち、上下のグラフで同一の状態遷移がある場合は、対応する線を描画している。この表示方法を用いることでグラフデータが重なって表示されることが避けられるため、グラフデータの視認性が向上する。また同一の状態遷移名を持つ状態遷移情報３００４は同一の色で塗り潰すか、同一のハッチングパターンを用いることで、上下のグラフの状態遷移の比較が容易になる。また同一の色やハッチングパターンを用いている場合は、状態遷移名３００５のどちらか一方を消去することもできる。
【００６２】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００６３】
【図１】第１の実施形態に係るハイブリッドモデルシミュレーション装置を示すブロック図
【図２】ハイブリッドモデルプログラムにおける状態遷移とモデル方程式の関係について説明するための図
【図３】シミュレーション結果表示部による表示例を示す図
【図４】シミュレーション結果表示部の内部構成を示すブロック図
【図５】第１の実施形態に係るシミュレーション結果表示部の処理手順を示すフローチャート
【図６】第２の実施形態に係るシミュレーション結果表示部を示すブロック図
【図７】第２の実施形態に係るシミュレーション結果表示部の処理手順を示すフローチャート
【図８】状態表示切替部により状態遷移表示の対象となる変数名を指定可能に構成された画面の表示例を示す図
【図９】変数名を指定可能に構成された別の画面の表示例を示す図
【図１０】変数名を指定可能に構成された別の画面の表示例を示す図
【図１１】第３の実施形態に係り、シミュレーション結果表示部が２つの変数を同時に１つのグラフ領域に表示するよう構成した場合のグラフ表示部の表示例を示す図
【図１２】予め変数ｙに関しての状態遷移の表示を行うと設定されている場合の表示例を示す図
【図１３】２つの変数を同時に２つのグラフ領域に表示した場合のグラフ表示部の表示例を示す図
【符号の説明】
【００６４】
１００１…ハイブリッドモデルプログラム；
１００２…制御情報解析部；
１００３…モデル方程式登録プログラム；
１００４…イベント処理プログラム；
１００５…シミュレーション実行時付加処理プログラム；
１００６…付加処理実行部；
１００７…方程式解析部；
１００８…イベント処理部；
１００９…連続系方程式切り替え部；
１０１０…方程式データ記憶部；
１０１１…連続系シミュレーション部；
１０１２…変数値時間履歴記憶ＤＢ；
１０１３…状態遷移履歴記憶ＤＢ；
１０１４…シミュレーション結果表示部
【図１】
2008243044.tif 000007
【図２】
2008243044.tif 000008
【図３】
2008243044.tif 000009
【図４】
2008243044.tif 000010
【図５】
2008243044.tif 000011
【図６】
2008243044.tif 000012
【図７】
2008243044.tif 000013
【図８】
2008243044.tif 000014
【図９】
2008243044.tif 000015
【図１０】
2008243044.tif 000016
【図１１】
2008243044.tif 000017
【図１２】
2008243044.tif 000018
【図１３】
2008243044.tif 000019