(57)【要約】【課題】シミュレーション実行に大きな負荷をかけることなく必要な情報を取り出し、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握できるようにすること。【解決手段】  シミュレーション装置は、連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述とを有するハイブリッドモデルを用いてシミュレーションを実行するシミュレーション部と、前記ハイブリッドモデルを解析することにより、連続系方程式のＩＤと、連続系方程式の記述行とを対応付けるマップを生成するマップ生成手段と、前記シミュレーションの実行時において、シミュレーション時刻毎に、前記ＩＤを有する連続系方程式が有効であるか無効であるかを示す情報を生成する情報生成手段と、を具備し、前記マップ及び前記情報を前記ハイブリッドモデルの検証に供することを特徴とする。【選択図】図１
2008243042.tif 000002
【特許請求の範囲】
【請求項１】
連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述とを有するハイブリッドモデルを用いてシミュレーションを実行するシミュレーション部と、
前記ハイブリッドモデルを解析することにより、連続系方程式のＩＤと、連続系方程式の記述行とを対応付けるマップを生成するマップ生成手段と、
前記シミュレーションの実行時において、シミュレーション時刻毎に、前記ＩＤを有する連続系方程式が有効であるか無効であるかを示す情報を生成する情報生成手段と、を具備し、
前記マップ及び前記情報を前記ハイブリッドモデルの検証に供することを特徴とするシミュレーション装置。
【請求項２】
前記シミュレーション部は、
前記連続系方程式の記述に基づいて、モデル方程式登録プログラムを生成する第１のプログラム生成手段と、
前記状態遷移に伴う連続系方程式の切り替えに関する記述に基づいて、イベント処理プログラムを生成する第２のプログラム生成手段と、
前記モデル方程式登録プログラムを実行することにより、前記連続系方程式をシミュレーション実行可能なデータ構造に変換する変換手段と、
前記イベント処理プログラムを実行することにより、イベントの発生に応じて前記連続系方程式の有効・無効を切り替える切り替え手段と、
前記切り替え手段において有効とされた前記連続系方程式に対応する前記データ構造を用いて、時間軸に沿った数値積分により該連続系方程式を解くことにより、前記シミュレーションを実行することを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
シミュレーション時刻を入力する入力手段と、
前記入力手段により入力されたシミュレーション時刻において有効な連続系方程式のＩＤを前記情報から求め、該連続系方程式のＩＤに対応する連続系方程式の記述行を前記マップから求める手段と、
前記記述行に対応する位置に、該連続系方程式が有効であることを示すフラグを表示する表示手段と、をさらに具備することを特徴とする請求項１又は２に記載のシミュレーション装置。
【請求項４】
前記入力手段は、前記シミュレーションの実行におけるシミュレーション時刻の最小値と最大値との間で任意のシミュレーション時刻を指定可能なスライドバーを有することを特徴とする請求項３に記載のシミュレーション装置。
【請求項５】
前記入力手段は、シミュレーション時刻を数値入力する手段を有することを特徴とする請求項３に記載のシミュレーション装置。
【請求項６】
連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述とを有するハイブリッドモデルを用いたシミュレーションをシミュレーション部が実行するステップと、
前記ハイブリッドモデルを情報解析部が解析することにより、連続系方程式のＩＤと、連続系方程式の記述行とを対応付けるマップを生成するステップと、
前記シミュレーション部によるシミュレーションの実行時において、シミュレーション時刻毎に、前記ＩＤを有する連続系方程式が有効であるか無効であるかを示す情報を連続系方程式の切り替え部が生成するステップと、を有することを特徴とするシミュレーション方法。
【請求項７】
連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述とを有するハイブリッドモデルを用いてシミュレーションを実行するシミュレーション手順と、
前記ハイブリッドモデルを解析することにより、連続系方程式のＩＤと、連続系方程式の記述行とを対応付けるマップを生成するマップ生成手順と、
前記シミュレーションの実行時において、シミュレーション時刻毎に、前記ＩＤを有する連続系方程式が有効であるか無効であるかを示す情報を生成する情報生成手順と、をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はハイブリッドモデル内部の動作を可視化するためのハイブリッドモデル検証を行うためのハイブリッドモデルのシミュレーション装置、方法及びプログラムに関する。
【背景技術】
【０００２】
現在、コンピュータを用いて機械やプラント等の挙動のシミュレーションを行う際に、ハイブリッドモデリングと呼ばれる手法が使われている。ハイブリッドモデルを用いたシミュレーションは「ハイブリッドシミュレーション」と呼ばれている。このようなシミュレーション挙動をするシステムを「ハイブリッドシステム」と呼ぶこともある。
【０００３】
シミュレーションの目的で作成されるハイブリッドモデルは、概念的には常微分方程式や代数方程式を連立させた連立方程式によって表現される連続系モデルと、イベント発生に伴う状態遷移を表現するための状態遷移モデルとを組み合わせたモデルである。ハイブリッドモデルによれば、連続系モデルで表現される状態が外部からのイベントなどにより瞬時に切り替わるシステムを表現することができる。
【０００４】
ハイブリッドモデルのソースファイルは、連続系の記述と離散系の記述とが混在して記述された、少なくとも一行以上の文字列で構成されるテキストデータである。
【０００５】
（従来の技術１）
ハイブリッドシステムに用いられるＤＣＭＬ(Dynamics Constraint Modeling Language)コンパイラとして、例えば特許文献１に記載のものが公知である。
【０００６】
上記従来のＤＣＭＬコンパイラには次のような問題点を解決することが必要とされる。すなわち、ハイブリッドモデルプログラムがモデル方程式登録プログラムとイベント処理プログラムに変換される過程でモデル方程式やイベント処理がハイブリッドモデル中のどの行を示すかなどの対応関係が失われてしまう。したがって、シミュレーションが実行される過程で、ハイブリッドモデルがどの順序で実行されているかを把握することできない。
【０００７】
そこで、モータやセンサなどの挙動を記述するハイブリッドモデルが正しく動作するか確認するために、
（１）シミュレーション結果ログを見て期待値と結果を比較する、
（２）モデルがモデル記述ルールに従っているかをコンパイラが判定する、
（３）ハイブリッドモデルプログラム（並列型プログラム）を逐次型プログラム（Ｃ言語のプログラム）に変換し、その動作を動的に確認する、といった方法を用いている。
【０００８】
しかし、この方法ではシミュレーション実行中にハイブリッドモデルプログラムの挙動を直感的に把握することが困難であり、ハイブリッドモデルプログラムの作成に時間がかかってしまう。
【０００９】
（従来の技術２）（ＨＣＣインタプリタ）
ハイブリッドモデル言語の原型はゼロックスパロアルト研究所で開発されたＨＣＣ(Hybrid Concurrent Constraint Programming)言語である。ＨＣＣ言語はインタプリタにより逐次解釈を行いながら内部の変数状態などを表示するデバッガ機能を持つ。ＨＣＣ言語が持つデバッガはインタプリタ内部に実装されており、ハイブリッドモデルを解析しながら実行することができる。また、インタプリタ内部の変数情報を標準出力することができ、比較的容易にハイブリッドモデル内部の状態を可視化することができる。
【００１０】
上記従来のＨＣＣインタプリタには次のような問題点がある。すなわち、ハイブリッドモデルプログラムをモデル方程式プログラム及びイベント処理プログラムに変換してからシミュレーションを行う場合には、オブジェクトコードに変換される過程でオブジェクトコードとハイブリッドモデルのソースコードとの対応関係を知ることができないという問題点がある。
【００１１】
（従来の技術３）（統合開発環境）
Eclipse（例えば、非特許文献１を参照）やVisual Studio（マイクロソフト（登録商標）社製品）など、パーソナルコンピュータや組込みプロセッサ上で動作可能なプログラムを開発する統合開発環境が提供されている。この統合開発環境はソースコードを表示するエディターやコンパイラを備えており、ソースコードをパーソナルコンピュータ上のプロセッサ上で実行可能なオブジェクトコードに変換することが可能である。
【００１２】
また統合開発環境はデバッガを備えており、デバッグに関する付加的な情報をコンパイラがオブジェクトコードに追加し、ユーザからのキーボード入力やマウス操作によってソースコードを一行ずつ実行するステップ実行機能を行うことが可能である。
【００１３】
ステップ実行時には、現在のプログラム有効ステップに対応したソースコードの行数をフラグで表示することができる。デバッガはプロセッサの動作をエミュレートする機能を内蔵しており、プロセッサが次に実行する機械語の命令を管理するプログラムカウンタに相当する機能と、機械語の命令とソースコードとの対応を管理し、実行中のソースコードの行数を、ＧＵＩ（グラフィカルユーザインタフェース）を用いて表示することできる。
【００１４】
しかし、従来の統合開発環境は、逐次型のプログラムをデバッグするためのデバッガ処理を行うものである。つまり、プロセッサ内部の動作を模擬する従来のデバッガの構成では、ハイブリッドモデルプログラムの連続系モデルのように同時に複数の行数が有効になる場合には利用することができない。また、従来のパーソナルコンピュータや組込みプロセッサ上で動作可能なプログラムを開発する統合開発環境に使われるデバッガでは、シミュレーション時刻を入力する手段を備えておらず、シミュレーション時刻を設定してそのときのハイブリッドモデルの動作状態を可視化することは当然ながら行えない。
【００１５】
（従来の技術４）
シミュレーションをしながら逐次型でないプログラム（Ｖｅｒｉｌｏｇ−ＨＤＬ言語やＶＨＤＬ言語）をデバッグする統合開発環境としては、ＭｏｄｅｌＳｉｍ（登録商標）や、Ｍｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ社製）などがある。
【特許文献１】特開２００４−１７８３００号公報
【非特許文献１】インターネットＵＲＬ＜www.eclipse.org＞
【発明の開示】
【発明が解決しようとする課題】
【００１６】
本発明は、シミュレーション実行に大きな負荷をかけることなく必要な情報を取り出し、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握できるようにすることを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一態様に係るシミュレーション装置は、連続系方程式の記述と、状態遷移に伴う前記連続系方程式の切り替えに関する記述とを有するハイブリッドモデルを用いてシミュレーションを実行するシミュレーション部と、前記ハイブリッドモデルを解析することにより、連続系方程式のＩＤと、連続系方程式の記述行とを対応付けるマップを生成するマップ生成手段と、前記シミュレーションの実行時において、シミュレーション時刻毎に、前記ＩＤを有する連続系方程式が有効であるか無効であるかを示す情報を生成する情報生成手段と、を具備し、前記マップ及び前記情報を前記ハイブリッドモデルの検証に供することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、シミュレーション実行に大きな負荷をかけることなく必要な情報を取り出し、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握できる。
【発明を実施するための最良の形態】
【００１９】
（第１の実施形態）
図１は、第１乃至第３の実施形態に共通するシミュレーション装置を示すブロック図である。シミュレーション装置２０００はシミュレーション部２０１４と方程式切り替え履歴表示部５０００から構成される。シミュレーション部２０１４は、制御情報解析部２００２と、イベント処理部２００６と、方程式解析部２００５と、連続系方程式切り替え部２０１０と、連続形シミュレーション部２００８から構成される。本実施形態は一般的なコンピュータを用いて構成することができ、そのハードウェア構成としてＣＰＵ、メモリ、外部記憶装置、通信インタフェース、表示装置、キーボード、マウス等を備える。またこれらのハードウェアを制御するためのオペレーティングシステムを備える。本実施形態に係るシミュレーション装置はこのようなオペレーティングシステム上で動作するアプリケーションソフトとして実装することができる。
【００２０】
制御情報解析部２００２は、ハイブリッドモデルプログラム２００１から連続系方程式の記述とイベントに伴う状態遷移の制御情報の記述とを分離する。次に、イベントに伴う状態遷移の制御情報の記述から条件式とその条件式が成り立つ場合に成立する連続系方程式のＩＤ（識別子）及びこれに応じて無効になる連続系方程式のＩＤと関連けるテーブルを作成する。このテーブルに基づく情報がイベント処理プログラム２００３として保存される。
【００２１】
また制御情報解析部２００２は、連続系方程式のＩＤと連続系方程式が記述されているハイブリッドモデルプログラム２００１のファイル名、ディレクトリ名、連続系方程式に対応するハイブリッドモデルプログラム行番号を関連付けたテーブルを作成する。このテーブルにより表現される情報をファイルとして外部記憶装置に出力したものがマップファイル２０１１である。また制御情報解析部２００２は、連続系方程式（オブジェクト）とＩＤの関係を示す情報を連続系方程式有効・無効情報ファイル２０１２として外部記憶装置に保存する。
【００２２】
次に、ハイブリッドモデルプログラムの前処理について詳細に説明する。
【００２３】
ハイブリッドモデルプログラム２００１は、まず制御情報解析部２００２において処理され、モデル方程式登録プログラム２００４、イベント処理プログラム２００３、及びシミュレーション実行時付加処理プログラム（不図示）が生成される。
【００２４】
ハイブリッドモデルシミュレーション装置を構成するソフトウェアモジュールとして、モデル方程式の登録を行うための関数及び連続系方程式を切り替えるための関数がＡＰＩ関数として提供される。モデル方程式登録プログラム２００４およびイベント処理プログラム２００３は、該当する上記ＡＰＩ関数を呼び出す記述を、入力されたハイブリッドモデルプログラム２００１に沿って適切に組み合わせたプログラムである。この観点から考えると、制御情報解析部２００２は、入力をハイブリッドモデルプログラム２００１とし、出力を例えばＣ言語のＡＰＩ関数呼び出しの記述を含むＣプログラム（ソース）とするような、一種のコンパイラと考えることもできる。このようなモデル方程式登録プログラム２００４とイベント処理プログラム２００３は、さらにＣ言語などのコンパイラによりコンパイルされ、例えば実行時に動的にリンク可能なライブラリが生成される。ハイブリッドモデルシミュレーション装置では、シミュレーション実行にあたって、生成された動的リンクライブラリがリンクされ、入力ハイブリッドモデルを忠実に再現するシミュレーションプログラムが完成し、実行可能になる。なお、生成されるこれらのライブラリは必ずしも動的リンクライブラリである必要はなく、静的なライブラリであってもよい。
【００２５】
ハイブリッドモデルシミュレーション装置のアプリケーションインターフェースを構成する具体的なソフトウェアモジュールの仕様などは様々考えられるが、ここでは説明の都合上、以下の３つのＡＰＩ関数が最低定義されているとする。なお、プログラミング言語はＣ言語とする。
【００２６】
int XXX_AddEqnData(char *eqn, int *err)  
int XXX_ActivateEqn(int eqnid)  
int XXX_DeActivateEqn(int eqnid)  
１つ目のＡＰＩ関数ＸＸＸ＿ＡｄｄＥｑｎＤａｔａは、１つの連続系方程式を表す文字列のポインタを引数に指定する。ＸＸＸ＿ＡｄｄＥｑｎＤａｔａは、この連続系方程式を構文解析し、連続系方程式の記述をシミュレーション実行可能なデータ構造（内部データ表現）に変換し、かかる内部データ表現を方程式データ記憶部２００７に登録する処理を行う。なお、ここの連続系方程式には、ユニークなＩＤ番号が割り当てられる。たとえば「ａｂ／ｃｏｓ（ａ−（ｃ＋ｂ））−３ｃ」という式が与えられたと仮定すると、木構造の内部データ表現を生成する。この木構造は、例えば線形多項式の親ノード（節）、掛け算のノード、割り算のノード、外部関数（四則演算以外の意）のノード、線形多項式を構成する各項のノードから構成される。本例において、木構造の葉に相当するものはすべて変数（ａ，ｂ，ｃ）であり、これらに実数の係数が加わって線形式となる。線形式はｃｏｓなどの外部関数の引数になったり、掛け算や割り算の対象となる。変数には、別途、値が確定しているかどうかのフラグが設けられており、またこのような木構造のデータに基づいて該変数の現在の値が保持される。木構造のすべての葉の値（すなわち変数の値）が確定していれば、式の値を計算することができる。方程式データ記憶部２００７では、式の値の計算などを高速に行うことができるように、予め内部のデータ構造をつなぎ合わせて木構造を構成してある。上記処理において何らかのエラーが発生した場合には、ｅｒｒにエラーコードがセットされる。正常に処理が終了した場合は、登録された方程式のＩＤ番号を返り値とする。
【００２７】
２番目のＡＰＩ関数ＸＸＸ＿ＡｃｔｉｖａｔｅＥｑｎは、引数に指定された方程式のＩＤ番号に相当する方程式を有効にする。もし、すでに有効となっている方程式が指定されている場合には何もしない。返り値はエラーコードである。
【００２８】
３番目のＡＰＩ関数ＸＸＸ＿ＤｅＡｃｔｉｖａｔｅＥｑｎは、ＸＸＸ＿ＡｃｔｉｖａｔｅＥｑｎとは逆に、引数に指定された方程式のＩＤ番号に相当する方程式を無効にする。すでに無効となっている方程式が指定された場合には何もしない。
【００２９】
制御情報解析部２００２は、まずＸＸＸ＿ＡｄｄＥｑｎＤａｔａを必要な方程式について順に呼ぶ関数（ＩｎｉｔＥｑｎＤａｔａ）を生成する。これがモデル方程式登録プログラム２００４（第１のプログラム）に相当する。
【００３０】
また、制御情報解析部２００２は、シミュレーション実行の際に、時間がΔｔ進むごとに条件のチェックおよび方程式の切り替えを行う関数（ＣｈａｎｇｅＥｑｎ）も生成する。これはイベント処理プログラム２００３（第２のプログラム）に相当する。
【００３１】
上記したような制御情報解析部２００２における処理により、例えば、図５のようなハイブリッドモデルプログラム２００１はL07-L09、L15-17の変数a,b,xの接頭語としてそれぞれL21の変数名「motor1.」、L22の変数名「motor2.」を付け、更にL21の一番目の引き数2をa0に、二番目の引数0.1を「b0」、L22の一番目の引き数2を「a0」に、二番目の引数0.1を「b0」、に置換することで、
motor1.a=2,
motor1.b=0.1,
motor1.x=0,
motor1.x’=0,
always motor1.a’=0,
always motor1.b’=0,
always motor1.x’’= motor1.b*( motor1.a- motor1.x’),
motor2.a=2,
motor2.b=0.1,
motor2.x=0,
motor2.x’=0,
always motor2.a’=0,
always motor2.b’=0,
always motor2.x’’= motor2.b*( motor2.a- motor2.x’)
のようにテキスト変換を行い、更に以下のようなＣ言語のソースプログラムが自動生成される。
【００３２】
static char eqn1[]="motor1.a=2";
static char eqn2[]="motor1.b=0.1";
static char eqn3[]="motor1.x=0";
static char eqn4[]="motor1.x’=0";
static char eqn5[]="motor1.a’=0";
static char eqn6[]="motor1.b’=0";
static char eqn7[]="motor1.x’’= motor1.b*( motor1.a- motor1.x’)";
static char eqn8[]="motor2.a=2";
static char eqn9[]="motor2.b=0.1";
static char eqn10[]="motor2.x=0";
static char eqn11[]="motor2.x’=0";
static char eqn12[]="motor2.a’=0";
static char eqn13[]="motor2.b’=0";
static char eqn14[]="motor2.x’’= motor2.b*( motor2.a- motor2.x’)";
static int eqn1id; 
static int eqn2id; 
static int eqn3id; 
static int eqn4id; 
static int eqn5id; 
static int eqn6id; 
static int eqn7id; 
static int eqn8id; 
static int eqn9id; 
static int eqn10id; 
static int eqn11id; 
static int eqn12id; 
static int eqn13id; 
static int eqn14id; 
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;
eqn5id = XXX_AddEqnData(eqn5, &err);
if(err!=0)return err;
eqn6id = XXX_AddEqnData(eqn6, &err);
if(err!=0)return err;
eqn7id = XXX_AddEqnData(eqn7, &err);
if(err!=0)return err;
eqn8id = XXX_AddEqnData(eqn8, &err);
if(err!=0)return err;
eqn9id = XXX_AddEqnData(eqn9, &err);
if(err!=0)return err;
eqn10id = XXX_AddEqnData(eqn10, &err);
if(err!=0)return err;
eqn11id = XXX_AddEqnData(eqn11, &err);
if(err!=0)return err;
eqn12id = XXX_AddEqnData(eqn12, &err);
if(err!=0)return err;
eqn13id = XXX_AddEqnData(eqn13, &err);
if(err!=0)return err;
eqn14id = XXX_AddEqnData(eqn14, &err);
if(err!=0)return err;
}
int ChangeEqn()
{
int err;
if(getCurrentTime()==0){
XXX_ActivateEqn(eqn1id);
XXX_ActivateEqn(eqn2id);
XXX_ActivateEqn(eqn3id);
XXX_ActivateEqn(eqn4id);
XXX_ActivateEqn(eqn8id);
XXX_ActivateEqn(eqn9id);
XXX_ActivateEqn(eqn10id);
XXX_ActivateEqn(eqn11id);
}else{
XXX_DeActivateEqn(eqn1id);
XXX_DeActivateEqn(eqn2id);
XXX_DeActivateEqn(eqn3id);
XXX_DeActivateEqn(eqn4id);
XXX_DeActivateEqn(eqn8id);
XXX_DeActivateEqn(eqn9id);
XXX_DeActivateEqn(eqn10id);
XXX_DeActivateEqn(eqn11id);
}
XXX_ActivateEqn(eqn5id);
XXX_ActivateEqn(eqn6id);
XXX_ActivateEqn(eqn7id);
XXX_ActivateEqn(eqn12id);
XXX_ActivateEqn(eqn13id);
XXX_ActivateEqn(eqn14id);
}
なおｇｅｔＣｕｒｒｅｔｎＴｉｍｅ（）関数は、現在のシミュレーション時刻を取得するＡＰＩである。
【００３３】
以上のプログラムは、上述したようにＣ言語コンパイラによってコンパイルされ、さらに動的リンクライブラリの形式に整えられ、実行時にリンクされる。
【００３４】
なお、本実施形態では、プログラム言語としてＣ言語を用いた例について説明したが、本発明はこれに限定されるものではなく、例えばＣ＋＋言語、ＳｐｅｃＣ言語等の他のプログラム言語を用いてもよい。
【００３５】
シミュレーション実行時には、連続系方程式切り替え部２０１０は定期的にイベント処理プログラム２００３中の条件式を評価し、条件式が成立した場合には該当する連続系方程式ＩＤについて、連続系方程式を有効化または無効化するためのＡＰＩ（Application Program Interface）関数を呼び出す。また各シミュレーション時刻においては、登録されているすべての連続系方程式ＩＤについて該当する連続系方程式が有効化されているか無効化されているかを判定するＡＰＩ関数を呼び出し、その判定情報を得て、シミュレーション時刻と組み合わせて連続系方程式有効・無効情報ファイル２０１２として外部記憶装置に保存する。
【００３６】
図２は方程式切り替え履歴表示部５０００を示すブロック図である。方程式切り替え履歴表示部５０００は表示時刻入力装置１１００と、連続系方程式有効行処理装置５００１と、記述データ表示装置５００２と、連続系方程式有効行表示装置から構成される。
【００３７】
表示時刻入力装置１１００では連続系方程式有効・無効情報ファイル２０１２からシミュレーション時刻の最小値と最大値とを読み取る。表示時刻入力装置１１００はグラフィカルユーザインタフェース（ＧＵＩ）画面を持ち、設定可能なシミュレーション時刻の最小値と最大値内で任意のシミュレーション時刻を選択できるようになっている。入力されたシミュレーション時刻情報は連続系方程式有効行処理装置５００１に送られる。
【００３８】
連続系方程式有効行処理装置５００１は、連続系方程式有効・無効情報ファイル２０１２及びマップファイル２０１１を外部記憶装置から読み込む。連続系方程式有効・無効情報ファイル２０１２から、入力されたシミュレーション時刻におけるすべて連続系方程式のＩＤとその有効・無効の判定情報を読み込む。有効な連続系方程式のＩＤはマップファイル２０１１を用いて、該当するファイル名、ディレクトリ名、行番号を取得することができる。
【００３９】
記述データ表示装置５００２は、ハイブリッドモデルプログラム２００１を読み込みそのデータ記述をグラフィカルユーザインタフェース（ＧＵＩ）画面に表示する。記述データ表示装置５００２はデータ記述の行番号と、その行が表示されている画面の位置情報とを管理している。連続系方程式有効行表示装置５００４は記述データ表示装置５００２で指定されたハイブリッドモデルプログラム２００１のファイル名及びディレクトリ名が一致するときに、記述データ表示装置５００２から有効な連続系方程式の行番号に対応する画面の位置情報を取得し、連続系方程式有効行表示装置５００４が持つＧＵＩ画面内の連続系方程式の行番号に対応する画面の位置に隣接する位置にフラグを表示する。
【００４０】
図３は第１乃至第３の実施形態に共通するシミュレーション部２０１４の動作手順を示すフローチャート、図４は第１の実施形態に係る方程式履歴表示部５０００の動作手順を示すフローチャート、図５は制御情報解析部２００２に呼ばれるハイブリッドモデルプログラム２００１の一例を示す図である。
【００４１】
図３に示すように、まず、制御情報解析部２００２はハイブリッドモデルプログラム２００１を入力して構文解析する（ステップ３００１）。制御情報解析部２００２はハイブリッドモデルプログラム２００１の構文解析結果から、イベント処理プログラム２００３及びモデル方程式登録プログラム２００４を生成する。シミュレーション部２０１４を構成するソフトウェアモジュールとして、モデル方程式の登録を行うための関数及び連続系方程式を切り替えるための関数がＡＰＩ（Application Program Interface）関数として提供される。イベント処理プログラム２００３及びモデル方程式登録プログラム２００４は、該当する上記ＡＰＩ関数を呼び出す記述を、入力されたハイブリッドモデルプログラム２００１に沿って適切に組み合わせたプログラムである。イベント処理プログラム２００３及びモデル方程式登録プログラム２００４は、Ｃ言語などのコンパイラによりコンパイルされ、例えば実行時に動的にリンク可能なライブラリが生成される。
【００４２】
シミュレーション２０１４部は、シミュレーション実行の際に、生成された動的リンクライブラリをリンクし、これにより入力ハイブリッドモデルを忠実に再現するシミュレーションプログラムが完成して実行可能になる。その実行時には、まず方程式解析部２００５を起動するＡＰＩ関数が呼ばれ、その後に連続系切り替えのＡＰＩ関数群が実行されてシミュレーションは遂行される。
【００４３】
イベント処理プログラム２００３は、シミュレーション実行の際に、時間がΔｔ進むごとに条件のチェック及び方程式の変更（入れ替え）を行う関数（ＣｈａｎｇｅＥｑｎ）を生成する。モデル方程式登録プログラム２００４は、連続系方程式の記述の構文解析結果に基づいており、同記述をシミュレーション実行可能なデータ構造に変換するとともに方程式データ記憶部２００７に登録する（ステップ３００２）。
【００４４】
次に、制御情報解析部２００２は、上述したようにマップファイル２０１１を生成し（ステップ３００３）、連続系方程式有効・無効情報ファイル２０１２を生成する（ステップ３００４）。マップファイル２０１１および、連続系方程式有効・無効情報ファイル２０１２は外部記憶装置に保存される。
【００４５】
シミュレーション実行の段階において、図示しない機構制御ソフトウエアシミュレータ等から与えられる制御信号の受信処理を行う（ステップ３００５）。ここで、必要であれば、受信した制御信号に基づく値を適宜、変数に代入する。次に、状態変化の必要有無をステップ３００６において判定する。状態変化が必要な場合、連続系方程式切り替え部２０１０は、該当する連続系方程式について、その有効・無効のフラグを操作することにより連続系方程式の切り替えを行なう（ステップ３００７）。この場合、連続系方程式切り替え部２０１０は、連続系方程式有効・無効情報ファイル２０１２への情報追加も行う（ステップ３００８）。
【００４６】
次に、連続系シミュレーション部２００８は数値積分を実行する（ステップ３００９）。
【００４７】
そして、ステップ３０１０にて終了判断を行ったのち、所定の終了条件が成立するまでシミュレーション時刻を１ステップ進め（ステップ３０１１）、ステップ３００５以降の処理手順を繰り返すことによりシミュレーション実行が行われる。
【００４８】
図４に示すように、第１の実施形態に係る方程式履歴表示部５０００は、まずマップファイル２０１１及び連続系方程式有効・無効情報ファイル２０１２を外部記憶装置から読み込む（ステップ４００１，４００２）。次に、フラグ表示時刻を入力する（ステップ４００３）。次に、入力されたフラグ表示時刻での有効行番号を取得し（ステップ４００４）、対応する有効行番号及びそのフラグを表示する（ステップ４００５）。
【００４９】
図５に示すように、L01からL20では連続系方程式の記述とイベントに伴う状態遷移の制御情報の記述を型（クラス）として宣言している。L21、L22ではこの型の実体を宣言している。L07-L09及びL15-17は連続系の記述に対応する型の情報である。L13はイベントに伴う状態遷移の制御情報の記述に基づく型の情報であり、すべてのシミュレーション時刻で条件が有効であることを表す。L07-L09は型が実体化されるときに一度だけ有効になる行であり、シミュレーション時刻がゼロの時に限り有効である。
【００５０】
図６は図５のハイブリッドモデルプログラム２００１のシミュレーションを実行して生成した連続系方程式有効・無効情報ファイル２０１２の一例を示す図である。L01-L14は連続系方程式のＩＤと連続系方程式との関係を示す情報を保存している。L16-L37ではシミュレーション時刻ごとに、各ＩＤの連続系方程式の有効・無効を示す情報を保存している。L16の数値Ｎは連続系方程式のＩＤをスペースで区切って表示している。L17-L37の各列の３文字目から７文字目はシミュレーション時刻Ｔを示している。L16のＩＤ番号の文字数に一致する箇所には文字「o」もしくは「-」が記入され、文字「o」は該当する連続系方程式が有効であることを、「-」の場合は無効であることをあらわしている。
【００５１】
図７はマップファイル２０１１の一例を示す図である。マップファイルはすべての連続系方程式のＩＤ番号と、該当するハイブリッドモデルプログラムのファイル名、ディレクトリ名、行番号を記録している。ここでは「id:」以降、スペースまでの数値が連続系方程式のＩＤである。「->」以降、括弧までがディレクトリ名及びファイル名であり、括弧内の数値が行番号である。
【００５２】
図８は第１の実施形態に係る表示時刻入力装置１１００の画面例を示す図である。表示時刻入力装置１１００は、シミュレーション時刻設定部１１０３と、シミュレーション時刻決定ボタン１１０５とで構成される。シミュレーション時刻設定部１１０３は、最小シミュレーション時刻表示１１０１、最大シミュレーション時刻表示１１０２、シミュレーション時刻入力スライダ１１０４から構成される。スライダ１１０４はシミュレーション最小時刻またはシミュレーション最大時刻を越えて移動させることができなくなっており、シミュレーションを実行した範囲外に、誤ってシミュレーション時刻が設定されることが防止される。
【００５３】
表示時刻入力装置１１００は、シミュレーション時刻決定ボタン１１０５が押されたとき、シミュレーション時刻入力スライダ１１０４の位置とシミュレーション時刻最小値及び最大値からシミュレーション時刻を算出し、連続系方程式有効行表示装置５００４にその時刻を渡す。またこの時算出したシミュレーション時刻がシミュレーション分解能よりも小さい場合は、連続系方程式有効・無効情報ファイル２０１２からシミュレーション分解能を算出し、シミュレーション分解能に近似したシミュレーション時刻を渡すことも可能である。
【００５４】
図９は第１の実施形態に係る方程式履歴表示部５０００の画面構成を表す図である。ここでは表示時刻入力装置１２００は図示省略してある。方程式履歴表示部５０００の画面は記述データ表示装置５００２のＧＵＩ画面である記述データビュー１４０２と、連続系方程式有効行表示装置５００４のＧＵＩ画面である連続系方程式有効行ビュー１４０３と、連続系方程式有効行ビュー１４０３内部で連続系方程式の有効行を示す図である連続系方程式有効行フラグ１４０４から構成される。
【００５５】
以上説明した第１の実施形態によれば、シミュレーション実行に大きな負荷をかけることなく必要な情報を取り出し、シミュレーション実行中のハイブリッドモデルプログラムの挙動を直感的に把握できるようになる。
【００５６】
（第２の実施形態）
第２の実施形態は、図４に示した表示処理手順において、フラグ表示時刻の判定処理を付加したものである。
【００５７】
図１０は第２の実施形態に係る方程式履歴表示部５０００の動作手順を示すフローチャートである。まずマップファイル２０１１を外部記憶装置から読み込む（ステップ４００１）。次に連続系方程式有効・無効情報ファイル２０１２を外部記憶装置から読み込む（ステップ４００２）。次に表示するシミュレーション時刻を入力する（ステップ４００３）。シミュレーション時刻と連続系方程式有効・無効情報ファイル２０１２から取得したシミュレーション開始時刻とシミュレーション終了時刻を比較し、シミュレーション時刻が開始終了時刻内にあればステップ４００５へ、そうでない場合はステップ４００３に戻る。このとき図１３のように不正な入力が行われたことを警告する画面を表示させることもできる。
【００５８】
図１１は、第２の実施形態に係る方程式切り替え履歴表示部５０００を示すブロック図である。図２に示した構成に対し、シミュレーション時刻判定装置５００３が追加されている。
【００５９】
図１２は第２の実施形態に係る表示時刻入力装置１１００の一例を示す図である。表示時刻入力装置１１００はシミュレーション時刻入力画面１２０１と、シミュレーション時刻決定ボタン１１０５とで構成される。シミュレーション時刻入力画面１２０１はキーボード等の入力デバイスから直接、シミュレーション時刻をテキストで数値入力することができる。尚、図１３にシミュレーション時刻設定入力におけるエラー表示の一例を示す。
【００６０】
以上説明した第２の実施形態によれば、シミュレーション時刻を直接、数値で指定することができるようになることから、正確なシミュレーション時刻設定が可能になる。
【００６１】
（第３の実施形態）
第３の実施形態は、連続系方程式有効行表示装置によりフラグを重ねて表示するようにしたものである。
【００６２】
図１４は第３の実施形態に係る方程式履歴表示部５０００の画面構成を表す図である。ここでは表示時刻入力装置１２００は省略している。方程式履歴表示部５０００の画面は、記述データ表示装置５００２のＧＵＩ画面である記述データビュー１５０２と、連続系方程式有効行表示装置５００４のＧＵＩ画面である連続系方程式有効行ビュー１５０３と、連続系方程式有効行ビュー１５０３内部で連続系方程式の有効行を示す図である連続系方程式有効行フラグ１５０４から構成される。第３の実施形態においては、同一行数で複数のフラグが有効になった場合に、フラグの表示画面位置をずらして表示させる。これにより、同一の行数で複数のフラグが有効になった場合でもわかりやすく表示することが可能になる。
【００６３】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００６４】
【図１】第１乃至第３の実施形態に共通するシミュレーション装置を示すブロック図
【図２】方程式切り替え履歴表示部を示すブロック図
【図３】第１乃至第３の実施形態に共通するシミュレーション部の動作手順を示すフローチャート
【図４】第１の実施形態に係る方程式履歴表示部の動作手順を示すフローチャート
【図５】制御情報解析部に呼ばれるハイブリッドモデルプログラム一例を示す図
【図６】図５のハイブリッドモデルプログラムのシミュレーションを実行して生成した連続系方程式有効・無効情報ファイルの一例を示す図
【図７】マップファイルの一例を示す図
【図８】第１の実施形態に係る表示時刻入力装置の画面例を示す図
【図９】第１の実施形態に係る方程式履歴表示部の画面構成を表す図
【図１０】第２の実施形態に係る方程式履歴表示部の動作手順を示すフローチャート
【図１１】第２の実施形態に係る方程式切り替え履歴表示部を示すブロック図
【図１２】第１の実施形態に係る表示時刻入力装置の一例を示す図
【図１３】表示時刻入力装置によるエラー表示の一例を示す図
【図１４】第３の実施形態に係る方程式履歴表示部の画面構成を表す図
【符号の説明】
【００６５】
２０００…シミュレーション装置；
２０１４…シミュレーション部；
５０００…方程式切り替え履歴表示部；
２００１…ハイブリッドモデルプログラム；
２００２…制御情報解析部；
２００３…イベント処理プログラム；
２００４…モデル方程式登録プログラム；
２００５…方程式解析部；
２００６…イベント処理部；
２００７…方程式データ記憶部；
２００８…連続系シミュレーション部；
２００９…変数値時間履歴記憶部；
２０１０…連続系方程式切り替え部；
２０１１…マップファイル；
２０１２…連続系方程式有効・無効情報ファイル
【図１】
2008243042.tif 000003
【図２】
2008243042.tif 000004
【図３】
2008243042.tif 000005
【図４】
2008243042.tif 000006
【図５】
2008243042.tif 000007
【図６】
2008243042.tif 000008
【図７】
2008243042.tif 000009
【図８】
2008243042.tif 000010
【図９】
2008243042.tif 000011
【図１０】
2008243042.tif 000012
【図１１】
2008243042.tif 000013
【図１２】
2008243042.tif 000014
【図１３】
2008243042.tif 000015
【図１４】
2008243042.tif 000016