(57)【要約】【課題】  ソフトウェアの検証のためにシミュレーションを利用する場合、ソフトウェア自身で作り出しているタイマの変化をトリガとして各シミュレータを連携動作させることで、シミュレーション効率を低下させることなくシミュレーション精度を確保する。【構成】  ＣＰＵシミュレータが自身が有するソフトウェアタイマの変化が発生すると、変化の発生をプロセス接続部を介して周辺シミュレータに通知した後に、次ぎのシミュレーションの開始の指示があるまでシミュレーションを停止し、周辺シミュレータがプロセス接続部を介してＣＰＵシミュレータのソフトウェアタイマの変化の発生を受信後に、ソフトウェアタイマの変化の時間に相当するシミュレーションを終了すると、シミュレーションの終了をプロセス接続部に通知し、プロセス接続部が前周辺シミュレータの全てからシミュレーションの終了が通知されると、ＣＰＵシミュレータ及び周辺シミュレータにシミュレーションの開始を指示する。【選択図】  図９
2010128987.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵをシミュレートするＣＰＵシミュレータと、該ＣＰＵの制御対象となる周辺部をシミュレートする少なくとも１つの周辺シミュレータと、各シミュレータの間での同期を実現するためのプロセス接続部とを使って、前記ＣＰＵシミュレータと少なくとも１つの周辺シミュレータとを同期させながらシミュレーションを実行するシミュレーション方法であって、
前記ＣＰＵシミュレータが、前記ＣＰＵシミュレータが有するソフトウェアタイマの変化が発生すると、変化の発生を前記プロセス接続部に通知する工程と、
前記ＣＰＵシミュレータが、前記変化の発生を通知した後に、次ぎの前記ＣＰＵシミュレータへのシミュレーションの開始の指示が前記プロセス接続部からあるまでシミュレーションを停止する工程と、
前記プロセス接続部が、前記ＣＰＵシミュレータから前記ソフトウェアタイマの変化の発生の通知を受けて、前記ソフトウェアタイマの変化の発生を前記周辺シミュレータに通知する工程と、
前記周辺シミュレータが、前記プロセス接続部から前記ＣＰＵシミュレータのソフトウェアタイマの変化の発生を受信する工程と、
前記周辺シミュレータが、前記ソフトウェアタイマの変化の発生の受信後に、前記周辺シミュレータが前記ソフトウェアタイマの変化の時間に相当するシミュレーションを終了すると、該シミュレーションの終了を前記プロセス接続部に通知する工程と、
前記プロセス接続部が、前記周辺シミュレータの全てからシミュレーションの終了が通知されると、前記ＣＰＵシミュレータ及び前記周辺シミュレータにシミュレーションの開始を指示する工程とを有することを特徴とするシミュレーション方法。
【請求項２】
前記プロセス接続部が、前記ＣＰＵシミュレータが有するソフトウェアタイマの変化の時間の入力を受け付けて記憶する工程と、
前記プロセス接続部が、前記ソフトウェアタイマの変化の時間を前記ＣＰＵシミュレータに通知する工程とを更に有することを特徴とする請求項１に記載のシミュレーション方法。
【請求項３】
前記プロセス接続部が、前記ＣＰＵシミュレータが有する複数のソフトウェアタイマの異なる変化の時間の入力を受け付けて記憶する工程と、
前記プロセス接続部が、前記複数のソフトウェアタイマのいずれを前記ＣＰＵシミュレータが使用するかを判断する工程と、
前記プロセス接続部が、判断された前記ソフトウェアタイマの変化の時間を前記ＣＰＵシミュレータに通知する工程とを更に有することを特徴とする請求項１に記載のシミュレーション方法。
【請求項４】
前記プロセス接続部が、前記ＣＰＵシミュレータが有する複数のソフトウェアタイマの異なる変化の時間と、前記複数のソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報との入力を受け付けて記憶する工程と、
前記プロセス接続部が、前記複数のソフトウェアタイマの異なる変化の時間と、前記複数のソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報とを、前記ＣＰＵシミュレータに通知する工程と、
前記プロセス接続部が、前記ＣＰＵシミュレータから、前記ソフトウェアタイマの変化の発生と当該ソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報との通知を受けて、前記ソフトウェアタイマの変化の発生を前記対象の周辺シミュレータに通知する工程とを有し、
前記ＣＰＵシミュレータが、前記変化の発生を前記プロセス接続部に通知する工程では、ソフトウェアタイマの変化の発生と共に、当該ソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報を前記プロセス接続部に通知することを特徴とする請求項１に記載のシミュレーション方法。
【請求項５】
前記入力を受け付けて記憶する工程では、ユーザによりグラフィカルユーザインタフェースを介して情報が入力されることを特徴とする請求項２乃至４のいずれか１項に記載のシミュレーション方法。
【請求項６】
前記入力を受け付けて記憶する工程では、ユーザがあらかじめ定義された書式に従って編集したファイルから、外部ファイルインタフェースを介して情報が入力されることを特徴とする請求項２乃至４のいずれか１項に記載のシミュレーション方法。
【請求項７】
前記入力を受け付けて記憶する工程では、プロセス間の通信を介して情報が入力されることを特徴とする請求項２乃至４のいずれか１項に記載のシミュレーション方法。
【請求項８】
請求項１乃至７のいずれか１項に記載のシミュレーション方法の各工程をコンピュータで実行するためのプログラム。
【請求項９】
請求項８に記載のプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
【請求項１０】
ＣＰＵをシミュレートするＣＰＵシミュレータと、該ＣＰＵの制御対象となる周辺部をシミュレートする少なくとも１つの周辺シミュレータと、各シミュレータの間での同期を実現するためのプロセス接続部とを有し、前記ＣＰＵシミュレータと少なくとも１つの周辺シミュレータとを同期させながらシミュレーションを実行するシミュレーションシステムであって、
前記ＣＰＵシミュレータが、
前記ＣＰＵシミュレータが有するソフトウェアタイマの変化が発生すると、変化の発生を前記プロセス接続部に通知する手段と、
前記変化の発生を通知した後に、次ぎの前記ＣＰＵシミュレータへのシミュレーションの開始の指示が前記プロセス接続部からあるまでシミュレーションを停止する手段とを有し、
前記周辺シミュレータが、
前記プロセス接続部から前記ＣＰＵシミュレータのソフトウェアタイマの変化の発生を受信する手段と、
前記ソフトウェアタイマの変化の発生の受信後に、前記周辺シミュレータが前記ソフトウェアタイマの変化の時間に相当するシミュレーションを終了すると、該シミュレーションの終了を前記プロセス接続部に通知する手段とを有し、
前記プロセス接続部が、
前記ＣＰＵシミュレータから前記ソフトウェアタイマの変化の発生の通知を受けて、前記ソフトウェアタイマの変化の発生を前記周辺シミュレータに通知する手段と、
前記周辺シミュレータの全てからシミュレーションの終了が通知されると、前記ＣＰＵシミュレータ及び前記周辺シミュレータにシミュレーションの開始を指示する手段とを有することを特徴とするシミュレーションシステム。
【請求項１１】
前記プロセス接続部が、
前記ＣＰＵシミュレータが有するソフトウェアタイマの変化の時間の入力を受け付けて記憶する手段と、
前記ソフトウェアタイマの変化の時間を前記ＣＰＵシミュレータに通知する手段とを更に有することを特徴とする請求項１０に記載のシミュレーションシステム。
【請求項１２】
前記プロセス接続部が、
前記ＣＰＵシミュレータが有する複数のソフトウェアタイマの異なる変化の時間の入力を受け付けて記憶する手段と、
前記複数のソフトウェアタイマのいずれを前記ＣＰＵシミュレータが使用するかを判断する手段と、
判断された前記ソフトウェアタイマの変化の時間を前記ＣＰＵシミュレータに通知する手段とを更に有することを特徴とする請求項１０に記載のシミュレーションシステム。
【請求項１３】
前記入力を受け付けて記憶する手段では、複数のソフトウェアタイマの１つを特定する情報と、対応する変化の時間とを関連づけて記憶することを特徴とする請求項１２に記載のシミュレーションシステム。
【請求項１４】
前記プロセス接続部が、
前記ＣＰＵシミュレータが有する複数のソフトウェアタイマの異なる変化の時間と、前記複数のソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報との入力を受け付けて記憶する手段と、
前記複数のソフトウェアタイマの異なる変化の時間と、前記複数のソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報とを、前記ＣＰＵシミュレータに通知する手段と、
前記ＣＰＵシミュレータから、前記ソフトウェアタイマの変化の発生と当該ソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報との通知を受けて、前記ソフトウェアタイマの変化の発生を前記対象の周辺シミュレータに通知する手段とを更に有し、
前記ＣＰＵシミュレータの前記変化の発生を前記プロセス接続部に通知する手段は、ソフトウェアタイマの変化の発生と共に、当該ソフトウェアタイマを同期のために使用する対象の周辺シミュレータを示す情報を前記プロセス接続部に通知することを特徴とする請求項１０に記載のシミュレーションシステム。
【請求項１５】
前記入力を受け付けて記憶する手段では、複数のソフトウェアタイマの１つを特定する情報と、対応する変化の時間と、当該ソフトウェアタイマを同期のために使用する対象の周辺シミュレータとを関連づけて記憶することを特徴とする請求項１４に記載のシミュレーションシステム。
【請求項１６】
機械装置の動作をコンピュータシステムでシミュレーションし、当該シミュレーションの対象となる装置に搭載されるＣＰＵの制御プログラムに従って、前記対象装置のＣＰＵの端子に対応して定義された仮想入力端子の情報を読み込み、当該仮想出力端子を制御することにより前記対象装置のＣＰＵの動作をシミュレーションする１つ以上のＣＰＵシミュレータと、
アクチュエータとセンサを含む複数の部品からなる機械装置の機構モデルと、当該機構モデルの間の干渉及び連携と、前記アクチュエータとセンサに接続される信号とをコンピュータシステムで定義し、外部から入力されたアクチュエータ動作信号として定義された情報に対応したアクチュエータの動作と機構部品間の干渉及び連携の定義に従って、関連する全ての機構部品の動作をコンピュータシステムの表示装置に画像として再現するとともに、前記機構モデルの動作の結果を、前記センサとして定義された機構モデルに対するあらかじめ定義された動作に応じてセンサ信号として定義された情報を外部に出力する１つ以上の機構部品シミュレータと、
前記シミュレーションの対象装置の構成物で、前記ＣＰＵシミュレータ及び前記機構部品シミュレータで対応していない構成物の動作と、前記対象装置に対する外部からの働きかけを擬似的に再現する機能と、シミュレーションの結果の解析、表示及び保存する機能と、シミュレーションのためのユーザインタフェースをする機能とを備えた１つ以上のシミュレータと、
前記シミュレーションにおけるシミュレータを接続して、１つの機器制御シミュレーションシステムとして動作させるプロセス接続手段とを含み、
前記プロセス接続手段は、検証対象のＣＰＵのプログラムが自身で作り出しているタイマの変化をトリガとしてシミュレータ間の連携を行い、前記タイマの変化を１単位として仮想時刻を進め、該仮想時刻により前記各種のシミュレータ間の同期処理を行う連携動作モジュールを有することを特徴とするシミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーション方法及びそのシステムに関する。特に、ソフトウェアの動作を検証するために独立プロセスとして動作する複数のシミュレータを中間インタフェースを介して連携動作させ、１つのシステムとして動作させるシミュレーション方法及びそのシステに関するものである。
【背景技術】
【０００２】
ソフトウェアは、そのソフトウエアが不正な動作を行っていないかテストをし、デバッグ作業を経てからリリースされる。ソフトウェア動作の検証方法として、ソフトウェアが動作するＣＰＵとソフトウェアの制御対象装置とをコンピュータ上でシミュレートする方法がある。このようなシミュレーションを実行するシミュレートシステムは、制御対象装置の機能ごとに前記機能をシミュレートするシミュレータを有する。そして、各機能をシミュレートする複数のシミュレータを連携動作させて、１つのシミュレーションシステムとして動作させる。
【０００３】
下記の特許文献１では、前述したような複数のシミュレータを連携動作させて１つのシミュレーションシステムとして動作させる機器制御シミュレーションの例が示されている。この機器制御シミュレーションは、装置を制御する中央処理装置（ＣＰＵ）のシミュレータ（以下、シミュレーションデバッガと呼ぶ）を有する。また、機器モデルのシミュレータ、その他、各種装置構成のシミュレータやシミュレーションを支援するシステムを受け持つシミュレータ（以下、まとめて単にシミュレータと呼ぶ）等によってシステムが構成される。そして、シミュレーション対象（ＣＰＵによるプログラム実行処理、仮想メカ部品の動作等）のシミュレーションにおいて、各々のプロセスに仮想時間をもつ場合の各プロセスの連携動作方法が例として示されている。
【０００４】
前記シミュレーションシステムのシミュレータ間での連携動作形態について模式図を図１９に示す。図１９のＴsはシミュレーションシステム上の仮想時間での基準同期時間である。各シミュレータはＴs時間の処理実行ごとに仮想時間を停止し、全てのシミュレータがＴs時間で行う処理の実行を終了した後に、全シミュレータが一斉に次のＴs時間の処理の実行を開始する。
【特許文献１】特開２００５-３３９０２９
【発明の開示】
【発明が解決しようとする課題】
【０００５】
シミュレーションの利用目的が装置を制御するＣＰＵのソフトウェア（以下、単に装置制御ソフトウェアと呼ぶ）の検証である場合、シミュレーション上で重要になるのは次の情報である。すなわち、装置制御ソフトウェアのシミュレータに対する入力結果とソフトウェアシミュレータからの出力結果とである。ここで、装置制御ソフトウェアは、一般に、ソフトウェア自身で作り出しているタイマを利用して装置を制御する。従って、従来の各シミュレータ間の同期方法では、複数のシミュレータを連携動作させるプロセス接続部が作り出すシミュレーションシステムの仮想時間の切り替わりをトリガにして、シミュレータ間の同期タイミングが決定される。そのため、検証対象のソフトウェアが処理を行うための基準タイマ（以下、ソフトウェアタイマと記す）と同期タイミングとは無関係であり、以下に示す問題が発生する。
【０００６】
従来のシミュレーションシステムで発生する問題に関して、例を挙げて説明する。
【０００７】
例えば、装置制御ソフトウェアは、1ms毎に変化するソフトウェアタイマを基準に動作するものとする。また、制御対象の装置は、装置制御ソフトウェアが機構部品Ａの駆動信号を出力してから500ms後に機構部品Ｂが動作し、機構部品Ｂの動作結果を装置制御ソフトウェアに対して出力するものとする。かかる装置制御ソフトウェアを、従来のシミュレーションシステムでシミュレーションする場合を例とする。なお、本例では、装置制御ソフトウェアのシミュレータ（以下、ＣＰＵシミュレータと記す）と、制御対象装置のシミュレータ（以下、機構部品シミュレータと記す）をそれぞれ連携動作させ、１つのシミュレーションシステムとする。
【０００８】
図２０及び図２１は、本例を従来のシミュレーションシステムでシミュレーションした場合の概念図である。図２０及び図２１には、検証対象ソフトウェアの振る舞いが全く同じであっても、検証対象ソフトウェアが制御するＣＰＵのシミュレータに対するイベントがソフトウェアタイマを基準にして異なる時刻に伝達されることが示されている。
【０００９】
図２０と図２１とでは、機構部品シミュレータの機構部品Ｂの動作結果の出力タイミングが、ソフトウェアタイマ値の切り替わり前であるか後であるかによって、ＣＰＵシミュレータに対するシミュレーション変化の伝達タイミングが異なっている。たとえば、図２０のＡ，Ｂでは500msの前と後、図２１のＡ，Ｂでは501msの前と後である。
【００１０】
また、図２１では、ＣＰＵシミュレータが機構部品Ａの駆動信号を出力した時、機構部品シミュレータの１同期分の処理が既に終了している。そのため、駆動信号出力による機構部品シミュレータのシミュレーション処理は、ＣＰＵシミュレータが駆動信号を出力した次の同期から開始されることになる（図２１では、仮想時間2msから開始）。これも、ＣＰＵシミュレータに対するイベントの伝達タイミングのずれの原因である。
【００１１】
以上のように、従来のシミュレーションシステムでは、ＣＰＵシミュレータが機構部品Ａの駆動信号を出力してから、ＣＰＵシミュレータに機構部品Ｂの動作結果が伝達されるまでのソフトウェアタイマ値は、499〜501msの間でばらついてしまう。例えば、図２０の機構部品Ｂの動作結果の伝達はソフトウェアタイマ値では500ms、図２１の機構部品Ｂの動作結果の伝達はソフトウェアタイマ値では501msである。従って、シミュレーションシステムの仮想時間のタイミングで各シミュレータの同期をとる連携動作方法では、高精度なシミュレーションを行うことができない。
【００１２】
ここで、シミュレーション精度の確保のため、各シミュレータの同期時間間隔を短くすることが考えられる。しかしながら、同期間隔を短くすればするほど、各シミュレータが行うシミュレーション処理に対して、同期を取るために前記プロセス接続部が行う処理の割合が大きくなる。そのため、仮想時間の単位時間当たりに行う同期処理のオーバーヘッドが増加し、シミュレーション実行に要する時間も増加してしまう。
【００１３】
以上のように、従来のシミュレーションシステムの同期方法では、シミュレーションの実行効率を低下させずにシミュレーション精度を確保することができないという問題が挙げられる。
【００１４】
そこで、本発明は、複数のシミュレータが連携して動作するシミュレーションシステムにおいて、ソフトウェアの検証のためにシミュレーションを利用する場合、ソフトウェア自身で作り出しているタイマの変化をトリガとする。これにより、シミュレータ間の同期処理にソフトウェアタイマの変化を利用して各シミュレータを連携動作させることで、シミュレーション効率を低下させることなくシミュレーション精度を確保する。
【課題を解決するための手段】
【００１５】
この課題を解決するために、本発明のシミュレーション方法は、ＣＰＵをシミュレートするＣＰＵシミュレータと、該ＣＰＵの制御対象となる周辺部をシミュレートする少なくとも１つの周辺シミュレータと、各シミュレータの間での同期を実現するためのプロセス接続部とを使って、前記ＣＰＵシミュレータと少なくとも１つの周辺シミュレータとを同期させながらシミュレーションを実行するであって、前記ＣＰＵシミュレータが、前記ＣＰＵシミュレータが有するソフトウェアタイマの変化が発生すると、変化の発生を前記プロセス接続部に通知する工程と、前記ＣＰＵシミュレータが、前記変化の発生を通知した後に、次ぎの前記ＣＰＵシミュレータへのシミュレーションの開始の指示が前記プロセス接続部からあるまでシミュレーションを停止する工程と、前記プロセス接続部が、前記ＣＰＵシミュレータから前記ソフトウェアタイマの変化の発生の通知を受けて、前記ソフトウェアタイマの変化の発生を前記周辺シミュレータに通知する工程と、前記周辺シミュレータが、前記プロセス接続部から前記ＣＰＵシミュレータのソフトウェアタイマの変化の発生を受信する工程と、前記周辺シミュレータが、前記ソフトウェアタイマの変化の発生の受信後に、前記周辺シミュレータが前記ソフトウェアタイマの変化の時間に相当するシミュレーションを終了すると、該シミュレーションの終了を前記プロセス接続部に通知する工程と、前記プロセス接続部が、前記周辺シミュレータの全てからシミュレーションの終了が通知されると、前記ＣＰＵシミュレータ及び前記周辺シミュレータにシミュレーションの開始を指示する工程とを有することを特徴とする。
【００１６】
また、本発明のシミュレーションシステムは、ＣＰＵをシミュレートするＣＰＵシミュレータと、該ＣＰＵの制御対象となる周辺部をシミュレートする少なくとも１つの周辺シミュレータと、各シミュレータの間での同期を実現するためのプロセス接続部とを有し、前記ＣＰＵシミュレータと少なくとも１つの周辺シミュレータとを同期させながらシミュレーションを実行するシミュレーションシステムであって、前記ＣＰＵシミュレータが、前記ＣＰＵシミュレータが有するソフトウェアタイマの変化が発生すると、変化の発生を前記プロセス接続部に通知する手段と、前記変化の発生を通知した後に、次ぎの前記ＣＰＵシミュレータへのシミュレーションの開始の指示が前記プロセス接続部からあるまでシミュレーションを停止する手段とを有し、前記周辺シミュレータが、前記プロセス接続部から前記ＣＰＵシミュレータのソフトウェアタイマの変化の発生を受信する手段と、前記ソフトウェアタイマの変化の発生の受信後に、前記周辺シミュレータが前記ソフトウェアタイマの変化の時間に相当するシミュレーションを終了すると、該シミュレーションの終了を前記プロセス接続部に通知する手段とを有し、前記プロセス接続部が、前記ＣＰＵシミュレータから前記ソフトウェアタイマの変化の発生の通知を受けて、前記ソフトウェアタイマの変化の発生を前記周辺シミュレータに通知する手段と、前記周辺シミュレータの全てからシミュレーションの終了が通知されると、前記ＣＰＵシミュレータ及び前記周辺シミュレータにシミュレーションの開始を指示する手段とを有することを特徴とする。
【００１７】
また、本発明のシミュレーションシステムは、機械装置の動作をコンピュータシステムでシミュレーションし、当該シミュレーションの対象となる装置に搭載されるＣＰＵの制御プログラムに従って、前記対象装置のＣＰＵの端子に対応して定義された仮想入力端子の情報を読み込み、当該仮想出力端子を制御することにより前記対象装置のＣＰＵの動作をシミュレーションする１つ以上のＣＰＵシミュレータと、アクチュエータとセンサを含む複数の部品からなる機械装置の機構モデルと、当該機構モデルの間の干渉及び連携と、前記アクチュエータとセンサに接続される信号とをコンピュータシステムで定義し、外部から入力されたアクチュエータ動作信号として定義された情報に対応したアクチュエータの動作と機構部品間の干渉及び連携の定義に従って、関連する全ての機構部品の動作をコンピュータシステムの表示装置に画像として再現するとともに、前記機構モデルの動作の結果を、前記センサとして定義された機構モデルに対するあらかじめ定義された動作に応じてセンサ信号として定義された情報を外部に出力する１つ以上の機構部品シミュレータと、前記シミュレーションの対象装置の構成物で、前記ＣＰＵシミュレータ及び前記機構部品シミュレータで対応していない構成物の動作と、前記対象装置に対する外部からの働きかけを擬似的に再現する機能と、シミュレーションの結果の解析、表示及び保存する機能と、シミュレーションのためのユーザインタフェースをする機能とを備えた１つ以上のシミュレータと、前記シミュレーションにおけるシミュレータを接続して、１つの機器制御シミュレーションシステムとして動作させるプロセス接続手段とを含み、前記プロセス接続手段は、検証対象のＣＰＵのプログラムが自身で作り出しているタイマの変化をトリガとしてシミュレータ間の連携を行い、前記タイマの変化を１単位として仮想時刻を進め、該仮想時刻により前記各種のシミュレータ間の同期処理を行う連携動作モジュールを有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、検証対象ソフトウェアが処理を実行する仮想時間であるソフトウェアタイマを基準にシミュレーションシステムの仮想時刻を管理して、複数のシミュレータの仮想時刻を一致させることができる。そのため、むやみに同期間隔を小さくすることなく、シミュレーションシステム実行環境の資源を有効に使用でき、シミュレーション効率を低下させることなくシミュレーション精度を確保することができる。
【００１９】
また、本発明によれば、シミュレーションの実行途中で検証対象ソフトウェアが処理を行う際に使用するソフトウェアタイマが変更になる場合でも、シミュレータ間を連携動作させるトリガとなるソフトウェアタイマを切替えることができる。そのため、シミュレーション効率を低下させることなくシミュレーション精度を確保することができる。
【００２０】
また、本発明によれば、複数の処理をそれぞれ異なる時間基準に基づいて実行するソフトウェアを検証する場合でも、シミュレーション精度を確保することができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明のシミュレーションシステムの構成と動作を、添付図面に従って詳細に説明する。
【００２２】
［実施形態１］
本発明の実施形態１は、個々が独立プロセスとして動作する複数シミュレータを接続して１つのシステムとして動作させる機器制御シミュレーションシステムである。かかるシステムにおいて、機器を制御するソフトウェアの検証を目的とした機器制御シミュレーションを実行する際、検証対象のソフトウェア自身が作り出しているタイマ（以下、ソフトウェアタイマと記す）の変化をトリガにする。これにより、複数シミュレータ間の仮想時刻を一致させて複数シミュレータを同期させるものである。なお、実施形態１に係るシミュレーションシステムの機器制御シミュレーションは、コンピュータシステムで実行されるプログラムとして実現されるものである。
【００２３】
＜本実施形態のシミュレーションを実現するコンピュータシステムの構成例＞
図２は、本実施形態に係るシミュレーションを実現するコンピュータシステムの概略構成例を示す図である。なお、このコンピュータシステムにより実施形態１及び実施形態２のシミュレーションが実現される。
【００２４】
コンピュータシステム５０１は、中央処理装置５０２ａ（以下、ＣＰＵと呼ぶ）、主記憶装置５０２ｂ（以下ＲＡＭと呼ぶ）、ハードディスク５０２ｃ等を内蔵した本体部５０２を備える。また、本体部５０２から指示により画面表示を行う表示装置５０３を備える。また、この本体部５０２にユーザの指示や文字情報を入力するためのキーボード５０４と、表示装置５０３上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するマウス５０５とを備えている。
【００２５】
ハードディスク５０２ｃには、機器制御シミュレーションにおける各機能を実現するプログラムと、シミュレーションの対象となる機器情報を含むシミュレーションのための各種データとが格納される。シミュレーションに際しては、前記プログラム及び各種データをＲＡＭ５０２ｂにロードし、ＣＰＵ５０２ａによってプログラムが実行されて、各機器制御がシミュレーションされる。
【００２６】
これらコンピュータシステム５０１の基本動作は、基本プログラムであるオペレーティングシステム（以下、ＯＳと記す）を介して実行される。以下、本実施形態では、コンピュータシステム５０１のＯＳをMicrosoft社の OS（登録商標）の例で説明する。しかし、本発明は OS上のシステムに限定されるものではない。
【００２７】
＜実施形態１のシミュレーションシステムの機能構成例＞
図１は、実施形態１に係るシミュレーションシステムの機能構成例を示す図である。
【００２８】
図１に示すように、このシミュレーションシステムは、システムを構成する３つのシミュレータであるＣＰＵシミュレータ１０１と、機構部品シミュレータ１０２と、汎用動作シミュレータ１０３とを備える。また、これらのシミュレータを管理するプロセス接続部であるシミュレータハブ（以下、ＨＵＢと記す）１０４を備えて構成される。ＣＰＵシミュレータ１０１、機構部品シミュレータ１０２、汎用動作シミュレータ１０３は、それぞれがＯＳ上で個別に動作するシミュレータであり、それぞれが独立したプロセスとして存在する。
【００２９】
次に、各構成要素の機能について説明する。
【００３０】
（ＣＰＵシミュレータ１０１）
ＣＰＵシミュレータ１０１は、シミュレーション対象となるＣＰＵ（以下、ターゲットＣＰＵと呼ぶ）の動作をコンピュータシステム５０１上で実現する機能である。ここで、ターゲットＣＰＵとは、コンピュータシステム５０１に搭載されているＣＰＵ５０２ａではなく、シミュレーションの対象となる装置に搭載され、該装置を制御するためのＣＰＵのことである。
【００３１】
ＣＰＵシミュレータ１０１は、ターゲットＣＰＵの制御プログラム（以下、ターゲットファームウェアと呼ぶ）に従って、ターゲットＣＰＵの端子に対応して定義された仮想入力端子の情報を読み込み、仮想出力端子を制御する。
【００３２】
また、ＣＰＵシミュレータ１０１は、ターゲットＣＰＵのアドレス空間に対応した仮想アドレス空間を用意している。ここで、仮想アドレス空間とは、ターゲットＣＰＵの管理するアドレス空間上の個々の領域と１対１で対応する領域をコンピュータシステム５０１のＲＡＭ５０２ｂ上に定義したものである。仮想アドレス空間のコンピュータシステム５０１上の実アドレス値は、ターゲットＣＰＵの扱うアドレス値とは異なる。そして、ＣＰＵシミュレータ１０１は、ターゲットファームウェアによるターゲットＣＰＵのアドレス空間上のアドレス値へのアクセス命令に従って、仮想アドレス空間上の対応する領域にアクセスする。また、ターゲットＣＰＵのレジスタ類も、前記仮想アドレス空間上に対応する領域が設定され、レジスタ類へのアクセスも仮想アドレス空間へのアクセスによってシミュレーションされる。
【００３３】
コンピュータシステム５０１上でのターゲットファームウェアの処理のシミュレーション方法としては、次ぎの２つがある。１つは、ターゲットファームウェアのソースプログラムをコンピュータシステム５０１のネイティブ言語に変換して実行する方式である。もう１つは、ターゲットＣＰＵの実行命令を１語ずつ解釈し、コンピュータシステム５０１のＣＰＵに対応した実行命令に翻訳しながら実行する方式である。本実施形態は、何れのＣＰＵシミュレーション方式にも対応する。
【００３４】
ＣＰＵシミュレータ１０１は、自身のシミュレータのイベント発生毎に、ＨＵＢ１０４に自身のイベント発生を通知する。ＣＰＵシミュレータ１０１がイベント発生を通知する例としては、ターゲットＣＰＵの動作シミュレーション上のイベント（メモリアクセスや割り込み発生等）がある。また、ＣＰＵシミュレータ１０１は、イベント発生時点で、ＨＵＢ１０４にイベント発生を通知するのと同時に、シミュレーション処理の実行を一時停止させる。そして、ＨＵＢ１０４から再びシミュレーション処理の実行を指示されるまで停止し、再び指示があるとシミュレーション処理を再開する。
【００３５】
（機構部品シミュレータ１０２）
機構部品シミュレータ１０２は、アクチュエータやセンサを含む複数の部品からなる機械装置の機構部品、当該機構部品間の干渉や連携、前記アクチュエータやセンサに接続される信号を、前記コンピュータ上でシミュレーションする。そして、シミュレーション結果を表示装置５０３上に表示する。
【００３６】
各機構部品には、ユーザにより形状、種類、動作、機構部品間の干渉や連携条件等の、機構部品のシミュレーションに関する情報が定義される。更に、センサやアクチュエータについては外部信号の定義が行われる。これら機構部品の定義は、ＣＡＤ図面からの自動設定、専用の機構部品作成ソフトウェアをユーザが操作して設定、その両方の組み合わせで設定するなどして行われる。前記のように定義される機構部品の種類としては、単なる物体として定義されるものと機能定義がなされるもの（モータ、ソレノイド、クラッチ、センサ、歯車、カム、ローラ等）とがある。また、機構部品には、シミュレーションの対象となる装置の構成物ではないもので、装置の動作シミュレーションに必要なものも含まれる。例えば、シミュレーション対象の装置がプリンタ装置である場合、プリンタ装置における用紙等が装置の動作シミュレーションに必要なものである。
【００３７】
機構部品シミュレータ１０２は、ＣＰＵシミュレータ１０１からＨＵＢ１０４を介して送られてきたアクチュエータ動作信号に対応して、該当するアクチュエータの機構部品動作のシミュレーションを行う。また、アクチュエータに連結された機構部品は、アクチュエータの動作に関連付けて定義された動きで動作をシミュレーションする。なお、オペレータの操作により動作する機構については、キーボード５０４やマウス５０５によってオペレータによる機構部品への操作を擬似的に再現し、擬似操作に応じて対象となる機構部品を定義された動きで動作をシミュレーションする。更に、機構部品間の干渉や連携の定義に従い、関連する全ての機構部品の動作をシミュレーションする。
【００３８】
これら機構部品の動作をシミュレーションした結果、センサとして定義された機構部品にあらかじめ定義された外部から様々な働きかけ（以下、外部事象と記す）が発生すると、外部事象に応じたセンサ信号を変化させるイベントを発生する。前記センサ信号のイベントをＨＵＢ１０４に通知し、シミュレーション処理を継続する。前記センサ信号はＨＵＢ１０４を介してＣＰＵシミュレータ１０１に送信される。
【００３９】
ここで、機構部品シミュレータ１０２による機構モデルの表示例を示す。
【００４０】
図３は、本実施形態における対象装置の一例であるプリンタ装置の機構部品シミュレーションの結果表示アプリケーションによる表示例である。
【００４１】
６０１は給紙カセット、６０２はプリント用紙、６０３は用紙搬送路、６０４はセンサ、６０５はローラ、６０６はフラッパ、６０７は排紙トレイの機構部品モデルである。これらの機構部品モデルは、機構部品シミュレータ１０２がシミュレートした機構部品の動作および機構部品に接続される信号のシミュレーションデータを参照する。そして、前記シミュレーションデータの変化に応じて機構部品を動かし、グラフィックとして表示装置５０３上に表示された例である。
【００４２】
（汎用動作シミュレータ１０３）
汎用動作シミュレータ１０３は、ＣＰＵシミュレータ１０１や機構部品シミュレータ１０２以外の各種装置構成に対応したシミュレーション機能、および、仮想装置に対する各種働きかけの設定機能をもつ。シミュレーションの対象となる実際の装置（本例ではプリンタ装置）は、その装置を使用するオペレータやその装置に接続された外部事象を受けて動作する。汎用動作シミュレータ１０３は、これら外部事象のうち、機構部品シミュレータ１０２で設定されるメカニカルな外部事象以外のものを擬似的に設定する方法を提供する。また、シミュレーションの結果の解析、表示及び保存する機能も有する。
【００４３】
本実施形態における対象装置であるプリンタ装置の例では、メカニカルな外部事象としては、給紙カセットの操作や消耗部品の取り外し／取り付け等が挙げられる。一方、それ以外の外部事象としては、ホストＰＣからの各種命令の受信、オペレータによるオペレーションパネルの操作、環境温度の変化等が挙げられる。
【００４４】
汎用動作シミュレータ１０３は、これらを設定するための専用のユーザインタフェース（以下、ＵＩと記す）を提供する。また、汎用動作シミュレータ１０３は、当該ＵＩによる設定に従って、ＨＵＢ１０４を介してＣＰＵシミュレータ１０１や機構部品シミュレータ１０２に所定の外部事象を加える。
【００４５】
また、汎用動作シミュレータ１０３は、コンピュータシステム５０１のハードディスクに格納された、連続した外部事象の設定手順を記述したマクロ命令ファイルや一連の外部事象データを記述したファイルを必要に応じて読み出す。そして、ＨＵＢ１０４を介してＣＰＵシミュレータ１０１や機構部品シミュレータ１０２に対して一連の外部事象を与える。
【００４６】
なお、汎用動作シミュレータ１０３は、機能によって複数の独立プロセスで構成される場合がある。
【００４７】
なお、以下、機構部品シミュレータ１０２および汎用動作シミュレータ１０３の２つのシミュレータをまとめて、ＣＰＵの制御対象となる周辺部をシュミュレートする周辺シミュレータと記す。周辺シミュレータは、当該仮想時刻で自身のシミュレータが実行するシミュレーション処理に関する情報（以下、シミュレーション処理情報と記す）を、自身のシミュレータ内部に保持している。前記シミュレーション処理情報は、シミュレーション処理の実行順にシミュレーション処理情報格納部（不図示）に格納し、前記シミュレーション処理情報格納部での格納順にシミュレーション処理を実行する。
【００４８】
（シミュレータインタフェース１０７ａ、１０７ｂ、１０７ｃ）
ＣＰＵシミュレータ１０１、機構部品シミュレータ１０２および汎用動作シミュレータ１０３は、各シミュレータとＨＵＢ１０４とを接続するシミュレータインタフェース１０７ａ、１０７ｂ、１０７ｃを介してＨＵＢ１０４と接続されている。なお、シミュレータインタフェース１０７ａ、１０７ｂ、１０７ｃは、公知技術であるので詳述は省略する。また、以下、単にシミュレータと記した場合は、ＣＰＵシミュレータ１０１、機構部品シミュレータ１０２および汎用動作シミュレータ１０３を含むものである。
【００４９】
各シミュレータは、処理実行指示部１１３（詳細は後述する）からの処理実行指示に従って処理を行う。また、周辺シミュレータは、処理実行指示部１１３から指示されたシミュレーション処理の実行を終えると、シミュレータインタフェース１０７ｂ、１０７ｃを介してＨＵＢ１０４に処理の実行終了を通知する。以下、指示された処理の実行終了の通知を、実行終了通知と記す。なお、シミュレーション処理の実行の終了判断については、後述する。
【００５０】
（ＨＵＢ１０４）
ＨＵＢ１０４は、コア部１０５とインタフェースモジュール１０６ａ、１０６ｂ、１０６ｃとから構成される。インタフェースモジュール１０６ａ、１０６ｂ、１０６ｃは、コア部１０５と各シミュレータとの接続を仲介する機能を有する。なお、インタフェースモジュール１０６ａ、１０６ｂ、１０６ｃは、公知の技術であるので詳述は省略する。
【００５１】
コア部１０５は、連携動作定義情報管理モジュール１０９と連携動作モジュール１１２とから構成され、シミュレータ間のデータ伝送管理、同期処理、データ伝送履歴の取得を行う機能を有する。なお、ＨＵＢ１０４は、機器モデルシミュレータ１０２および汎用動作シミュレータ１０３などの他のアプリケーションとは独立したプロセスで動作している。
【００５２】
連携動作定義情報管理モジュール１０９は、シミュレータ間を連携動作させるための情報を管理するモジュールであり、ソフトウェアタイマ情報１１０とシミュレータ間での配線定義情報１１１とを有する。ソフトウェアタイマ情報１１０とは、シミュレータ間の連携動作トリガとなるソフトウェアタイマに関する情報であり、タイマ特定情報とタイマ間隔情報とを含む。ここで、タイマ特定情報とは、ターゲットファームウェアが扱う変数のうち、いずれがソフトウェアタイマの変数であるかを特定する情報に相当する。また、タイマ間隔情報とは、ソフトウェアタイマ値の変化間隔が仮想時間相当でいくつになるのかの設定情報に相当する。
【００５３】
配線定義情報１１１は、シミュレータ間を結ぶデータに関する各種設定情報である。配線定義情報１１１は、例えば、機器制御シミュレーションシステム中のモータ駆動信号は、ＣＰＵシミュレータ１０１から出力されて機構部品シミュレータ１０２に入力される、といった情報である。
【００５４】
連携動作モジュール１１２は、処理実行指示部１０９とイベント伝達部１１４とから構成される。連携動作モジュール１１２は、ソフトウェアタイマの変化を仮想時刻の１単位として、前記１単位ごとに複数シミュレータ間の仮想時刻を一致させる同期処理を行う。また、各シミュレータのシミュレーション動作に伴って発生したイベントを、配線定義情報１１１に従って該シミュレータへ伝達する処理を行う。
【００５５】
イベント伝達部１１４は、シミュレーション動作中に発生したイベントがソフトウェアタイマ値の変化（以下、タイマイベントと記す）であるか、タイマイベント以外のイベント（以下、データイベントと記す）であるかを判断する。そして、前記イベントにイベントの種類がタイマイベントかデータイベントであるかを特定する情報を付加して、当該シミュレータにイベントを伝達する。
【００５６】
イベント伝達部１１４は、発生イベントがソフトウェアタイマ情報１１０で特定されるソフトウェアタイマに相当するシミュレーションデータ値の変化である場合、発生イベントがタイマイベントであると判断する。一方、発生イベントがソフトウェアタイマに相当するシミュレーションデータ値の変化ではない場合、データイベントと判断する。なお、発生イベントがタイマイベントである場合、イベント伝達部１１４は、全ての周辺シミュレータにイベントを伝達する。一方、発生イベントがデータイベントである場合、イベント伝達部１１４は、あらかじめ設定された配線定義情報１１１に従って、発生イベントを当該シミュレータに伝達する。各シミュレータは、データイベントの発生に応じて前記データイベントに関するシミュレーション動作を行う。
【００５７】
処理実行指示部１１３は、各シミュレータに対してシミュレーション処理の実行指示（以下、処理実行指示と記す）を出す。前記処理実行指示は、ＣＰＵシミュレータ１０１に対しては、シミュレーション処理を実行する仮想時間を指定することなく処理実行を指示する。一方、周辺シミュレータには、前記タイマ間隔情報の示す仮想時間相当のシミュレーション処理実行を指示する。前記処理実行指示は、シミュレータインタフェース１０７ａ、１０７ｂ、１０７ｃを介して、各シミュレータに伝達される。
【００５８】
処理実行指示部１１３は、イベント伝達部１１４が、シミュレーションシステムで発生したイベントをＣＰＵシミュレータで発生したデータイベントと判断した場合、即座にＣＰＵシミュレータ１０２に対して処理実行開始を指示する。イベント伝達部１１４が、シミュレーションシステムで発生したイベントをタイマイベントと判断した場合は、次の処理をする。すなわち、連携動作させる全ての周辺シミュレータから実行終了通知を受信した時点で、次の仮想時刻のシミュレーション処理を実行するよう、再び各シミュレータに処理実行を指示する。
【００５９】
（外部インタフェース１０８）
外部インタフェース１０８は、オペレータ１０８ａが設定した、シミュレーションシステムを構成する複数のシミュレータが連携動作を行うための各種情報を、コア部１０５の外部からコア部１０５に渡す際のインタフェースとなる。
【００６０】
＜本実施形態のソフトウェアタイマの設定例＞
ここで、本実施形態のソフトウェアタイマ情報１１０の設定方法について、外部インタフェース１０８としてＧＵＩ（グラフィカルユーザインタフェース）を使用する場合を例にあげて説明する。
【００６１】
図４は、前記ＧＵＩによって前記表示装置５０３上に表示されるソフトウェアタイマ情報設定のための表示例である。ＧＵＩには、ソフトウェアタイマに相当するターゲットファームウェアで扱う変数名設定欄４０１とタイマ間隔設定欄４０２とがある。シミュレーションシステムのオペレータは、設定対象の欄をマウス５０５により指定し、該指定個所にキーボード５０４から数字もしくは文字を記入する。ソフトウェアタイマの変数名設定欄４０１であれば、ソフトウェアで扱うソフトウェアタイマの変数名を記入する。タイマ間隔設定欄４０２であれば、ソフトウェアタイマ値の変化間隔がシミュレータ上の仮想時間相当でいくつであるのかを数字で記入し、仮想時刻の１単位が仮想時間相当でいくつであるのかを設定する。
【００６２】
オペレータがソフトウェアタイマの変数名およびタイマ間隔設定終了後、ＯＫボタン４０３をマウス５０５でクリックした時点で、タイマ特定情報とタイマ間隔情報とを確定する。そして、確定されたタイマ特定情報とタイマ間隔情報とは、外部インタフェース１０８を介して連携動作定義情報管理部１０９の中に格納される。前記格納された情報がソフトウェアタイマ情報１１０である。シミュレーションシステムの動作開始時、前記ソフトウェアタイマ情報１１０のタイマ特定情報として設定されたソフトウェアタイマの変数名から、前記変数名の示すソフトウェアタイマ変数が配置されているターゲットＣＰＵのアドレスを取得する。前記ソフトウェアタイマ変数のアドレス取得には、ＣＰＵシミュレータ１０１のもつデバッグ情報（不図示）を使用する。
【００６３】
上記説明では外部インタフェース１０８としてＧＵＩを使用した例を挙げたが、ＧＵＩ以外に、外部ファイルインタフェースやプロセス間通信を使用し、コア部１０５がソフトウェア情報を取得する方法もある。外部ファイルインタフェースを使用する場合、あらかじめ定義された書式に従って編集したソフトウェア情報を記述したファイルをユーザが用意し、外部ファイルインタフェースを介してソフトウェア情報を取得する。プロセス間通信を使用する場合は、前記コア部１０５とプロセス間通信で接続されている不図示のシミュレーション実行環境指定のためのアプリケーション（前記コア部分と別プロセス）を使用し、ユーザがソフトウェアタイマ情報１１０を設定する方法もある。
【００６４】
＜実施形態１のシミュレーションシステムの動作手順例＞
以下、シミュレーション中のＨＵＢ１０４、ＣＰＵシミュレータ１０１、周辺シミュレータの動作手順例についてフローチャートを用いて説明する。
【００６５】
（ＨＵＢ１０４の動作手順例）
図５は、シミュレーションシステムを構成する複数シミュレータを連携動作させるためのＨＵＢ１０４の動作手順例を示したフローチャートである。
【００６６】
まず、処理実行指示部１１３がインタフェースモジュール１０６ａを介して、ＣＰＵシミュレータ１０１にシミュレーション処理実行の開始を指示する(S801)。続いて、インタフェースモジュール１０６ｂおよび１０６ｃを介して、周辺シミュレータにソフトウェタイマの１単位に相当する仮想時間分のシミュレーション処理実行を指示する（S802）。なお、ソフトウェアタイマの１単位の仮想時間は、タイマ間隔情報の示す仮想時間である。
【００６７】
次に、各シミュレータからのイベントが発生するまでウェイトする(S803)。イベント伝達部１１３が、ステップS803で発生したイベントがタイマイベントであるかをチェックする（S804）。
【００６８】
ステップS804でのチェック結果で発生したイベントがタイマイベントである場合は、イベント伝達部１１３が、インタフェースモジュール１０６ｂおよび１０６ｃを介して、全周辺シミュレータにタイマイベント情報を伝達する（S805）。全での周辺シミュレータにタイマイベントの伝達後、処理実行指示部１１３が全での周辺シミュレータから実行終了通知を受け取るまでウェイトする(S806)。処理実行指示部１１３が全ての周辺シミュレータから実行終了通知を受け取った時点で、ステップS801の処理へ戻り、次の仮想時刻の連携動作処理に移行する。
【００６９】
ステップS804でのチェック結果で発生したイベントがタイマイベントでない（すなわちデータイベントである）場合、イベント伝達部１１３は、配線定義情報１１１に従って該シミュレータにデータイベントを伝達する（S807）。続いて、ステップS807で伝達したデータイベントの発生源がＣＰＵシミュレータ１０１であるかをチェックする(S808)。ステップS808でのチェックの結果、データイベント発生源がＣＰＵシミュレータ１０１である場合、ＣＰＵシミュレータ１０１に処理実行の開始を指示する(S809)。ステップS808でのチェックの結果、データイベント発生源がＣＰＵシミュレータ１０１でない（周辺シミュレータである）場合、ステップS803に戻って各シミュレータからのイベントが発生するまでウェイトする。
【００７０】
（ＣＰＵシミュレータ１０１の動作手順例）
次に、検証対象のソフトウェア動作をシミュレーションするＣＰＵシミュレータ１０１のシミュレーション中の動作について、図６を用いて説明する。
【００７１】
図６は、ＣＰＵシミュレータ１０１の動作手順例を示したフローチャートである。
【００７２】
ＣＰＵシミュレータ１０１は、処理実行指示部１１３からの処理実行指示を受信するまでウェイトする(S901)。処理実行指示を受信後、シミュレーション処理を実行する（S902）。シミュレーション実行中にイベントが発生すると（S903）、ＨＵＢ１０４にイベント発生を通知し(S904)、シミュレーション処理を一時停止させる（S905）。ステップS905でシミュレーション処理を一時停止させた後は、ステップS901に戻って処理実行の指示を受信するまでウェイトする（図５のステップS801, S809参照）。
【００７３】
（周辺シミュレータの動作手順例）
図７は、周辺シミュレータの動作手順例を示したフローチャートである。
【００７４】
周辺シミュレータは、処理実行指示部１１３からの処理実行指示を受信するまでウェイトする(S1001)。処理実行指示を受信後、シミュレーション処理を実行する（S1002）。シミュレーション実行中にイベントが発生したら（S1003）、前記イベントの発生をＨＵＢ１０４に通知する(S1004)。そして、処理実行指示部１１３から指示された仮想時間分のシミュレーション処理が終了したかをチェックする(S1005)。
【００７５】
ステップS1005のチェックの結果、指定された仮想時間分のシミュレーション処理が終了していたら、ＨＵＢ１０４に実行終了の通知を送信（S1006）し、ステップS1001に戻って処理実行指示を受信するまでウェイトする。一方、ステップS1005のチェックの結果、指定された仮想時間分のシミュレーション処理が終了していなかった場合は、ステップS1002のシミュレーション処理実行の処理に戻る。
【００７６】
なお、ステップS1005での「指定された仮想時間分のシミュレーション処理終了」の判断条件は、次のような条件である。当該仮想時刻における処理として予め定められたシミュレーション処理を終了し、かつ、イベント伝達部１１３から伝達されたタイマイベント以前に受信したデータイベントに関するシミュレーション処理を全て終了していることである。
【００７７】
以上の処理により、周辺シミュレータはタイマイベント受信以前に受信したデータイベントを該仮想時刻でのシミュレーションデータ変化としてシミュレーション動作する。これにより、シミュレーション処理実行タイミングによらず、シミュレーションデータの変化をシミュレーションデータの変化が発生した仮想時刻と同一の仮想時刻の処理に反映することができる。
【００７８】
＜実施形態１のシミュレーションシステムの連携動作例＞
（実施形態１のシミュレーションシステムの具体的構成例）
ここで、実施形態１により、ＣＰＵシミュレータ、機構部品シミュレータをそれぞれ連携動作させて、１つのプリンタエンジンシミュレータとして動作させる場合を例に挙げる。
【００７９】
本例では、シミュレーション対象ＣＰＵを制御するソフトウェアは、1ms毎に変化するソフトウェアタイマ（変数名：TimerＡ）を基準に動作する。また、シミュレーション対象のプリンタ装置は、プリンタ装置の所定位置にある紙を紙搬送モータが駆動源である紙搬送ローラが搬送する。紙搬送モータの駆動信号が出力されてから500ms後に、搬送された紙の先端が紙検知センサに到達し、紙検知センサ信号が紙検知状態に変化するよう動作するものとする。
【００８０】
各シミュレータは、図８のように連携動作し、以下の1)-7)のような順序で動作する。
1)：ＣＰＵシミュレータ１０１が紙搬送制御１０１ｂを開始する。
2)：ＣＰＵシミュレータ１０１がモータ駆動信号を出力する（１０１ａ）。
3)：モータ駆動信号の出力によって、機構部品シミュレータ１０２のモータモデルが駆動する（１０２ａ）。
4)：モータ駆動によって、モータを駆動源とする紙搬送ローラモデルが紙モデルを搬送する（１０２ｂ）。
5)：紙モデルの搬送によって、紙搬送路上の所定位置に設置されている機構部品シミュレータ１０２上の紙検知センサモデル（以下、単にセンサと記す）が紙検知状態に変化する（１０２ｃ）。
6)：ＣＰＵシミュレータ１０１にセンサ変化が入力される。
7)：ＣＰＵシミュレータ１０１はセンサ信号変化に応じた紙搬送制御を行う（１０１ｂ）。
8)：ＣＰＵシミュレータ１０１はモータ駆動信号出力する（１０１ａ）。    
シミュレーションシステムのユーザは、ソフトウェアタイマ情報を以下の表１のように設定する。
【００８１】
【表１】
2010128987.tif 000003
【００８２】
（実施形態１のシミュレーションシステムの動作例）
図９は、実施形態１における各シミュレータとＨＵＢ１０４の連携動作を示した模式図である。
【００８３】
まず、(1):ＨＵＢ（プロセス接続部）１０４は、各シミュレータにシミュレーション処理の実行を指示する。(2):ＣＰＵシミュレータ１０１は、処理実行の指示を受ける。(3)(4):機構部品シミュレータ１０２と汎用動作シミュレータ１０３は、ソフトウェアタイマ情報１１０のタイマ間隔分のシミュレーションを実行するよう指示を受ける。各シミュレータでシミュレーション処理を開始する。
【００８４】
(5):ＣＰＵシミュレータ１０１でソフトウェアタイマ値の変化（1msの経過）が発生すると、ＣＰＵシミュレータ１０１は、ＨＵＢ１０４にイベント発生を通知し、自身のシミュレーションを一時停止させる。
【００８５】
(6):ＨＵＢ１０４のイベント伝達部１１３は、(5)で発生したイベントがタイマイベントであると判別し、タイマイベント発生を機構部品シミュレータ１０２と汎用動作シミュレータ１０３に伝達する。(7)(8):機構部品シミュレータ１０２と汎用動作シミュレータ１０３は、ＨＵＢからタイマイベントを伝達される。そして、タイマイベント伝達前までにＨＵＢ１０４から受信したデータイベントに関するシミュレーション処理を含むタイマ間隔分のシミュレーション処理実行する。前記タイマ間隔分のシミュレーション処理とは、該仮想時刻で行う処理として予め決められたシミュレーションと、データイベント発生によるシミュレーションとの両方のシミュレーション処理のことである。データイベント発生によるシミュレーションとは、例えば、ＣＰＵシミュレータ１０１の機構部品Ａの駆動信号出力によるデータイベント発生による、機構部品シミュレータ１０２が実行するタイマ間隔分の機構部品Ａの駆動シミュレーションなどである。
【００８６】
(9)(10):機構部品シミュレータ１０２および汎用動作シミュレータ１０３は、タイマ間隔分に相当する仮想時間分のシミュレーション処理を終了すると、実行終了をＨＵＢに通知する。(11):ＨＵＢ１０４は全ての周辺シミュレータから実行終了の通知を受け取ると、ＣＰＵシミュレータ１０１と機構部品シミュレータ１０２、および汎用動作シミュレータ１０３に処理実行を指示する。
【００８７】
(12)(13)(14):前記処理実行指示を受け取った各シミュレータは、再び処理実行を開始する。
【００８８】
以上を繰り返すことで、複数シミュレータ間の仮想時刻を一致させ、シミュレーションを行う。
【００８９】
＜実施形態１のシミュレーションの結果＞
図１０は、上述の実施形態１のシミュレーションシステムで複数シミュレータ間のシミュレーションを行った際のシミュレーションの結果を示した図である（従来例の図２０及び図２１を参照）。図１０には、検証対象ソフトウェアの振る舞いが全く同じである場合に、検証対象ソフトウェアが制御するＣＰＵのシミュレータに対するイベントが、ソフトウェアタイマを基準にして同一時刻に伝達されることを概念的に示している。
【００９０】
実施形態１のＨＵＢ１０４は、検証対象ソフトウェアのソフトウェアタイマ値の変化をトリガにして複数シミュレータ間の連携動作を行っている。そのため、従来のシミュレーションシステムで起こっていたイベント発生タイミングが、ソフトウェアタイマ値の切り替わりの前後いずれであるかによる、イベント伝達のばらつきは起こらない。このことは、センサ信号のイベント発生タイミングが図１０中のＡ、Ｂのいずれの場合にも、ＣＰＵシミュレータに対して同一のソフトウェアタイマの時刻（図１０では500ms）にセンサ信号変化のイベントが伝達されていることからもわかる。
【００９１】
また、実施形態１での周辺シミュレータは、タイマイベント、つまりソフトウェアタイマ値の変化の発生を伝達される以前に受け取ったデータイベントについては、該仮想時刻でシミュレーション処理を行う。すなわち、ＣＰＵシミュレータで発生したモータ駆動信号の出力に関するシミュレーション処理は、必ずモータ駆動信号が出力されたのと同一の仮想時刻（図１０では1ms）で行われる。従って、実施形態１のシミュレーションシステムでは、ＣＰＵシミュレータがモータ駆動信号を出力してから、ＣＰＵシミュレータにセンサ信号の変化が伝達されるまでのソフトウェアタイマ値は500msとなる。すなわち、ソフトウェアタイマ値の変化のタイミングで各シミュレータの同期をとる本方法によれば、ＣＰＵシミュレータがモータ駆動信号を出力した時点から、ソフトウェアタイマで500ms後にセンサ信号を紙検知状態に変化するのを保証できる。そのため、精度の良いシミュレーションを行うことができる。
【００９２】
＜実施形態１の効果＞
上記のように、複数シミュレータ間の連携動作を検証対象ソフトウェアのソフトウェアタイマを１単位として行う。それにより、検証対象ソフトウェアが機器制御で使用するタイマの動作単位でシミュレーションシステムを構成する全てのシミュレータの仮想時刻を一致させることができる。
【００９３】
また、周辺シミュレータは、タイマイベント受信以前に受信したデータイベントを該仮想時刻で発生したシミュレーションデータの変化として捉える。そして、該仮想時刻のシミュレーション動作に前記データイベントに伴うシミュレーション処理を実行することができる。そのため、各シミュレータの処理実行タイミングに因らず、シミュレーションデータの変化をシミュレーションデータの変化が発生した仮想時刻のシミュレーション処理に反映することができる。
【００９４】
更に、検証対象ソフトウェアのソフトウェアタイマ単位でシミュレーションシステムの同期処理を行うため、同期間隔を必要以上に小さくすることなく精度のよいシミュレーションを実行することができる。つまり、シミュレーション実行目的を満たすために最適な同期間隔でシミュレータ間の連携動作を行うことができる。その結果として、シミュレーション実行環境資源の有効利用が可能になり、シミュレーションの利用効率を上げることができる。
【００９５】
［実施形態２］
実施形態１では、複数シミュレータ間の連携動作トリガとなるソフトウェアタイマが、シミュレーション実行中は常に同じ場合の例であった。しかし、シミュレータ間の連携動作トリガを、ソフトウェアの処理内容によってシミュレーション実行途中で変更させたい場合がある。
【００９６】
そこで、実施形態２では、シミュレーション実行途中で、複数シミュレータ間の連携動作トリガのソフトウェアタイマを変更する場合のシミュレーションシステムについて説明する。
【００９７】
＜実施形態２のシミュレーションシステムの機能構成例＞
実施形態２のシミュレーションシステムは、実施形態１のシミュレーションシステムでのシミュレーションシステム構成に、新たに１つの構成要素が加わったものである。
【００９８】
図１１に、実施形態２のシミュレーションシステムの機能構成例を示す。なお、図１１の１４０１〜１４１４は、図１の１０１〜１１４に相当するので説明の重複は避ける。
【００９９】
実施形態２の新規な構成要素であるソフトウェアタイマ情報管理部１４１５は、シミュレータ間の連携動作トリガとなるソフトウェアタイマ（以下、連携動作トリガタイマと記す）を変更する条件を示す情報１４１６を保持する。この情報を、以下、連携動作トリガタイマ変更情報１４１６と称す。前記連携動作トリガタイマ変更情報１４１６に従い、シミュレーションの該仮想時刻での連携動作トリガタイマの決定及びソフトウェアタイマ情報１４１０の更新を行う。
【０１００】
実施形態１では、シミュレーション実行中にシミュレータ間の連携動作トリガとなるソフトウェアタイマを変更することがなかった。そのため、シミュレータ間の連携動作トリガとなるソフトウェアタイマ情報１１０は、ユーザがＧＵＩや外部ファイルインタフェース等を使用して設定したタイマ特定情報とタイマ間隔情報とであった。
【０１０１】
実施形態２の場合、シミュレーション実行中にシミュレータ間の連携動作トリガとなるソフトウェアタイマを変更するため、ソフトウェアタイマ情報管理部１４１５が、次のような処理を行う。すなわち、ＨＵＢ（プロセス接続部）１４０４の外部から設定された連携動作トリガタイマ変更情報１４１６に従って、タイマ特定情報とタイマ間隔情報とをソフトウェアタイマ情報１４１０に設定する。かかるタイマ特定情報とタイマ間隔情報とが、シミュレーションの該仮想時刻でのシミュレータ間の連携動作トリガとなるソフトウェアタイマのタイマ特定情報とタイマ間隔情報となる。
【０１０２】
＜連携動作トリガタイマの変更例＞
（連携動作トリガタイマ変更情報例）
連携動作トリガタイマの変更条件は、例えば、ソフトウェアが扱う所定の変数（変数名：Ａ）が所定値（所定値：Ｂ）の時、ソフトウェアが扱う変数（変数名：TimerＡ）を連携動作トリガとなるソフトウェアタイマとする、といった条件である。
【０１０３】
図１２は、連携動作トリガタイマ変更情報１４１６を設定するＧＵＩの例である。前記ＧＵＩには、ソフトウェアタイマに相当するターゲットファームウェアで扱う変数名設定欄１２１と、タイマ間隔設定欄１２２、および該ソフトウェアタイマを連携動作トリガとして使用する条件設定欄１２３の３つがある。図１２のＧＵＩは、以下の連携動作トリガタイマ変更情報を示している。
【０１０４】
ソフトウェアが扱う変数Ａが"１"の時、連携動作トリガタイマとしてソフトウェアタイマ"TimerＡ"を使用し、ソフトウェアが扱う変数Ａが"10"の時、連携動作トリガタイマとしてソフトウェアタイマ"TimerＢ"を使用する。また、ソフトウェアが扱う変数Ａが"20"の時、連携動作トリガタイマとしてソフトウェアタイマ"TimerＣ"を使用する。各タイマのタイマ間隔はTimerＡ：１[ms]、TimerＢ：10[ms]、TimerＣ：20[ms]である。
【０１０５】
ユーザは、変数名設定欄１２１に、シミュレーション実行時の複数シミュレータ間の連携動作トリガとするソフトウェアタイマの変数名を設定する。また、タイマ間隔設定欄１２２に、前記ソフトウェアタイマの値が変化する間隔に相当する仮想時間を設定する。更に、条件設定欄１２３に、前記ソフトウェアタイマをトリガとして連携動作する際の条件を設定する。各設定欄への数値および文字の記入方法は、図４でのソフトウェアタイマ情報１１０の設定時と同様である。
【０１０６】
ユーザが、連携動作トリガタイマ変更情報の記入を終えたら、ＧＵＩ上のＯＫボタン１２４をマウス５０５でクリックする。ＧＵＩ上のＯＫボタン１２４が押された時点で、タイマ特定情報とタイマ間隔情報、および前記連携動作トリガタイマの使用条件情報を確定する。そして、外部インタフェース１４０８を介してソフトウェアタイマ情報管理部１４１５中に格納される。また、連携動作トリガタイマ変更条件の欄を追加したい場合には、追加ボタン１２５をクリックすることで、連携動作トリガタイマ変更条件の欄が既存の設定欄の下に追加される。
【０１０７】
（ソフトウェアタイマ情報管理部の動作手順例）
ここで、ソフトウェアタイマ情報管理部１４１５の連携動作トリガタイマの管理手順例について説明する。
【０１０８】
図１３は、ソフトウェアタイマ情報管理部１４１５が連携動作トリガタイマを管理するための処理手順例を示したフローチャートである。
【０１０９】
ソフトウェアタイマ情報管理部１４１５は、イベントが発生するまでウェイトする（S1601）。イベントが発生した時点で、ソフトウェアタイマ情報管理部１４１５が保持している連携動作トリガタイマ変更情報１４１６が示す連携動作トリガタイマ変更条件と、前記イベントとが一致するかをチェックする（S1602）。
【０１１０】
ステップS1602でのチェック結果が、連携動作トリガタイマ変更条件が成立していた場合は、ソフトウェアタイマ情報１４１０を一致した連携動作トリガタイマのタイマ特定情報とタイマ間隔情報とに更新して（S1603）、ステップS1601に戻る。ステップS1602でのチェックの結果、連携動作トリガタイマ変更条件が不成立である場合、ステップS1601に戻ってイベント発生をウェイトする。
【０１１１】
＜実施形態２のシミュレーションの動作例＞
ＣＰＵシミュレータ１４０１、機構部品シミュレータ１４０２をそれぞれ連携動作させて、１つのプリンタエンジンシミュレータとして動作させる場合を例に挙げて、実施形態２のシミュレーションシステムに係る機能を説明する。
【０１１２】
検証対象ＣＰＵは、紙の搬送制御中には、ソフトウェアタイマＡ（変数名：TimerＡ）をソフトウェア内の処理タイマとして使用する。紙の搬送制御を行っていない時には、ソフトウェアタイマＢ（変数名：TimerＢ）をソフトウェア内の処理タイマとして使用する。また、ＣＰＵが紙の搬送制御中であるか否かは、紙搬送制御状態を示す変数（変数名：State）の値によって表される。本例では、ＣＰＵが紙搬送制御中の時、変数"State"の値が"1"であり、紙搬送制御中でない時は、変数"State"の値が"0"であるとする。
【０１１３】
シミュレーションシステムのユーザは、外部インタフェース１４０８を介して、以下の表２ように、連携動作トリガタイマ変更情報１４１６を設定する。
【０１１４】
【表２】
2010128987.tif 000004
【０１１５】
ソフトウェアタイマ情報管理部１４１５は、ソフトウェアの扱う変数"State"の値が"1"に変化するイベントが発生した場合は、ソフトウェアタイマ情報１４１０のタイマ特定情報を"TimerＡ"、タイマ間隔情報を"1ms"に設定する。一方、ソフトウェアの扱う変数"State"の値が"0"に変化するイベントが発生した場合は、ソフトウェアタイマ情報１４１０のタイマ特定情報を"TimerＢ"、タイマ間隔情報を"10ms"に更新する。
【０１１６】
処理実行指示部１４１３は、ソフトウェアタイマ情報１４１０のタイマ間隔情報が示す仮想時間分のシミュレーション処理を実行するよう各周辺シミュレータに指示する。また、イベント伝達部１４１４は、ソフトウェアタイマ情報１４１０のタイマ特定情報が示すシミュレーションデータに変化が発生した場合に、タイマイベント発生と判断し、各周辺シミュレータにタイマイベント発生を伝達する。
【０１１７】
＜実施形態２の効果＞
上記のように、複数シミュレータ間の連携動作を検証対象ソフトウェアのソフトウェアタイマを１単位として行い、かつ、外部からの指定に応じて、シミュレーション実行中にシミュレータ間の連携動作トリガとなるソフトウェアタイマを変更する。これにより、検証対象ソフトウェアが機器制御の処理に利用するソフトウェアタイマを制御内容により変更している場合でも、シミュレーションシステムを構成する全てのシミュレータの仮想時刻を一致させることができる。かかる一致は、検証対象ソフトウェアが機器制御ごとで使用するタイマの動作単位で行われる。従って、検証対象ソフトウェアが、機器制御ごとに使用するソフトウェアタイマを変更している場合においても、シミュレーション効率を低下させることなくシミュレーション精度を確保することができる。
【０１１８】
［実施形態３」
上記実施形態１および２では、シミュレーションシステムを構成する全てのシミュレータは、１つのソフトウェアタイマを連携動作のトリガとする場合であった。
【０１１９】
実施形態３では、シミュレーションシステムを構成する周辺シミュレータと検証対象ＣＰＵのシミュレータを、複数のソフトウェアタイマ値の変化をトリガとして連携動作するシミュレーションシステムについて説明する。複数の処理をそれぞれ異なる時間基準に基づいて実行するソフトウェアを検証する場合には、実施形態３で示すシミュレーションシステムを使用しシミュレーションを行う必要がある。
【０１２０】
＜実施形態３のシミュレーションシステムの機能構成例＞
実施形態３のシミュレーションシステムの機能構成は、実施形態１のシミュレーションシステム構成の処理実行指示部１１３とイベント伝達部１１３とに新たな機能が加わり、また、ソフトウェアタイマ情報１１０で扱う情報が追加される。
【０１２１】
実施形態１でのソフトウェアタイマ情報１１０、および実施形態２のソフトウェアタイマ情報１４１０は、１組のタイマ特定情報とタイマ間隔情報であった。
【０１２２】
これに対して、実施形態３では、検証対象ＣＰＵシミュレータとの連携動作トリガのソフトウェアタイマを周辺シミュレータごとに設定するため、ソフトウェアタイマ情報は、連携動作トリガタイマとなるソフトウェアタイマごとに以下の情報を有する。すなわち、前記ソフトウェアのタイマ特定情報と、前記ソフトウェアタイマを使用して連携する周辺シミュレータのシミュレータＩＤと、前記ソフトウェアタイマのタイマ間隔情報とを有する。なお、実施形態３では、各シミュレータＩＤとして、ＣＰＵシミュレータは"1"、機構部品シミュレータは"2"、汎用動作シミュレータは"3"とする。
【０１２３】
＜実施形態３のソフトウェアタイマの設定例＞
図１４は、ＧＵＩによって前記表示装置５０３上に表示されるＣＰＵシミュレータと各周辺シミュレータが連携動作するトリガのソフトウェアタイマを設定する表示例である。
【０１２４】
ＧＵＩには、周辺シミュレータごとに、ＣＰＵシミュレータとの連携動作トリガとなるソフトウェアタイマに相当するターゲットファームウェアで扱う変数名設定欄１４２がある。変数名設定欄１４２に記入したタイマ変数名はタイマ特定情報として、連携動作定義情報管理モジュール１０９に格納される。また、ユーザは、タイマ特定情報およびタイマ間隔情報を図４に示したようなＧＵＩを使用して設定する。前記ＧＵＩから設定された各ソフトウェアタイマの前記タイマ特定情報および前記タイマ間隔情報は、連携動作定義情報管理モジュール１０９に格納される。
【０１２５】
連携動作定義情報管理モジュール１０９は、周辺シミュレータごとの連携動作トリガタイマのタイマ特定情報とタイマ間隔情報とをソフトウェアタイマ情報として扱う。すなわち、図１５に示すように、該ソフトウェアタイマ値の変化をトリガにしてＣＰＵシミュレータと連携動作させる周辺シミュレータのシミュレータＩＤ及び前記ソフトウェアタイマのタイマ間隔を関係付けて、ソフトウェアタイマ情報として扱う。
【０１２６】
実施形態３でのシミュレーションシステム中の処理実行指示部１１３は、同一のソフトウェアタイマを使用して、ＣＰＵシミュレータと連携動作させる全ての周辺シミュレータから処理実行終了が通知された時点で、次の仮想時間分の処理を指示する。すなわち、その時点で、前記ソフトウェアタイマに関連付けられたタイマ間隔情報に示された仮想時間分の処理を実行するよう、前記同一のソフトウェアタイマを使用してＣＰＵシミュレータと連携動作させる全ての周辺シミュレータに指示する。前記指示と同時に、ＣＰＵシミュレータに処理実行を指示し、次の仮想時刻へ進む。
【０１２７】
実施形態３でのシミュレーション中のイベント伝達部１１４は、配線定義情報１１１に従って各シミュレータにデータイベントを伝達する。前記ソフトウェアタイマ情報のタイマ特定情報で指定されるソフトウェアタイマ値の変化（タイマイベント）は、前記ソフトウェアタイマ値の変化でＣＰＵシミュレータと連携動作を行う全ての周辺シミュレータに伝達される。
【０１２８】
＜実施形態３のＨＵＢの処理手順例＞
ここで、図１６に、実施形態３のシミュレーションシステム中の連携動作定義情報管理部１０９と処理実行指示部１１３、およびイベント伝達部１１４を含むＨＵＢ１０４のシミュレーション中の動作手順例のフローチャートを示す。
【０１２９】
実施形態３のＨＵＢ１０４のシミュレーション中の動作手順例は、図５に示した実施形態１のＨＵＢ１０４の動作手順例に新たな処理が加わったものである。なお、図１６中のS1901〜S1904は図５のS801〜S804に相当し、図１６中のS1909〜S1911はS図５の807〜S809に相当する。
【０１３０】
イベント伝達部１１４がステップS1903で発生したイベントがタイマイベントであると判断した場合(S1904のY)、前記タイマイベントでＣＰＵシミュレータと連携動作する全ての周辺シミュレータに前記タイマイベントを伝達する(S1905)。なお、シミュレーションシステムを構成するシミュレータのうち、前記タイマイベントでＣＰＵシミュレータと連携動作する周辺シミュレータとは、次の周辺シミュレータである。すなわち、前記タイマイベントの該ソフトウェアタイマに相当するタイマ特定情報と関連付けて管理されているシミュレータIDに相当する周辺シミュレータである。
【０１３１】
処理実行指示部１１３は、ステップS1905でタイマイベント発生を伝達した伝達先の全ての周辺シミュレータから、実行終了を通知されるまでウェイトする(S1906)。ステップS1906で、処理実行指示部１１３がタイマイベント伝達先の全ての周辺シミュレータから実行終了通知を受信すると、ＣＰＵシミュレータにシミュレーション処理実行を指示する(S1907)。続いて、ステップS1905で該タイマイベント発生を伝達した全てのシミュレータに前記タイマイベントの該ソフトウェアタイマのタイマ間隔に相当する仮想時間分のシミュレーション処理実行を指示する（S1908）。ステップS1908で周辺シミュレータに処理実行を指示したら、ステップS1903の処理に戻る。
【０１３２】
＜実施形態３のシミュレーションシステムの連携動作例＞
（実施形態３のシミュレーションシステムの具体例）
ここで、紙面にトナー画像を形成し、前記紙面上のトナー画像を加熱して、紙面上に画像を定着させるプリンタ装置をシミュレーション対象とする機器制御シミュレーションを例に挙げる。
【０１３３】
シミュレート内容は、画像を定着させる定着器ユニット内の熱源ヒータの温度と、紙搬送モータの動作及び前記紙搬送モータの動作による紙搬送動作とである。熱源ヒータの温度は熱源ヒータの駆動信号出力時間から算出され、また、紙搬送モータの動作はモータ駆動信号出力でモータを駆動する。
【０１３４】
本例の機器制御シミュレーションシステムを構成するシミュレータ間の情報フローの模式図を図１７に示す。なお、熱源ヒータの温度のシミュレーションを汎用動作シミュレータ１０３で、紙搬送動作シミュレーションを機構部品シミュレータ１０２で行う。
【０１３５】
（熱源ヒータ温度シミュレーション）
熱源ヒータ駆動信号は、ＣＰＵシミュレータ１０１から出力され、汎用動作シミュレータ１０３へと入力される（１０１ｃ）。汎用動作シミュレータ１０３はＣＰＵシミュレータ１０１から出力されたヒータ駆動信号の出力時間に応じて熱源ヒータの温度を計算し（１０３ａ）、前記計算した熱源ヒータの温度をＣＰＵシミュレータ１０１へと入力する。ＣＰＵシミュレータ１０１は、入力された熱源ヒータの温度に従って、温度制御１０１ｄを行う。
【０１３６】
（紙搬送動作シミュレーション）
紙搬送モータ駆動信号は、ＣＰＵシミュレータ１０１から出力され、機構部品シミュレータ１０２へと入力される（１０１ａ）。機構部品シミュレータ１０２は、紙搬送モータ１０２ａを駆動する。そして、機構部品シミュレータ１０２は、紙搬送モータ駆動によって紙を搬送し（１０２ｂ）、前記紙搬送によって生じた紙搬送路上の紙検知センサの変化（１０２ｃ）をＣＰＵシミュレータ１０１へと入力する。ＣＰＵシミュレータ１０１は、入力された紙検知センサの変化に従って、紙搬送制御１０１ｂを行う。
【０１３７】
また、プリンタ装置を制御するＣＰＵのソフトウェアは、熱源ヒータの駆動信号をプリンタ装置の交流電源の周波数に基づき生成されるソフトウェアタイマＡ（タイマ変数名：TimerＡ、タイマ間隔：1ms）を使用して制御する。そして、ＣＰＵに入力されるヒータ熱源の温度をヒータ駆動信号の制御にフィードバックさせる。
【０１３８】
また、紙搬送ローラの駆動源である紙搬送モータを、ＣＰＵの動作クロックに基づいて生成されるソフトウェアタイマＢ（タイマ変数名：TimerＢ、タイマ間隔：5ms）を使用して制御する。そして、ＣＰＵに入力される紙検知センサ信号を紙搬送制御制御にフィードバックさせる。ソフトウェアタイマＡは、例えばソフトウェアデバッガが有するインターバル割込み機能を使用して、ソフトウェアタイマＢとは異なる時間基準を基に生成される。
【０１３９】
実施形態１および２のシミュレーションシステムのように１つのソフトウェアタイマをシミュレータ間の連携動作をすると、上記のような場合には、より精度の高い制御において必要な同期精度を確保することができない。これは、いずれか一方のソフトウェアタイマを基準にシミュレータ間を連携動作させるためである。
【０１４０】
まず、シミュレーションシステムのユーザは、外部インタフェース１４０８を介して、表３のように、連携動作トリガタイマ情報を設定する。
【０１４１】
【表３】
2010128987.tif 000005
【０１４２】
なお、本例で示されるシミュレーションシステムでは、連携動作トリガタイマ情報は、図１５で示される３つの項目内容で扱われる。
【０１４３】
（実施形態３のシミュレーションシステムの動作例）
図１８は、本例の各シミュレータとＨＵＢの連携動作を示した模式図である。
【０１４４】
(1):まず、ＨＵＢは、各シミュレータにシミュレーション処理実行を指示する。(2):ＣＰＵシミュレータに対して処理実行を指示する。(3):汎用動作シミュレータに対しては1ms分のシミュレーションを実行するよう指示する。(4):そして、機構部品シミュレータに対しては仮想時間5ms分のシミュレーションを指示する（4）。各シミュレータでシミュレーション処理を開始する。
【０１４５】
(5A):ＣＰＵシミュレータでソフトウェタイマ"TimerＡ"の値変化が発生し、ＣＰＵシミュレータはシミュレーションを一時停止させる。(6A):ＨＵＢは、(5A)で発生したイベントがタイマイベントであると判別し、タイマイベント発生をソフトウェアタイマ"TimerＡ"の値の変化でＣＰＵシミュレータと連携動作する汎用動作シミュレータに伝達する。(7A):汎用動作シミュレータは、ＨＵＢからタイマイベントを伝達される。
【０１４６】
(8A):汎用動作シミュレータは、タイマイベント伝達前までにＨＵＢから受信したデータイベントに関するシミュレーション処理を含む仮想時間1ms分のシミュレーション処理実行を終了して、実行終了をＨＵＢに通知する。(9A):ＨＵＢは実行終了通知を受け取ると、ＣＰＵシミュレータおよび汎用動作シミュレータに処理実行を指示する。(10A)(11A):、前記処理実行指示を受け取った各シミュレータは再び処理実行を開始する。
【０１４７】
(5B):また、ソフトウェアタイマ"TimerＢ"の値の変化が発生した場合も、ソフトウェアタイマ" TimerＡ"の値の変化が発生した場合と同様に処理が行われる。すなわち、(6B):ＨＵＢは、"TimerＢ"の値の変化でＣＰＵシミュレータと連携動作する機構部品シミュレータにタイマイベントを伝達する。(7B):汎用動作シミュレータは、ＨＵＢからタイマイベントを伝達される。
【０１４８】
(8B):機構部品シミュレータは、ＨＵＢから指示された仮想時間5ms分のシミュレーション処理実行を終えると、ＨＵＢに処理実行終了を通知する。(9B):ＨＵＢは、機構部品シミュレータから実行終了通知を受信すると、ソフトウェアタイマ"TimerＢ"で連携動作するシミュレータ（本例ではＣＰＵシミュレータと機構部品シミュレータ）に対して処理実行を指示する。(10B)(11B):、前記処理実行指示を受け取った各シミュレータは再び処理実行を開始する。
【０１４９】
以上を繰り返すことで、周辺シミュレータは、それぞれ異なったソフトウェアタイマ値の変化をトリガとしてＣＰＵシミュレータと連携動作を行い、シミュレーションシステムを連携動作させる。また、本例では、１つのタイマで１つの周辺シミュレータとＣＰＵシミュレータとが連携動作するものであるが、１つのタイマで複数の周辺シミュレータとＣＰＵシミュレータとが連携動作することもできる。
【０１５０】
＜実施形態３の効果＞
上記のように、周辺シミュレータごとに異なるソフトウェアタイマ値の変化でＣＰＵシミュレータと連携動作する。これにより、検証対象のソフトウェアが複数のソフトウェアタイマを使用して機器制御を行っている場合においても、検証対象ソフトウェアが使用するソフトウェアタイマごとにシミュレータを分割し、シミュレーションシステムを構成できる。従って、検証対象ＣＰＵを制御するターゲットソフトウェアに対して、ターゲットソフトウェアがＣＰＵ制御を行う単位ごとに各シミュレータを連携動作させることができる。結果として、シミュレーションの利用効率を下げることなく、シミュレーション精度を確保することができる。
【０１５１】
なお、本発明は、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
【０１５２】
また、本発明は、前述した実施形態の各機能を実現するソフトウエアプログラムを、システム若しくは装置に対して直接または遠隔から供給することによっても達成される。そして、そのシステム等に含まれるコンピュータが該供給されたプログラムコードを読み出して実行する。
【０１５３】
従って、本発明の機能・処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、上記機能・処理を実現するためのコンピュータプログラム自体も本発明の１つである。
【０１５４】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷなどがある。また、記録媒体としては、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）などもある。
【０１５５】
また、プログラムは、クライアントコンピュータのブラウザを用いてインターネット／イントラネットのウェブサイトからダウンロードしてもよい。すなわち、該ウェブサイトから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードしてもよいのである。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるウェブサイトからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明の構成要件となる場合がある。
【０１５６】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配付してもよい。この場合、所定条件をクリアしたユーザにのみ、インターネット／イントラネットを介してウェブサイトから暗号化を解く鍵情報をダウンロードさせる。そして、その鍵情報で暗号化されたプログラムを復号して実行し、プログラムをコンピュータにインストールしてもよい。
【０１５７】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現されてもよい。なお、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ってもよい。もちろん、この場合も、前述した実施形態の機能が実現され得る。
【０１５８】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ってもよい。このようにして、前述した実施形態の機能が実現されることもある。
【図面の簡単な説明】
【０１５９】
【図１】実施形態１に係るシミュレーションシステムの機能構成例を示す図である。
【図２】本実施形態に係るシミュレーションシステムの概略構成例を示す図である。
【図３】本実施形態に係る機構部品シミュレータの表示例を示した図である。
【図４】実施形態１に係るソフトウェアタイマ情報を設定するＧＵＩの例を示した図である。
【図５】実施形態１に係るプロセス接続部の動作手順例について示したフローチャートである。
【図６】実施形態１に係るＣＰＵシミュレータの動作手順例について示したフローチャートである。
【図７】実施形態１に係る周辺シミュレータの動作手順例について示したフローチャートである。
【図８】実施形態１におけるＣＰＵシミュレータと機構部品シミュレータ間でのデータフロー例を示す模式図である。
【図９】実施形態１における各シミュレータとプロセス接続部の連携動作例を示した模式図である。
【図１０】実施形態１のシミュレーションシステムにおける、ＣＰＵシミュレータに対するイベントがソフトウェアタイマを基準にして同じ時刻に伝達されることを示した概念図である。
【図１１】実施形態２に係るシミュレーションシステムの機能構成例を示す図である。
【図１２】実施形態２に係る連携動作トリガタイマ変更情報を設定するＧＵＩの例を示した図である。
【図１３】実施形態２に係るソフトウェアタイマ情報管理部の連携動作トリガタイマ管理の手順例を示すフローチャートである。
【図１４】実施形態３に係る連携動作トリガタイマを設定するＧＵＩの例を示した図である。
【図１５】実施形態３に係るソフトウェアタイマ情報の模式図である。
【図１６】実施形態３に係るプロセス接続部の動作手順例について示したフローチャートである。
【図１７】実施形態３におけるＣＰＵシミュレータと機構部品シミュレータと汎用動作シミュレータ間でのデータフロー例を示す模式図である。
【図１８】実施形態３における各シミュレータとプロセス接続部の連携動作例を示した模式図である。
【図１９】従来のシミュレータ間での連携動作の形態についての模式図である。
【図２０】従来のシミュレーションシステムによる、ＣＰＵシミュレータに対するイベントがソフトウェアタイマを基準にして異なる時刻に伝達されることを示した概念図である。
【図２１】従来のシミュレーションシステムによる、ＣＰＵシミュレータに対するイベントがソフトウェアタイマを基準にして異なる時刻に伝達されることを示した概念図である。
【図１】
2010128987.tif 000006
【図２】
2010128987.tif 000007
【図３】
2010128987.tif 000008
【図４】
2010128987.tif 000009
【図５】
2010128987.tif 000010
【図６】
2010128987.tif 000011
【図７】
2010128987.tif 000012
【図８】
2010128987.tif 000013
【図９】
2010128987.tif 000014
【図１０】
2010128987.tif 000015
【図１１】
2010128987.tif 000016
【図１２】
2010128987.tif 000017
【図１３】
2010128987.tif 000018
【図１４】
2010128987.tif 000019
【図１５】
2010128987.tif 000020
【図１６】
2010128987.tif 000021
【図１７】
2010128987.tif 000022
【図１８】
2010128987.tif 000023
【図１９】
2010128987.tif 000024
【図２０】
2010128987.tif 000025
【図２１】
2010128987.tif 000026