(57)【要約】      （修正有）【課題】ハイブリッド・システムのシミュレーションの実行効率を上げる技術を提供する。【解決手段】連続系シミュレータは、離散系シミュレータから、該離散系シミュレータが処理するイベントのイベント発生条件式の評価の要求を受け取る。該イベント発生条件式は連続システムを記述する第１の変数の値を参照して評価される。連続系シミュレータは、イベント発生条件式の評価が真になるまで、現在時刻をステップ時間間隔進めるシミュレーションとイベント発生条件式の評価とを繰り返す。イベント発生条件式の評価が真となると、連続系シミュレータは、現在時刻データと離散シミュレータにより参照される、連続システムを記述する第２の変数の値を離散系シミュレータへ送る。【選択図】図１０
2010224894.tif 000002
【特許請求の範囲】
【請求項１】
離散システムと共にハイブリッド・システムを構成する連続システムの振る舞いを、前記離散システムの振る舞いをシミュレーションする離散系シミュレーション・プログラムと通信しながらシミュレーションする連続系シミュレーション・プログラムであって、前記連続系シミュレーション・プログラムはコンピュータに、
前記離散系シミュレーション・プログラムから、該離散系シミュレーション・プログラムが処理するイベントのイベント発生条件式の評価の要求を受け取るステップであって、前記イベント発生条件式は、前記連続システムを記述する変数である複数の連続系変数のうちの少なくとも１つの連続系変数の値を参照して評価される、前記評価の要求を受け取るステップと、
前記評価の要求の受け取りに応答して、前記イベント発生条件式の評価が真になるまで、前記連続システムの現在時刻をステップ時間間隔進めるシミュレーションと前記イベント発生条件式の評価とを繰り返すステップと、
前記イベント発生条件式の評価が真となったことに応答して、前記現在時刻を示す現在時刻データ、及び前記複数の連続系変数のうち前記離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数の値を前記離散系シミュレーション・プログラムへ送るステップと、
を実行させる、連続系シミュレーション・プログラム。
【請求項２】
前記コンピュータに、前記離散系シミュレーション・プログラムから、前記離散システムを記述する変数である複数の離散系変数のうち、前記連続システムのシミュレーションにおいて参照する少なくとも１つの離散系変数の値を、前記評価の要求と共に受け取るステップを更に実行させる、請求項１に記載の連続系シミュレーション・プログラム。
【請求項３】
前記コンピュータに、
前記離散系シミュレーション・プログラムから、該離散系シミュレーション・プログラムが処理するイベントのうち最も近い将来にスケジュールされているイベントの発生時刻を、前記評価の要求と共に受け取るステップと、  
前記現在時刻をステップ時間間隔進めるシミュレーションごとの前記イベント発生条件式の評価において結果が真でない場合に、前記現在時刻が前記イベントの発生時刻となったか否か判定するステップと、
前記現在時刻がイベントの発生時刻となったことに応答して、前記複数の連続系変数のうち前記離散システムのシミュレーションにおいて参照される前記少なくとも１つの連続系変数の値を、前記離散系シミュレーション・プログラムへ送るステップを更に実行させる、請求項１に記載の連続系シミュレーション・プログラム。
【請求項４】
前記コンピュータに、
前記離散系シミュレーション・プログラムへ、前記離散システムのシミュレーションにおいて参照される前記少なくとも１つの連続系変数の値を送る前に該値を記録するステップと、
次に前記イベント発生条件式の評価が真となったことに応答して前記離散系シミュレーション・プログラムへ前記少なくとも１つの連続系変数の値を送る場合に、該値に変化がないことを条件に前記少なくとも１つの連続系変数の値の送信を取りやめるステップを更に実行させる、請求項１に記載の連続系シミュレーション・プログラム。
【請求項５】
連続システムと共にハイブリッド・システムを構成する離散システムの振る舞いを、前記連続システムの振る舞いシミュレーションする連続系シミュレーション・プログラムと通信しながらシミュレーションする離散系シミュレーション・プログラムであって、前記離散系シミュレーション・プログラムはコンピュータに、
現在時刻において発生したイベントを処理するステップと、
前記イベントの処理の終了に応答して、前記連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価されるイベントの発生条件式の評価の要求を、前記連続系シミュレーション・プログラムへ送るステップと、
前記イベントの発生条件式の評価結果が真になった時刻を示す現在時刻データと、前記複数の連続系変数のうち、前記離散システムのシミュレーションにおいて参照する少なくとも１つの連続系変数の値とを、前記連続系シミュレーション・プログラムから受け取るステップと、
前記連続系シミュレーション・プログラムから受け取った前記少なくとも１つの連続系変数の値を前記コンピュータの記憶部に記録するステップと、
前記現在時刻を、受け取った前記現在時刻データで更新するステップと、
を実行させる離散系シミュレーション・プログラム。
【請求項６】
前記評価の要求は、前記複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価される１以上のイベントの発生条件式のうち、前記イベントの処理により評価が必要になったイベントの発生条件式の評価の要求である、請求項５に記載の離散系シミュレーション・プログラム。
【請求項７】
前記コンピュータに、前記イベントの処理の終了に応答して、離散システムを記述する変数である複数の離散系変数であって、かつ前記イベントの処理により更新された前記複数の離散系変数のうち、前記連続システムのシミュレーションにおいて参照される少なくとも１つの離散系変数の各値を、前記評価の要求と共に前記連続系シミュレーション・プログラムへ送るステップを更に実行させる、請求項５に記載の離散系シミュレーション・プログラム。
【請求項８】
前記コンピュータに、
前記イベントの処理の終了に応答して、該イベントの次にスケジュールされるイベントの発生時刻を、前記評価の要求と共に前記連続系シミュレーション・プログラムへ送るステップと、
前記複数の連続系変数のうち、前記離散システムのシミュレーションにおいて参照する前記少なくとも１つの連続系変数の前記発生時刻における値を、前記連続系シミュレーション・プログラムから受け取るステップを更に実行させる、請求項５に記載の離散系シミュレーション・プログラム。
【請求項９】
前記コンピュータに、前記現在時刻の更新に応答して、前記記憶部に記録した前記少なくとも１つの連続系変数の値を参照して前記イベントの処理を行うステップを更に実行させる、請求項５に記載の離散系シミュレーション・プログラム。
【請求項１０】
ハイブリッド・システムを構成する離散システムの振る舞いをシミュレーションする離散系シミュレーション・プログラムと、該プログラムと通信しながら前記ハイブリッド・システムを構成する連続システムの振る舞いをシミュレーションする連続系シミュレーション・プログラムとを含む、前記ハイブリッド・システムのシミュレーション・プログラムであって、
前記離散系シミュレーション・プログラムは、コンピュータに、
前記離散システムにおける現在時刻において発生したイベントを処理するステップと、
前記イベントの処理の終了に応答して、前記連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価されるイベント発生条件式の評価の要求を、前記連続系シミュレーション・プログラムへ渡すステップとを実行させ、
前記連続系シミュレーション・プログラムは、前記コンピュータに、
前記評価の要求の受け取りに応答して、前記イベント発生条件式の評価が真になるまで、前記連続システムの現在時刻をステップ時間間隔進めるシミュレーションと前記イベント発生条件式の評価を繰り返すステップと、
前記イベント発生条件式の評価が真となったことに応答して、前記連続システムにおける前記現在時刻を示す現在時刻データの値、及び前記複数の連続系変数のうち、前記離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数の値を、前記離散系シミュレーション・プログラムに渡すステップとを実行させ、
前記離散系シミュレーション・プログラムは、前記コンピュータに更に、
前記離散システムにおける前記現在時刻を示す現在時刻データを、前記連続系シミュレーション・プログラムから受け取った前記現在時刻データの値で更新するステップと、
前記現在時刻データの更新に応答して、前記連続系シミュレータ・プログラムから受けとった前記少なくとも１つの連続系変数の値を参照して、発生したイベントの処理を行うステップと、
を実行させるシミュレーション・プログラム。
【請求項１１】
離散システムと共にハイブリッド・システムを構成する連続システムの振る舞いを、前記離散システムの振る舞いをシミュレーションする離散系シミュレータと通信しながらシミュレーションする、コンピュータにより実行される連続システムのシミュレーション方法であって、
前記コンピュータが、前記離散系シミュレータから、該離散系シミュレータが処理するイベントのイベント発生条件式の評価の要求を受け取るステップであって、前記イベント発生条件式は前記連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価される、前記評価の要求を受け取るステップと、
前記コンピュータが、前記評価の要求の受け取りに応答して、前記イベント発生条件式の評価が真になるまで、前記連続システムの現在時刻をステップ時間間隔進めるシミュレーションと前記イベント発生条件式の評価とを繰り返すステップと、
前記コンピュータが、前記イベント発生条件式の評価が真となったことに応答して、前記現在時刻を示す現在時刻データ、及び前記複数の連続系変数のうち、前記離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数の値を前記離散系シミュレータへ送るステップと、
を含む連続システムのシミュレーション方法。
【請求項１２】
連続システムと共にハイブリッド・システムを構成する離散システムの振る舞いを、前記連続システムの振る舞いをシミュレーションする連続系シミュレーション・プログラムと通信しながらシミュレーションする、コンピュータにおいて実行される離散システムのシミュレー方法であって、
前記コンピュータが、現在時刻において発生したイベントを処理するステップと、
前記コンピュータが、前記イベントの処理の終了に応答して、前記連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価されるイベント発生条件式の評価の要求を、前記連続系シミュレータへ送るステップと、
前記コンピュータが、  前記イベント発生条件式の評価結果が真になった時刻を示す現在時刻データと、前記連続系変数のうち、前記離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数の値とを、前記連続系シミュレータから受け取るステップと、
前記コンピュータが、受け取った前記少なくとも１つの連続系変数の値を前記コンピュータの記憶部に記録するステップと、
前記コンピュータが、前記現在時刻を、受け取った前記現在時刻データで更新するステップと、
を含む離散システムのシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハイブリッド・システムの離散的な振る舞い及び連続的な振る舞いをそれぞれシミュレーションする連続系シミュレータと離散系シミュレータとを効率よく協調動作させるための技術に関し、特に、連続系シミュレータと離散系シミュレータ間のデータの通信量を少なくするための技術に関する。
【背景技術】
【０００２】
システム開発では手戻りを少なくするために、上流工程においてシステム全体の仕様と設計を検証しておくことが重要である。このような検証は、システムをモデル化したシミュレーションにより行われることも多い。機械、電気、及びソフトウェアからなるシステムエンジニアリングの分野では、システムは離散的にも連続的にも振る舞うので、システムを離散システムと連続システムとが混在するハイブリッド・システムとして表現する必要がある。
【０００３】
ハイブリッド・システムを記述するため、例えばUnified Modeling Language(UML)のシステムエンジニアリングへの拡張であるSystemsModeling Languages(SysML)では、離散的なデータに加えて連続的なデータを扱う構造の記述を可能にする拡張がなされている。ここでは、離散的な振る舞いは、SysMLのステートマシーン図等で記述する。一方、連続時間上で連続量を計算するアルゴリズムは、例えばMathWorks社のSimulink（登録商標）等の他のモデリング言語で記述する。そして連続的なデータをSysMLのフローポートで送受信するように記述することで、離散システムと連続システムとからなるハイブリッド・システムの振る舞いの記述を可能としている。
【０００４】
上記はハイブリッド・システムの記述方法の一例であるが、一般にハイブリッド・システムでは、離散系シミュレータと連続系シミュレータをうまく協調動作させることが、シミュレーションの実行効率を上げる１つの鍵である。離散系シミュレータと連続系シミュレータが協調動作するには、両者が時間とデータを共有する必要がある。そのため、一方のシミュレータが時間又はデータを更新した場合、この更新が他方のシミュレータによるシミュレーションに正しく反映されなければならない。しかし更新の度直ちに時間やデータを交換するとなると、両シミュレータ間の通信回数が非常に多くなる。結果、シミュレーションの実行効率は悪くなる。
【０００５】
例えば、非特許文献１は、UMLで記述した離散システムとSimulinkで記述した連続システムからなるハイブリッド・システムのシミュレーションにおいて、連続系シミュレータが主導して協調シミュレーションの実行管理を行う技術を開示する。また、非特許文献２は、SystemCで記述した離散システムとSimulinkで記述した連続システムからなるハイブリッド・システムのシミュレーションにおいて、離散系シミュレータが主導して協調シミュレーションの実行管理を行う技術を開示する。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Bouchhima, F., Briere, M., Nicolescu,G., Abid, M., Aboulhamid, E.M. “A SystemC/Simulink Co-Simulation Framework for Continuous/Discrete-EventsSimulation”, Proceedings of the 2006 IEEE International Behavioral Modeling andSimulation Workshop, 2006.
【非特許文献２】Jozef Hooman, Nataliya Mulyar, Ladislau Posta “Validating UML models of Embedded Systems byCoupling Tools”, Proceedings of the Workshop on Specification and Validation ofUML models for Real-Time and Embedded Systems, 2004
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら上記いずれの技術においても、時間とデータの同期は、連続系シミュレータによるシミュレーションのステップ時間ごとに行われていた。そのため、離散系シミュレータと連続系シミュレータ間の通信量が多くなり、従来技術では、効率よくシミュレーションを行うことができなかった。
【０００８】
この発明は、上記の問題点を解決するためになされたものであって、離散システムと連続システムとからなるハイブリッド・システムのシミュレーションの実行効率を上げることを目的とする。また本発明は、離散系シミュレータと連続系シミュレータ間の不要な通信を取り除き、両者間の通信回数を削減することを目的とする。
【課題を解決するための手段】
【０００９】
本願発明では、離散系シミュレータと連続系シミュレータ間の不要な通信を取り除くために、まず、離散系シミュレータが処理するイベントの発生条件式の中で、連続システムを記述する変数の値を参照して評価されるものについては、その評価を連続系シミュレータ側で行うようにした。他方のデータの最新の値を参照する必要があるのは、離散系シミュレータではイベントの処理を開始する時である。従って、上記構成によれば、連続系シミュレータは、イベント発生条件式の結果が真とならない限り、ステップ時間間隔ごとにシミュレーションの結果を離散系シミュレータに通知する必要がなくなる。
【００１０】
また本願発明では、連続システムを記述する変数の値を参照して評価される１以上のイベントの発生条件式のうち、現在離散系モデルにおいてイベントを発生させる可能性があり、評価が必要であるものだけを連続系シミュレータ側で評価するようにした。かかる構成によれば、連続系シミュレータにおいてイベント発生条件式を無駄に評価することがなくなる。また、両者間の通信回数を更に削減することができる。
【００１１】
また本願発明では、離散系シミュレータが処理するイベントのうち、その処理開始時刻が予めスケジュールされるものについては、時間とデータとを同期するタイミングで、離散系シミュレータはそのスケジュールを連続系シミュレータに通知するものとした。かかる構成によれば、連続系シミュレータは、ステップ時間間隔ごとのシミュレーションの結果が離散系モデルにおけるイベントの発生要因となるか、又はスケジュールされたイベントの発生時刻となるまで、一度も離散系シミュレータと同期をとる必要がない。
【００１２】
具体的には、本願発明の第１態様に係る、離散システムと共にハイブリッド・システムを構成する連続システムの振る舞いを、離散システムの振る舞いをシミュレーションする離散系シミュレーション・プログラムと通信しながらシミュレーションする連続系シミュレーション・プログラムは、コンピュータに、離散系シミュレーション・プログラムから、該離散系シミュレーション・プログラムが処理するイベントのイベント発生条件式の評価の要求を受け取るステップであって、上記イベント発生条件式は、連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価される、評価の要求を受け取るステップと、評価の要求の受け取りに応答して、イベント発生条件式の評価が真になるまで、連続システムの現在時刻をステップ時間間隔進めるシミュレーションとイベント発生条件式の評価とを繰り返すステップと、イベント発生条件式の評価が真となったことに応答して、現在時刻を示す現在時刻データ、及び上記複数の連続系変数のうち、離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数の値を離散系シミュレーション・プログラムへ送るステップとを実行させる。
【００１３】
ここでイベント発生条件式において参照される少なくとも１つの連続系変数と、離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数は、異なるものであってもよく、或いは、一部又は全部重複するものであってよい。なお、連続系シミュレーション・プログラムがインストールされ、実行されるコンピュータは、離散系シミュレーション・プログラムがインストールされ、実行されるコンピュータと同一のものであってもよく、或いは異なってもよい。
【００１４】
好ましくは、連続系シミュレーション・プログラムは、コンピュータに、離散系シミュレーション・プログラムから、離散系システムを記述する変数である複数の離散系変数のうち、連続システムのシミュレーションにおいて参照する少なくとも１つの離散系変数の値を、上記評価の要求と共に受け取るステップを更に実行させる。
【００１５】
また好ましくは、連続系シミュレーション・プログラムは、コンピュータに、離散系シミュレーション・プログラムから、該離散系シミュレーション・プログラムが処理するイベントのうち最も近い将来にスケジュールされているイベントの処理時刻を、評価の要求と共に受け取るステップと、現在時刻をステップ時間間隔進めるシミュレーションごとのイベント発生条件式の評価において結果が真でない場合に、現在時刻がイベントの処理時刻となったか否か判定するステップと、現在時刻がイベントの処理時刻となったことに応答して、離散システムのシミュレーションにおいて参照される上記少なくとも１つの連続系変数の値を、離散系シミュレーション・プログラムへ送るステップを更に実行させる。
【００１６】
また好ましくは、連続系シミュレーション・プログラムは、コンピュータに、離散系シミュレーション・プログラムへ離散システムのシミュレーションにおいて参照される上記少なくとも１つの連続系変数の値を送る前に該値を記録するステップと、次にイベント発生条件式の評価が真となったことに応答して離散系シミュレーション・プログラムへ上記少なくとも１つの連続系変数の値を送る場合に、該値に変化がないことを条件に上記少なくとも１つの連続系変数の値の送信を取りやめるステップを更に実行させる。
【００１７】
また、本願発明の第２態様に係る、連続システムと共にハイブリッド・システムを構成する離散システムの振る舞いを、連続システムの振る舞いシミュレーションする連続系シミュレーション・プログラムと通信しながらシミュレーションする離散系シミュレーション・プログラムは、コンピュータに、現在時刻において発生したイベントを処理するステップと、イベントの処理の終了に応答して、連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価されるイベントの発生条件式の評価の要求を、連続系シミュレーション・プログラムへ送るステップと、イベントの発生条件式の評価結果が真になった時刻を示す現在時刻データと、上記複数の連続系変数のうち、離散システムのシミュレーションにおいて参照する少なくとも１つの連続系変数の値とを、連続系シミュレーション・プログラムから受け取るステップと、受け取った上記少なくとも１つの連続系変数の値をコンピュータの記憶部に記録するステップと、現在時刻を、受け取った現在時刻データで更新するステップとを実行させる。
【００１８】
ここでイベント発生条件式において参照される少なくとも１つの連続系変数と、離散システムのシミュレーションにおいて参照される少なくとも１つの連続系変数とは、異なるものであってもよく、或いは、一部又は全部重複するものであってよい。なお、離散系シミュレーション・プログラムがインストールされ、実行されるコンピュータは、連続系シミュレーション・プログラムがインストールされ、実行されるコンピュータと同一であってもよく、或いは異なってもよい。
【００１９】
好ましくは、上記評価の要求は、複数の連続系変数のうち少なくとも１つの連続系変数を参照して評価される１以上のイベントの発生条件式のうち、上記イベントの処理により評価が必要になったイベントの発生条件式の評価の要求である。
【００２０】
また好ましくは、離散系シミュレーション・プログラムは、コンピュータに、上記イベントの処理の終了に応答して、離散システムを記述する変数である複数の離散系変数であって、かつ前記イベントの処理により更新された前記複数の離散系変数のうち、前記連続システムのシミュレーションにおいて参照される少なくとも１つの離散系の各値を、上記評価の要求と共に連続系シミュレーション・プログラムへ送るステップを更に実行させる。
【００２１】
また好ましくは、離散系シミュレーション・プログラムは、コンピュータに、上記イベントの処理の終了に応答して、該イベントの次にスケジュールされるイベントの処理時刻を、上記評価の要求と共に連続系シミュレーション・プログラムへ送るステップと、上記処理時刻における上記少なくとも１つの連続系変数の値を、連続系シミュレーション・プログラムから受け取るステップを更に実行させる。
【００２２】
また好ましくは、離散系シミュレーション・プログラムは、コンピュータに、上記現在時刻の更新に応答して、記憶領部に記録した上記少なくとも１つの連続系変数の値を参照してイベントの処理を行うステップを更に実行させる。
【００２３】
また、本願発明の第３態様に係る、ハイブリッド・システムのシミュレーション・プログラムは、ハイブリッド・システムを構成する離散システムの振る舞いをシミュレーションする離散系シミュレーション・プログラムと、該プログラムと通信しながら上記ハイブリッド・システムを構成する連続システムの振る舞いをシミュレーションする連続系シミュレーション・プログラムとを含む。ここで、離散系シミュレーション・プログラムは、コンピュータに、離散システムにおける現在時刻において発生したイベントを処理するステップと、イベントの処理の終了に応答して、連続システムを記述する変数である複数の連続系変数のうち少なくとも１つの連続系変数の値を参照して評価されるイベント発生条件式の評価の要求を、連続系シミュレーション・プログラムへ渡すステップとを実行させる。
【００２４】
また、連続系シミュレーション・プログラムは、上記コンピュータに、上記評価の要求の受け取りに応答して、イベント発生条件式の評価が真になるまで、連続システムの現在時刻をステップ時間間隔進めるシミュレーションとイベント発生条件式の評価を繰り返すステップと、イベント発生条件式の評価が真となったことに応答して、連続システムにおける現在時刻を示す現在時刻データの値、及び上記複数の連続系変数のうち、離散システムのシミュレーションにおいて参照される、少なくとも１つの連続系変数の値を、離散系シミュレーション・プログラムに渡すステップとを実行させる。
【００２５】
そして離散系シミュレーション・プログラムは、上記コンピュータに更に、離散システムにおける現在時刻を示す現在時刻データを、連続系シミュレータ・プログラムから受け取った現在時刻データの値で更新するステップと、該現在時刻データの更新に応答して、連続系シミュレータ・プログラムから受けとった上記少なくとも１つの連続系変数の値を参照して、発生したイベントの処理を行うステップとを実行させる。
【００２６】
以上、連続系シミュレーション・プログラム、離散系シミュレーション・プログラム、及び連続システムと離散システムからなるハイブリッド・システムのシミュレーション・プログラムとして本発明を説明した。しかし、本発明は、ハイブリッド・システムを構成する連続システムのシミュレーション方法及びハイブリッド・システムを構成する離散システムのシミュレーション方法として把握することもできる。
【発明の効果】
【００２７】
本発明によれば、離散系シミュレータと連続系シミュレータ間の不要な通信を取り除かれるので、両シミュレータ間の通信回数を削減することが可能となる。従って、本発明によれば、離散システムと連続システムとからなるハイブリッド・システムのシミュレーションの実行効率を上げることができる。本発明のその他の効果については、各実施の形態の記載から理解される。
【図面の簡単な説明】
【００２８】
【図１】図１は、本実施形態に係るハイブリッド・システムのシミュレーション装置１００の機能構成の一例を示す。
【図２】図２は、本実施形態に係るハイブリッド・システムのシミュレーション装置１００（離散系シミュレーション部及び連続系シミュレーション部）を実現するのに好適な情報処理装置のハードウェア構成の一例を示す。
【図３】図３は、本実施形態に係るハイブリッド・システムのシミュレーションを実行する際の前処理の流れの一例を示すフローチャートを示す。
【図４】図４は、スチーム型加湿器（ハイブリッド・システム）の構造モデルの一例を示す。
【図５】図５(a)は、前処理において作成される離散―連続対応表Ｔ１の一例を示す。図５(b)は、前処理において作成される連続―離散対応表Ｔ２の一例を示す。
【図６】図６は、スチーム型加湿器（ハイブリッド・システム）の一部を構成する離散系モデルの一例を示す。
【図７】図７は、前処理において作成される条件式表Ｔ３の一例を示す。
【図８】図８は、前処理においてイベント発生条件式の活性／非活性を記録するコードを挿入された後の離散系モデルの一例を示す。
【図９】図９(a)は、前処理において作成される条件式活性表Ｔ４の一例を示す。図９(b)は、前処理において作成される条件式活性表Ｔ５の一例を示す。図９(c)は、前処理において作成される離散系モデル変数値表Ｔ６の一例を示す。
【図１０】図１０は、本実施形態に係るハイブリッド・システムのシミュレーションの処理の流れの一例をフローチャートを示す。
【図１１】図１１は、スチーム型加湿器（ハイブリッド・システム）モデルの本発明を適用したシミュレーションの実行例を示す。
【図１２】図１２は、離散系モデルの状態と該状態において活性化しているイベント発生条件式のＩＤの対応表の一例を示す。
【発明を実施するための形態】
【００２９】
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
【００３０】
本発明は、離散的にも連続的にも振る舞う１つの系を、離散システム及び連続システムから構成されるハイブリッド・システムとしてモデル化してシミュレーションを行う従来のハイブリッド・システムのシミュレーションにおいて、離散システムをシミュレーションする離散系シミュレータと連続システムをシミュレーションする連続系シミュレータとをうまく協調動作させてシミュレーションの実行効率を上げようというものである。即ち、本発明は、従来より既知のハイブリッド・システムのシミュレーションにおいて、離散系シミュレータと連続系シミュレータ間の通信量や回数を改善するものである。そこで、以下では離散系シミュレータ及び連続系シミュレータは既存のものをベースとして使用するものとする。具体的には、ベースとするシミュレータは、それぞれ次のように動作するものであればどのようなものであってもよい。
【００３１】
（離散系シミュレータ）離散系シミュレータはイベントによって駆動される。イベントには即時処理するものと、指定時間後に処理するものの２種類がある。離散系シミュレータは、時刻ｔ＝０を初期値として次の手順に従い、イベント発生の待機と処理を繰り返すことによってシミュレーションを進める。
１．時刻tにスケジュールされているイベントの処理を行う。イベントの処理の結果、新たにイベントが発生する場合がある。即時処理するイベントに対しては、１．を繰り返し実行する。指定時間Δt後に処理されるイベントは時刻ｔ＋Δtに実行するようスケジュールする。
２．時刻tに処理するイベントがなくなると、最も近い将来にスケジュールされているイベントの指定処理時刻にｔを更新して、１．を実行する。
【００３２】
（連続系シミュレータ）連続系シミュレータは、微分方程式等の数式で表現される対象を、入力値から出力値を計算する連続値アルゴリズムとして記述し、これを振る舞いモデルとしたものに基づいて、ステップ時間ごとに計算を繰り返すことによってシミュレーションを進める。ステップ時間は隣り合う時刻tiとti+1の組で与えられ、時刻tiでの入力値に基づいて時刻ti+1での出力を計算する。
【００３３】
図１は、本発明の実施形態に係る、ハイブリッド・システムを構成する離散システムの振る舞いをシミュレーションする離散系シミュレーション部２００と、離散系シミュレーション部２００と通信しながら上記ハイブリッド・システムを構成する連続システムの振る舞いをシミュレーションする連続系シミュレーション部３００とを含む、ハイブリッド・システムのシミュレーション装置１００の機能構成の一例を示す図である。本発明の実施形態に係る離散系シミュレーション部２００は、イベント処理部２０５と、要求メッセージ作成部２１０と、応答受付部２１５と、連続系データ更新部２２０と、時刻更新部２２５とを備える。また、離散系シミュレーション部２００はデータ格納部２３０を有し、離散―連続対応表Ｔ１、条件式表Ｔ３、及び条件式活性表Ｔ４を記憶する。
【００３４】
一方、本発明の実施形態に係る連続系シミュレーション部３００は、要求受付部３０５、ステップ実行部３１０、条件式評価部３１５、スケジュール確認部３２０、及び応答メッセージ作成部３２５を含む。また、連続系シミュレーション部３００はデータ格納部３３０を有し、連続―離散対応表Ｔ２、条件式表Ｔ３、条件式活性表Ｔ５、及び離散系モデル変数値表Ｔ６を記憶する。
【００３５】
なお、本実施形態に係るハイブリッド・システムのシミュレーション装置１００は、一般的なコンピュータを用いて構成することができる。この場合、離散系シミュレーション部２００と連続系シミュレーション部３００とを、互いに通信可能な複数のコンピュータによって構成してもよく、或いは同じ１つのコンピュータによって構成してもよい。そのような、一般的なコンピュータ５０の基本的なハードウェア構成の一例を図２に示す。
【００３６】
コンピュータ５０は、バス２に接続されたＣＰＵ（中央処理装置）１とメインメモリ４を含んでいる。ハードディスク装置１３、３０、およびＣＤ−ＲＯＭ装置２６、２９、フレキシブル・ディスク装置２０、ＭＯ装置２８、ＤＶＤ装置３１のようなリムーバブル・ストレージ（記録メディアを交換可能な外部記憶システム）がフロッピーディスクコントローラ１９、ＩＤＥコントローラ２５、ＳＣＳＩコントローラ２７などを経由してバス２へ接続されている。
【００３７】
フレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭのような記憶メディアが、リムーバブル・ストレージに挿入される。これらの記憶メディアやハードディスク装置１３、３０、ＲＯＭ１４には、オペレーティング・システムと協働してＣＰＵ等に命令を与え、本発明を実施するためのコンピュータ・プログラムのコードを記録することができる。
【００３８】
即ち、シミュレーション装置１００としてのコンピュータ５０の上記説明した数々の記憶装置には、離散系シミュレーション・プログラムや連続系シミュレーション・プログラムと、各プログラムが使用する、離散―連続対応表Ｔ１、連続―離散対応表Ｔ２等のデータを格納できる。コンピュータ・プログラムはメインメモリ４にロードされることによって実行される。コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。
【００３９】
コンピュータ５０は、キーボード／マウス・コントローラ５を経由して、キーボード６やマウス７のような入力デバイスからの入力を受ける。コンピュータ５０は、オーディオコントローラ２１を経由して、マイク２４からの入力を受け、またスピーカー２３から音声を出力する。コンピュータ５０は、視覚データをユーザに提示するための表示装置１１に、グラフィックスコントローラ１０を経由して接続される。コンピュータ５０は、ネットワーク・アダプタ１８（イーサネット（Ｒ）・カードやトークンリング・カード）等を介してネットワークに接続し、他のコンピュータ等と通信を行うことが可能である。
【００４０】
以上の説明により、本発明の実施の形態に係るシミュレーション装置１００を実現するのに好適なコンピュータは、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、または、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【００４１】
このような本実施形態に係るシミュレーション装置１００の具体的な構成及びその処理手順について説明する前に、本発明を実施するために必要な前処理を、図３乃至図９を参照して説明する。
【００４２】
図３は、前処理の流れの一例を示すフローチャートである。前処理ではまず、システム全体の構造モデルに基づいて、離散系モデルから連続系モデルに渡される値（特許請求の範囲に記載する、「離散系変数の値」に相当）と、連続系モデルから離散系モデルに渡される値（特許請求の範囲に記載する、「連続系変数の値」に相当）を抽出する（ステップ３００）。なお、以下では、離散系変数を、離散系モデルの変数、連続系変数を、連続系モデルの変数として記載する。抽出した値は各々その変数名を、離散―連続対応表Ｔ１又は連続―離散対応表Ｔ２に登録する。即ち、離散系モデルから連続系モデルに渡される値については、離散系モデルでの変数名を連続系モデルでの名前に対応付けて、離散―連続対応表Ｔ１に登録する。同様に、連続系モデルから離散系モデルに渡される値については、連続系モデルでの変数名を離散系モデルでの名前に対応付けて、連続―離散対応表Ｔ２に登録する。
【００４３】
ここで上記抽出処理を、ハイブリッド・システムとしてスチーム型加湿器を例に、より詳細に説明する。図４は、スチーム型加湿器の構造モデルの一例を示す。図４に示すように、スチーム型加湿器の構造モデルは、構成要素として、タンク（Water Tank）と、制御部（Control)と、蒸気生成部（Vapor Generation Plant）と、ユーザインタフェース部（UserInterface）と、ヒータ制御部（Heater Control）とを含む。そして各構成要素は次のようにデータのやり取りを行う。
【００４４】
ユーザインタフェース部（UserInterface）に対してユーザにより目標の湿度（target_humidity)が設定されると、ヒータ制御部（HeaterControl）は、ユーザインタフェース部（User Interface）の湿度情報（target_humidity)と制御部（Control)のモード情報（mode）とを参照して、ヒータを制御する。蒸気生成部（VaporGeneration Plant）は、制御部（Control)のファンの電力量(fan_power)情報と、ヒータ制御部（HeatControl）のヒータの電力量(heater_power）情報とに基づいて蒸気を生成する。制御部（Control)は、タンク（WaterTank）から受け取るタンクの水量（water_volume）情報と、蒸気生成部（VaporGeneration Plant）から受け取る蒸気の温度(water_temperature）情報とに基づいて、スチーム型加湿器のモードを決定する。
【００４５】
このように構成されるスチーム型加湿器において、加湿器システム自体の振る舞いは、UML等のモデリング言語を用いて離散システムとしてモデル化される。一方、加湿器内の水や室内の空気等の物理特性は、Simulink等のモデリング言語を用いて連続システムとしてモデル化される。従って、図４に示す構造モデルにおいて、離散系モデルとして記述されるのは、破線で囲まれた制御部（Control)とユーザインタフェース部（UserInterface）である。また、連続系モデルとして記述されるのは、点線で囲まれたタンク（Water Tank）、蒸気生成部（Vapor GenerationPlant）、及び熱制御部（Heat Control）である。
【００４６】
従って、図４に示すスチーム型加湿器の構造モデルにおいて、離散系モデルから連続系モデルに渡される値として抽出されるのは、ユーザインタフェース部（User Interface）から熱制御部（HeatControl）へ渡される湿度（target_humidity）の値と、制御部（Control)から熱制御部（HeatControl）へ渡されるモード（mode）の値と、制御部（Control)から蒸気生成部（Vapor Generation Plant）へ渡されるファンの電力量(fan_power）である。図５（ａ）に、抽出した値を登録した離散―連続対応表Ｔ１を示す。
【００４７】
同様にして、図４に示すスチーム型加湿器の構造モデルにおいて、連続系モデルから離散系モデルに渡される値として抽出されるのは、タンク（Water Tank）から制御部（Control)へ渡されるタンクの水量（water_volume）の値と、蒸気生成部（Vapor Generation Plant）から制御部（Control)へ渡される蒸気の温度(water_temperature）の値である。図５（ｂ）に、抽出した値を登録した連続―離散対応表Ｔ２を示す。
【００４８】
図３に戻って、処理はステップ３０５へ進み、次に、離散系モデルから、連続系モデルの変数の値を参照して評価される、イベントの発生条件式を抽出する。具体的には、まず離散系モデルから全てのイベント発生条件式を抽出する。そして、抽出したイベント発生条件式の中から、変数名が連続―離散対応表Ｔ２の離散系モデルでの名前フィールドに登録されている変数を含むものを選択する。選択したイベント発生条件式は、ユニークな識別子を付けて、条件式対応表Ｔ３に登録する。
【００４９】
上記イベント発生条件式の抽出処理を、再びハイブリッド・システムとしてスチーム型加湿器を例に、図６を参照してより詳細に説明する。図６は、ステートマシーン図によって記述された、スチーム型加湿器の離散系モデルの一例を示す。上述したように、スチーム型加湿器の離散系モデルは、加湿器自体の振る舞い、即ち図４に示す制御部（Control）とユーザインタフェース部（UserInterface）の振る舞いをモデル化したものである。
【００５０】
図６に示すように、スチーム型加湿器の離散系モデルは大きく分けて、オフ(Off）の状態、オン（On）の状態、タンクが空（WaterShortage）の状態の３つの状態を有する。そして各状態は更に２つの状態に分けられる。即ち、オフ(Off）の状態は更にスタンバイ（Stanby）の状態とクールダウン（CoolDown）の状態に分けられる。オン（On）の状態は更にウォームアップ（WarmUp）状態とランニング(Running）状態に分けられる。タンクが空（WaterShortage）の状態は更にクールダウン（CoolDown）の状態とサスペンド（Suspended)の状態に分けられる。以下図６を参照して、６つの状態の状態遷移について説明する。
【００５１】
ユーザインタフェース部（User Interface）を介してスチーム型加湿器の電源が入れられると、TurnOnSignalに応答してスチーム型加湿器はオン（On）状態におけるウォームアップ（WarmUp）状態になる。この状態でイベント発生条件式water_tempature_in.value>=99が満たされると、状態はオン（On）状態におけるランニング(Running）状態に遷移する。また、オン（On）状態においてイベント発生条件式water_volume_in.value==0が満たされると、スチーム型加湿器は、タンクが空（WaterShortage）の状態におけるクールダウン（CoolDown）の状態になる。そして、この状態で、イベント発生条件式water_tempature_in.value<=safe_tempatureが満たされると、状態はタンクが空（WaterShortage）の状態におけるサスペンド（Suspended)の状態に遷移する。
【００５２】
また、オン（On）状態又はタンクが空（WaterShortage）の状態において、ユーザインタフェース部（UserInterface）を介してスチーム型加湿器の電源が切られると、TurnOffSignalに応答してスチーム型加湿器はオフ(Off）の状態におけるクールダウン（CoolDown）の状態になる。そして、この状態でイベント発生条件式water_tempature_in.value<=safe_tempatureが満たされると、状態はオフ(Off）の状態におけるスタンバイ（Stanby）の状態に遷移する。
【００５３】
このように記述されるスチーム型加湿器の離散系モデルから、連続系モデルの変数の値を参照する変数、即ち、変数名が連続―離散対応表Ｔ２の離散系モデルでの名前フィールドに登録されている変数を含むイベント発生条件式を抽出する。上記説明した４つのイベント発生条件式はいずれも変数water_temperature_in又は変数water_volume_inを含み、これらは図５（ｂ）に示す連続―離散対応表Ｔ２の離散系モデルでの名前フィールドに登録されているので、本実施例では上記説明した全てのイベント発生条件式を選択する。
【００５４】
そして、選択した４つのイベント発生条件式の各々に、ユニークＩＤとしてExp1、 Exp2、 Exp3、 Exp4を付け、条件式対応表Ｔ３に登録する。登録の際、連続系モデルの変数の値を参照する変数については、連続―離散対応表Ｔ２を参照して、その離散系モデルでの名前を連続系モデルでの名前に変換する。また、各イベント発生条件式に、連続―離散対応表Ｔ２に含まれない離散系モデルの変数が含まれる場合、その変数名もイベント発生条件式に対応付けて条件式対応表Ｔ３に登録する。
【００５５】
例えばExp1のＩＤを付けられたイベント発生条件式water_tempature_in.value<=safe_tempatureについて説明すると、変数water_tempature_in.valuは連続系モデルの変数の値を参照する変数であるため、離散系モデルでの名前water_tempature_in.valueを、連続系モデルでの名前water_tempature_out.valueに変換して、条件式対応表Ｔ３に登録する。また、変数safe_tempatureは、連続―離散対応表Ｔ２に含まれない離散系モデルの変数であるため、イベント発生条件式Exp1に対応付けて、条件式対応表Ｔ３に登録する。図７に示す表は、このようにして作成される条件式表Ｔ３の一例である。
【００５６】
再び図３に戻って、処理はステップ３１０へ進み、ステップ３０５で抽出した全てのイベント発生条件式について、離散系モデルにイベント発生条件式の活性／非活性を記録するコードを挿入する。ここで、イベント発生条件式の活性／非活性とは、離散系モデルにおいてシステムの状態が、そのイベント発生条件式によるイベントを待つ状態になる／待たない状態になることを意味する。
【００５７】
図８は、イベント発生条件式の活性／非活性を記録するコードを挿入された、離散モデルの一例を示す。ここで、関数enable(E)は、イベント発生条件式Ｅが活性したこを条件式活性表Ｔ４に記録するものである。同様に関数disenable(E)は、イベント発生条件式Ｅが非活性したことを条件式活性表Ｔ４に記録するものである。条件式活性表Ｔ４については後述する。
【００５８】
例えば図６に関して説明したように、離散モデルは、（On）状態におけるウォームアップ（WarmUp）状態にあるとき、イベント発生条件式water_tempature_in.value>=99（Exp2）が満たされると、ランニング(Running）状態に遷移し、また、イベント発生条件式water_volume_in.value==0（Exp3）が満たされると、タンクが空（WaterShortage）の状態におけるクールダウン（CoolDown）の状態に遷移する。従って、図８の離散モデルに示すように、（On）状態におけるウォームアップ（WarmUp）状態では、イベント発生条件式Exp2とExp3によるイベントを待つことになるので、enable(Exp2)とenable(Exp3)のコードを挿入する。一方、イベント発生条件式Exp2によるイベント発生後の遷移先のランニング(Running）状態では、イベント発生条件式Exp2によるイベントは待たないので、disenable(EXp2)のコードを挿入する。
【００５９】
図３に戻って、処理はステップ３１５へ進み、条件式表Ｔ３に基づいて、離散系シミュレーション部２００の作業用データ領域を作成する。具体的には、条件式表Ｔ３の各エントリーに対して、（ＩＤ、活性／非活性）からなる条件式活性表Ｔ４を作成する。図９（ａ）に、図７に示す条件式表Ｔ３を基に作成した条件式活性表Ｔ４を示す。なお作成時には、イベント発生条件式の全てについて、活性／非活性フィールドに「非活性」を登録し初期化する。
【００６０】
処理はステップ３１５からステップ３２０へ進み、次に条件式表Ｔ３に基づいて、連続系シミュレーション部３００の作業用データ領域を作成する。具体的には、条件式表Ｔ３の各エントリーに対して、（ＩＤ、活性／非活性）からなる条件式活性表Ｔ５を作成する。図９（ｂ）に、図７に示す条件式表Ｔ３を基に作成した条件式活性表Ｔ５を示す。ここでも作成時には、イベント発生条件式の全てについて、活性／非活性フィールドに「非活性」を登録し初期化する。また、条件式表Ｔ３の参照する離散系モデルの変数フィールドに登録されている全ての変数に対して、（変数名、値）からなる離散系モデル変数値表Ｔ６を作成する。図９（ｃ）に、図７に示す条件式表Ｔ３を基に作成した離散系モデル変数値表Ｔ６を示す。なお作成時には、全ての変数について「未定を示す値」を登録し初期化する。そして前処理は終了する。
【００６１】
このように前処理で作成した各表は、離散系シミュレーション部２００と連続系シミュレーション部３００の各データ格納部に格納される。具体的には、離散系シミュレーション部２００のデータ格納部には、離散―連続対応表Ｔ１、条件式表Ｔ３、及び条件式活性表Ｔ４が格納される。また、連続系シミュレーション部３００のデータ格納部には、連続―離散対応表Ｔ２、条件式表Ｔ３、条件式活性表Ｔ５、及び離散系モデル変数値表Ｔ６が格納される。
【００６２】
次に図１に戻って、ハイブリッド・システムのシミュレーション装置１００の機能構成を詳細に説明する。離散系シミュレーション部２００のイベント処理部２０５は、現在時刻currentTimeにスケジュールされているイベントの処理を行う。イベントの処理によって新たにイベントが発生する場合、発生したイベントが即時処理するイベントであれば、イベント処理部２０５は直ちにこれを処理する。一方、発生したイベントが指定時間後に処理するイベントであれば、イベント処理部２０５は該イベントをスケジューラに登録する。なお、イベント処理部２０５によるイベントの処理によって、前処理において埋め込んだ関数enable(E)、disenalbe(E)が実行されると、条件式活性表Ｔ４の対応するイベント発生条件式の活性／非活性フィールドの値が更新される。
【００６３】
要求メッセージ作成部２１０は、イベント処理部２０５によるイベントの処理の終了に応答して、連続系シミュレーション部３００へ送信する要求メッセージを作成する。要求メッセージの作成は次のようにして行う。（１）まず、条件式活性表Ｔ４から、活性／非活性フィールドの値が「活性」であるイベント発生条件式のＩＤを抽出する。（２）次に、条件式表Ｔ３を参照して、抽出したＩＤをもつイベント発生条件式で使用される離散系モデルの変数の変数名と値を抽出する。
【００６４】
（３）更に、離散―連続対応表Ｔ１を参照して、連続系シミュレーション部３００により参照される離散系モデルの変数の変数名と値を抽出する。なお、抽出した離散系モデルでの変数名は連続系モデルでの変数名に変換する。最後に（１）〜（３）で抽出した全てのデータに、スケジューラに登録されている次のイベントの処理時刻を追加して、要求メッセージが完成する。要求メッセージ作成部２１０は、要求メッセージが完成すると、これを連続系シミュレーション部３００へ送信する。このようにして、本発明の実施の形態に係る離散系シミュレーション部２００は、連続系モデルの変数の値を参照して評価されるイベント発生条件式を、連続系シミュレーション部３００において評価できるようにする。
【００６５】
応答受付部２１５は、連続系シミュレーション部３００から、要求メッセージに対する応答メッセージを受け付ける。詳細は後述するが応答メッセージには、連続系シミュレーション部３００における現在時刻currentTimeを示す現在時刻データと、真と評価されたイベント発生条件式のＩＤと、離散系シミュレーション部２００により参照される連続系モデルの変数の変数名と値が含まれている。但し、連続系モデルの変数の変数名は離散系モデルでの名前に変換されている。応答受付部２１５は、応答メッセージのうち離散系モデルの変数の変数名と値を、連続系データ更新部２２０へ渡す。応答受付部２１５はまた、応答メッセージのうち現在時刻データを時刻更新部２２５へ渡す。
【００６６】
連続系データ更新部２２０は、応答受付部２１５から受け取ったデータに基づいて、連続系モデルの変数を参照する離散系モデルの変数を更新する。時刻更新部２２５は、応答受付部２１５から受け取ったデータに基づいて、離散系シミュレーション部２００における現在時刻currentTimeを更新する。イベント処理部２０５は、時刻更新部２２５による時刻の更新に応答して、真と評価されたイベント発生条件式のＩＤに基づいて決定した遷移先の状態におけるイベントの処理を繰り返す。
【００６７】
一方、連続系シミュレーション部３００のシミュレーションは、離散系シミュレーション部２００から要求メッセージを受け取ることにより処理を開始する。要求受付部３０５は、要求メッセージを受け取ると、要求メッセージに含まれるイベント発生条件式のＩＤと、離散系モデルの変数の変数名と値を基に、条件式活性表Ｔ５と離散系モデル変数値表Ｔ６を更新する。また、要求受付部３０５は、要求メッセージに含まれる連続系モデルの変数とその値を基に、離散系モデルの変数を参照する連続系モデルの変数を更新する。更に、要求受付部３０５は、要求メッセージに含まれる次のイベントの処理時刻のデータをデータ領域に一時的に格納する。
【００６８】
ステップ実行部３１０は、要求受付部３０５によるデータの更新に応答して、連続系モデルの現在時刻をステップ時間間隔進めるシミュレーションを実行する。上述したように、本実施形態に係る連続系シミュレーション部３００は、微分方程式などの数式で表される対象を、入力値から出力値を計算する連続値アルゴリズムとして記述したものを振る舞いモデルとしたものである。従って、ステップ実効部３１０は、現在時刻tiでの入力値に基づいて、時刻ti+1での出力値を求めることでシミュレーションを進める。ステップ実行部３１０は、シミュレーションを１ステップ実行すると、現在時刻currentTimeをステップ時間分増加させる。
【００６９】
条件式評価部３１５は、条件式活性表Ｔ５を参照して、活性されているイベント発生条件式のすべてを条件式表Ｔ３から読み出す。そして条件式評価部３１５は、離散系モデル変数値表Ｔ６に登録されている離散系モデルの変数の値を参照して、読み出したイベント発生条件式を順次評価する。イベント発生条件式の評価がいずれも真とならない場合、即ちいずれの条件式も条件が満たされない場合、条件式評価部３１５は、制御をスケジュール確認部３２５へ渡す。一方いずれか１つでもイベント発生条件式の評価が真となった場合、条件式評価部３１５は、真となったイベント発生条件式のＩＤを応答メッセージ作成部３３０へ渡す。
【００７０】
スケジュール確認部３２５は、条件式評価部３１５から制御を渡されると、データ領域から次のイベントの処理時刻のデータを読出し、連続系シミュレーション部３００における現在時刻currentTimeと比較する。次のイベントの処理時刻が現在時刻currentTimeと等しい場合、スケジュール確認部３２５は制御を応答メッセージ作成部３３０へ渡す。一方、次のイベントの処理時刻が現在時刻currentTimeよりも先である場合、スケジュール確認部３２５は制御をステップ実行部３１５へ戻す。
【００７１】
応答メッセージ作成部３３０は、条件式評価部３１５からイベント発生条件式のＩＤを受け取ったことに応答して、又はスケジュール確認部３２５から制御を渡されると、離散系シミュレーション部２００からの要求メッセージに対する応答メッセージを作成する。応答メッセージの作成は次のようにして行う。（１）まず、連続―離散対応表Ｔ２を参照して、離散系シミュレーション部２００により参照される連続系モデルの変数の変数名と値を抽出する。ここで、抽出した連続系モデルでの変数名は離散系モデルでの変数名に変換する。
【００７２】
（２）連続系シミュレーション部３００における現在時刻currentTimeを示す現在時刻データを取得する。（３）イベント発生条件式のＩＤを受け取った場合、これを（１）〜（２）で取得した全てのデータに追加する。そして、応答メッセージが完成する。応答メッセージ作成部３３０は、応答メッセージが完成すると、これを離散系シミュレーション部２００へ送信する。このようにして、本発明の実施の形態に係る連続系シミュレーション部３００は、イベント発生条件式の結果が真となるか、現在時刻currentTimeが次のイベントの処理時刻とならない限り、ステップ時間間隔ごとにシミュレーションの結果を離散系シミュレータに通知する必要がないようにする。
【００７３】
次に図１０を参照して、本発明の実施の形態に係る離散系シミュレーション部２００によるシミュレーションと連続系シミュレーション部３００によるシミュレーションの処理の流れの一例を説明する。図１０において、離散系シミュレーション部２００によるシミュレーションはステップ１０００から開始する。まず、離散系シミュレーション部２００は現在時刻currentTimeの値を０で初期化する。次に離散系シミュレーション部２００は、時刻currentTimeでのイベントを処理する（ステップ１００５）。上述したように、イベントの処理には関数enable()、disenable()の実行が含まれ得る。
【００７４】
一方、図１０において、連続系シミュレーション部３００によるシミュレーションはステップ１０５０から開始する。連続系シミュレーション部３００はまず、その現在時刻currentTimeの値を０で初期化する。そして、連続系シミュレーション部３００は、離散系シミュレーション部２００からの要求メッセージを待つ（ステップ１０５５）。
【００７５】
離散系シミュレーション部２００は、ステップ１００５においてイベントの処理が終わると、次に連続系モデルの変数を参照して評価されるイベント発生条件式の評価を要求する要求メッセージを作成し（ステップ１０１０）、連続系シミュレーション部３００へ送信する（ステップ１０１５）。要求メッセージの作成方法の説明は、繰り返しを避けるためここでは省略するが、要求メッセージには、離散系モデルにおける次のイベントの処理時刻、活性化した条件式のＩＤ、条件式で使用される離散系モデルの変数の値、及び連続系シミュレーション部３００が参照する離散系モデルの変数の値が含まれる。但し、離散系モデルの変数の変数名は、連続系モデルでの変数名に変換されている。
【００７６】
連続系シミュレーション部３００は、離散系シミュレーション部２００から要求メッセージを受け取ると、要求メッセージを解析し（ステップ１０６０）、要求メッセージに含まれるデータで、作業表、即ち条件式活性表Ｔ５及び離散系モデル変数値表Ｔ６を更新する（ステップ１０６５）。連続系シミュレーション部３００はまた、要求メッセージに含まれるデータで、離散系モデルの変数を参照する連続系モデルの変数を更新する。
【００７７】
データ更新後、連続系シミュレーション部３００は、連続系モデルの現在時刻をステップ時間間隔進めるシミュレーションを実行し（ステップ１０７０）、連続系シミュレーション部３００が有する現在時刻currentTimeをステップ時間分増加させる（ステップ１０７５）。そして連続系シミュレーション部３００は、条件式活性表Ｔ５から、活性された条件式のＩＤを１つ選択し（ステップ１０８０）、条件式活性表Ｔ５に未評価の活性された条件式のＩＤがある場合（ステップ１０８５：ＹＥＳ）、選択したＩＤをもつイベント発生条件式を、条件式表Ｔ３及び離散系モデル変数値表Ｔ６を参照して評価する（ステップ１０９０）。
【００７８】
イベント発生条件式の評価の結果が偽である場合（ステップ１０９５：ＮＯ）、処理はステップ１０８０に戻り、連続系シミュレーション部３００は、条件式活性表Ｔ５から、未だ選択されてない活性された条件式のＩＤを１つ選択し、上記処理を繰り返す。
【００７９】
一方、条件式活性表Ｔ５に未評価の活性された条件式のＩＤがない場合（ステップ１０８５：ＮＯ）、連続系シミュレーション部３００は、要求メッセージに含まれている離散系モデルにおける次のイベントの処理時刻と連続系シミュレーション部３００が有する現在時刻currentTimeとを比較する（ステップ１１００）。現在時刻currentTimeが次のイベントの処理時刻よりも前の時間である場合（ステップ１１００：ＮＯ）、処理はステップ７０に戻り、連続系シミュレーション部３００は、連続系モデルの現在時刻をステップ時間間隔進めるシミュレーションを再び実行する。
【００８０】
一方、ステップ１０９５においてイベント発生条件式の評価の結果が真である場合、又はステップ１１００において現在時刻currentTimeが次のイベントの処理時刻である場合、処理はステップ１１０５へ進み、連続系シミュレーション部３００は、離散系シミュレーション部２００からの要求メッセージに対する応答メッセージを作成する。応答メッセージの作成方法の説明は、繰り返しを避けるためここでは省略するが、応答メッセージには、連続系シミュレーション部３００における現在時刻currentTimeを示す現在時刻データと、真と評価されたイベント発生条件式のＩＤと、離散系シミュレーション部２００により参照される連続系モデルの変数の値が含まれる。但し、連続系モデルの変数の変数名は離散系モデルでの変数名に変換されている。
【００８１】
そして、連続系シミュレーション部３００は完成した応答メッセージを離散系シミュレーション部２００へ送信する（ステップ１１１０）。
【００８２】
離散系シミュレーション部２００は、連続系シミュレーション部３００から応答メッセージを受け取ると、応答メッセージを解析し（ステップ１０２５）、応答メッセージに含まれるデータを用いて、離散系モデルにおける現在時刻currentTimeを更新する（ステップ１０３０）。離散系シミュレーション部２００はまた、応答メッセージに含まれるデータで、連続系モデルの変数を参照する離散系モデルの変数を更新する。
【００８３】
その後、離散系シミュレーション部２００は、現在時刻currentTimeをシミュレーションの終了時刻と比較する（ステップ１０３５）。現在時刻currentTimeが終了時刻よりも前の時間である場合（ステップ１０３５：ＮＯ）、処理はステップ１００５へ戻り、離散系シミュレーション部２００は、応答メッセージに含まれるイベント発生条件式のＩＤに基づいて遷移する状態を決定し、該状態におけるイベントの処理を実行する。一方現在時刻currentTimeが終了時刻であるか、終了時刻を過ぎている場合（ステップ１０３５：ＹＥＳ）、シミュレーションは終了する。
【００８４】
次に図１１を参照して、スチーム型加湿器（ハイブリッド・システム）モデルのシミュレーションに本発明を適用した実行例を説明する。なお、前処理の結果、図５、図７、図９に示す各表が作成され、用意されているものとする。図１１において上側の軸は、離散系シミュレータの時間軸を示し、下側の軸は、連続系シミュレータの時間軸を示す。また図中に示す番号は、離散系シミュレータ又は連続系シミュレータによるシミュレーションの実行順を示す。
【００８５】
時刻３２０において、離散系シミュレータがイベントを処理する。ここでイベントの処理により、関数enable(Exp4)が実行され、条件式活性表Ｔ４においてExp4の活性／非活性フィールドが「活性」に更新されたとする。すると離散系シミュレータは、条件式活性表Ｔ４を参照して、活性化されたイベント発生条件式のＩＤを含む、要求メッセージadvance{830,{Exp4},{safe_tempature=50},{fan_wat_in=10,Target_humidity_in=50},mode_in=20}}を作成する。メッセージに含まれるデータは、先頭から、次のイベントの処理時刻、活性化した条件式のＩＤ、条件式で使用される離散系モデルの変数の値、離散系モデルから連続系モデルに渡される値である。
【００８６】
連続系シミュレータは時刻３２０において、要求メッセージを受信し、要求メッセージに含まれるデータに基づいて、条件式活性表Ｔ５と離散系モデル変数値表Ｔ６を更新する。条件式活性表Ｔ５は更新されて、Exp4の活性／非活性フィールドが「活性」に変更される。また、離散系モデル変数値表Ｔ６は更新されて、safe_tempatureの値フィールドが５０に変更される。連続系シミュレータはまた、要求メッセージに含まれるデータに基づいて、離散系モデルの変数を参照する連続系モデルの変数を更新する。その後、連続系シミュレータは、活性化されたイベント発生条件式Exp4の評価が真になるまで、現在時刻をステップ時間間隔進めるシミュレーションとイベント発生条件式Exp4の評価とを繰り返す。
【００８７】
本実施例では、図１１に示すように、１ステップのシミュレーションの実行とイベント発生条件式Exp4の評価とがｍ回繰り返された時刻６９０において、イベント発生条件式Exp4の評価が初めて真となる。従って、次のイベントの処理時刻８４０よりも先にイベント発生条件式が真となるので、連続系シミュレータは、時刻６９０でイベント発生条件式Exp4の評価が真となると、要求メッセージに対する応答メッセージreply{690, {Exp4},{water_tempature_in=48, water_volume_in=82}}を作成する。メッセージに含まれるデータは、先頭から、更新する時刻（連続系シミュレータ側の現在の時刻）、真になった条件式ＩＤ、連続系モデルから離散系モデルに渡される値である。
【００８８】
離散系シミュレータは、時刻３２０において、応答メッセージを受信し、応答メッセージに含まれるデータに基づいて現在時刻３２０を６９０に更新する。離散系シミュレータはまた、応答メッセージに含まれるデータに基づいて、連続系モデルの変数を参照する離散系モデルの変数を更新する。そして、離散系シミュレータは、真になった条件式ＩＤに基づいて遷移先の状態を決定し、該状態におけるイベントの処理を実行する。
【００８９】
このように、スチーム型加湿器モデルに対して、スイッチ・オン操作の後にスイッチ・オフ操作を行うシナリオで本発明を適用してシミュレーションを行うと、従来のステップ時間ごとに時刻とデータとを同期させる方式では、データを１まとめにして送信するようにしたとしても通信が４００回必要であったのが、僅か８回の通信で済むようになる。
【００９０】
以上、実施形態を用いて本発明の説明をしたが、本発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更または改良を加えることが可能であることが当業者に明らかである。例えば、上記説明した実施例では、要求メッセージ作成部２１０は、離散系モデルから連続系モデルに渡す変数を、その値が前回送信したときの値から変更されているか否かに関わらず要求メッセージに含めていた。しかしながら離散系シミュレーション部２００と連続系シミュレーション部３００間の通信データ量を減らす観点から、送信する変数の変数名と値を記録しておき、その値が前回送信したときの値から変更されている変数についてのみその変数名と値とを要求メッセージに含めるようにしてもよい。応答メッセージ作成部３２５についても同様である。
【００９１】
また、上記説明した実施例では、離散系モデルにおいて現在どのイベントの発生を待つ状態となっているかを調べるために、離散系モデルに、イベント発生条件式の活性／非活性を記録するコードを挿入した。しかしながら、例えば離散系モデル自体に対する変更が困難であるというような場合には、これに代えて、次のような方法を採用することができる。即ち、前処理において離散系モデルの各状態と、該状態のときに活性化されているイベント発生条件式のＩＤの対応表（図１２を参照）とを作成しておき、シミュレーションの実行の際には、離散系モデルの状態から、対応表を利用して、活性化されているイベント発生条件式を求めるという方法である。従って、そのような変更または改良を加えた形態も当然に本発明の技術的範囲に含まれる。
【図１】
2010224894.tif 000003
【図２】
2010224894.tif 000004
【図３】
2010224894.tif 000005
【図４】
2010224894.tif 000006
【図５】
2010224894.tif 000007
【図６】
2010224894.tif 000008
【図７】
2010224894.tif 000009
【図８】
2010224894.tif 000010
【図９】
2010224894.tif 000011
【図１０】
2010224894.tif 000012
【図１１】
2010224894.tif 000013
【図１２】
2010224894.tif 000014