(57)【要約】【課題】複数のシミュレータ間のメッセージ交換を精度よく行うこと。【解決手段】シミュレーション装置は、複数のシミュレータから送信されるメッセージを記録する記録する。そして記録したメッセージの送信元のシミュレータと連携する他のシミュレータに記録したメッセージを通知したか否かを示すパラメータに基づいて、記録したメッセージを加工する。加工したメッセージを、連携する他のシミュレータに送信する。【選択図】図３
2015032120.tif 000002
【特許請求の範囲】
【請求項１】
複数のシミュレータを連携するシミュレーション装置であって、
前記複数のシミュレータから送信されるメッセージを記録する記録手段と、
前記記録手段に記録されたメッセージを連携する他のシミュレータに通知したか否かを示すパラメータに基づいて加工する加工手段と、
前記加工されたメッセージを、連携する他のシミュレータに送信する送信手段と
を有することを特徴とするシミュレーション装置。
【請求項２】
前記加工手段は、前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記加工を行うことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記送信手段は、各シミュレータから送信される同期要求メッセージに応答して、前記加工されたメッセージを送信することを特徴とする請求項１または２に記載のシミュレーション装置。
【請求項４】
前記加工手段は、前記加工されたメッセージを受信するシミュレータの仮想時刻以前の仮想時刻を有するメッセージのうち、前記連携する他のシミュレータに通知していないことを示すパラメータを有するメッセージが２つ以上ある場合に、該２つ以上あるメッセージに対して前記加工を行うことを特徴とする請求項３に記載のシミュレーション装置。
【請求項５】
前記加工手段は、前記２つ以上あるメッセージに含まれる値を共通の値に加工することを特徴とする請求項４に記載のシミュレーション装置。
【請求項６】
前記加工手段は、前記加工したメッセージの前記パラメータを、通知済みに変更することを特徴とする請求項４または５に記載のシミュレーション装置。
【請求項７】
前記加工手段による加工方法を指定する加工方法指定手段をさらに有することを特徴とする請求項１から６のいずれか一項に記載のシミュレーション装置。
【請求項８】
前記加工手段によって加工された内容を提示する提示手段をさらに有することを特徴とする請求項１から７のいずれか一項に記載のシミュレーション装置。
【請求項９】
複数のシミュレータを連携するシミュレータ管理手段と連携するシミュレーション装置であって、
前記シミュレータ管理手段から通知される、他のシミュレータからのメッセージを記録する記録手段と、
前記記録手段に記録されたメッセージから、シミュレーション演算に利用するメッセージを、該シミュレーション装置の持つ仮想時刻と該メッセージが持つ仮想時刻とに基づいて決定する決定手段と、
前記決定したメッセージを入力とするシミュレーション演算を実行する実行手段と
を有することを特徴とするシミュレーション装置。
【請求項１０】
前記記録手段は、前記シミュレータ管理手段から送信される、前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記シミュレータ管理手段に記録されている未通知の全てのメッセージを記録することを特徴とする請求項９に記載のシミュレーション装置。
【請求項１１】
前記決定手段で決定したメッセージを提示する提示手段をさらに有することを特徴とする請求項９または１０に記載のシミュレーション装置。
【請求項１２】
複数のシミュレータと連携するシミュレーション装置であって、
前記複数のシミュレータから送信されるメッセージを記録する記録手段と、
前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記記録手段に記録されている未通知の全てのメッセージを、連携する他のシミュレータに送信する送信手段と
を有することを特徴とするシミュレーション装置。
【請求項１３】
複数のシミュレータを連携するシミュレータ管理手段と連携するシミュレーション装置であって、
前記シミュレータ管理手段から通知される、他のシミュレータからのメッセージを記録する記録手段と、
前記記録手段に記録されたメッセージを入力とするシミュレーション演算を実行したか否かを示すパラメータに基づいて該記録手段に記録されたメッセージを加工する加工手段と、
前記加工されたメッセージを入力とする前記シミュレーション演算を実行する実行手段と
を有することを特徴とするシミュレーション装置。
【請求項１４】
前記加工手段は、前記加工されたメッセージを受信するシミュレータの仮想時刻以前の仮想時刻を有するメッセージのうち、前記シミュレーション演算の入力として用いられていないことを示すパラメータを有するメッセージが２つ以上ある場合に、前記加工を行うことを特徴とする請求項１３に記載のシミュレーション装置。
【請求項１５】
前記加工手段は、前記２つ以上あるメッセージに含まれる値を共通の値に加工することを特徴とする請求項１４に記載のシミュレーション装置。
【請求項１６】
前記加工手段は、前記加工したメッセージの前記パラメータを、使用済みに変更することを特徴とする請求項１４または１５に記載のシミュレーション装置。
【請求項１７】
複数のシミュレータを連携するシミュレーション装置であって、
前記複数のシミュレータから送信されるメッセージを記録する記録手段と、
前記記録したメッセージを通知する先のシミュレータが、通知されるメッセージの調整機能を有するか否かを判定する判定手段と、
前記判定手段で前記メッセージの調整機能を有さないと判定したシミュレータからの同期要求メッセージに応答してメッセージを通知する場合に、
前記記録手段に記録されたメッセージを、連携する他のシミュレータに通知したか否かを示すパラメータに基づいて加工する加工手段と、
前記加工されたメッセージを、連携する他のシミュレータに送信する送信手段と
を有することを特徴とするシミュレーション装置。
【請求項１８】
複数のシミュレータを連携するシミュレーション装置であって、
前記複数のシミュレータから送信されるメッセージを記録する記録手段と、
前記記録したメッセージを通知する先のシミュレータが、通知されるメッセージの調整機能を有するか否かを判定する判定手段と、
前記判定手段で前記メッセージの調整機能を有すると判定したシミュレータからの同期要求メッセージに応答してメッセージを通知する場合に、
前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記記録手段に記録されている未通知の全てのメッセージを、連携する他のシミュレータに送信する送信手段と
を有することを特徴とするシミュレーション装置。
【請求項１９】
前記判定手段は、前記複数のシミュレータからの参加要求メッセージに含まれるパラメータに基づいて前記判定を行うことを特徴とする請求項１７または１８に記載のシミュレーション装置。
【請求項２０】
複数のシミュレータを連携するシミュレーション方法であって、
前記複数のシミュレータから送信されるメッセージを記録する記録ステップと、
前記記録ステップにおいて記録されたメッセージを連携する他のシミュレータに通知したか否かを示すパラメータに基づいて加工する加工ステップと、
前記加工されたメッセージを、連携する他のシミュレータに送信する送信ステップと
を有することを特徴とするシミュレーション方法。
【請求項２１】
複数のシミュレータを連携するシミュレータ管理手段と連携するシミュレーション装置におけるシミュレーション方法であって、
前記シミュレータ管理手段から通知される、他のシミュレータからのメッセージを記録する記録ステップと、
前記記録ステップにおいて記録されたメッセージから、シミュレーション演算に利用するメッセージを、該シミュレーション装置の持つ仮想時刻と該メッセージが持つ仮想時刻とに基づいて決定する決定ステップと、
前記決定したメッセージを入力とするシミュレーション演算を実行する実行ステップと
を有することを特徴とするシミュレーション方法。
【請求項２２】
複数のシミュレータと連携するシミュレーション方法であって、
前記複数のシミュレータから送信されるメッセージを記録する記録ステップと、
前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記記録ステップにおいて記録されている未通知の全てのメッセージを、連携する他のシミュレータに送信する送信ステップと
を有することを特徴とするシミュレーション方法。
【請求項２３】
複数のシミュレータを連携するシミュレータ管理手段と連携するシミュレーション装置におけるシミュレーション方法であって、
前記シミュレータ管理手段から通知される、他のシミュレータからのメッセージを記録する記録ステップと、
前記記録ステップにおいて記録されたメッセージを入力とするシミュレーション演算を実行したか否かを示すパラメータに基づいて該記録ステップにおいて記録されたメッセージを加工する加工ステップと、
前記加工されたメッセージを入力とする前記シミュレーション演算を実行する実行ステップと
を有することを特徴とするシミュレーション方法。
【請求項２４】
複数のシミュレータを連携するシミュレーション方法であって、
前記複数のシミュレータから送信されるメッセージを記録する記録ステップと、
前記記録したメッセージを通知する先のシミュレータが、通知されるメッセージの調整機能を有するか否かを判定する判定ステップと、
前記判定ステップにおいて前記メッセージの調整機能を有さないと判定したシミュレータからの同期要求メッセージに応答してメッセージを通知する場合に、
前記記録ステップにおいて記録されたメッセージを、連携する他のシミュレータに通知したか否かを示すパラメータに基づいて加工する加工ステップと、
前記加工されたメッセージを、連携する他のシミュレータに送信する送信ステップと
を有することを特徴とするシミュレーション方法。
【請求項２５】
複数のシミュレータを連携するシミュレーション方法であって、
前記複数のシミュレータから送信されるメッセージを記録する記録ステップと、
前記記録したメッセージを通知する先のシミュレータが、通知されるメッセージの調整機能を有するか否かを判定する判定ステップと、
前記判定ステップにおいて前記メッセージの調整機能を有すると判定したシミュレータからの同期要求メッセージに応答してメッセージを通知する場合に、
前記複数のシミュレータからの同期要求メッセージをそれぞれ受信した時点で前記記録ステップにおいて記録されている未通知の全てのメッセージを、連携する他のシミュレータに送信する送信ステップと
を有することを特徴とするシミュレーション方法。
【請求項２６】
コンピュータを、請求項１から１９のいずれか一項に記載のシミュレーション装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーション装置に関する。より詳細には、複数のシミュレータのシミュレータ間のメッセージ交換および時間同期をとることで、統合シミュレーション環境を実現するシミュレーション装置に関する。
【背景技術】
【０００２】
メカトロニクス製品の開発において、様々な製品の挙動をコンピュータなどの仮想環境上で再現するシミュレーション技術が取り入れられている。例えば機構解析、構造解析に代表されるメカ系シミュレーションやアナログ物理回路シミュレーション、デジタル論理回路シミュレーションといったエレキ系シミュレーションである。あるいはモデリング言語を用いたソフトウェア系シミュレーションなどである。例えば、CPUを模擬するISS（Instruction Set Simulator：命令セットシミュレータ）やUML (Unified Modeling Language: 統一モデリング言語)などである。このような各シミュレーションを実施するシミュレータは企業が自社の製品開発に向けて用意したり、あるいは企業向けにソフトウェア開発会社が販売するなど、多種多様存在する。
【０００３】
こういったメカ・エレキ・ソフトといった技術分野に対し、それぞれの技術者達が各技術領域の品質を作り上げるためにシミュレータを用いている。最近の製品開発においては、より実製品に近い動作を再現させるため、特許文献1に示されるように、これらのシミュレーションを連携する技術開発が行われている。具体的には機構シミュレータのモーター制御をデジタル論理回路シミュレータからの信号通知によって行い、また回路の制御をISSで制御するといった使われ方である。
【０００４】
このように様々な技術分野を対象にした複数のシミュレーション連携を行うためには、各シミュレータがそれぞれ独自の仮想時刻を保持していることに注意し、シミュレータ間の時間同期を取らなければならない。つまり、シミュレータＡがシミュレータＢからの信号通知を受け入れるタイミングは、シミュレータＢがその信号を送信するタイミングとならない場合がある。そこで、このシミュレータＢからの信号通知をシミュレータＡが受け入れるタイミングでシミュレータＡに信号を送出する必要性が生じる。このように、あるシミュレータが、そのシミュレータの独自のタイミングで、他のシミュレータとの間の信号の送受信を行うように制御することを、時間同期を取ると称する。
【０００５】
このような独自の仮想時刻を持つ複数のシミュレータの時間同期を取る方法として、特許文献2に示されるように、各シミュレータとは別に各シミュレータ間の時間同期および制御信号の送受信を管理するシミュレータ管理部を設ける技術が知られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１０７９６２号公報
【特許文献２】特許第３６２１３９２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら特許文献2で示されるように、互いに異なる仮想時刻を持つ複数のシミュレータに対して時間同期を取る場合、それぞれの同期タイミングによっては、互いに通知する制御信号が伝達されない事態が発生する。すなわち、制御信号の取りこぼしが発生する。
【課題を解決するための手段】
【０００８】
本発明に係るシミュレーション装置は、複数のシミュレータを連携するシミュレーション装置であって、前記複数のシミュレータから送信されるメッセージを記録する記録手段と、前記記録手段に記録されたメッセージを連携する他のシミュレータに通知したか否かを示すパラメータに基づいて加工する加工手段と、前記加工されたメッセージを、連携する他のシミュレータに送信する送信手段とを有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、通信のオーバーヘッドを増やすことなく信号の取りこぼしを防止することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】信号が伝達しない例を示すシーケンス図である。
【図２】メカシミュレータおよびメカ部品の例を示す図である。
【図３】実施例１に係るシミュレーション装置の構成の例を示す図である。
【図４】実施例１に係る事前準備の動作フローの一例を示す図である。
【図５】実施例１に係るシミュレーション参加要求メッセージと、記録されるメッセージの例とを示す図である。
【図６】実施例１に係る連結定義を行う画面の例と加工方法を指定する画面の例とを示す図である。
【図７】実施例１に係るシミュレーション実行の動作フローを示す図である。
【図８】実施例１に係るシミュレーション開始要求メッセージと、最初の同期要求メッセージと、最初の同期要求メッセージ受信時におけるメッセージ記録内容との例を示す図である。
【図９】実施例１に係る同期タイミングを示す図である。
【図１０】実施例１に係る同期要求メッセージと記録されるメッセージの例を示す図である。
【図１１】実施例１に係るメカシミュレータ時刻880ms、ソフトウェアシミュレータ時刻900msにおけるメッセージ記録内容の例を示す図である。
【図１２】実施例１に係るメカシミュレータ時刻960ms、ソフトウェアシミュレータ時刻960msにおける同期要求メッセージと、それらのメッセージの記録内容の例を示す図である。
【図１３】実施例１に係るメカシミュレータ時刻960msに通知されるシミュレーション進行メッセージの例と、シミュレータ間で送受信される信号の例を示す図である。
【図１４】取りこぼしがあったことを表示する画面の例と加工内容を表示する画面の例とを示す図である。
【図１５】実施例４に係るシミュレーション装置の構成の例を示す図である。
【図１６】実施例４に係るシミュレーション実行の動作フローを示す図である。
【図１７】実施例４に係るシミュレーション演算の動作フローを示す図である。
【図１８】実施例４に係る同期タイミングおよび内部演算タイミングの例を示す図である。
【図１９】実施例４に係るメカシミュレータの時刻880msにおけるメカシミュレータのメッセージ記録内容の例と、係るシミュレータ間で送受信される信号の例を示す図である。
【図２０】実施例５に係るシミュレータの内部演算動作の例を示す図である。
【図２１】実施例５に係るシミュレーション装置の構成を示す図である。
【図２２】実施例５に係るシミュレーション演算の動作フローを示す図である。
【図２３】実施例５に係るメカシミュレータ時刻940msおよび960msにおけるメッセージ記録内容の例と、シミュレータ間で送受信される信号の例を示す図である。
【図２４】実施例６に係るシミュレーション装置の構成の例を示す図である。
【図２５】実施例６に係るシミュレーション参加要求メッセージの例を示す図である。
【図２６】実施例６に係るシミュレーション実行の動作フローを示す図である。
【図２７】実施例６に係るの同期タイミングを示す図である。
【図２８】実施例６に係るメッセージ記録部に記録されているメッセージの例を示す図である。
【発明を実施するための形態】
【００１１】
＜シミュレータに制御信号が伝達されない例＞
まず、発明を実施するための形態を説明する前に、前述した、同期タイミングによってはシミュレータに制御信号が伝達されない事態についての具体例を説明する。
【００１２】
図１は２つのシミュレータが互いに信号を交換しながら時間同期を取る際の通信シーケンスを示している。シミュレータ管理部は、シミュレータ１とシミュレータ２との間の時間同期および制御信号の送受信を管理する。ここではシミュレータ1は仮想時刻880ms、960msで時間同期を取り、シミュレータ2は仮想時刻840ms、900ms、960msで時間同期を取ると仮定している。すなわち、各シミュレータは上記の仮想時刻でそれぞれ他のシミュレータとの信号のやり取りを行うと仮定している。なお、以下、本明細書では仮想時刻のことを単に時刻と表記する場合がある。
【００１３】
図１においてシミュレータ2の出力信号をシミュレータ1に通知する動作に着目すると、まずシミュレータ2の仮想時刻840msの出力信号がシミュレータ管理部に通知される。この信号はシミュレータ1の仮想時刻880msの同期タイミングでシミュレータ管理部からシミュレータ1に通知される。続いて、シミュレータ2の仮想時刻900msの出力信号がシミュレータ管理部に通知される。しかしながら次にシミュレータ1が同期を取る仮想時刻が960msであり、この仮想時刻はシミュレータ2も同期を取るタイミングである。このことからシミュレータ2が仮想時刻900msでシミュレータ管理部に通知した出力信号は次に960msで通知する出力信号にて上書きされてしまう。すなわち、図１に示される通り、シミュレータ2の仮想時刻900msの出力信号はシミュレータ1に通知されずに消えてしまう。
【００１４】
互いに通知する制御信号が正しく伝達されない場合についての具体例を示すため、ここではシミュレーション対象の製品としてベルトコンベアーを例にとって説明する。図２はこのベルトコンベアーの機構動作を模擬するメカシミュレータであり、図１のシミュレータ1に相当する。また、図１のシミュレータ２として、ベルトコンベアーを制御するプログラムの動作を模擬するソフトウェアシミュレータを想定する。
【００１５】
図２に示すメカシミュレータのベルトコンベアーにはローラー1にモーターが備え付けられている。このモーターはソフトウェアシミュレータから通知されるモーター駆動開始割り込み信号がLowからHighに変化（立ち上がりエッジと呼ばれる）すると回転を始める。このモーターの回転に伴い、ローラー1が回転し、さらにベルトおよびローラー2が連動して動作する。そしてベルトの動きに合わせてベルト上の荷物が運ばれる。
【００１６】
さらに、荷物が指定位置に到達したことを通知するために位置センサーを設け、メカシミュレータは、このセンサー信号をソフトウェアシミュレータに通知する。
【００１７】
このような構成において、仮に図１のシミュレータ2に相当するソフトウェアシミュレータが仮想時刻840msまではモーター駆動開始割り込み信号の値をLowとして出力する。そして、仮想時刻900msでHigh、仮想時刻960ms以降は再びLowを出力すると仮定する。この仮定においてソフトウェアシミュレータの仮想時刻900msの出力信号は図１で説明したように、仮想時刻960msの信号で上書きされてしまう。すなわち仮想時刻900msで出力されるHighの信号がLowで上書きされてしまう。結果、メカシミュレータはモーター駆動開始割り込み信号の値がLowである信号をシミュレータ管理部から受信し続けることになり、所望の信号レベルを得ることができない。これはメカシミュレータがソフトウェアシミュレータからのモーター駆動開始のための割り込み信号を受け付けることが出来ていないことを意味しており、ベルトコンベアーは動作しない。このように信号によっては1回の取りこぼしによって製品の動作を再現できなくなる問題が生ずる。製品の動作として成立させるためには、正確な時間ではなくても製品規格通りに順序を守って確実に信号を伝えることが重要になる。
【００１８】
このような問題に対する一般的な解決手法として、同期間隔を十分に細かくすることが考えられるがその場合は細かくした分だけ通信回数が増えるため全体としての処理のオーバーヘッドが増加するという別の問題が生まれる。同期間隔を半分にすれば通信回数は2倍である。
【００１９】
後述する実施例では複数のシミュレータを連携する際に発生する前述した問題を鑑み、通信のオーバーヘッドを増やすことなく信号の取りこぼしを防止するシミュレーション装置を提供する。
【００２０】
以下、本発明にかかる実施例を詳細に説明する。
【実施例１】
【００２１】
実施例１について、先に構成について説明し、続いて手順について説明する。
＜構成の説明＞
図３は実施例１に係るシミュレーション装置３００の構成の一例を示す図である。図３に示されるようにシミュレーション装置３００は、コンピュータによって実現され得る。シミュレーション装置３００は、シミュレータ管理部３１０と、メカ部品３２０と、メカシミュレータ３３０と、ソフトウェア部品３４０と、ソフトウェアシミュレータ３５０と、バス３６０とを有する。
【００２２】
メカ部品３２０やソフトウェア部品３４０は、シミュレーション対象の製品挙動を模擬するためのシミュレーション部品の一例である。シミュレーション部品とは例えば機構シミュレータであれば3D-CAD（Computer Aided Design）で作成された3D形状データや重力や摩擦など3D形状データに付加される物理現象データから構成される。ソフトウェアシミュレータであれば、コンピュータプログラムなどから構成される。
【００２３】
シミュレータ管理部３１０は、通信部３１１、メッセージ記録部３１２、同期管理部３１３、連結関係管理部３１４、加工部３１５、および加工方法指定部３１６を有する。
【００２４】
メカシミュレータ３３０は、部品読み込み部３３１、シミュレーション実行部３３２、仮想時刻管理部３３３、メッセージ記録部３３４、および通信部３３５を有する。
【００２５】
ソフトウェアシミュレータ３５０は、部品読み込み部３５１、シミュレーション実行部３５２、仮想時刻管理部３５３、メッセージ記録部３５４、および通信部３５５を有する。
【００２６】
メカシミュレータ３３０とソフトウェアシミュレータ３５０とは、扱うシミュレータ部品が異なる点を除けば構成としては共通のものとして説明することが可能であるので、以下ではメカシミュレータ３３０の構成について説明する。
【００２７】
部品読み込み部３３１は、シミュレーション対象の製品挙動を模擬するシミュレーション部品であるメカ部品３２０を読み込む。
【００２８】
シミュレーション実行部３３２は、部品読み込み部３３１によって読み込まれたシミュレーション部品であるメカ部品３２０に応じて製品挙動を模擬するためのシミュレーション演算を行う。またシミュレーション実行部３３２は、他のシミュレータから通知される制御信号を受け付け、シミュレーション演算を行い、演算によって他のシミュレータへの制御信号を生成する。これらの制御信号はメッセージに格納され、メッセージ記録部３３４にて管理される。メッセージの具体例は後述する動作の説明にて示す。
【００２９】
仮想時刻管理部３３３は、シミュレーション実行部３３２のシミュレーション演算によって進む仮想時刻を管理する。また仮想時刻管理部３３３は他のシミュレータと時間同期をとる仮想時刻の決定も行う。この決定はシミュレータによって異なる。例えば予め指定された時刻ごとであったり、シミュレーション実行部３３２が生成する他のシミュレータへの制御信号に変化があった場合などである。
【００３０】
メッセージ記録部３３４は通信部３３５を介して送受信されるメッセージを管理する。メッセージには各シミュレータが持つ仮想時刻や複数のシミュレータ間で送受信される制御信号などが含まれる。
【００３１】
通信部３３５はシミュレータ管理部３１０とバス３６０を介してメッセージを送受信するための通信を行う。
【００３２】
次に、シミュレータ管理部３１０の構成について説明する。
【００３３】
通信部３１１は、複数のシミュレータ（メカシミュレータ３３０、ソフトウェアシミュレータ３５０）とバス３６０を介してメッセージを送受信するための通信を行う。
【００３４】
メッセージ記録部３１２は、複数のシミュレータと送受信を行うメッセージを管理する。メッセージには複数のシミュレータから通知された仮想時刻や各シミュレータ間で互いに通知する制御信号を含む。またそのメッセージが、連結する他のシミュレータに通知されたか否かを示すパラメータも含む。具体例は後述する。
【００３５】
同期管理部３１３は、複数のシミュレータが保持する仮想時刻を比較することで時刻の同期をとる。具体的にはメッセージ記録部３１２を参照し、各シミュレータが持つ仮想時刻を比較することで最も遅い時刻を持つシミュレータを特定し、そのシミュレータに対してのみ進行を指示する。具体的な動作は後述する。
【００３６】
連結関係管理部３１４は、複数のシミュレータの連結関係を定義する。この定義によってどのシミュレータの制御信号をどのシミュレータに通知すべきかが判断できる。
【００３７】
加工部３１５は、制御信号の取りこぼしを防ぐために複数のシミュレータ間で送受信される制御信号を、加工方法指定部３１６によって指定される加工方法に基づいて加工する。
【００３８】
加工方法指定部３１６は、制御信号の取りこぼしを防ぐために複数のシミュレータ間で送受信される制御信号をどのように加工するかを指定する。
【００３９】
バス３６０は、各シミュレータおよびシミュレータ管理部３１０間での情報をやり取りする。
【００４０】
シミュレーション装置３００は、シミュレータ管理部３１０、メカシミュレータ３３０、およびソフトウェアシミュレータ３５０の各構成を、ＲＡＭに格納されたコンピュータプログラムをＣＰＵが読み込んで実行することによって実現する。
【００４１】
なお、図３の例においては、シミュレーション装置３００を１台のコンピュータ上で構成する例を用いて説明したが、複数のコンピュータを介してシミュレーション装置を構成してもよい。すなわち、図３のバス３６０の代わりにLANに代表されるネットワーク回線を用いて各シミュレータを構成する各コンピュータと、シミュレータ管理部を構成するコンピュータとを接続してもよい。このように、複数の分散されたコンピュータによってシミュレーション装置が実現されてもよい。
【００４２】
また各シミュレータは必ずしもコンピュータ上で模擬するシミュレータである必要はない。シミュレータの一部あるいは全部を実製品やFPGA (Field Programmable Gate Array)などの検証用モジュールに置き換えて構成しても良い。
【００４３】
このような構成において具体的にどのようにシミュレーションが実施されるかの一例を説明する。
【００４４】
＜動作の説明＞
本実施例では、まず事前準備ステップを行い、その後、シミュレーション実行ステップを行う。
【００４５】
事前準備ステップの詳細について図４のフローを用いて説明する。図４のフローは、ＲＡＭなどに格納されたプログラムをＣＰＵが実行することによって実現される。なおより詳細には、ステップＳ４０１〜Ｓ４０３はメカシミュレータ３３０およびソフトウェアシミュレータ３５０に関する処理であり、ステップＳ４０４〜Ｓ４０６はシミュレータ管理部３１０に関する処理である。
【００４６】
ステップＳ４０１では、シミュレーション装置３００は、連携するシミュレータを起動する。すなわちシミュレーション装置３００は、メカシミュレータ３３０およびソフトウェアシミュレータ３５０を起動する。
【００４７】
ステップＳ４０２では、ステップＳ４０１で起動した各シミュレータがシミュレーション部品を読み込む。メカシミュレータ３３０は、図２に示されるようにベルトコンベアーの形状などの機構情報からなるメカ部品３２０を読み込む。ソフトウェアシミュレータ３５０はベルトコンベアーを制御するためのソフトウェア部品３４０を読み込む。
【００４８】
ステップＳ４０３では、各シミュレータがシミュレータ管理部３１０にシミュレーション参加要求メッセージを通知する。図５は、各シミュレータからシミュレータ管理部３１０に対して通知されるシミュレーション参加要求メッセージと、シミュレータ管理部３１０において記録されるメッセージの例とを示す図である。シミュレーション参加要求メッセージの内容は、図５（ａ）および（ｂ）に示すように、参加を意味するメッセージ種別（Connect）５０１、仮想時刻５０２、外部に出力したい信号とその初期値５０３および入力を受け付けたい信号の一覧５０４を含む。図５(a)はメカシミュレータ３３０が通知するシミュレーション参加要求メッセージである。出力する信号である位置センサー信号の初期値としてLowが設定されており、入力を受け付けたい信号としてモーター駆動割り込み信号を指定している。図５(b)はソフトウェアシミュレータ３５０が通知するシミュレーション参加要求メッセージである。出力する信号であるモーター駆動開始割り込み信号の初期値としてLowが設定されており、入力を受け付けたい信号として位置センサー信号を指定している。また、図５（ａ）および図５（ｂ）に示すシミュレーション参加要求メッセージには、通知元５０５と通知先５０６とを示す値がそれぞれ指定されている。たとえば図５（ａ）に示すメカシミュレータから通知されるメッセージの例では、通知元５０５としてメカシミュレータが指定され、通知先５０６としてシミュレータ管理部が指定されている。なお、図５に示すメッセージは、これらの情報が互いに識別可能であればいずれの形式であってもよい。たとえば、通知元５０５にはシミュレータ識別子のみ指定されていてもよく、入力を受け付けたい信号５０４には単に信号種別を特定するための値が指定されているような形式であってもよい。以下、本明細書で説明する各種のメッセージについても同様である。
【００４９】
図４のフローチャートに戻り、処理の説明を続ける。ステップＳ４０４では、シミュレータ管理部３１０は、ステップＳ４０３で各シミュレータから通知される参加要求メッセージを受信し、そのメッセージをメッセージ記録部３１２に記録する。記録されるメッセージは図５（ｃ）および（ｄ）に示すように、受信したメッセージに含まれる仮想時刻５５１およびシミュレータからの出力信号の一覧５５３である。また制御信号の取りこぼしを防ぐため、その仮想時刻５５１におけるメッセージをまだ連結先のシミュレータに通知していないことを示すパラメータ（Send”送信先シミュレータ名”＝FALSE）５５２も記録する。この「送信先シミュレータ名」には、後述するステップＳ４０５で説明する連結定義が行われたシミュレータ名が指定されることになる。連結とは、あるシミュレータと別のシミュレータとを結びつけることであり、具体的には、あるシミュレータから通知されるメッセージを、どのシミュレータに対して送信するかを、シミュレータ管理部３１０において定義付けするものである。詳細については後述する。図５（ｃ）はメカシミュレータ３３０から通知された参加要求メッセージをシミュレータ管理部３１０がメッセージ記録部３１２に記録する内容である。図５（ｄ）は同様にソフトウェアシミュレータ３５０から通知された参加要求メッセージをシミュレータ管理部３１０がメッセージ記録部３１２に記録する内容である。以下、連結先のシミュレータに通知されていないメッセージのことを未通知のメッセージと呼び、通知されたメッセージを通知済みのメッセージと呼ぶ。メッセージ記録部３１２においては、図５（ｃ）および（ｄ）に示すように、各シミュレータごとに、各シミュレータから通知されるメッセージを、仮想時刻および通知の有無を示すパラメータと関連付けて記録する。
【００５０】
図４のフローチャートに戻り、処理の説明を続ける。ステップＳ４０５ではシミュレータ管理部３１０の連結関係管理部３１４が連結定義を行う。連結定義はメッセージ記録部３１２に記録されたメッセージから、参加要求を出したシミュレータとその入出力信号の一覧を元に連結関係を定義する。すなわち制御信号の通知元と通知先を定義する。例えば連結関係管理部３１４は、図６（ａ）に示すような画面を用いてシミュレータの出力信号（通知元）と入力信号（通知先）とを関連付ける。設定1ではモーター駆動割り込み信号をソフトウェアシミュレータ３５０からメカシミュレータ３３０に通知する連結定義を行っている。設定2では位置センサー信号をメカシミュレータ３３０からソフトウェアシミュレータ３５０に通知する連結定義を行っている。なお、図６（ａ）に示すように、連結関係管理部３１４は、連結定義をユーザからの指定によって設定してもよい。あるいは、各シミュレータから通知される参加要求メッセージに含まれる情報に基づいて自動的に設定してもよい。
【００５１】
図４のフローチャートに戻り、処理の説明を続ける。ステップＳ４０６ではシミュレータ管理部３１０の加工方法指定部３１６が、メッセージの加工方法を指定する。メッセージの加工方法の指定はメッセージ記録部３１２に記録された各シミュレータが出力する信号をどのように加工するかを選択する。例えば図６（ｂ）に示すような画面を用いてユーザからの指定を受け付ける。加工方法には、最大値、最小値、平均値、積分などの選択肢があり、信号の性質に合わせて加工方法を選択できる。図６（ｂ）の設定1ではソフトウェアシミュレータ３５０が出力するモーター駆動割り込み信号に対して最大値を取得する加工方法を指定している。これは、たとえばソフトウェアシミュレータ３５０からシミュレータ管理部３１０に通知されたモーター駆動割り込み信号を、シミュレータ管理部３１０からメカシミュレータに送信する際に、その信号値を変更（すなわち加工）する方法を指定する。また設定2ではメカシミュレータ３３０が出力する位置センサー信号に対して最大値を取得する加工方法を指定している。なお、加工方法はシミュレーション途中で変更しても良い。
【００５２】
以上で事前準備は完了である。続いてシミュレーション実行手順の詳細について図７のフローを用いて説明する。
【００５３】
ステップＳ７０１では、シミュレータ管理部３１０はシミュレーション開始要求メッセージを各シミュレータに通知する。シミュレーション開始要求メッセージの内容を図８（ａ）および（ｂ）に示す。図８(a)はシミュレータ管理部３１０からメカシミュレータ３３０に対して通知するメッセージである。メッセージには開始を意味するメッセージ種別（Start）９０１、仮想時刻９０２、参加要求メッセージで指定した、メカシミュレータ３３０が入力を受け付けたい信号の一覧９０３が含まれる。この信号一覧に含まれる値に関してはステップＳ４０５で定義された連結定義を元に決定している。図８(b)は同様にシミュレータ管理部３１０からソフトウェアシミュレータ３５０に対して通知するメッセージである。なお、シミュレーション開始要求メッセージを送信したシミュレータ管理部３１０は、後述するステップＳ７０４で同期要求メッセージが通知されるまで待機する。またステップＳ４０４で未通知として記録したメッセージ（すなわち、図５（ｃ）および（ｄ）のメッセージ）を通知済み（Send”送信先シミュレータ名”＝TRUE）に更新する。
【００５４】
ステップＳ７０２では、各シミュレータはステップＳ７０１でシミュレータ管理部３１０から通知されたシミュレーション開始要求メッセージを各メッセージ記録部３３４、３５４）に記録する。
【００５５】
ステップＳ７０３では、各シミュレータのシミュレーション実行部３３２、３５２は、ステップＳ７０２で記録されたメッセージを元にシミュレーション演算を開始する。このシミュレーション演算は各シミュレータの仮想時刻管理部３３３および３５３が決定した、同期をとる時刻まで進行する。
【００５６】
ステップＳ７０４では各シミュレータが、同期をとる時刻までシミュレーションの実行を進行すると同期要求メッセージをシミュレータ管理部３１０に通知する。同期要求メッセージの内容の例を図８（ｃ）および（ｄ）に示す。同期要求メッセージには同期要求を意味するメッセージ種別（Sync）９１１、進行した仮想時刻９１２、シミュレーション演算によって生成された出力信号９１３、および入力を受け付けたい信号の一覧９１４を含む。図８（ｃ）はメカシミュレータ３３０からシミュレータ管理部３１０に通知される同期要求メッセージであり、仮想時刻80msにおける位置センサー信号の値がLowであることを示している。また図８（ｄ）は同様にソフトウェアシミュレータ３５０からシミュレータ管理部３１０に通知されるメッセージであり、時刻60msにおけるモーター駆動割り込み信号の値がLowであることを示している。
【００５７】
なお、シミュレータ管理部３１０に同期要求メッセージを通知した各シミュレータは、後述するステップＳ７１０のシミュレーション進行メッセージあるいはステップＳ７１１のシミュレーション終了メッセージが通知されるまで待機する。後述するように、同期要求メッセージに含めた、入力を受け付けたい信号の入力がシミュレータ管理部３１０からのシミュレーション進行メッセージに含まれて通知される。よって、各シミュレータは、シミュレーション進行メッセージが通知されるまでは、シミュレーションを進行せずに待機する。なお、シミュレーション終了メッセージが通知された場合には、そのままシミュレーションを終了することになる。
【００５８】
ステップＳ７０５ではシミュレータ管理部３１０はステップＳ７０４で通知された同期要求メッセージをメッセージ記録部３１２に記録する。メッセージ記録部３１２で記録されるメッセージは図５（ｃ）および（ｄ）に示す参加要求メッセージの記録時から図８（ｅ）および（ｆ）に示されるメッセージに更新される。更新される内容はステップＳ７０４で通知された同期要求メッセージに基づいた仮想時刻８２１および出力信号の一覧８２３である。また制御信号の取りこぼしを防ぐため、その仮想時刻におけるメッセージが未通知であることを示すパラメータ８２２も記録する。なお、先に説明したように、シミュレーション参加要求時に記録した仮想時刻０の通知の有無を示すパラメータ８２５が通知済み（ＴＲＵＥ）に更新されている。このように、未通知であることを示すパラメータは、後述するようにシミュレーション進行メッセージにおいてその仮想時刻におけるメッセージが通知される場合には、メッセージが通知済みであること示すパラメータに変更される。
【００５９】
ステップＳ７０６では、シミュレータ管理部３１０はステップＳ４０４で記録された参加要求メッセージを通知した全てのシミュレータから同期要求メッセージを受信していなければ、次の同期要求メッセージを受信するまで待機する。たとえば、図８の例では、シミュレータ管理部３１０は、図８（ｄ）に示す同期要求メッセージを仮想時刻60msで受信した時点では、メカシミュレータ３３０から同期要求メッセージを受信していないので、待機をしていることになる。なお、同期要求メッセージに応答して後述するシミュレーション進行メッセージをシミュレータ管理部３１０が通知した場合には、その通知先のシミュレータからの同期要求メッセージについては受信していないとの状態に変更となる。すなわち、ステップＳ７０６は、シミュレータ管理部３１０が未対応の同期要求メッセージを全てのシミュレータから受信した状態であるかを判定する処理であるともいえる。
【００６０】
全てのシミュレータから同期要求メッセージを受信した場合、ステップＳ７０７では同期管理部３１３は、ステップＳ７０５で記録された図８（ｅ）および（ｆ）に示す同期要求メッセージを参照し、各シミュレータの仮想時刻を比較する。比較する仮想時刻は図８（ｅ）および（ｆ）の仮想時刻８２１と８２４のように、各シミュレータが通知した最新の同期要求メッセージに基づいて記録されたメッセージである。比較によって最も進行が遅れているシミュレータ、すなわち最も小さい仮想時刻を持つシミュレータを特定する。仮に図８（ｅ）および（ｆ）に示すメッセージであれば、メカシミュレータ３３０は80ms、ソフトウェアシミュレータ３５０は60msであることからソフトウェアシミュレータ３５０の進行が最も遅れていると特定できる。なお、最も小さい仮想時刻を持つシミュレータは1つとは限らない。比較した時刻が同時刻である場合は両方のシミュレータを最も進行が遅れているシミュレータとして特定する。またシミュレータが3つ以上ある場合も同様に、1つ以上の最も遅れている仮想時刻を持つシミュレータが特定される。
【００６１】
ステップＳ７０８ではシミュレータ管理部３１０は、必要に応じてステップＳ４０６で指定した加工方法に基づき同期要求メッセージの加工を行い、最も進行が遅れているシミュレータに通知するメッセージを決定する。なお、ステップＳ７０８のメッセージの加工処理には、加工対象となるメッセージの抽出処理と、抽出したメッセージを加工する処理とが含まれる。ステップＳ７０８では、加工対象となるメッセージを抽出するものの、実際に加工しない場合も含まれる。ステップＳ７０８で実際にメッセージを加工する場合とは、後述するように所定の条件に合致した場合である。換言すれば、所定の条件に合致しない場合には、ステップＳ７０８においては実際の加工処理を実行しない。
【００６２】
メッセージの加工はまず加工対象の抽出を次に示す2つの条件に基づき行う。第一の条件は、シミュレータ管理部３１０からメッセージを受信する側のシミュレータの仮想時刻以前の仮想時刻を持つ、シミュレータ管理部３１０に通知されたメッセージである。ここで、メッセージを受信する側のシミュレータとは、上述したステップＳ７０８で特定された最も進行の後れているシミュレータである。つまり、ステップＳ７０８では、最も進行の遅れているシミュレータからの同期要求メッセージに応答した同期進行メッセージ（後述）に含める信号を加工する処理となる。そして、その同期進行メッセージで入力を受け付けたいメッセージのうち、メッセージを受信する側のシミュレータの仮想時刻よりも以前の仮想時刻を持つメッセージが加工対象となる。第二の条件はメッセージ記録部３１２に記録されているメッセージの中の通知が行われたか否かを表すパラメータを参照し、未通知であるメッセージ（Send”送信先シミュレータ名”＝FALSE）のみである。そして、この2つを満たすメッセージが2つ以上ある場合は、その2つ以上のメッセージを対象に加工し、通知するメッセージを生成する。1つの場合は取りこぼしにならないことを意味し、加工を行わず、そのメッセージを通知する。1つもない場合は、通知が行われたか否かを示すパラメータを参照し、通知が行われたメッセージの中で最新の仮想時刻を持つメッセージを通知する。この場合も取りこぼしにはならない。
【００６３】
図８（ｅ）および（ｆ）を例にとって説明する。最も進行の遅れているシミュレータ、すなわち同期進行メッセージを受信する側のシミュレータはソフトウェアシミュレータ３５０である。そして、図８（ｆ）を参照すると受信側のソフトウェアシミュレータの仮想時刻は60msである。この時刻よりも前の仮想時刻を持つ第一の条件を満たすメッセージは、図８（ｅ）を参照すると、メカシミュレータが参加要求時に通知したメッセージ９２５のみである。この時刻のメッセージはステップＳ７０１で通知済みに設定されているため、第二の条件を満たさない。つまり、２つの条件を満たすメッセージが１つもない場合に相当する。したがって、通知が行われたメッセージの中で最新の仮想時刻を持つメッセージを通知することになる。したがって、ソフトウェアシミュレータに仮想時刻60msにおいて通知される同期進行メッセージは、メカシミュレータの通知済みの最新の仮想時刻0msを持つメッセージが選択される。すなわちメカシミュレータ３３０の仮想時刻0msにおける位置センサー信号Lowがソフトウェアシミュレータ３５０に通知される。
【００６４】
ステップＳ７０９ではシミュレーションの終了時刻に到達したかの判定を行う。終了時刻に到達したかの判定は利用者が終了指示を出したか否かで判定しても良いし、予め終了時刻を決めておいても良い。
【００６５】
シミュレーションの終了時刻に到達していない場合、シミュレータ管理部３１０はステップＳ７１０において、ステップＳ７０７で特定した進行の遅いシミュレータに対してシミュレーション進行メッセージを通知する。シミュレーション進行メッセージにはシミュレーション進行を意味するメッセージ種別（Sync-Ack）、および同期要求メッセージで指定した入力を受け付けたい信号の一覧が含まれる。ここで、シミュレータ管理部３１０から通知されるシミュレーション進行メッセージには、ステップＳ７０４で指定した入力を受け付けたい位置センサー信号に対して、ステップＳ７０８で決定した値（図８（ｅ）の場合にはLow）が設定される。すなわち、ステップＳ７０８の加工処理を経て得られた値が、入力を受け付けたい信号の値として設定され、シミュレータ管理部３１０から各シミュレータに通知される。なお、シミュレータ管理部３１０のメッセージ記録部３１２は、通知したメッセージを通知済み（Send”送信先シミュレータ名”＝TRUE）に更新する。
【００６６】
シミュレーションの終了時刻に到達している場合、ステップＳ７１１においてシミュレータ管理部３１０は、各シミュレータに対してシミュレーション終了メッセージを通知し、シミュレーション実行を終了する。シミュレーション終了メッセージにはシミュレーション終了を意味するメッセージ種別（Exit）、進行した仮想時刻、および同期要求メッセージで指定した入力を受け付けたい信号の一覧が含まれる。なお、メッセージ記録部３１２は、上記のステップＳ７１０と同様に、通知されたメッセージおよびステップＳ７０８で加工対象になったメッセージを通知済みを意味するパラメータ（Send”送信先シミュレータ名”＝TRUE）に更新する。
【００６７】
ステップＳ７１０にてシミュレータ管理部３１０から通知されたシミュレーション進行メッセージを受信したシミュレータは、ステップＳ７０３にて、通知されたメッセージを入力としてシミュレーションを継続する。そしてシミュレーションが次の同期タイミングまで進行すると、各シミュレータは同期要求メッセージをシミュレータ管理部３１０に通知する（ステップＳ７０４）。
【００６８】
＜具体的な動作説明＞
メッセージの加工によって得られる本実施例の効果を図９を用いて具体的に示す。図９はシミュレータ管理部３１０と2つのシミュレータ（メカシミュレータ３３０およびソフトウェアシミュレータ３５０）とが通信を行うタイミングを示している。図９は、図７のステップＳ７０３〜ステップＳ７１０を継続して繰り返し、メカシミュレータ３３０は時刻880msまで、またソフトウェアシミュレータ３５０は時刻900msまでシミュレーションが進んでいる状況を仮定する。なお、直前の時刻840msにおいてソフトウェアシミュレータ３５０からシミュレータ管理部３１０に対して通知される同期要求メッセージを図１０(a)に示す。またシミュレータ管理部３１０が、通知された図１０（ａ）で示す同期要求メッセージを記録した内容を図１０(b)に示す。
【００６９】
この時、ステップＳ７０４にて図９の時刻880ms（９１０）でメカシミュレータ３３０がシミュレータ管理部３１０に通知する同期要求メッセージを図１０（ｃ）に示す。また同じく図９の時刻900ms（９４０）でソフトウェアシミュレータ３５０がシミュレータ管理部３１０に通知する同期要求メッセージを図１０（ｄ）に示す。図１０(b)および（ｄ）に示されるように、ソフトウェアシミュレータ３５０は時刻840msまで出力するモーター駆動開始割り込み信号がLowであり、時刻900msで初めてHighになる動作を想定している。
【００７０】
次に、メカシミュレータ３３０は時刻880msまで、またソフトウェアシミュレータ３５０は時刻900msまでシミュレーションが進んでいる状況での説明を続ける。なお、ステップＳ７０５では各シミュレータから同期要求メッセージの通知を受けたシミュレータ管理部３１０は通知されたメッセージをメッセージ記録部３１２に記録している。このときの、各シミュレータ毎にシミュレータ管理部３１０のメッセージ記録部３１２に記録されているメッセージを図１１に示す。図１１（ａ）は、メカシミュレータ３３０からの時刻880msのメッセージを記録したものでり、図１１（ｂ）はソフトウェアシミュレータ３５０からの時刻900msのメッセージを記録したものである。
【００７１】
ステップＳ７０７ではメカシミュレータ３３０の最新の仮想時刻880ms（１１０１）およびソフトウェアシミュレータ３５０の最新の仮想時刻900ms（１１１３）を比較し、進行が遅れているシミュレータとしてメカシミュレータ３３０を特定する。
【００７２】
続いてステップＳ７０８では、シミュレータ管理部３１０は、進行が遅れているメカシミュレータ３３０を、メッセージが受信される側のシミュレータであると特定し、メカシミュレータに対して通知されるメッセージを加工する。すなわち、ソフトウェアシミュレータ３５０からの同期要求メッセージを記録した、図１１(b)に示されるメッセージを加工して行われる。加工対象となるメッセージは第一の条件を満たす仮想時刻880ms以下のメッセージ、かつ第二の条件を満たす未通知のメッセージである。ここでは、ソフトウェアシミュレータ３５０の出力信号において加工対象となるメッセージが時刻840ms（１１１２）のみである。したがって、同期タイミング９１０の応答として時刻840msのメッセージに含まれる信号値がそのままシミュレーション進行メッセージに含まれてメカシミュレータに通知される（ステップＳ７１０）。またこの時、メッセージ記録部３１２はソフトウェアシミュレータの時刻840msのメッセージ（図１１（ｂ）の１１１２）を通知済み（TRUE）に更新する。
【００７３】
続いて進行メッセージを受信したメカシミュレータ３３０は次の同期タイミングである960ms（９２０）までシミュレーションを進め（ステップＳ７０３）、シミュレータ管理部３１０に対して同期要求メッセージを通知する（ステップＳ７０４）。メカシミュレータから時刻960msで通知されるメッセージを図１２(a)に示す。
【００７４】
図１２（ａ）に示す同期要求メッセージの通知を受けたシミュレータ管理部３１０は、通知されたメッセージをメッセージ記録部３１２に記録する（ステップＳ７０５）。記録されたメッセージを図１２（ｃ）の１２０２に示す。この時のシミュレータ管理部３１０は、メカシミュレータ３３０の時刻960ms（１２０２）およびソフトウェアシミュレータ３５０の時刻900ms（図１１（ｂ）の１１１３）を比較する。そして、遅れているシミュレータとしてソフトウェアシミュレータ３５０を特定する（ステップＳ７０７）。
【００７５】
続いて図１１（ａ）に示されるメッセージを加工する（ステップＳ７０８）。加工対象となるメッセージは第一の条件を満たす仮想時刻900ms以下のメッセージ、かつ第二の条件を満たす未通知のメッセージである。すなわち、仮想時刻880ms（図１１(a)の１１０１）のみであることから、このメッセージがそのまま通知される。またこの時、メッセージ記録部３１２は時刻880msのメッセージ（図１１(a)の１１０１）を通知済みに更新する。したがって、図１２（ｃ）の１２０１の時刻880msのメッセージが通知済みとなっている。
【００７６】
同様に進行メッセージを受信したソフトウェアシミュレータ３５０は次の同期タイミングである960msまでシミュレーションを進め（ステップＳ７０３）、シミュレータ管理部３１０に対して同期要求メッセージを通知する（ステップＳ７０４）。通知されるメッセージを図１２(b)に示す。図１２(b)に示されるように、ソフトウェアシミュレータ３５０は仮想時刻960msで出力するモーター駆動開始割り込み信号をLowに戻す動作を想定している。
【００７７】
通知を受けたシミュレータ管理部３１０は通知されたメッセージをメッセージ記録部３１２に記録する（ステップＳ７０５）。記録されたメッセージを図１２（ｄ）の１２１３に示す。
【００７８】
続いてステップＳ７０７では、メカシミュレータ３３０の仮想時刻とソフトウェアシミュレータ３５０の仮想時刻とを比較する。図１２（ｃ）および（ｄ）からメカシミュレータ３３０の仮想時刻960ms(１２０２)およびソフトウェアシミュレータ３５０の仮想時刻960ms(１２１３)は、どちらも960msまで進んでおり同じ仮想時刻であること。したがって、両シミュレータに対してシミュレーション進行メッセージを通知する処理を行うことになる。
【００７９】
ステップＳ７０８ではソフトウェアシミュレータ３５０に対して通知するメッセージの加工を行う。加工対象となるメッセージは第一の条件から仮想時刻960ms以下、かつ第二の条件から未通知を満たすメッセージである。この条件を満たすメッセージは仮想時刻960ms（１２０２）のみであることから、メカシミュレータからの時刻960msのメッセージがそのまま通知される。同様に、メカシミュレータ３３０に対して通知するソフトウェアシミュレータ３５０の出力信号についても確認する。加工対象となるメッセージは第一の条件から960ms以下、かつ第二の条件から未通知を満たすメッセージである。この条件を満たすメッセージは、仮想時刻900ms（１２１２）と仮想時刻960ms（１２１３）の2つが存在する。このことから、この2つの仮想時刻における信号に対してステップＳ４０６で定義された方法である最大値を取得する加工を行い、加工したメッセージをメカシミュレータに通知する（ステップＳ７１０）。通知されるメッセージを図１３（ａ）に示す。図１３（ａ）に示される通り、メカシミュレータ３３０にモーター駆動開始割り込み信号としてHigh(１２１２)とLow(１２１３)のうちの最大値であるHighが通知される（１３０１）。なおメッセージ記録部３１２はステップＳ７１０では加工対象となったメッセージを含め、通知されたメッセージ（すなわち、１２０２、１２１２、１２１３）を通知済みに更新する。
【００８０】
以上の動作のようにソフトウェアシミュレータ３５０がモーターの駆動を開始するための割り込み信号を出力すると仮定すれば、その波形は図１３（ｂ−１）に示さる。この結果、メカシミュレータ３３０は図１３（ｂ−２）)に示すように所望の信号レベルを得ることができる。これによってモーターの駆動が開始され、連動して荷物が運ばれる。
【００８１】
このように、これまで通知されなかった信号を記録しておき、予め指定した加工方法によって加工することで、信号の取りこぼしを防ぐことができるようになる。
【００８２】
加工方法は本実施例のように信号レベルであれば最大値や最小値などがあり、信号パルス数であれば積分などもある。加工方法は加工対象となる信号に合わせて任意に選択できる。
【実施例２】
【００８３】
実施例1で述べたように割り込み信号のような1回の取りこぼしが製品の動作として大きく影響する場合は取りこぼしが許されない。一方、信号によっては必ずしも加工する必要が無い場合もある。例えば連続性を持つ信号や1回の同期での変化量が小さい信号であれば取りこぼしがあっても動作として大きな影響が無い。一般的にはこういった信号が混在する。このような場合において、加工が必要か否かを見極めるためにはどのような取りこぼしがあるかを可視化する必要がある。
【００８４】
実施例２では、シミュレータ管理部は伝達されない信号がある場合に、その伝達されない信号を利用者に提示するシミュレーション装置を提供する。提示方法としては、ディスプレイに表示したり、音声で通知したりするなど、各種の方法がある。
【００８５】
提示は、シミュレーション参加要求メッセージや同期要求メッセージがシミュレータから通知された場合に記録されるメッセージ記録部３１２を参照することで実現できる。実施例1で示したようにメッセージ記録部３１２にはメッセージが通知済みか未通知かを示すパラメータを保持しているため、メッセージの加工ステップＳ７０８で確認できる。具体的にはステップＳ７０８で述べた加工対象となるメッセージが2つ以上あるかどうかを判別する。ある場合は取りこぼしが発生することを示す。図１２（ｄ）の場合を例にとると、時刻900ms（１２１２）と時刻960ms（１２１３）の2つのメッセージが加工対象である。従来であれば最新の時刻960ms（１２１３）のメッセージのみが通知され、時刻900ms（１２１２）のメッセージが取りこぼし対象となる。すなわち加工対象となるメッセージがあった場合に、そのメッセージから最新の仮想時刻を持つメッセージを取り除いたメッセージが取りこぼされることを意味する。
【００８６】
取りこぼされるメッセージは図１４（ａ）に示すように記録内容をリアルタイムで表示装置に表示しても良いし、記録装置に保存し、後から確認できるようにしても良い。図１４（ａ）では取りこぼしがあるメッセージをリアルタイムで表示装置の画面に表示している例を示している。
【００８７】
本実施例によれば、利用者は記録内容を確認することで、どのタイミングでどんな取りこぼしがあったかを確認できる。一度目のシミュレーションでは加工を行わず、取りこぼしがあったかどうか、またどんな信号の取りこぼしがあったかの確認を行い、二度目以降のシミュレーションでは必要に応じて信号の加工を実施することもできる。
【実施例３】
【００８８】
実施例1では割り込み信号の取りこぼしを防ぐために時系列に1つ以上の信号に対して最大値を取る加工の例を示した。加工方法は最大値だけではなく、合計や平均値など様々な加工が考えられる。様々な加工方法が考えられる一方で、加工方法の指定を誤ると適切な信号が通知されないという状況が発生する。
【００８９】
実施例３では、どのような信号がどのように加工されたかを利用者に提示するシミュレーション装置を提供する。
【００９０】
加工ステップＳ７０８でメッセージを加工する際に加工内容を記録することで実現できる。図１２（ｄ）を例にとると時刻900ms（１２１２）と時刻960ms（１２１３）の2つのメッセージが加工対象であり、それぞれのモーター駆動開始割り込み信号がHighおよびLowであることからHighに加工される。
【００９１】
加工されるメッセージは記録した内容は図１４（ｂ）に示すようにリアルタイムで表示装置に表示しても良いし、記録装置に保存し、後から確認できるようにしても良い。
【実施例４】
【００９２】
実施例1で説明したシミュレーションではタイミングのずれは生じるものの、割り込み信号のような重要な信号を取りこぼすことなく通知することが出来た。しかしながら、より精度を高めるために通知タイミングのずれを小さくすることが望ましい。
【００９３】
同期間隔を小さくすることでタイミングのずれも小さくすることができるが、同期間隔を小さくした分だけ通信の回数が増えることになる。すなわち、シミュレーションの実行に必要な処理時間が増加する。
【００９４】
一方、一般的に同期間隔はシミュレータが内部で演算する最小時間単位よりも大きい。例えばデジタル回路シミュレータであれば、回路が持つクロック（例えば100MHz、100,000,000分の1秒）単位で内部的な回路状態の演算を行う。そして、外部に出力する制御信号が変化するタイミング（例えば数クロック〜数十クロック程度）で同期を取る。
【００９５】
実施例４では、この性質を利用して取りこぼしを無くし、かつ遅延を小さくするシミュレーション装置を提供する。
【００９６】
＜構成の説明＞
図１５は実施例４における構成の例を示す図である。実施例１で説明した図３と比較して、メカシミュレータ１５３０とソフトウェアシミュレータ１５５０に、メッセージ選定部１５３６とメッセージ選定部１５５６とがそれぞれ含まれている。また、シミュレータ管理部１５１０からは、図３で示す加工部３１５と加工方法指定部３１６とが除かれている。
【００９７】
その他の構成としては、図３で示したものと同様の構成とすることができる。
【００９８】
なお、図１５の各シミュレータのメッセージ記録部１５３４と１５５４とは、実施例1と同様に通信部を介して送受信されるメッセージの管理に加え、メッセージがシミュレーション演算に用いられたか否かを示すパラメータを管理する。
【００９９】
メッセージ選定部１５３６、１５５６は、シミュレーション実行部１５３２、１５５２が演算に用いる、他のシミュレータから通知されたメッセージの選定を行う。詳細は後述する。
【０１００】
シミュレータ管理部のメッセージ記録部１５１２は、前述した複数のシミュレータ部と送受信を行うメッセージを管理する。ただし実施例1とは通知するメッセージが異なる。詳細は動作の説明で述べる。なお、実施例1と同様に説明を簡易にするためシミュレータを2つとしている。
【０１０１】
＜動作の説明＞
実施例４の事前準備の動作フローは、実施例１で説明した図４のうち、加工方法を指定するステップＳ４０６を除いた処理を行う。
【０１０２】
図１６は、実施例４のシミュレーション実行の動作フローの一例を示す図である。図１６に示すステップＳ１６０１からＳ１６１１は、実施例１の図７に示すステップＳ７０８を除き、同様の動作フローである。図７に示すメッセージの加工ステップＳ７０８は本実施例では行わない。その代わり、本実施例ではステップＳ１６０３およびステップＳ１６１０におけるメッセージの扱い方を変更し、遅延を小さくする。
【０１０３】
先にステップＳ１６１０におけるシミュレーション進行メッセージの扱い方の変更について説明する。図７に示すステップＳ７１０では、最も進行が遅れているシミュレータからの同期要求信号に応答するシミュレーション進行メッセージを送信する処理を行う例について説明した。図１６のステップS１６１０ではメッセージの仮想時刻に関わらず、まだ通知されていない信号全てをシミュレータ管理部１５１０から各シミュレータに通知する。どのような通知が行われるかは後の具体的な動作説明で述べる。
【０１０４】
続いてステップＳ１６０３では、各シミュレータのメッセージ記録部１５３４、１５５４に記録されたメッセージから、シミュレーション実行部１５３２、１５５２は外部からの入力信号として使用するメッセージを選択する。このとき、シミュレーション実行部１５３２、１５５２は、仮想時刻管理部１５３３、１５５３が管理する仮想時刻を元に使用するメッセージを選択する。具体的な動作について図１７のフロー図を用いて説明する。図 １８はステップＳ１６０３の詳細な動作フローを示している。
【０１０５】
ステップＳ１７５０では、各シミュレータはシミュレータ管理部１５１０から通知されたシミュレーション進行メッセージをメッセージ記録部１５３４、１５５４に記録する。
【０１０６】
ステップＳ１７５１では、メッセージ選定部１５３６、１５５６がメッセージ記録部１５３４、１５５４で記録しているメッセージの中から次のステップＳ１７５２のシミュレーション演算で用いられる、外部シミュレータからの入力信号を選択する。入力信号は自身の現在の仮想時刻を超えない仮想時刻を有するメッセージが選択される。
【０１０７】
ステップＳ１７５２では、ステップＳ１７５１で選択した入力信号を元にシミュレーション内部演算を行う。一般的にシミュレータはシミュレーション対象に合わせて、同期間隔よりも細かく仮想時刻を進めながらシミュレーション演算を行う。以下、このシミュレーション演算のことを内部演算と呼ぶ。
【０１０８】
ステップＳ１７５３では、ステップＳ１７５２で内部演算を行った結果、仮想時刻が同期タイミングに到達したか否かを判定する。到達した場合はシミュレーション演算を終了し、ステップＳ１６０４の処理に移る。到達していない場合はＳ１７５１に戻り、同様の動作を繰り返す。
【０１０９】
以上のようにシミュレーション内部演算が行われる度に、入力信号として採用すべきメッセージを見直すことで遅延を少なくすることができる。
【０１１０】
＜具体的な動作説明＞
具体的な動作について以下に述べる。具体的な動作について実施例1と同様に、メカシミュレータ１５３０は時刻880msまでシミュレーションが進み、シミュレータ管理部１５１０に対して同期要求メッセージを通知した時点まで動作したものと仮定する。またソフトウェアシミュレータ１５５０は時刻900msまでシミュレーションが進み、シミュレータ管理部1510に対して同期要求メッセージを通知した時点まで動作したものと仮定する。
【０１１１】
この時点でのシミュレータ管理部１５１０の保持するメッセージ記録部１５１２に記録されているメッセージは、実施例１で説明した図１１（ａ）および（ｂ）と一部を除いて同じメッセージとなる。異なる点は、図１１（ｂ）の時刻840msのメッセージが、本実施例では通知済みとなっている点である。通知済みになっている理由については後述する。
【０１１２】
またメカシミュレータ１５３０は図１８に示すように内部的に10ms単位で内部演算を行い、80ms単位で他のシミュレータと同期を取ることを仮定している。
【０１１３】
この仮定の下、続く処理を説明する。
【０１１４】
ステップＳ１６０７では、同期要求メッセージを受け付けたシミュレータ管理部１５１０は仮想時刻を比較する。ここではメカシミュレータ１５３０の仮想時刻880msとソフトウェアシミュレータ１５５０の仮想時刻900msを比較し、最も遅れているシミュレータをメカシミュレータ１５３０に特定する。
【０１１５】
ステップＳ１６１０では通知するシミュレーション進行メッセージは、それぞれのシミュレータが保持する仮想時刻に関係なく、未通知であるメッセージを全て通知する。図１１の例で説明する。なお、実施例４では、上述したように図１１の時刻840msは通知済み（ＴＲＵＥ）になっているものとする。ここで、最も遅れているメカシミュレータに時刻880msで通知されるシミュレーション進行メッセージには、ソフトウェアシミュレータの時刻900msの信号が含まれる。なお、シミュレータ管理部１５１０には、それぞれのシミュレータからの同期要求メッセージが通知され、記録されている点に留意されたい。。従って、メカシミュレータの時刻880msに対応するシミュレーション進行メッセージとしてソフトウェアシミレータの時刻900msに対応する信号を含めることができる。したがって、図１１の例では、メカシミュレータの時刻880msの同期要求メッセージに応答するシミュレーション進行メッセージに、未通知の信号であるソフトウェアシミュレータの時刻900msの信号（１１１３）が含まれることになる。また、シミュレータ管理部１５１０のメッセージ記録部１５１２は、この場合、図１１の１１１３を通知済みに更新する。実施例４の説明で、図１１の１１１２が既に通知済みになっていた理由はこれと同じ理由である。すなわち本実施例における仮定では、メカシミュレータ１５３０の時刻800msに対するシミュレーション進行メッセージで既に通知していたためである（図１８の１８０３参照）。
【０１１６】
続いて図１７を用いてシミュレーション進行メッセージの通知を受けたメカシミュレータ１５３０の動作について説明する。
【０１１７】
ステップＳ１７５０では、メカシミュレータ１５３０は、通知されたシミュレーション進行メッセージをメッセージ記録部１５３４に記録する。記録されるメッセージの例を図 １９（ａ）に示す。図１９（ａ）の１９２０に示されるようにシミュレーション進行メッセージに基づいて入力を受け付けたい信号の値が記録される。ここでは、時刻880msの同期要求メッセージの応答でソフトウェアシミュレータの時刻900msのメッセージが記録される。
【０１１８】
ステップＳ１７５１では、メッセージ選定部１５３６は、シミュレーション演算に用いるメッセージを選択する。選択の方法はメカシミュレータ１５３０が持つ仮想時刻とステップＳ１７５０で記録されたメッセージとに基づいて行う。この時点でメカシミュレータ１５３０が持つ仮想時刻は、同期要求メッセージを通知した880msである。実施例１で説明したように、各シミュレータは同期要求メッセージを通知した後は、同期進行メッセージまたは終了メッセージを受信するまで待機している点に留意されたい。したがって、メッセージ選定部１５３６は、この880msを超えない最新の仮想時刻を持つメッセージを参照する。図１９（ａ）を参照すると時刻880msを超えないメッセージは時刻840msにおけるメッセージ１９１０である。すなわち、時刻840msのメッセージが選択される。
【０１１９】
ステップＳ１７５２では、ステップＳ１７５１で選択されたメッセージを元に、10ms分の内部演算を行う。すなわち、メカシミュレータ１５３０のシミュレーション実行部１５３２はモーターの駆動開始割り込み信号の入力をメッセージ２０１０に含まれるLowとして内部演算を行う。ここでは内部演算によって仮想時刻が890msまで進むことになる（図１８の１８０１参照）。
【０１２０】
ステップＳ１７５３では同期タイミングに到達したかの判定を行う。メカシミュレータ１５３０は次の同期タイミングが仮想時刻960msであることから、ここでは同期タイミングに到達していない。このためステップＳ１７５１から再度、処理を継続する。
【０１２１】
続くステップＳ１７５１では再度、メカシミュレータが持つ仮想時刻890msを超えないメッセージ（図１９（ａ）の１９１０）が選択される。この選択されたメッセージを元に10ms分の内部演算を行い、仮想時刻が900msまで進む（図１８の１８０２参照）。ここでも同期タイミングである仮想時刻960msに到達していないことから、再度ステップＳ１７５１からの処理を継続する。
【０１２２】
続くステップＳ１７５１では、メカシミュレータが持つ仮想時刻が900msであることから、選択されるメッセージは仮想時刻900msを越えない最新の仮想時刻を持つ図１９（ａ）のメッセージ１９２０である。
【０１２３】
すなわちメカシミュレータ１５３０は仮想時刻900msから、モーター駆動開始割り込み信号をLowからHighに切り替えて10ms分の内部演算を行う（ステップＳ１７５２）。
【０１２４】
以降、次の同期タイミングである仮想時刻960msまでステップＳ１７５１からステップSＳ１７５３を繰り返し、シミュレーション演算動作を終了する。
【０１２５】
このような動作により、図１９（ｂ−１）に示されるソフトウェアシミュレータ１５５０の出力信号に対して、メカシミュレータ１５３０は図１９（ｂ−２）に示されるように所望の信号を受け付けることができる。図１９（ｂ）は、実施例１で説明した図１３（ｂ）と比較してメカシミュレータのモータ駆動割り込みの信号の遅延が小さくなっていることがわかる。
【０１２６】
本実施例によると取りこぼしを無くし、かつ遅延を小さくするシミュレーション装置の提供が可能である。
【実施例５】
【０１２７】
実施例4では内部演算間隔が同期間隔よりも小さい場合に有効な形態を説明した。しかしながら内部演算間隔が同期間隔と比べて十分に小さくない場合には取りこぼしが発生する事態が生じる。
【０１２８】
例えば図２０で示すような同期タイミングおよび内部演算タイミングを持つシミュレータの場合にシミュレータ間で取りこぼしが発生する。ここでは実施例４で説明したソフトウェアシミュレータは900msの同期タイミングのみが940msにずれた場合を仮定している。つまりソフトウェアシミュレータは仮想時刻940msで初めてモーター駆動割り込み信号がHighになり、960ms以降はLowに戻る。またメカシミュレータの内部演算は図２０に示すように40ms単位で行われることを仮定している。
【０１２９】
この図２０において、メカシミュレータは時刻880msでソフトウェアシミュレータから時刻940msの出力信号を受信する。実施例4と同様にメカシミュレータはソフトウェアシミュレータの時刻840msの出力信号を外部からの入力としてシミュレーション演算を行う。メカシミュレータは内部演算を進める上で時刻940msを過ぎたところからソフトウェアシミュレータの時刻940msの出力信号を用いて演算を進めたい。しかし、ここで示すメカシミュレータは880ms、920ms、960msのタイミングで内部演算を進めているため、940msを過ぎるのは次の同期タイミングである960msとなる。時刻960msではソフトウェアシミュレータから時刻960msの出力信号が新たに通知されるため、940msの信号が取りこぼしになってしまう。
【０１３０】
実施例５では、このような場合であっても取りこぼしを防ぐシミュレーション装置を提供する。
【０１３１】
＜構成の説明＞
図２１は実施例5にかかる構成図を示す。実施例４の図１５に示す構成と比較して、各シミュレータからメッセージ選定部が除かれ、加工方法指定部２１３６、２１５６と、加工部２１３７、２１５７とが各シミュレータに追加されている。
【０１３２】
図２１に示す各構成は、実施例４で説明したものと同様の処理を行うことができるので、重複する説明は省略する。
【０１３３】
加工方法指定部２１３６、２１５６は取りこぼしを防ぐため、シミュレーション演算に用いるメッセージを加工する方法を指定する。
【０１３４】
加工部２１３７、２１５７は取りこぼしを防ぐため、シミュレーション演算に用いるメッセージを加工する。
【０１３５】
なお、実施例4と同様に説明を簡易にするためシミュレータを2つとしている。
【０１３６】
＜動作の説明＞
本実施例における動作手順について説明する。まず、実施例４と同様に事前準備の動作フローを行う。なお、フローの流れとしては、実施例１で説明した図４のフローチャートと同様の処理とすることができる。ただし、本実施例では、加工方法の指定がシミュレータ管理部ではなく、各シミュレータ側で行われる点で、実施例１の処理とは相違する。
【０１３７】
次に、シミュレーション実行の動作フローについて説明する。実施例５のシミュレーション実行の動作フローは、実施例４の図１６にと同様の動作フローである。ただし、ステップＳ１６０３で行われるシミュレーション演算の動作が異なる。実施例５におけるステップＳ１６０３で行われる動作の詳細フローを図２２に示す。この図２２を元にシミュレーション演算処理の詳細を説明する。
【０１３８】
ステップＳ２２５０では各シミュレータは通知されたシミュレーション進行メッセージをメッセージ記録部２１３４、２１５４に記録する。この時、記録するメッセージには未使用であることを示すパラメータを含める。未使用とは、後に続くシミュレーション内部演算ステップＳ２２５２において、内部演算に用いられるメッセージとして使用されていないことを示す。逆に内部演算に用いられたメッセージには使用済みを意味するパラメータを保持する。詳細は後述する。
【０１３９】
ステップＳ２２５１では各シミュレータの加工部２１３７、２１５７がメッセージの加工を行う。加工の前準備として加工対象となるメッセージが存在するかを確認する。この確認は、実施例1で説明した図７のステップＳ７０８において未通知メッセージを未使用に、通知済みメッセージを使用済みに読み替えた処理と同等である。すなわちメッセージの加工は次に示す2つの条件に基づき加工対象の抽出を行う。第一の条件はメッセージを受信する側のシミュレータの仮想時刻よりも以前の仮想時刻を持つメッセージである。第二の条件は未使用を意味するパラメータを保持するメッセージのみである。この2つを満たすメッセージが2つ以上ある場合は、その2つ以上のメッセージを対象に加工する。1つ以下の場合は加工を行わない。なお、加工は事前準備の動作フローで指定された方法を元に行われる。なお、本実施例では、実施例１と異なり各シミュレータ内での内部演算を考慮する点に留意されたい。すなわち、本実施例では、第一の条件の受信する側のシミュレータの仮想時刻は、内部演算によって変化する点に留意されたい。
【０１４０】
ステップＳ２２５２では、実施例4と同様に内部演算に採用するメッセージを決定する。メッセージの決定はステップＳ２２５１で加工が行われたか否かによって異なる。加工が行われた場合は加工結果を入力信号として選択する。加工が行われなかった場合は実施例4と同様に、メッセージ記録部２１３４、２１５４で記録しているメッセージの中で自身の仮想時刻を超えないメッセージを入力信号として選択する。加工の対象になったメッセージあるいは選択されたメッセージには、使用済であることを示すパラメータで上書きする。
【０１４１】
ステップＳ２２５３ではステップＳ２２５２で決定した入力信号を元に内部演算を行う。
【０１４２】
ステップＳ２２５４ではステップＳ２２５３でシミュレーション演算を行った結果、仮想時刻が同期タイミングに到達したか否かを判定する。到達した場合はシミュレーション演算を終了し、ステップＳ１６０４の処理に移る。到達していない場合はＳ２２５１に戻り、同様の動作を繰り返す。
【０１４３】
以上のように内部演算が行われる度に、入力信号として採用すべきメッセージに取りこぼしになる信号がある場合にメッセージを加工することで取りこぼしを防ぐことができる。
【０１４４】
＜具体的な動作＞
具体的な動作について説明する。
【０１４５】
実施例1と同様に、事前に各シミュレータの加工方法指定部２１３６、２１５６によって各信号に対する加工方法を指定する。ここでは実施例1と同様に最大値を指定することとする。また実施例4と同様にメカシミュレータ２１３０は仮想時刻880ms、ソフトウェアシミュレータ２１５０は仮想時刻900msまでシミュレーションが進んだものと仮定する。すなわち、これらの仮想時刻において各シミュレータがシミュレータ管理部２１１０に対して同期要求メッセージを通知した時点まで動作したものと仮定し、これに続く処理を説明する。なお同期タイミングおよび演算間隔は図２０に示す通りである。
【０１４６】
ステップＳ２２５０では実施例4と同じくメカシミュレータ２１３０は仮想時刻880msにおいて、ソフトウェアシミュレータ２１５０から仮想時刻940msの出力信号を含むシミュレーション進行メッセージを受信する（２１０８）。この受信したメッセージをメッセージ記録部２１３４に記録する。図２３（ａ）は、メカシミュレータの時刻940msにおけるメッセージの記録内容を示す図である。この時、図２３(a)に示されるように記録するメッセージには未使用であることを示すパラメータ（２３０４）を含める。なおソフトウェアシミュレータ２１５０の仮想時刻840msの信号（２３０１）は、図２０に示すように、メカシミュレータ２１３０が時刻800msの時に通知を受けている（２３０７）。よって、メカシミュレータの時刻840ms（２３０２）の内部演算で既に使用済みであることから、図２３（ａ）では使用済みを示すパラメータが記録されている。
【０１４７】
ステップＳ２２５１ではステップＳ２２５０で記録されたメッセージ（すなわち、図２３（ａ）で示すメッセージ）の加工を行う。しかし第一の条件である時刻880ms以下、かつ第二の条件である未使用のメッセージは存在しない。加工対象となるメッセージが存在しないことから加工は行わない。
【０１４８】
ステップＳ２２５２では後に続くシミュレーション内部演算に用いる外部からの入力信号用メッセージを決定する。Ｓ２２５１で加工が行われなかったことから、メッセージ記録部２１３４に記録される時刻840msのメッセージ（図２３(a)の２３０１）を決定する。
【０１４９】
ステップＳ２２５３では、ステップＳ２２５２で決定されたメッセージ２３０１を用いてシミュレーション内部演算を行う。すなわちモーター駆動開始割り込み信号としてLowの値をシミュレーション演算に用いる。演算は図２０に従って行われ、仮想時刻が920msまで進む（２００１）。
【０１５０】
ステップＳ２２５４では同期タイミングに到達したか否かの判定を行う。メカシミュレータ２１３０の次の同期タイミングは960msであり、現在の仮想時刻が920msであることから同期タイミングに到達していない。このため再度、ステップＳ２２５１からの処理を繰り返す。
【０１５１】
続くステップＳ２２５１ではメッセージの加工を行う。メカシミュレータ２１３０の仮想時刻920msにおいても、加工対象となる第一の条件である時刻920ms以下、かつ第二の条件である未使用を満たすメッセージが存在しないため、加工は行わない。
【０１５２】
続くステップＳ２２５２では同様にメッセージ記録部２１３４に記録される時刻840msのメッセージ（図２３(a)の２３０１）が決定される。
【０１５３】
続くステップＳ２２５３では同様にステップＳ２２５２で決定されたメッセージを用いてシミュレーション内部演算を行う。すなわちモーター駆動開始割り込み信号としてLowの値をシミュレーション演算に用いる。演算は図２０に従って行われ、仮想時刻が960msまで進む（２００４）。
【０１５４】
ここでステップＳ２２５４では同期タイミングに到達したかの判定を行う。ここでは同期タイミングに到達していることからシミュレーション演算処理を終了する。
【０１５５】
続いてこれまでと同様にメカシミュレータ２１３０が同期要求メッセージを通知する（ステップＳ１６０５）。続いてシミュレータ管理部２１１０は通知された同期要求メッセージを記録する（ステップＳ１６０６）。続いてメカシミュレータ２１３０の仮想時刻960msとソフトウェアシミュレータの仮想時刻940msの比較（ステップＳ１６０７）によって、ソフトウェアシミュレータ２１５０に対してシミュレーション進行メッセージを通知する（S１６１０）。
【０１５６】
続いてシミュレーション進行メッセージを受信したソフトウェアシミュレータ２１５０はシミュレーション演算を行い、次の同期タイミングである仮想時刻960msまで進める（ステップＳ１６０３）。時刻960msに到達すると、ソフトウェアシミュレータ２１５０は、シミュレータ管理部２１１０に対して同期要求メッセージを通知する（ステップＳ１６０３）。同期要求メッセージの通知を受けたシミュレータ管理部２１１０は通知されたメッセージをメッセージ記録部２１１２に記録する（ステップＳ１６０５）。
【０１５７】
続いてステップＳ１６０７ではシミュレータ管理部２１１０は仮想時刻の比較を行う。ここではメカシミュレータ２１３０およびソフトウェアシミュレータ２１５０が共に仮想時刻960msを保持していることから両方のシミュレータが最も進行の遅いシミュレータとして特定される。
【０１５８】
続いてステップＳ１６１０ではメカシミュレータ２１３０およびソフトウェアシミュレータ２１５０の両方にシミュレーション進行メッセージを通知する。
【０１５９】
以下、メカシミュレータ２１３０に着目して説明するとステップＳ１６０３の詳細処理（図２２）におけるステップＳ２２５０において、シミュレータ管理部２１１０から通知されたメッセージをメッセージ記録部２１３４に記録する。ここで記録されたメッセージを図２３(b)に示す。図２３(b)に示されるように図２３(a)からソフトウェアシミュレータの仮想時刻960msのメッセージ（２３０９）が追加されている。また未使用を示すパラメータが記録されている（２３１０）。
【０１６０】
ステップＳ２２５１ではメッセージの加工を行う。まずは前述した条件に基づき図２３(b)を参照して加工対象を抽出する。第一の条件である仮想時刻960ms以下、かつ第二の条件である未使用のメッセージは時刻940ms（２３０７）および時刻960ms（２３０９）の2つ存在する。対象となるメッセージが2つ存在することから、事前定義処理で指定した加工方法に基づいてメッセージを加工する。ここでは、それぞれの時刻におけるモーター駆動開始割り込み信号の値がHigh（２３０８）とLow（２３０９）であり、また加工方法として最大値を取得することを事前に指定していることから、Highに加工される。
【０１６１】
ステップＳ２２５２で続くシミュレーション内部演算に用いられる入力信号用のメッセージが決定される。ここでは加工されたモーター駆動開始割り込み信号Highが選択される。
【０１６２】
また時刻940ms（図２３（ｂ）の２３０７）および時刻960ms（図２３（ｂ）の２３０９）のメッセージが加工されたことから、未使用（図２３（ｂ）の２３０８および２３１０）を使用済みに更新する。
【０１６３】
同様の処理を続けると、メカシミュレータ２１３０は内部演算によって時刻1000msに進む（図２３の２３０５参照）。この時刻では、加工対象となるメッセージが無いため時刻1000msを越えない時刻960msのメッセージが内部演算に使用される。すなわちモーター駆動開始割り込み信号Lowが内部演算に用いられる。
【０１６４】
このような動作により、ソフトウェアシミュレータ２１５０が図２３（ｃ−１）に示す信号を出力していた場合、メカシミュレータ２１３０は図２３（ｃ−２）に示す所望の信号を受信することになり、目的の取りこぼしを防ぐことができている。
【０１６５】
また実施例2および3と同様に、利用者は取りこぼし対象となったメッセージや加工結果を図１４（ａ）および（ｂ）のような画面を用いて確認できる。
【実施例６】
【０１６６】
実施例4や5に示すシミュレーション装置は、実施例1と比較して内部演算間隔によってはタイミング遅延を小さくできるという長所がある。その一方で、対象のシミュレータに対して個別にメッセージを管理・加工する仕組みを組み込むコストが必要になるという短所がある。この実施例４や５に示すシミュレータ側でのメッセージの管理・加工を、メッセージ調整機能と称する。特に市販されているシミュレータは改良が困難であり、組み込めるシミュレータと組み込めないシミュレータが混在する場合があり得る。
【０１６７】
この混在の可能性を鑑みて、利用者が適したシミュレーション構成を選択できることが望ましい。そこで本実施例では、利用者が連携するシミュレータに応じてシミュレーション構成を選択できるシミュレーション装置について説明する。
【０１６８】
＜構成の説明＞
図２４は本実施例における構成の例である。この図２４の例ではメカシミュレータ２４３０は実施例4や5示したメカシミュレータ（１５３０および２１３０）とは異なりメッセージ選定部、加工方法指定部、加工部を持たない。一方、ソフトウェアシミュレータ２４５０は実施例5で示したソフトウェアシミュレータ２１５０と同様の構成である。すなわちメカシミュレータ２４３０は実施例4および5の構成に対応しておらず、またソフトウェアシミュレータ２４５０は実施例5で示したシミュレータの構成に対応していることを示している。
【０１６９】
なお、以降の説明では実施例4および5のどちらかの構成に対応しているシミュレータのことを対応済みのシミュレータと呼び、対応していないことを未対応のシミュレータと省略する。
【０１７０】
シミュレータ管理部２４１０は、実施例１で説明した構成に加えて、切替部２４１７を有する。シミュレータ管理部２４１０は、次に説明する切替部２４１７によって、メッセージの管理方法を実施例1で示したメッセージ記録部３１２あるいは実施例5で示したメッセージ記録部２１１２の動作に切り替える。
【０１７１】
切替部２４１７は、連携する各シミュレータが対応済みか否かでメッセージ記録部２４１２が管理するメッセージを切り替える。例えばメッセージ記録部２４１２は未対応であるシミュレータに対しては、取りこぼしを防ぐために加工部２４１５で加工を行った上でメッセージを通知する。対応済みのシミュレータに対しては、メッセージの仮想時刻に関係なく未送信であれば通知を行う。対応済みのシミュレータについてはシミュレータ側でメッセージを加工あるいは内部演算に用いるメッセージの選択を行う。
【０１７２】
具体的な動作は以下の説明で述べる。なお、これまでの説明と同様にシミュレータは2つとは限らない。
【０１７３】
＜動作の説明＞
最初に事前準備の動作フローについて説明する。実施例6における動作フローは、図４に示すフローと同じである。ただし、一部異なる処理がある。以下、異なる処理を中心に説明する。
【０１７４】
本実施例においては、ステップＳ４０３では各シミュレータはシミュレータ管理部２４１０にシミュレーション参加要求メッセージを通知する。参加要求メッセージには自身のシミュレータが対応済みか否かを示すパラメータ（SIM_COR）を含める。図２５は参加要求メッセージの例である。図２５に示される通り、参加要求メッセージには対応済みか否かを表すパラメータ（SIM_COR）２５０１を含む。図２５(a)ではメカシミュレータ２４３０は未対応（SIM_COR＝FALSE）であり、図２５(b)ではソフトウェアシミュレータは対応済み（SIM_COR＝TRUE）であることが示されている。このように各シミュレータは対応済みか否かをシミュレータ管理部２４１０に通知する。
【０１７５】
ステップＳ４０６では加工方法の指定を行う。本実施例ではシミュレータ管理部２４１０が有する加工方法指定部２４１６およびソフトウェアシミュレータ２４５０が有する加工方法指定部２４５６の両方で加工方法を指定する。なお対応済みのシミュレータが複数ある場合はその全てのシミュレータで加工方法を指定する。
【０１７６】
図２６は、実施例６のシミュレーション実行の動作フローを示す図である。ステップＳ２６０１からＳ２６０７は、実施例5で説明した図１６のステップＳ１６０１からＳ１６０７と同様の動作フローである。
【０１７７】
ステップＳ２６１２では、シミュレータ管理部２４１０は、ステップＳ２６０７において特定される進行の遅いシミュレータが対応済みか否かで次のメッセージの加工ステップＳ２６０８を行うかどうかを切り替える。対応済みであればシミュレータ側でメッセージの取りこぼしを管理するため加工を行わない。未対応であればシミュレータ管理部２４１０で取りこぼしを防ぐため加工部２４１５でメッセージを加工する。加工の動作については実施例1と同様の処理である。
【０１７８】
ステップＳ２６０９およびＳ２６１１は実施例5で説明した図１６のステップＳ１６０９およびＳ１６１１と同様の処理である。
【０１７９】
ステップS２６１０では、シミュレータ管理部２４１０は各シミュレータにシミュレーション進行メッセージを通知する。ただし通知するメッセージは切替部２４１７によって切り替えられる。対応済みのシミュレータに対しては実施例4および5で示したようにメッセージの仮想時刻に関わらず、未送信のメッセージは全て通知する。未対応の場合には実施例1で示したように通知先のシミュレータの仮想時刻を超えない最新のメッセージを通知する。
【０１８０】
シミュレーション進行メッセージの通知を受けたシミュレータは自身が対応済みか否かによってシミュレーション演算の動作が切り替わる。対応済みのシミュレータであれば実施例4あるいは５と同様のシミュレーション演算を行う。未対応の場合には実施例1と同様に途中で内部演算に用いるメッセージを切り替えることなくシミュレーション演算を行う。
【０１８１】
以上の動作によって切り替えを実現する。
【０１８２】
＜具体的な動作＞
具体的な動作を図２７に示されるタイミングで同期および内部演算が行われる場合を例に、ソフトウェアシミュレータ２４５０の出力信号をメカシミュレータ２４３０に通知するメッセージに着目して説明する。ここではメカシミュレータ２４３０は200ms毎、ソフトウェアシミュレータ２４５０は60ms毎に同期を行い、またメカシミュレータ２４３０は50ms間隔で内部演算を行うことを仮定している。またソフトウェアシミュレータは時刻900msでのみモーター駆動開始割り込み信号をHighで出力し、それ以外の時刻ではLowを出力することを仮定している。さらにこれまでの説明と同様に、加工方法として最大値を取得することを指定している場合を例として説明する。
【０１８３】
＜メカシミュレータが未対応である場合について＞
メカシミュレータ２４３０が未対応である場合について、メカシミュレータ２４３０の時刻1000msに通知されるシミュレーション進行メッセージに着目して説明する。
【０１８４】
この時（図２７の２７０５）、ステップＳ２６０５でシミュレータ管理部２４１０のメッセージ記録部２４１２に記録されている、ソフトウェアシミュレータ２４５０から通知されたメッセージを図２８に示す。
【０１８５】
ステップＳ２６１２ではメカシミュレータ２４３０が未対応であることから続くメッセージの加工をS２６０８で行う。
【０１８６】
ステップS２６０８では、まず、シミュレータ管理部２４１０は図２８に示すメッセージ記録部２４１２の内容から加工対象のメッセージを抽出する。ここではソフトウェアシミュレータ２４５０の時刻840ms（２８０２）、900ms（２８０３）、960ms（２８０４）における3つの出力信号が加工対象である。順にLow、High、Lowの信号値であることから、その最大値であるHighに加工される。
【０１８７】
続くステップS２６１０でメカシミュレータ２４３０に、S２４０８で加工されたメッセージが通知される。すなわちメカシミュレータ２４３０はモーター駆動開始割り込み信号としてHighの値を受け取りシミュレーションを進めることができる。
【０１８８】
＜メカシミュレータが対応済みである場合について＞
次にメカシミュレータが対応済みである場合について、説明する。ここではメカシミュレータ２４３０の時刻800ms（図２７の２７０１）および1000ms（図２７の２７０５）に通知されるシミュレーション進行メッセージとシミュレーション演算動作に着目して説明する。
【０１８９】
メカシミュレータ２４３０の仮想時刻800ms（図２７の２７０１）において、ステップＳ２６１２ではメカシミュレータ２４３０が対応済みであることから、シミュレータ管理部２４１０はメッセージの加工は行わずに、次のステップに進む。
【０１９０】
ステップS２７１０ではシミュレータ管理部２４１０はメカシミュレータ２４３０に対して未通知である時刻840msのメッセージを通知する。また、この時、時刻840msのメッセージが保持する未送信であることを示すパラメータは通知済みに上書きされる。以下、実施例5と同様の動作が行われる。
【０１９１】
以上のように本実施例によれば、連携するシミュレータに合わせて最適な構成を提供できる。
【図１】
2015032120.tif 000003
【図２】
2015032120.tif 000004
【図３】
2015032120.tif 000005
【図４】
2015032120.tif 000006
【図５】
2015032120.tif 000007
【図６】
2015032120.tif 000008
【図７】
2015032120.tif 000009
【図８】
2015032120.tif 000010
【図９】
2015032120.tif 000011
【図１０】
2015032120.tif 000012
【図１１】
2015032120.tif 000013
【図１２】
2015032120.tif 000014
【図１３】
2015032120.tif 000015
【図１４】
2015032120.tif 000016
【図１５】
2015032120.tif 000017
【図１６】
2015032120.tif 000018
【図１７】
2015032120.tif 000019
【図１８】
2015032120.tif 000020
【図１９】
2015032120.tif 000021
【図２０】
2015032120.tif 000022
【図２１】
2015032120.tif 000023
【図２２】
2015032120.tif 000024
【図２３】
2015032120.tif 000025
【図２４】
2015032120.tif 000026
【図２５】
2015032120.tif 000027
【図２６】
2015032120.tif 000028
【図２７】
2015032120.tif 000029
【図２８】
2015032120.tif 000030