(57)【要約】【課題】機構系を制御する制御ソフトウェアとの連携シミュレーションにも好適なシミュレーション方法およびプログラムを提供する。【解決手段】  ハイブリッドモデル記述に基づいて時間軸に沿った機構の挙動のシミュレーションを行う機構シミュレータを開示する。ハイブリッドモデル記述を解析し、連続系方程式に関する記述、状態遷移に関する記述、および付加処理に関する記述をそれぞれ抽出する。シミュレーションの実行においてそれぞれ呼び出され、連続系方程式に関する記述に基づく第１のプログラム、状態遷移に関する記述に基づく第２のプログラム、および付加処理に関する記述に基づく第３のプログラムを生成する。これら第１、第２、第３のプログラムを機構シミュレータの実行部に連結する。【選択図】図１
2004220577.tif 000002
【特許請求の範囲】
【請求項１】
ハイブリッドモデルを利用した記述データに基づいて、対象とする機構の挙動を時間軸に沿ってシミュレーションするシミュレーション方法であって、
前記記述データに含まれる連続系方程式の記述、状態遷移に伴う該連続系方程式の切り替えに関する記述、及び前記連続系方程式で表現される処理以外の処理に関する記述を抽出するため、前記記述データを解析する解析ステップと、
前記解析ステップにおいて抽出された前記連続系方程式の記述に基づいて、第１のプログラムを生成する第１のプログラム生成ステップと、
前記解析ステップにおいて抽出された前記状態遷移に伴う連続系方程式の切り替えに関する記述に基づいて、第２のプログラムを生成する第２のプログラム生成ステップと、
前記解析ステップにおいて抽出された前記連続系方程式で表現される処理以外の処理に関する記述に基づいて、第３のプログラムを生成する第３のプログラム生成ステップと、
前記第１のプログラムを実行することにより、前記連続系方程式をシミュレーション実行可能なデータ構造に変換する変換ステップと、
前記第２のプログラムを実行することにより、イベントの発生に応じて前記連続系方程式の有効・無効を切り替える切り替えステップと、
前記切り替えステップにおいて有効とされた前記連続系方程式に対応する前記データ構造を用いて、時間軸に沿った数値積分により該連続系方程式を解いて、前記機構の挙動を表すデータを出力するシミュレーションを実行するシミュレーション実行ステップと、
前記第３のプログラムを実行することにより、前記連続系方程式で表現される処理以外の処理を実行する処理実行ステップと
を具備することを特徴とするシミュレーション方法。
【請求項２】
イベントの発生を検知するステップと、
前記イベントの発生を検知したならば、該イベントは前記第３のプログラムに関連するイベントであるか否かを判定するステップと、
前記イベントは前記第３のプログラムに関連するイベントであると判定されたならば、実行のために該第３のプログラムを呼び出すステップと、
を具備する請求項１に記載のシミュレーション方法。
【請求項３】
前記第３のプログラムは、前記機構を制御する機構制御ソフトウェアを含む外部との間で入出力ポートを介して制御信号を入出力するための処理を含むことを特徴とする請求項２に記載のシミュレーション方法。
【請求項４】
前記イベントは、前記機構の内部変数の評価結果を含むことを特徴とする請求項１に記載のシミュレーション方法。
【請求項５】
ハイブリッドモデルを利用した記述データに基づいて、対象とする機構の挙動を時間軸に沿ってシミュレーションする手順をコンピュータに実行させるシミュレーションプログラムであって、
前記記述データに含まれる連続系方程式の記述、状態遷移に伴う該連続系方程式の切り替えに関する記述、及び前記連続系方程式で表現される処理以外の処理に関する記述を抽出するため、前記記述データを解析する解析手順と、
前記解析ステップにおいて抽出された前記連続系方程式の記述に基づいて、第１のプログラムを生成する第１のプログラム生成手順と、
前記解析ステップにおいて抽出された前記状態遷移に伴う連続系方程式の切り替えに関する記述に基づいて、第２のプログラムを生成する第２のプログラム生成手順と、
前記解析ステップにおいて抽出された前記連続系方程式で表現される処理以外の処理に関する記述に基づいて、第３のプログラムを生成する第３のプログラム生成手順と、
前記第１のプログラムを実行することにより、前記連続系方程式をシミュレーション実行可能なデータ構造に変換する変換手順と、
前記第２のプログラムを実行することにより、イベントの発生に応じて前記連続系方程式の有効・無効を切り替える切り替え手順と、
前記切り替えステップにおいて有効とされた前記連続系方程式に対応する前記データ構造を用いて、時間軸に沿った数値積分により該連続系方程式を解いて、前記機構の挙動を表すデータを出力するシミュレーションを実行するシミュレーション実行手順と、
前記第３のプログラムを実行することにより、前記連続系方程式で表現される処理以外の処理を実行する処理実行手順と
をコンピュータに実行させることを特徴とするシミュレーションプログラム。
【請求項６】
イベントの発生を検知するステップと、
前記イベントの発生を検知したならば、該イベントは前記第３のプログラムに関連するイベントであるか否かを判定するステップと、
前記イベントは前記第３のプログラムに関連するイベントであると判定されたならば、実行のために該第３のプログラムを呼び出すステップと、
を具備することを特徴とする請求項５に記載のシミュレーションプログラム。
【請求項７】
前記第３のプログラムは、前記機構を制御する機構制御ソフトウェアを含む外部との間で入出力ポートを介して制御信号を入出力するための手順を含むことを特徴とする請求項６に記載のシミュレーションプログラム。
【請求項８】
前記イベントは、前記機構の内部変数の評価結果を含むことを特徴とする請求項５に記載のシミュレーションプログラム。
【請求項９】
時間軸に沿った機構の挙動のシミュレーションに用いられるハイブリッドモデルを解析するハイブリッドモデル解析方法において、
前記ハイブリッドモデルの記述から連続系方程式に関する記述、状態遷移に関する記述、および付加処理に関する記述をそれぞれ抽出する解析ステップと、
前記シミュレーションの実行においてそれぞれ呼び出され、前記連続系方程式に関する記述に基づく第１のプログラム、前記状態遷移に関する記述に基づく第２のプログラム、および前記付加処理に関する記述に基づく第３のプログラムを生成するプログラム生成ステップと、
を具備することを特徴とするハイブリッドモデル解析方法。
【請求項１０】
前記付加処理に関する記述は付加処理の内容を表す第１の記述と、イベントの発生に伴って該付加処理の実行を制御する第２の記述とから構成されることを特徴とする請求項９に記載のハイブリッドモデル解析方法。
【請求項１１】
前記プログラム生成ステップは、前記第１の記述から前記第３のプログラムを生成するステップと、前記第２の記述に基づくプログラムを前記第２のプログラムに追加するステップとを具備することを特徴とする請求項１０に記載のハイブリッドモデル解析方法。
【請求項１２】
時間軸に沿った機構の挙動のシミュレーションに用いられるハイブリッドモデルを解析するプログラムにおいて、
前記ハイブリッドモデルの記述から連続系方程式に関する記述、状態遷移に関する記述、および付加処理に関する記述をそれぞれ抽出する解析手順と、
前記シミュレーションの実行においてそれぞれ呼び出され、前記連続系方程式に関する記述に基づく第１のプログラム、前記状態遷移に関する記述に基づく第２のプログラム、および前記付加処理に関する記述に基づく第３のプログラムを生成するプログラム生成手順と、
をコンピュータに実行させるためのハイブリッドモデル解析プログラム。
【請求項１３】
前記付加処理に関する記述は付加処理の内容を表す第１の記述と、イベントの発生に伴って該付加処理の実行を制御する第２の記述とから構成されることを特徴とする請求項１２に記載のハイブリッドモデル解析プログラム。
【請求項１４】
前記プログラム生成手順は、前記第１の記述から前記第３のプログラムを生成する手順と、前記第２の記述に基づくプログラムを前記第２のプログラムに追加する手順とを具備することを特徴とする請求項１３に記載のハイブリッドモデル解析プログラム。
【請求項１５】
連続系方程式により表された連続系モデルと、イベントの発生に伴う状態遷移を表す状態遷移モデルと、付加処理とからなるハイブリッドモデルを用い、時間軸に沿った機構の挙動のシミュレーションを行うシミュレーション方法において、
前記連続系モデルを記憶手段に記憶するステップと、
前記状態遷移モデルに記述されたいずれかのイベントが発生したか否かを判定するイベント処理ステップと、
前記イベントが前記付加処理に関連するか否かを判定する判定ステップと、
前記イベントが前記付加処理に関連するならば、該イベントに関連付けられた付加処理を実行する実行ステップと、
前記記憶手段に記憶された連続系モデルにおいて有効な連続系方程式に基づき連続系シミュレーションを実行するシミュレーションステップと、
を具備することを特徴とするシミュレーション方法。
【請求項１６】
前記付加処理は、前記機構を制御する機構制御ソフトウェアを含む外部との間で入出力ポートを介して制御信号を入出力するための処理を含むことを特徴とする請求項１５に記載のシミュレーション方法。
【請求項１７】
前記状態遷移モデルに基づく状態遷移に伴って、前記有効な連続系方程式を切り替えるステップをさらに具備する請求項１５に記載のシミュレーション方法。
【請求項１８】
連続系方程式により表された連続系モデルと、イベントの発生に伴う状態遷移を表す状態遷移モデルと、付加処理とからなるハイブリッドモデルを有し、時間軸に沿った機構の挙動のシミュレーションを該ハイブリッドモデルに基づいて行うシミュレーションプログラムであって、
前記連続系モデルを記憶する記憶手順と、
前記状態遷移モデルに記述されたいずれかのイベントが発生したか否かを判定するイベント処理手順と、
前記イベントが前記付加処理に関連するか否かを判定する判定手順と、
前記イベントが前記付加処理に関連するならば、該イベントに関連付けられた付加処理を実行する実行手順と、
前記記憶手順により記憶された連続系方程モデルにおいて有効な連続系方程式に基づき連続系シミュレーションを実行するシミュレーション手順と、
をコンピュータに実行させるためのシミュレーションプログラム。
【請求項１９】
前記付加処理は、前記機構を制御する機構制御ソフトウェアを含む外部との間で入出力ポートを介して制御信号を入出力するための処理を含むことを特徴とする請求項１８に記載のシミュレーションプログラム。
【請求項２０】
前記状態遷移モデルに基づく状態遷移に伴って、前記有効な連続系方程式を切り替える切り替え手順をさらに具備することを特徴とする請求項１８に記載のシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを用いて機械等の挙動のシミュレーションを行うための方法およびプログラムに関し、特に本発明はハイブリッドモデルを用いるものである。
【背景技術】
【０００２】
現在、コンピュータを用いて機械やプラント等の挙動のシミュレーションを行う際に、ハイブリッドモデリングと呼ばれる手法が使われている。ハイブリッドモデルを用いたシミュレーションは「ハイブリッドシミュレーション」と呼ばれている。このようなシミュレーション挙動をするシステムを「ハイブリッドシステム」と呼ぶこともある。
【０００３】
シミュレーションの目的で作成されるハイブリッドモデルは、概念的には常微分方程式や代数方程式を連立させた連立方程式によって表現される連続系モデルと、イベント発生に伴う状態遷移を表現するための状態遷移モデルとを組み合わせたモデルである。ハイブリッドモデルによれば、連続系モデルで表現される状態が外部からのイベントなどにより瞬時に切り替わるシステムを表現することができる。
【０００４】
ハイブリッドモデルを記述するための言語として、米国ゼロックス社（商標）のパロアルト研究所にて創作されたＨＣＣ（Hybrid Concurrent Constraint Programming）と呼ばれる言語がある（下記非特許文献１参照）。ＨＣＣは発展途上にあり、現在も米国ＮＡＳＡのエイムズ研究所において研究が進められている。ＨＣＣは制約処理プログラミング（コンストレイントプログラミング）と呼ばれる技術の一種であり、連続系モデルを表現する常微分方程式や代数方程式を制約として扱い、これら方程式をそのまま順不同で記述することができる。このような制約記述に、状態遷移を制御する記述を付加してＨＣＣ言語のハイブリッドモデルは完成される。ＨＣＣによれば、方程式をそのまま制約として羅列する（プログラミングする）ことができ、複雑なモデルを記述可能である。
【０００５】
このようにハイブリッドモデルの技術を用いれば、系の特性を常微分方程式などでモデル表現し、初期状態から時間の推移に従ってどのような挙動を示すかをシミュレーションすることができる。
【０００６】
微分方程式などで表現可能な対象や現象を的確にモデル化できるハイブリッドモデルの技術の応用例として、ソフトウェアにより機構が制御されるメカトロニクス機器の機構シミュレーションがある。かかる機構シミュレーションによれば、機構の実機が存在しない状況においても、当該機構を制御する制御ソフトウェアのプロトタイピング、テスト、あるいはデバッグなどが行えるようになる。
【非特許文献１】インターネット＜ＵＲＬ：http://www2.parc.com/spl/projects/mbc/publications.html#cclanguages＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、ハイブリッドモデルを扱うことのできる公知のプログラム言語は、必ずしもメカトロニクス機器の機構シミュレーションに応用することを目的に開発されたものではなく、このため次のような問題点がある。
【０００８】
例えば米国ゼロックス社（商標）のＨＣＣは、インタプリタ型のプログラミング言語であり、たとえば制御ソフトウェアが機構に送信するアクチュエータへの動作コマンドなどを、シミュレータの外部から制御信号として受け取るような構成とする場合、外部関数などを個別に定義する必要がある上、プログラミングにおいてかなりの工夫を必要とする。
【０００９】
具体的には、モデル作成者は外部関数のプログラミングについて例えば以下の作業が必要となる。
【００１０】
（１）外部関数のプログラムを、ＨＣＣ言語固有の外部関数記述用ＡＰＩを利用してＣ言語などの別の言語で記述する。
【００１１】
（２）記述した外部関数のプログラムをＣ言語のコンパイラによってコンパイルし、例えば実行時にリンク可能なダイナミックリンクライブラリを作成する。
【００１２】
（３）ＨＣＣのインタプリタが呼び出せるように、ＨＣＣのインタプリタがそのパスを特定可能なディレクトリ上に作成されたライブラリを配置する。
【００１３】
したがって、モデル作成者はＨＣＣ言語固有の外部関数記述用ＡＰＩの習得が必要であるし、シミュレーション実行時には外部関数を別途コンパイルする手間もかかる。
【００１４】
また、モデル記述中の外部関数の呼び出し方法に関しても、外部関数の実行をイベントに関連付けて管理しないＨＣＣでは、状態遷移が発生した瞬間に呼び出す場合と、数値積分時に呼び出す場合の両方の記述が可能であることから、モデル作成者は外部関数が実行されるタイミングを把握しにくく、モデル作成に高度な熟練を要する。
【００１５】
本発明はかかる事情を考慮してなされたものであり、ハイブリッドモデルを用いて複雑な機構系を簡便かつ正確にモデル化でき、該機構系を制御する制御ソフトウェアとの連携シミュレーションにも好適なシミュレーション方法およびプログラムを提供することを目的とする。
【００１６】
また、外部との連携などに関わる処理を記述するプログラムを直接ハイブリッドモデル記述の一部に含めることを可能にし、シミュレーションの適用範囲を拡大することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一観点に係るシミュレーション方法は、ハイブリッドモデルを利用した記述データに基づいて、対象とする機構の挙動を時間軸に沿ってシミュレーションするシミュレーション方法であって、前記記述データに含まれる連続系方程式の記述、状態遷移に伴う該連続系方程式の切り替えに関する記述、及び前記連続系方程式で表現される処理以外の処理に関する記述を抽出するため、前記記述データを解析する解析ステップと、前記解析ステップにおいて抽出された前記連続系方程式の記述に基づいて、第１のプログラムを生成する第１のプログラム生成ステップと、前記解析ステップにおいて抽出された前記状態遷移に伴う連続系方程式の切り替えに関する記述に基づいて、第２のプログラムを生成する第２のプログラム生成ステップと、前記解析ステップにおいて抽出された前記連続系方程式で表現される処理以外の処理に関する記述に基づいて、第３のプログラムを生成する第３のプログラム生成ステップと、前記第１のプログラムを実行することにより、前記連続系方程式をシミュレーション実行可能なデータ構造に変換する変換ステップと、前記第２のプログラムを実行することにより、イベントの発生に応じて前記連続系方程式の有効・無効を切り替える切り替えステップと、前記切り替えステップにおいて有効とされた前記連続系方程式に対応する前記データ構造を用いて、時間軸に沿った数値積分により該連続系方程式を解いて、前記機構の挙動を表すデータを出力するシミュレーションを実行するシミュレーション実行ステップと、前記第３のプログラムを実行することにより、前記連続系方程式で表現される処理以外の処理を実行する処理実行ステップとを具備する。
【発明の効果】
【００１８】
本発明によれば、ハイブリッドモデルを用いて複雑な機構系を簡便かつ正確にモデル化でき、該機構系を制御する制御ソフトウェアとの連携シミュレーションにも好適なシミュレーション方法およびプログラムを提供できる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照しながら本発明の実施形態を説明する。
【００２０】
（第１実施形態）
図１は本発明の第１実施形態に係る機構シミュレータの概略構成を示すブロック図である。
【００２１】
本実施形態は、ハイブリッドモデル前処理部２０１と、ハイブリッドモデルシミュレーション実行部１０２とにより構成されている。ハイブリッドモデル記述１０４は、ハイブリッドモデル記述言語等で記述されたソースプログラムであって、本実施形態に係るハイブリッドモデル前処理部２０１への入力である。ハイブリッドモデルシミュレーション実行部１０２からの出力は、連続系シミュレーション部１０３による連続系シミュレーションの結果として得られた変数値の演算結果およびその時間履歴である。この出力は変数値時間履歴記憶部１０５に記憶される。
【００２２】
図１に示すように、ハイブリッドモデル前処理部２０１は、制御情報解析部１１０を備える。また、ハイブリッドモデルシミュレーション実行部１０２は、イベント処理部１１１、方程式構文解析部１１２、方程式データ記憶部１１４、連続系方程式切り替え部１１５、付加処理実行部２０５、及び連続系シミュレーション部１０３を備える。なお、本実施形態は一般的なコンピュータを用いて構成することができ、その基本的なハードウェア構成として、図示しないが中央演算ユニット（ＣＰＵ）、メモリ、外部記録装置、通信インターフェース（Ｉ／Ｆ）、および表示装置やキーボード、マウス等の入力装置を備える。また、これらのハードウェアを制御するためのオペレーティングシステム（ＯＳ）を備える。また、本発明の実施形態に係る機構シミュレータは、このようなオペレーティングシステム上で動作するアプリケーションソフトウェアとして実装することができる。
【００２３】
このような本実施形態に係る機構シミュレータの構成及びその処理手順について説明する前に、ここではまずハイブリッドモデル記述１０４がどのように記述されるのか、具体例を挙げて説明する。
【００２４】
図２および図３は、具体例に係るハイブリッドモデルの記述対象である機構を示す図である。この機構は、バルブ３０１、バネ３０３、およびピストン３０２を備えた簡素な構造のシリンダ装置である。
【００２５】
バルブ３０１は外部からの指令（イベント）に応じて開閉動作する。これによりシリンダ装置内の空気の流れを図２のように右側に変更するイベントを以下、「Left」と呼び、空気の流れを図３のように左側に変更するイベントを「Right」と呼ぶ。図２は、バルブ３０１にLeftのイベントが与えられた状態を示しており、ピストン３０２には紙面右向きの力が作用している。この状態を示す運動方程式はシリンダ装置の下部に示してあるように、「-F=mx''」である。これに対し図３は、バルブ３０１にRightのイベントが与えられた状態を示しており、空気の流れの向きが変わり、運動方程式は同図のように「F=mx''」に変化している。
【００２６】
図４は、このような機構の挙動を、状態の遷移とそれぞれの状態に対応する運動方程式とからなる状態遷移図として表現したものである。ハイブリッドモデルは、この図４に示されるような状態遷移と、各状態の記述が微分方程式や代数方程式あるいはそれらの連立方程式（連続系方程式）で表現されるものを指す。図４によれば、状態が２つあって、かかる２つの状態間に状態遷移が存在することがわかる。
【００２７】
本発明では、図４の状態遷移図をもとに具体的なハイブリッドモデルの内容をＨＣＣ（Hybrid Concurrent Constraint Programming）言語で記述するとともに、連続系方程式で表現される処理以外の処理、例えば、外部との連携などに関わる処理（以下「付加処理」という）を所定のプログラム言語で記述することによりハイブリッドモデル記述１０４が生成される。
【００２８】
図５は、本発明にかかるハイブリッドモデル記述に相当するプログラムの一例を示す図である。図５において、（ソース）プログラムの論理行番号を仮にＬ１〜Ｌ２３とする。Ｌ３、Ｌ４、およびＬ８は、上記した機械装置の初期状態やバルブ操作タイミング等の運転条件の記述に相当し、Ｌ５およびＬ６は図４に示した状態遷移の表現記述に相当する。また、Ｌ９〜Ｌ２３は付加処理に係る記述であり、ここでは「現在の状態をファイルに書き込む」という内容の処理が記述されている。なお、module文には"C"と指定されており、該当するＬ９〜Ｌ１７はＣ言語によるプログラム記述となっている。
【００２９】
ＨＣＣ言語では、図５のＬ５およびＬ６から分かるように、運動方程式をプログラム内でそのまま記述することができる。Ｌ５およびＬ６とでは状態が異なる。また、それぞれの状態において、当該状態へ遷移する条件を前提条件といい、「always if」に続いて記述される。また、当該状態をキャンセルする条件、言い替えれば当該状態から遷移していく条件を遷移条件といい、「watching」に続けて記述される。
【００３０】
なお、ＨＣＣでは、プログラムの記述の順序（例えば図５における論理行番号Ｌ１→Ｌ８の順序）にそって実行されるわけではない。ＨＣＣでは、個別のプログラム記述のうち、シミュレーションを実行する時間軸に沿って成立するものが探索され、実行される。すなわち、論理行番号Ｌ１→Ｌ８の順序は、実行順序とは関係がない。たとえば、シミュレーションを開始した時点では、Ｌ３およびＬ８のみが有効である。ここで、イベントRight（ｅｖ１）がＬ３により発生するため、Ｌ６の前提条件であるRightが有効となり、Ｌ６に記述されている運動方程式ｅｑ２が有効になる。つまり、図４の左側の状態からシミュレーションが実行されることになる。
【００３１】
さらに、時間が５０になるとＬ４が有効となり、イベントLeft（ｅｖ２）が発生し、Ｌ６の遷移条件（「watching」以下、すなわちLeft）が有効となって、Ｌ６の運動方程式ｅｑ２が無効となる。これに代わって、Ｌ５の前提条件が有効となり、運動方程式ｅｑ１が有効となる。
【００３２】
なお、以上のようなプログラム例は外部からのイベントによって状態が遷移する場合を記述したもの（Ｌ５、Ｌ６）であったが、勿論、内部の状況によって状態を遷移させてもよい。たとえば、図２においてバルブ３０１が切り替えられない場合には、移動するピストン３０２がバネ３０３に接触し、該バネ３０３からの反力を受けるようになる。すなわちピストン３０２の位置に関して、外部からのイベントが無い場合でも状態遷移が起こる場合が存在する。このような場合は、例えばｘが正であるかどうかといった内部変数の評価式（不等式）による評価結果に基づいて状態遷移の必要性を判断できる。
【００３３】
一般的に、ハイブリッドモデルは、常微分方程式や代数方程式を連立させた連立方程式によって表現される連続系モデルと、イベント発生に伴う状態遷移を表現するための状態遷移モデルとを組み合わせたモデルである。ハイブリッドモデルによれば、連続系モデルで表現される状態が外部からのイベントなどにより瞬時に切り替わるシステムを表現することができる。
【００３４】
さらに、時間が１００になるとＬ１９が有効となり、イベントＥ（ｅｖ５）が発生し、cPrintという関数が引数ｘの値とともに呼び出される（Ｌ１８〜Ｌ２３）。この記述は、その時点での状態をファイルに保存する付加処理が実行されることを示しており、その具体的な処理の内容は、Ｌ９〜Ｌ１７において例えばＣ言語で記述されている。
【００３５】
行Ｌ１８〜Ｌ２３は付加処理（Ｌ１１〜Ｌ１６）を制御するハイブリッドモデル記述１０４の内容である。process(E)cPrint(x)という記述は、イベントＥの発生に伴い付加処理すなわちcPrint(x)を実行せよ、という命令構文である。ここで、付加処理の実行制御に関係するイベントは連続系方程式の切り替えに関係するLeftイベント、Rightイベントと同じイベントを使って記述可能である。
【００３６】
このような本実施形態によれば、（１）付加処理の内容を、連続系方程式の切り替えを有するハイブリッドモデルに相当する記述と同一のプログラムソース上に記述できる。また、（２）付加処理を呼び出したりする等の制御をハイブリッド記述できる。したがって、分かりやすく簡潔なシミュレーションモデルを記述できる。
【００３７】
次に、ハイブリッドモデル前処理部２０１における処理について説明する。ハイブリッドモデル記述１０４は、まずハイブリッドモデル前処理部２０１の制御情報解析部１１０において処理され、モデル方程式登録プログラム２０２、イベント制御プログラム２０３、及びシミュレーション実行時付加処理プログラム２０４が生成される。
【００３８】
ハイブリッドモデルシミュレーション実行部１０２を構成するソフトウェアモジュールとして、モデル方程式の登録を行うための関数及び連続系方程式を切り替えるための関数がＡＰＩ（Application Program Interface）関数として提供される。モデル方程式登録プログラム２０２およびイベント制御プログラム２０３は、該当する上記ＡＰＩ関数を呼び出す記述を、入力されたハイブリッドモデル記述１０４に沿って適切に組み合わせたプログラムである。この観点から考えると、ハイブリッドモデル前処理部２０１は、入力をハイブリッドモデル記述１０４とし、出力を例えばＣ言語のＡＰＩ関数呼び出しの記述を含むＣプログラム（ソース）とするような、一種のコンパイラと考えることもできる。このようなモデル方程式登録プログラム２０２とイベント制御プログラム２０３は、さらにＣ言語などのコンパイラによりコンパイルされ、例えば実行時に動的にリンク可能なライブラリが生成される。ハイブリッドモデルシミュレーション実行部１０２では、シミュレーション実行にあたって、生成された動的リンクライブラリがリンクされ、入力ハイブリッドモデルを忠実に再現するシミュレーションプログラムが完成し、実行可能になる。なお、生成されるこれらのライブラリは必ずしも動的リンクライブラリである必要はなく、静的なライブラリであってもよい。
【００３９】
ハイブリッドモデルシミュレーション実行部１０２のアプリケーションインターフェースを構成する具体的なソフトウェアモジュールの仕様などは様々考えられるが、ここでは説明の都合上、以下の３つのＡＰＩ関数が最低定義されているとする。なお、プログラミング言語はＣ言語とする。
【数１】
2004220577.tif 000003
【００４０】
１つ目のＡＰＩ関数XXX_AddEqnDataは、１つの連続系方程式を表す文字列のポインタを引数に指定する。XXX_AddEqnDataは、この連続系方程式を構文解析し、連続系方程式の記述をシミュレーション実行可能なデータ構造（内部データ表現）に変換し、かかる内部データ表現を方程式データ記憶部１１４に登録する処理を行う。なお、ここの連続系方程式には、ユニークなＩＤ番号が割り当てられる。
【００４１】
たとえば「ab/cos(a-(c+b))-3c」という式が与えられたと仮定すると、上記内部データ表現として図６のような木構造を生成する。この木構造において、例えば参照数字６１は線形多項式の親ノード（節）、６２は掛け算のノード、６３は割り算のノード、６４は外部関数（四則演算以外の意）のノード、６５は線形多項式を構成する各項のノードを表している。本例において、木構造の葉に相当するものはすべて変数（ａ，ｂ，ｃ）であり、これらに実数の係数が加わって線形式となる。線形式はcos などの外部関数の引数になったり、掛け算や割り算の対象となる。変数には、別途、値が確定しているかどうかのフラグが設けられており、またこのような木構造のデータに基づいて該変数の現在の値が保持される。木構造のすべての葉の値（すなわち変数の値）が確定していれば、式の値を計算することができる。方程式データ記憶部１１４では、式の値の計算などを高速に行うことができるように、予め内部のデータ構造をつなぎ合わせて木構造を構成してある。上記処理において何らかのエラーが発生した場合には、err にエラーコードがセットされる。正常に処理が終了した場合は、登録された方程式のＩＤ番号を返り値とする。
【００４２】
２番目のＡＰＩ関数XXX_ActivateEqnは、引数に指定された方程式のＩＤ番号に相当する方程式を有効にする。もし、すでに有効となっている方程式が指定されている場合には何もしない。返り値はエラーコードである。
【００４３】
３番目のＡＰＩ関数XXX_DeActivateEqnは、XXX_ActivateEqnとは逆に、引数に指定された方程式のＩＤ番号に相当する方程式を無効にする。すでに無効となっている方程式が指定された場合には何もしない。
【００４４】
制御情報解析部１１０は、まずXXX_AddEqnDataを必要な方程式について順に呼ぶ関数（InitEqnData）を生成する。これがモデル方程式登録プログラム２０２（第１のプログラム）に相当する。
【００４５】
また、制御情報解析部１１０は、シミュレーション実行の際に、時間がΔｔ進むごとに条件のチェックおよび方程式の変更（入れ替え）を行う関数（ChangeEqn）も生成する。これはイベント制御プログラム２０３（第２のプログラム）に相当する。
【００４６】
ここで、ChangeEqn関数はＬｅｆｔイベント、Ｒｉｇｈｔイベント、およびＥイベントの発生をGetEvent関数により検知する。ChangeEqn関数はシミュレーション実行時における時間ステップ毎にイベント処理部１１１から呼び出される。
【００４７】
ハイブリッドモデルシミュレーション実行部１０２では、図１から分かるようにイベント処理部１１１と連続系シミュレーション部１０３とが分離されている。したがって、イベント制御プログラム２０３には時間積分などの時間に依存するモジュールは含まれず、これに対応するイベント処理部１１１は連続系方程式の有効・無効のフラグの切り替えのみを行う。
【００４８】
このようなシミュレータ構成を採ることにより、外部機器とのインターフェースに係るイベントとハイブリッド記述に係るイベントとを同一の処理（if(GetEvent(イベント)処理)で管理することができる。
【００４９】
また、ハイブリッドモデル前処理部２０１は、ハイブリッドシミュレーションモデルをいったん付加処理と同一の言語として出力するため、容易にハイブリッドシミュレーション実行プログラムを生成可能である。
【００５０】
以上からハイブリッドシミュレーションと外部機器との連携が容易になる。
【００５１】
さらに、制御情報解析部１１０は、付加処理の内容記述をハイブリッドモデル記述１０４から抽出する。かかる記述が、シミュレーション実行部付加処理プログラム２０４（第３のプログラム）に相当する。シミュレーション実行部付加処理プログラム２０４はハイブリッドモデル記述１０４中でもともとＣ言語などにより記述されたプログラムのソースに相当する。例えば図５に示したハイブリッドモデル記述１０４中では、module文が参照され、Ｃ言語で記述された部分が抽出される。抽出されたシミュレーション実行部付加処理プログラム２０４は、Ｃ言語コンパイラによりコンパイルされ、動的にリンク可能なライブラリが生成される。付加処理実行部２０５は、この動的にリンク可能なライブラリを呼び出すインターフェースの役割を担う。なお、生成されるライブラリは必ずしも動的リンクライブラリである必要はなく、静的なライブラリであってもよい。また、付加処理の内容を記述する言語はＣ言語に限定されない。
【００５２】
上記したようなハイブリッドモデル前処理部２０１における処理により、例えば、図５に示したハイブリッドモデル記述について、以下のようなＣ言語のソースプログラムが自動生成される。
【数２】
2004220577.tif 000004
【００５３】
なお、GetEventは、引数に指定された名前(eventname)のイベントが生起しているかどうかをチェックする関数である。
【００５４】
以上のプログラムは、上述したようにＣ言語コンパイラによってコンパイルされ、さらに動的リンクライブラリの形式に整えられ、実行時にリンクされる。
【００５５】
なお、本実施形態では、プログラム言語としてＣ言語を用いた例について説明したが、本発明はこれに限定されるものではなく、例えばＣ＋＋言語、ＳｐｅｃＣ言語等の他のプログラム言語を用いてもよい。
【００５６】
次に、シミュレーションの実行について説明する。シミュレーション実行時においては、ハイブリッドモデルシミュレーション実行部１０２が起動され、連続系方程式の値を計算することでシミュレーション実行が行われる。このとき、連続系方程式切り替え部１１５は、イベント処理部１１１の内部で呼び出され、連続系方程式の切り替えを有効・無効のフラグを用いて実行する。イベント処理部１１１は前処理において生成されたイベント制御プログラム２０３（第２のプログラム；ChangeEqn）に対応する。図２の状態では、図５の運動方程式ｅｑ１は無効であり、運動方程式ｅｑ２が有効になっている。ここで、Leftのイベントが発生した図３の状況においては、図５の運動方程式ｅｑ１を有効にし、運動方程式ｅｑ２を無効にするようフラグを操作する。これら有効・無効のフラグは方程式データ記憶部１１４に記憶される方程式それぞれの属性データとして管理される。
【００５７】
連続系シミュレーション部１０３は、方程式データ記憶部１１４を参照し、同記憶部１１４に木構造の形式で格納されている連続系方程式の内部データ表現を演算対象として、時間ステップづつ数値積分を実行する。シミュレーションは、常微分方程式及び代数多項式の連立からなる非線形連立方程式についての初期値問題である。このため、例えば図２に示される初期状態が与えられている。具体的には、例えば一般によく使われているルンゲクッタアルゴリズムを用いて解の値を計算する。
【００５８】
必要なデータは機構シミュレータから出力を行い、さらに連続系方程式切り替え部１１５の処理に戻り、上記の処理を繰り返すことにより必要な時間のシミュレーションを実行する。シミュレーション結果は、変数値時間履歴記憶部１０５に保存され、シミュレーション終了後の分析などに利用される。
【００５９】
図７は、以上説明した本発明の第１実施形態に係る機構シミュレーションにおける一連の処理手順を示すフローチャートである。この処理手順はハイブリッドモデル前処理の段階とシミュレーション実行の段階とに大別できる。
【００６０】
まず、ハイブリッドモデル記述１０４が制御情報解析部１１０に入力され、ハイブリッドモデルの構文解析が行われる（ステップＳ１）。制御情報解析部１１０は図１に示すようにモデル方程式登録プログラム２０２、イベント制御プログラム２０３、及びシミュレーション実行時付加処理プログラム２０４をそれぞれ生成する。シミュレーション実行のための前処理を終えると、ここからシミュレーション実行の段階に移る。
【００６１】
先ず、ハイブリッドモデルシミュレーション実行部１０２から方程式構文解析部１１２が呼び出される。方程式構文解析部１１２はモデル方程式登録プログラム２０２(第１のプログラム；InitEqnData)に対応し、その内部でＡＰＩ関数XXX_AddEqnDataを呼び出す。これにより連続系方程式の記述データがシミュレーション実行可能なデータ構造に変換される。変換されたデータは方程式データ記憶部１１４に登録される（ステップＳ２）。
【００６２】
ステップＳ３においてハイブリッドモデル記述１０４に基づく初期状態が決定されたのち、ステップＳ４において、イベントが発生したかどうかを検知する。このため、ハイブリッドモデルシミュレーション実行部１０２はイベント処理部１１１を呼び出す。イベント処理部１１１はイベント制御プログラム２０３（第２のプログラム；ChangeEqn）に対応し、その内部でGetEventを呼び出す。イベントが発生したならば、制御はステップＳ５に進む。イベントが発生していない場合は、ステップＳ６に進み、連続系シミュレーション部１０３が数値積分を実行する。
【００６３】
ステップＳ５において、発生したイベントが付加処理に関連しているか否かを判定する。該イベントが付加処理に関連するものではない場合は、ステップＳ９において、状態遷移に伴う連続系方程式の切り替えが必要であるか否かを判定する。方程式の切り替えが必要であるならば、ステップＳ１０において、有効無効フラグを操作することにより、アクティブな連続方程式の切り替えを行う。このため、ＡＰＩ関数XXX_ActivateEqnまたはXXX_DeActivateEqnが呼び出される。ステップＳ９又はステップＳ１０の実行の後に、ステップＳ６において連続系シミュレーション部１０３が数値積分を実行する。
【００６４】
発生したイベントが付加処理に関連するものである場合は、ステップＳ１１において該当する付加処理を実行する。具体的な付加処理の例としては、画面上に処理の進捗状況を表示したり、シミュレーションに関わるデータをファイルに出力するなどの処理が考えられる。ステップＳ１１にて付加処理が実行された後、ステップＳ６に進み、連続系シミュレーション部１０３は数値積分を実行する。
【００６５】
次に、ステップＳ７において終了条件の判定をする。ここでは、時間が所定のシミュレーション終了時間に到達したかどうかを判定する。シミュレーション終了時間に到達したらシミュレーション実行を終了する。それまではステップＳ８にて時間を１ステップ進めてステップＳ４に戻り、同様の処理手順を繰り返す。
【００６６】
以上の処理を図５に示したハイブリッドモデル記述について実行した場合の時系列的な流れを図８に示す。ｔ＝０は初期状態を示し、ｔ＝０でイベントLeftが発生し連続系方程式が切り替えられ、ｔ＝１００でイベントＥが発生し付加処理が実行される。かかるイベント間は連続系のシミュレーションが実行されている。
【００６７】
ハイブリッドモデルシミュレーション実行部１０２が機構制御ソフトウェアシミュレータと連携し、全体として効率的にシミュレーションが実行されるためには、該シミュレーションを構成する各ステップの実行順序が適切かつ効率的に制御されなければならない。
【００６８】
既に述べたように従来では、ハイブリッドモデル記述言語（例えばＨＣＣ言語）の特性（どの行が最初に実行されるか分からない）に起因し、上記実行順序を適切かつ効率的に制御するようプログラミングするには、極めて高度なテクニックを要し、難易度の高い作業である。また、単なる変数の値を扱うのではなく、外部から得られた情報を変数に代入してからハイブリッドモデルの処理を行う場合もある。この場合、外部とのインターフェースに関わる特別な外部関数などを用意し、これらをモデルの作成者が記述しなければならなかった。
【００６９】
これに対し、本発明の実施形態は、図７に示した一連の処理に従いハイブリッドモデルシミュレーション実行部１０２を構築し、シミュレーション実行するよう構成されていることから、上記のような問題を回避できる。すなわち、機構制御ソフトウェアシミュレータ等の外部（プロセス）との間の通信に相当するソフトウェア部分をハイブリッドモデルの中にＣ言語などのプログラム言語で付加処理として記述でき、その機能が自動的にシミュレーションの実行に組み込まれる。
【００７０】
本発明の実施形態によれば、複雑なシミュレーションの手順を柔軟にモデル化およびプログラミングすることが可能になる。具体的には、本実施形態は外部との連携などに関わる付加処理の記述をハイブリッドモデル記述の一部に含めることを可能にする。したがって、高度で多様なシミュレーションモデルを簡単に構築可能になることから、シミュレーションの適用範囲を拡大することができる。
【００７１】
（第２実施形態）
本発明の第２実施形態は機構制御ソフトウェアもしくは機構制御ソフトウェアのシミュレータとの連携に係わる。図９は本発明の第２実施形態に係る機構シミュレータの概略構成を示すブロック図である。本実施形態の機構シミュレータは、第１実施形態と同様に、ハイブリッドモデル前処理部２０１と、ハイブリッドモデルシミュレーション実行部１０２とにより構成されている。同図に示す制御信号１０６は機構制御ソフトウェアもしくは機構制御ソフトウェアのシミュレータとハイブリッドモデルシミュレーション実行部１０２の付加処理実行部２０５との間でポートを介して入出力される。
【００７２】
本実施形態においては、制御信号１０６の入出力を付加処理とし、その記述をハイブリッドモデル記述２１０４に含めることが可能である。
【００７３】
図１０は、第２実施形態におけるハイブリッドモデル記述２１０４の内容の一例を示す図である。outport関数は外部の制御系に対し、そのいずれかのポートＩＤにデータを書き込むためのＡＰＩ関数である。inport関数はポートＩＤからデータを読み込むＡＰＩ関数である。ここでは、外部の制御系は機構制御ソフトウェアもしくは機構制御ソフトウェアのシミュレータに相当する。
【００７４】
１１行目から１８行目はＣ言語で記述されている。setDataToCtrlは引数num,dataをoutport関数にセットする関数である。GetDataFromCtrl関数は引数num番目のＩＤをinport関数にセットし、取得したデータを戻り値として返す関数である。
【００７５】
２３，２６行目ではsetDataToCtrl関数とgetDataFromCtrl関数がそれぞれイベントＥ１，Ｅ２に関連付けられている。イベントＥ１が発生したときにsetDataToCtrl関数が実行され、イベントＥ２が発生したとき、getDataFromCtrl関数が実行される。
【００７６】
２４行目では、制御ＩＤ番号１に対してデータｘが整数型に型変換され、セットされる。２７行目では、データｘに、制御信号１０６から取得されたデータを強制的に設定している。
【００７７】
以上のようにこのハイブリッドシミュレーションでは、シミュレーション中に外部の制御対象と連携をとるための記述を同一のソース上に簡便に記述することができる。当然ながら、制御対象の状態に応じてシミュレーション結果は異なるものとなる。
【００７８】
図１１は本発明の第２実施形態に係わる機構シミュレータの動作を示すフローチャートである。イベントが発生したら、その種類を特定し、イベントの種類に応じて処理を振り分ける点では第１実施形態と同様である。本実施形態はハイブリッドモデルにおける状態遷移のみならず、外部制御対象とのインターフェースに係わる処理についてもイベントを通じて統一的に制御する点で第１実施形態と異なっており、これにより外部制御系（例えば機構制御ソフトウェア等）との連携シミュレーションに係わる構成が簡潔になるという利点がある。
【００７９】
まず、図１１に示すように、ハイブリッドモデル記述２１０４が制御情報解析部１１０に入力され、ハイブリッドモデルの構文解析が行われる（ステップＳ１）。制御情報解析部１１０はモデル方程式登録プログラム２０２、イベント制御プログラム２０３、及びシミュレーション実行時付加処理プログラム２０４をそれぞれ生成する。モデル方程式登録プログラム２０２に基づく方程式構文解析部１１２により、連続系方程式の記述データはシミュレーション実行可能なデータ構造に変換されると共に、方程式データ記憶部１１４に登録される（ステップＳ２）。
【００８０】
以上でシミュレーション実行のための前処理を終え、ここからシミュレーション実行の段階に移る。
【００８１】
ステップＳ４において、イベントが発生したかどうかを検知する。イベントが発生したならば、制御はステップＳ５に進む。イベントが発生していない場合はステップＳ６に進む。
【００８２】
ステップＳ５において、発生したイベントの種類を判定する。イベントの種類が連続系方程式に関係するイベントであるならば、ステップＳ９において、状態遷移に伴う連続系方程式の切り替えが必要であるか否かを判定する。方程式の切り替えが必要であるならば、ステップＳ１０において、有効無効フラグを操作することにより、アクティブな連続方程式の切り替えを行う。方程式の切り替えは不要である場合、制御はステップＳ６に進む。
【００８３】
発生したイベントの種類がデータ送信に関係するイベントであるならば、ステップＳ１１において外部制御対象にデータを送信する。この送信データは、対象とする機構に装着されたセンサーのステータス情報等が想定される。また、発生したイベントの種類がデータ受信に関係するイベントであるならば、ステップＳ１２において外部制御対象からデータを受信する。
【００８４】
ステップＳ６において、連続系シミュレーション部１０３は数値積分を実行する。
【００８５】
次に、ステップＳ７において終了条件の判定をする。ここでは、時間が所定のシミュレーション終了時間に到達したかどうかを判定する。シミュレーション終了時間に到達したらシミュレーション実行を終了する。それまではステップＳ８にて時間を１ステップ進めてステップＳ４に戻り、同様の処理手順を繰り返す。
【００８６】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００８７】
【図１】本発明の第１実施形態に係る機構シミュレータの概略構成を示すブロック図。
【図２】ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置のある状態を示す図。
【図３】ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置の別の状態を示す図。
【図４】ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置の状態遷移を示す図。
【図５】ハイブリッドモデル記述の内容を示す図。
【図６】１つの連続系方程式を構文解析した結果得られる内部データ表現の説明図。
【図７】本発明の第１実施形態に係る機構シミュレーションの処理手順を示すフローチャート。
【図８】機構シミュレーションの時系列的な流れの説明図。
【図９】本発明の第２実施形態に係る機構シミュレータの概略構成を示すブロック図。
【図１０】本発明の第２実施形態に係るハイブリッドモデル記述の内容を示す図。
【図１１】機構シミュレーションの処理手順を示すフローチャート。
【符号の説明】
【００８８】
１０４…ハイブリッドモデル記述、２０１…ハイブリッドモデル前処理部、１１０…制御情報解析部、１０２…ハイブリッドモデルシミュレーション実行部、１０３…連続系シミュレーション部、１１１…イベント処理部、１１２…方程式構文解析部、１１５…連続系方程式切り替え部、２０５…付加処理実行部、１０５…変数値時間履歴記憶部
【図１】
2004220577.tif 000005
【図２】
2004220577.tif 000006
【図３】
2004220577.tif 000007
【図４】
2004220577.tif 000008
【図５】
2004220577.tif 000009
【図６】
2004220577.tif 000010
【図７】
2004220577.tif 000011
【図８】
2004220577.tif 000012
【図９】
2004220577.tif 000013
【図１０】
2004220577.tif 000014
【図１１】
2004220577.tif 000015