(57)【要約】【課題】  イベント発生から１同期以内で他プロセスにイベント情報が伝わるようにして、シミュレーションの実行効率を低下させることなくシミュレーションの高精度化を図る。【解決手段】  コンピュータシステム上で独立のプロセスとして動作する複数のアプリケーションソフトと、前記複数のアプリケーションソフトを接続して１つのシステムとして動作させるプロセス接続手段とを含むプログラム連携システムにおいて、複数のアプリケーションソフトの１同期分の処理を実行させる順序情報に従って、順序情報において実行順序が高いアプリケーションソフトから処理実行の開始を指示し、実行を開始した実行順序が高いアプリケーションソフトの１同期分処理が終了した時点で、次に実行順序が高いアプリケーションソフトに処理実行の開始を指示し、複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行する。【選択図】    図６
2009163423.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステム上で独立のプロセスとして動作する複数のアプリケーションソフトと、前記複数のアプリケーションソフトを接続して１つのシステムとして動作させるプロセス接続手段とを含むプログラム連携システムにおいて、
前記複数のアプリケーションソフトは、それぞれが固有の仮想時間により当該仮想時間の経過に対応した処理を行うアプリケーションソフトであり、
前記プロセス接続手段は、一定の長さの仮想時間を１単位として、前記１単位ごとに前記複数のアプリケーションソフト間の仮想時間を一致させる同期処理を行う同期モジュールを備えており、
前記同期モジュールは、前記複数のアプリケーションに１同期分の処理開始を指示する処理開始指示手段を有し、
前記処理開始指示手段は、前記複数のアプリケーションソフトの１同期分の処理を実行させる順序情報に従って、前記複数のアプリケーションソフトに対して各アプリケーションソフトごとに１同期分の処理実行の開始を順次指示する順次処理開始指示手段を有することを特徴とするプログラム連携システム。
【請求項２】
前記順次処理開始指示手段は、前記順序情報において実行順序が高いアプリケーションソフトから処理実行の開始を指示し、実行を開始した前記実行順序が高いアプリケーションソフトの１同期分処理が終了した時点で、次に実行順序が高いアプリケーションソフトに処理実行の開始を指示し、前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行することを特徴とする請求項１に記載のプログラム連携システム。
【請求項３】
前記順次処理開始指示手段は、前記順序情報において実行順序が同じであるアプリケーションソフトが複数存在する場合は、前記実行順序が同じアプリケーションソフトの全てへ同時に処理実行の開始を指示し、実行開始を指示した前記実行順序が同じ全てのアプリケーションソフトの１同期分処理が終了した時点で、次の実行順序が高いアプリケーションソフトに処理実行の開始を指示し、前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行することを特徴とする請求項１に記載のプログラム連携システム。
【請求項４】
前記順次処理開始指示手段は、前記順序情報に、実行順序の指定があるアプリケーションソフトと実行順序の指定がないアプリケーションソフトとが混在していた場合に、実行順序の指定がないアプリケーションソフトへは他のアプリケーションソフトとの実行順序を考慮せず処理実行の開始を指示することを特徴とする請求項１乃至３のいずれか１項に記載のプログラム連携システム。
【請求項５】
前記処理開始指示手段は、
前記順序情報によらず前記複数のアプリケーションソフトの全てに１同期分の処理実行の開始を同時に指示する同時処理開始指示手段と、
前記順次処理開始指示手段と前記同時処理開始指示手段とのどちらを使用して処理を行うかを切替える処理開始指示切替手段とを有することを特徴とする請求項１乃至４のいずれか１項に記載のプログラム連携システム。
【請求項６】
前記順次処理開始指示手段は、ユーザがグラフィカルユーザインタフェースを介して設定した前記順序情報を取得することを特徴とする請求項１乃至５のいずれか１項に記載のプログラム連携システム。
【請求項７】
コンピュータシステム上で独立のプロセスとして動作する複数のアプリケーションソフトと、前記複数のアプリケーションソフトを接続して１つのシステムとして動作させるプロセス接続手段とを含むプログラム連携システムにおけるシミュレーション制御方法であって、
前記複数のアプリケーションソフトの１同期分の処理を実行させる順序情報に従って、前記順序情報において実行順序が高いアプリケーションソフトから処理実行の開始を指示するステップと、
実行を開始した前記実行順序が高いアプリケーションソフトの１同期分処理が終了した時点で、次に実行順序が高いアプリケーションソフトに処理実行の開始を指示するステップと、
前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行するステップとを有することを特徴とするシミュレーション制御方法。
【請求項８】
請求項７に記載のシミュレーション制御方法のステップをコンピュータに実行させるためのプログラム。
【請求項９】
請求項８に記載のプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、独立プロセスとして動作する複数のアプリケーションソフトを中間インタフェースを介して連携動作させ、１つのシステムとして動作させるプログラム連携システムに関する。また、該プログラム連携システムにおけるシミュレーション制御方法に関するものである。
【背景技術】
【０００２】
従来のプログラム連携システムとして、例えば、下記特許文献１の機器制御シミュレーションにおいて、以下のようにシステムが構成されている。すなわち、装置を制御する中央処理装置（ＣＰＵ）のシミュレータ（シミュレーションデバッガ）を有する。また、機器モデルのシミュレータ、その他、各種装置構成のシミュレータやシミュレーションを支援するシステムを受け持つアプリケーションソフト等を有する。なお、かかるアプリケーションソフトを、以下、まとめてシミュレータアプリケーションと呼ぶ。そして、下記特許文献１には、シミュレーション対象（ＣＰＵによるプログラム実行処理、仮想メカ部品の動作等）のシミュレーションにおいて、各々のプロセスに仮想時間をもつ場合の各プロセスの連携動作方法が例として示されている。
【０００３】
前記のようなプログラム連携システムのアプリケーションソフト間での従来の連携動作形態について、模式図を図１１に示す。図１１のＴsはシミュレーションシステム上の仮想時間での基準同期時間で、各アプリケーションソフト１〜３はＴs時間の処理実行ごとに仮想時間を停止する。そして、全てのアプリケーションソフト１〜３がＴs時間の処理実行を終了した後に、全アプリケーションソフト１〜３が一斉に次のＴs時間の処理実行を開始する。
【０００４】
前記機器制御シミュレーションのようなプログラム連携システムは、プロセス間の同期手段として、予め設定された仮想上の基準同期時間に従ってプロセス間の同期を行うプロセス接続手段を有している。従来のプロセス接続手段によるアプリケーションソフトの同期連携の状況を、図１２に示す。
【０００５】
図１２中の(1)でプロセス接続手段が各アプリケーションソフトに対して１同期時間Ｔsの処理実行を指示すると、各アプリケーションソフトはそれぞれの仮想時間によるＴs分の処理実行を開始する(2),(3)。途中、アプリケーションソフト１で外部に対して報知すべき変化（以下、イベントと記す）が発生する(4)。プロセス接続手段は、アプリケーションソフト１からのイベントを受けて、アプリケーションソフト２にイベントを報知すると共に、各アプリケーションソフト１，２に対して残りの同期時間分の処理実行を指示する(5)。アプリケーションソフト２は(6)でイベント報知をされる。
【０００６】
プロセス接続手段からの指示に従い、各アプリケーションソフト１，２はそれぞれ指示された仮想時間分の処理実行を開始する(7),(8)。ここで、残りの同期時間は、アプリケーションソフト１では（Ｔs-Ｔ1）、アプリケーションソフト２では（Ｔs-Ｔ2）になる。同期処理開始からアプリケーションソフト１のイベント発生までの時間は実時間上では同じ時間になる。しかし、それぞれのアプリケーションソフト１，２の実時間に対する仮想時間の進行速度が異なるため、仮想時間Ｔ1とＴ2とは異なる。
【０００７】
アプリケーションソフト２でイベントが発生(9)した場合も同様に、プロセス接続手段は、アプリケーションソフト１にイベントを報知すると共に、各アプリケーションソフト１，２に対して残りの同期時間分の処理実行を指示する(10)。各アプリケーションソフト１，２は、それぞれに指示された仮想時間分の処理を実行する(12),(13)。ここで、残りの同期時間は、アプリケーションソフト１では（Ｔs-(Ｔ1+Ｔ3)）、アプリケーションソフト２では（Ｔs-(Ｔ2+Ｔ4)）になる。
【０００８】
そして、各アプリケーションソフト１，２は、指定時間分の処理を終了した時点でプロセス接続手段に処理終了を報知する(14),(16)。プロセス接続手段は、両方のアプリケーションソフト１，２からの同期処理終了報知を受け取る(15),(17)と、次の同期処理に移る。
【０００９】
プロセス接続手段は、(1)と同様にして、各アプリケーションソフト１，２に対して１同期時間Ｔsの処理実行開始を指示し(17)、各アプリケーションソフト１，２はＴs時間分の処理実行を開始する(18),(19)。
【００１０】
以上の処理を繰り返すことで、プロセス接続手段は複数のアプリケーションソフト間の同期連携を取っている。
【特許文献１】特開２００５-３３９０２９公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、従来の各プロセス間の連携動作方法では、１同期分の処理終了タイミングの前後関係が各プロセス間で不定なため、その同期内で発生したイベント情報が同一の同期処理内で他プロセスに伝わることが保証されない。
【００１２】
図１３Ａ及び図１３Ｂは、図１２のような同期処理を行って、連携動作するプロセスとしてアプリケーションソフト１，２をあるコンピュータシステム上で動作させた場合の例を示している。すなわち、実時間上でアプリケーションソフト１の１同期分の処理終了タイミングが、アプリケーションソフト２でのイベント(1-1,2-1)発生タイミングより前か後かで、イベント情報がアプリケーションソフト１に伝わるタイミングが異なる。
【００１３】
図１３Ａでは、アプリケーションソフト１の１同期時間分の処理実行終了が、アプリケーションソフト２のイベント(1-1)発生タイミングより後の場合である。一方、図１３Ｂは、実時間上でアプリケーションソフト１の１同期目の処理実行終了が、アプリケーションソフト２のイベント(2-1)発生タイミングより前の場合である。なお、図１３Ａ及び図１３Ｂのどちらの場合も、アプリケーションソフト２でのイベント発生は、１同期目の処理開始を基準として仮想時間Ｔ1時間経過した時点である。また、アプリケーションソフト１とアプリケーションソフト２の同期時間は、仮想時間Ｔs時間である。また、アプリケーションソフト１では、同期時間Ｔsごとにイベント(1-1,2-1)情報を参照した処理が行われるものとする。
【００１４】
図１３Ａの場合、図１２で先述したように、プロセス接続手段が各アプリケーションソフト１，２に対して１同期時間Ｔsの処理実行をすると、各アプリケーションソフト１，２はそれぞれの仮想時間によるＴs分の処理実行を開始する。途中、アプリケーションソフト２でＴ1時間経過したところでイベント(1-1)が発生する。すると、プロセス接続手段は、アプリケーションソフト１にイベントを報知すると共に、各アプリケーションソフト１，２に対して残りの同期時間分の処理実行を指示する(1-2)。アプリケーションソフト１はイベント情報を受けて(1-4)、また、アプリケーションソフト２はプロセス接続手段からの処理実行指示を受けて(1-3)、残りの同期時間分の処理実行を行う。
【００１５】
従って、アプリケーションソフト２で発生したイベント(1-1)情報がアプリケーションソフト１の処理内容に伝わるのは、１同期目の処理中である。但し、アプリケーションソフト１でイベント(1-1)情報を参照して行う処理が既に終了していた場合、イベント(1-1)情報を反映した処理が行われるのは、２同期目となる。
【００１６】
一方、図１３Ｂの場合は、アプリケーションソフト１，２はそれぞれの仮想時間によるＴs分の処理実行を開始し、アプリケーションソフト２でＴ1時間が経過したところでイベント(2-1)が発生する。イベント発生を受け、プロセス接続手段は、アプリケーションソフト１にイベントを報知し、アプリケーションソフト２へは残りの同期時間分(Ｔs-Ｔ1)の処理を継続するよう指示する(2-2)。アプリケーションソフト２は、プロセス接続手段からの残りの同期時間分の処理継続を受け(2-4)、処理実行を継続する。ここで、アプリケーションソフト１へイベントが報知されたタイミング(2-3)では、アプリケーションソフト１はすでに１同期目の処理実行を終了している。そのため、アプリケーションソフト２で発生したイベント(2-1)の変化は、アプリケーションソフト１の１同期目の処理には何ら反映されない。アプリケーションソフト１の処理にイベント(2-1)の情報が伝わるのは、アプリケーションソフト２が１同期目の処理実行を終え、各アプリケーションソフト１，２が２同期目の処理を開始したタイミング(2-5)になる。
【００１７】
すなわち、アプリケーションソフト２で発生したイベント情報の伝達における同期遅れが発生する。そして、イベント(2-1)が反映された処理が行われるのは、２同期目になる。
【００１８】
以上のように、各プロセス間の処理終了タイミングの前後関係によって、各プロセスの処理実行によって生じたイベント情報の伝達における同期遅れが発生することがある。また、イベント情報の伝達に同期遅れが発生しない場合においても、次のような場合が発生する。イベント情報が他アプリケーションソフトに伝達された時点で、イベント情報を参照して行う処理が既に終了していると、イベントが発生した同期から遅れてイベント情報を反映した処理が行われる。すなわち、イベント情報を処理内容に反映させるのが遅くなり、精度の悪いシミュレーションとなる。
【００１９】
例えば、ＣＰＵシミュレータがアクチュエータ制御関連の値を設定し、周辺装置シミュレータが前記値に従って機器モデルシミュレータにモデル駆動を指示し、機器モデルシミュレータが前記指示に従ってモデル部品を動作させる場合を考える。上記各プロセスを連携させて、１つの機器制御シミュレーションシステムとして動作させるとする。従来の同期方法のように各プロセスを並列に実行していたのでは、まず、ＣＰＵシミュレータが設定したアクチュエータ制御関連の値の変更が、どのタイミングで周辺装置シミュレータに伝わるかが不定である。また同様にして、周辺装置シミュレータが設定した機器モデルシミュレータのモデル駆動信号の変更が機器モデルシミュレータにどのタイミングで伝わるかも不定である。従って、各プロセスの処理実行終了タイミングの前後関係によっては、ＣＰＵシミュレータがアクチュエータ制御関連の値を変更してから機器モデル部品が設定値の変更を反映した動作をするのに２同期分も遅延してしまうことになる。このような場合、精度の悪いシミュレーションとなってしまう。
【００２０】
ここで、シミュレーション精度を高める方法として、各プロセス間の同期間隔を短くする方法がある。しかし、同期間隔を短くすればするほど、各プロセスが行うシミュレーション処理に対して、同期を取るために前記プロセス接続手段の処理割合が大きくなってしまう。このような場合は、シミュレーション実行のオーバーヘッドが大きくなってしまう。
【００２１】
本発明は、複数のアプリケーションソフトが連携して動作するシミュレーションシステムにおいて、プロセス同士がシミュレーションの仮想時間の時間同期を取って動作する場合の、改善されたシミュレーションを実現する。すなわち、イベント発生から１同期以内で他プロセスにイベント情報が伝わるようにして、シミュレーションの実行効率を低下させることなくシミュレーションの高精度化を図るプログラム連携システム及びそのシミュレーション制御方法を提供する。
【課題を解決するための手段】
【００２２】
かかる課題を解決するために、本発明のプログラム連携システムは、コンピュータシステム上で独立のプロセスとして動作する複数のアプリケーションソフトと、前記複数のアプリケーションソフトを接続して１つのシステムとして動作させるプロセス接続手段とを含むプログラム連携システムにおいて、前記複数のアプリケーションソフトは、それぞれが固有の仮想時間により当該仮想時間の経過に対応した処理を行うアプリケーションソフトであり、前記プロセス接続手段は、一定の長さの仮想時間を１単位として、前記１単位ごとに前記複数のアプリケーションソフト間の仮想時間を一致させる同期処理を行う同期モジュールを備えており、前記同期モジュールは、前記複数のアプリケーションに１同期分の処理開始を指示する処理開始指示手段を有し、前記処理開始指示手段は、前記複数のアプリケーションソフトの１同期分の処理を実行させる順序情報に従って、前記複数のアプリケーションソフトに対して各アプリケーションソフトごとに１同期分の処理実行の開始を順次指示する順次処理開始指示手段を有することを特徴とする。
【００２３】
ここで、前記順次処理開始指示手段は、前記順序情報において実行順序が高いアプリケーションソフトから処理実行の開始を指示し、実行を開始した前記実行順序が高いアプリケーションソフトの１同期分処理が終了した時点で、次に実行順序が高いアプリケーションソフトに処理実行の開始を指示し、前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行する。また、前記順次処理開始指示手段は、前記順序情報において実行順序が同じであるアプリケーションソフトが複数存在する場合は、前記実行順序が同じアプリケーションソフトの全てへ同時に処理実行の開始を指示し、実行開始を指示した前記実行順序が同じ全てのアプリケーションソフトの１同期分処理が終了した時点で、次の実行順序が高いアプリケーションソフトに処理実行の開始を指示し、前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行する。また、前記順次処理開始指示手段は、前記順序情報に、実行順序の指定があるアプリケーションソフトと実行順序の指定がないアプリケーションソフトとが混在していた場合に、実行順序の指定がないアプリケーションソフトへは他のアプリケーションソフトとの実行順序を考慮せず処理実行の開始を指示する。また、前記処理開始指示手段は、前記順序情報によらず前記複数のアプリケーションソフトの全てに１同期分の処理実行の開始を同時に指示する同時処理開始指示手段と、前記順次処理開始指示手段と前記同時処理開始指示手段とのどちらを使用して処理を行うかを切替える処理開始指示切替手段とを有する。また、前記順次処理開始指示手段は、ユーザがグラフィカルユーザインタフェースを介して設定した前記順序情報を取得する。
【００２４】
また、本発明のシミュレーション制御方法は、コンピュータシステム上で独立のプロセスとして動作する複数のアプリケーションソフトと、前記複数のアプリケーションソフトを接続して１つのシステムとして動作させるプロセス接続手段とを含むプログラム連携システムにおけるシミュレーション制御方法であって、前記複数のアプリケーションソフトの１同期分の処理を実行させる順序情報に従って、前記順序情報において実行順序が高いアプリケーションソフトから処理実行の開始を指示するステップと、実行を開始した前記実行順序が高いアプリケーションソフトの１同期分処理が終了した時点で、次に実行順序が高いアプリケーションソフトに処理実行の開始を指示するステップと、前記複数のアプリケーションソフトの全ての１同期分の処理が終了した時点で、次の同期処理に移行するステップとを有することを特徴とする。
【００２５】
さらに、上記シミュレーション制御方法のステップをコンピュータに実行させるためのプログラム、及び該プログラムを記憶したコンピュータで読み取り可能な記憶媒体を提供する。
【発明の効果】
【００２６】
本発明により、複数のアプリケーションソフトが連携して動作するシミュレーションシステムにおいて、プロセス同士がシミュレーションの仮想時間の時間同期を取って動作する場合の、改善されたシミュレーションを実現すできる。すなわち、イベント発生から１同期以内で他プロセスにイベント情報が伝わるようにして、シミュレーションの実行効率を低下させることなくシミュレーションの高精度化を図るプログラム連携システム及びそのシミュレーション制御方法を提供できる。
【００２７】
また、独立プロセスとして動作する複数のアプリケーションソフトを連携動作させ、１つのシステムとして動作させるプログラム連携システムにおいて、シミュレーションの実行効率を低下させることなく、シミュレーションの高精度化を図ることができる。
【００２８】
また、プログラム連携システムの全アプリケーションの依存関係を意識することなく、所望のアプリケーションソフト間においてシミュレーション精度を高めることができる。
【００２９】
また、シミュレーションを実行速度優先か、精度優先かユーザのニーズにあったシミュレーションを行うことができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明の実施形態を添付図面に従って詳細に説明する。
【００３１】
［実施形態１］
＜実施形態１の特徴＞
実施形態１では、複数の独立プロセスからなる機器制御シミュレーションシステムで、各プロセスがシミュレーション上の仮想時間で同期を取り機器制御シミュレーションを行う場合、各プロセスに定義付けられた実行順序に従って１同期分の処理を行う。同期処理は、各プロセスに定義付けられた実行順序が高いプロセスのシミュレーションからシーケンシャルに処理を実行し、全プロセスのシミュレーション１同期分処理が終了したことをもって、次の同期処理へ移行する。
【００３２】
実行順序に従って各プロセスのシミュレーションを実行し、プロセス間の連携を取って機器制御シミュレーションを行うことで、各プロセスの処理実行によって生じたイベント情報の伝達における同期遅れが発生しなくなる。そのため、該プロセス処理が他のプロセス処理結果に依存するシミュレーションにおいて、シミュレーションの精度を高めることができる。
【００３３】
なお、実施形態１に係るプログラム連携システムの機器制御シミュレーションは、コンピュータシステムで実行されるプログラムとして実現されるものである。
【００３４】
＜本実施形態を実行するプログラム連携システムの概略構成例＞
図１は、本実施形態に係るプログラム連携システムの概略構成図である。
【００３５】
図１のプログラム連携システムを実現するコンピュータシステム５０１は、以下の構成要素を含んでいる。まず、中央演算装置（以下、ＣＰＵと呼ぶ）５０２ａ、主記憶装置（以下ＲＡＭと呼ぶ５０２ｂ）、ハードディスク５０２ｃ等を内蔵した本体部５０２を有する。かかる本体部５０２から指示により出力を行なう出力装置として画面表示を行う表示装置５０３を有する。また、本体部５０２への情報の入力を行なう入力装置として、コンピュータシステム５０１にユーザの指示や文字情報を入力するためのキーボード５０４を有する。また、表示装置５０３上の任意の位置を指定することにより、その位置に表示されていたアイコン等に応じた指示を入力するポインティングデバイス（マウス：登録商標）５０５を備えている。
【００３６】
ハードディスク５０２ｃには、機器制御シミュレーションにおける各機能を実現したプログラム、シミュレーションの対象となる機器情報を含むシミュレーションのための各種データが格納される。シミュレーションに際しては、前記プログラム、各種データを前記ＲＡＭ５０２ｂにロードし、前記コンピュータシステム５０１のＣＰＵ５０２ａによってプログラムが実行される。
【００３７】
これらコンピュータシステム５０１の基本動作は、基本プログラムであるオペレーティングシステム（以下、ＯＳと記す）を介して実行される。以下、本実施形態ではコンピュータシステム５０１のＯＳを、Microsoft社のWindows ＯＳ（登録商標）の例で説明する。しかし、本発明はWindows ＯＳ(登録商標)上のシステムに限定されるものではない。
【００３８】
＜本実施形態のプログラム連携システムの機能構成例＞
図２は、本実施形態に係るプログラム連携システムの機能構成図である。
【００３９】
図２に示すように、このプログラム連携システムは、システムを構成する３つのアプリケーションソフトとプロセス接続手段とを備えている。３つのアプリケーションソフトは、ＣＰＵシミュレータ６０１と、シミュレータアプリケーション６０２と、機構モデルシミュレータ６０３とである。また、プロセス接続手段は、シミュレータハブ（以下、ＨＵＢと記す）６０４である。
【００４０】
ＣＰＵシミュレータ６０１、シミュレータアプリケーション６０２、機構モデルシミュレータ６０３は、それぞれがWindows（登録商標） ＯＳ上で個別に動作するアプリケーションソフトで、それぞれが独立したプロセスとして存在する。更に、シミュレータアプリケーション６０２は、機能によって複数の独立プロセスで構成される場合がある。
【００４１】
本実施形態において、ＣＰＵシミュレータ６０１は、ダイナミックリンクライブラリ（以下、ＤＬＬと記す）で提供される外部モジュールとの間で共有メモリ、及び、関数の直接呼出し方式による外部インタフェースを有している。また、シミュレータアプリケーション６０２、機構モデルシミュレータ６０３は、ソケットインタフェースによるプロセス間通信方式による外部インタフェースを有している。
【００４２】
ＨＵＢ６０４は、前記ＣＰＵシミュレータ６０１の直接呼出し方式の外部インタフェースを利用するためにＤＬＬとして提供され、ＣＰＵシミュレータ６０１から起動されるサブプロセスとして動作する。ＣＰＵシミュレータ６０１は、各種イベント発生時に、予め指定されたＨＵＢ６０４のコールバック関数を呼び出す。ＨＵＢ６０４を構成するシステム管理モジュール６０５−１、同期モジュール６０５−２、配線モジュール６０５−３、ログモジュール６０５−４、インタフェースモジュール６０６−１〜３の各モジュールは、それぞれ独立したスレッドとして動作する。各スレッドは、ＣＰＵシミュレータ６０１の起動時に呼び出されるコールバック関数から起動される。シミュレータアプリケーション６０２、機構モデルシミュレータ６０３は、ＯＳの提供するアプリケーションプログラムインタフェースを使用して、ソケットインタフェースを介してＨＵＢ６０４との接続を行う。
【００４３】
次に、プログラム連携システムの各構成要素の機能について説明する。
【００４４】
（ＣＰＵシミュレータ６０１の機能）
ＣＰＵシミュレータ６０１は、シミュレーション対象となるＣＰＵ（以下、ターゲットＣＰＵと呼ぶ）の動作を、コンピュータシステム５０１上で実現する機能である。ここで、ターゲットＣＰＵとは、コンピュータシステム５０１に搭載されているＣＰＵではなく、シミュレーションの対象となる装置（本具体例ではプリンタ装置）に搭載され、該装置を制御するためのＣＰＵのことである。
【００４５】
ＣＰＵシミュレータ６０１は、ターゲットＣＰＵの制御プログラム（以下、ターゲットファームウエアと呼ぶ）に従って、ターゲットＣＰＵの端子に対応して定義された仮想入力端子の情報を読み込み、仮想出力端子を制御する。
【００４６】
また、ＣＰＵシミュレータ６０１は、ターゲットＣＰＵのアドレス空間に対応した仮想アドレス空間を用意している。ここで、仮想アドレス空間とは、ターゲットＣＰＵの管理するアドレス空間上の個々の領域と１対１で対応する領域をコンピュータシステム５０１のＲＡＭ上に定義したものである。仮想アドレス空間のコンピュータシステム５０１上の実アドレス値は、ターゲットＣＰＵの扱うアドレス値と異なる。そして、ＣＰＵシミュレータ６０１は、ターゲットファームウエアによるターゲットＣＰＵアドレス空間上のアドレス値へのアクセス命令に従って、仮想アドレス空間上の対応する領域にアクセスする。また、ターゲットＣＰＵのレジスタ類も、前記仮想アドレス空間上に対応する領域が設定され、レジスタ類へのアクセスも仮想アドレス空間へのアクセスによってシミュレーションされる。ＣＰＵシミュレータ６０１は、外部インタフェースとしてターゲットＣＰＵのＩ／Ｏメモリ、レジスタアクセスのためのメソッドを用意している。外部モジュールは、これらのメソッドにより前記仮想アドレス空間へのアクセスを行う。
【００４７】
コンピュータシステム５０１上でのターゲットファームウエアの処理のシミュレーション方法としては、ターゲットファームウエアのソースプログラムをコンピュータシステム５０１のネイティブ言語に変換して実行する方式がある。また、ターゲットＣＰＵの実行命令を１語ずつ解釈し、コンピュータシステム５０１のＣＰＵに対応した実行命令に翻訳しながら実行する方式がある。本実施形態は、何れのＣＰＵシミュレーション方式にも対応する。
【００４８】
前記のように、ＣＰＵシミュレータ６０１のイベント毎に、ＨＵＢ６０４のコールバック関数が呼び出される。ＣＰＵシミュレータ６０１が前記コールバック関数を呼び出すイベントの例としては、ＣＰＵシミュレータ６０１の状態に関するもの（起動、初期化終了等）がある。また、ターゲットＣＰＵの動作シミュレーション上のイベント（メモリアクセス、割り込み発生等）がある。
【００４９】
（シミュレータアプリケーション６０２の機能）
シミュレータアプリケーション６０２は、機器制御シミュレーションシステムによる各種試験のための支援プログラムであり、仮想装置に対する各種働きかけの設定や、シミュレーションの結果を解析、表示、保存する機能をもつ。
【００５０】
シミュレーションの対象となる実際の装置は、その装置を使用するオペレータやその装置に接続されたコンピュータシステム等により外部から様々な働きかけ（以下、外部事象と記す）を受けて動作する。シミュレータアプリケーション６０２は、これら外部事象のうち、機構モデルシミュレータ６０３（詳細は後述する）で設定されるメカニカルな外部事象以外のものを擬似的に設定する手段を提供する。本実施形態における対象装置であるプリンタ装置の具体例では、メカニカルな外部事象としては給紙カセットの操作や消耗部品の取り外し、取り付け等が挙げられる。一方、それ以外の外部事象としては、ホストＰＣからの各種命令の受信、オペレータによるオペレーションパネルの操作、環境温度の変化等が挙げられる。
【００５１】
シミュレータアプリケーション６０２は、これらを設定するための専用のユーザインタフェース（以下、ＵＩと記す）を提供する。また、シミュレータアプリケーション６０２は、当該ＵＩによる設定に従って、ＨＵＢ６０４を介してＣＰＵシミュレータ６０１や機構モデルシミュレータ６０３に所定の外部事象を加える。また、シミュレータアプリケーション６０２は、コンピュータシステム５０１のハードディスクに格納された、連続した外部事象の設定手順を記述したマクロ命令ファイルや一連の外部事象データを記述したファイルを、必要に応じて読み出す。そして、ＨＵＢ６０４を介してＣＰＵシミュレータ６０１や機構モデルシミュレータ６０３に対して一連の外部事象を与える。
【００５２】
前記のような外部事象の設定機能のほかに、シミュレータアプリケーション６０２は、シミュレーションの結果として出力される各種データを解析、評価する。そして、試験目的に応じた各種情報を表示装置５０５に表示する機能や、ハードディスクに保存する機能を有している。具体的には、各種信号の変化をタイミングチャートとして表示する機能や、一連の動作を予め想定された動作と比較してその正当性を評価する、また、不正な事象を可視的に表示する等の機能を有している。
【００５３】
（機構モデルシミュレータ６０３の機能）
機構モデルシミュレータ６０３は、アクチュエータ、センサを含む複数の部品からなる機構モデルを、前記コンピュータ上で擬似的に動作させる機能である。機構モデルの各要素（以下、機構部品と呼ぶ）は、ユーザにより形状、種類、動作、機構部品間の干渉と連携条件等が定義される。更に、センサ、アクチュエータについては外部信号定義が行われる。これら機構部品の定義は、ＣＡＤ図面からの自動設定、専用の機構モデル作成ソフトウエアをユーザが操作して設定、その両方の組み合わせで設定するなどして行われる。
【００５４】
前記のように定義される機構部品の種類としては、単なる物体と定義されるものと機能定義がなされるもの（モータ、ソレノイド、クラッチ、センサ、歯車、カム、ローラ等）がある。また、機構部品には、対象となる装置の構成物ではないもので装置の動作シミュレーションに必要なもの（プリンタ装置における用紙等）も含まれる。また、前記のように構築された機構モデルは、コンピュータシステム５０１の表示装置５０３上に、２次元又は３次元のグラフィックとして表示される。
【００５５】
機構モデルシミュレータ６０３は、ＣＰＵシミュレータ６０１からＨＵＢ６０４を介して送られてきたアクチュエータ動作信号に対応して、該当するアクチュエータの機構モデルを定義された動きで動作させる。（アクチュエータ動作信号は、ＣＰＵシミュレータ６０１からＨＵＢ６０４を介してシミュレータアプリケーション６０２に入力されたデータを、シミュレータアプリケーション６０２で任意に加工する。そして、シミュレータアプリケーション６０２から再びＨＵＢ６０４を介して機構モデルシミュレータ６０３に送られる場合もある。）そして、機構定義に基づきアクチュエータに連結された機構部品をアクチュエータの動作に関連付けて定義された動きで動作させる。また、オペレータの操作により動作する機構については、前記キーボード５０４、マウス５０５によってオペレータによる機構部品への操作を擬似的に再現し、擬似操作に応じて対象となる機構部品を定義された動きで動作させる。更に、機構部品間の干渉、連携定義に従い、関連する全ての機構部品の動作が再現される。
【００５６】
これら機構部品の動作は、前記表示装置５０３に表示されたグラフィックとして再現される。同時に、機構モデルの動作の結果、センサとして定義された機構モデルに予め定義された外部事象が発生すると、外部事象に応じたセンサ信号を発生させ、そのセンサ信号は、ＣＰＵシミュレータ６０１にＨＵＢ６０４を介して送信される。
【００５７】
（シミュレータハブ６０４の機能）
ＨＵＢ６０４は、コア部６０５とインタフェース部６０６とから構成される。コア部６０５は、システム管理モジュール６０５−１、同期モジュール６０５−２、配線モジュール６０５−３、ログモジュール６０５−４から構成される。また、インタフェース部６０６は、ＨＵＢ６０４の外部インタフェースを各周辺シミュレーションツールのインタフェース仕様に対応させる各々のインタフェースモジュール６０６−１〜３から構成される。そして、コア部６０５と各周辺シミュレーションツールとの接続を仲介する。また、ＨＵＢ６０４は、ＣＰＵシミュレータ６０１やシミュレーショタアプリケーション６０２、および機器モデルシミュレータ６０３などの他のアプリケーションとは独立したプロセスで動作している。
【００５８】
コア部６０５は、システム構成に合わせたＨＵＢモジュールの設定を行なう。また、ＣＰＵシミュレータ６０１、シミュレータアプリケーション６０２、機構モデルシミュレータ６０３（以下、まとめて周辺シミュレーションツールと記す）間のデータ伝送管理、同期処理、データ伝送履歴（以下、ログと記す）取得を行う。
【００５９】
インタフェース部６０６は、予め設定された端子定義情報に基づき各周辺シミュレーションツールと配線モジュール６０５−３との接続を行う。そして、周辺シミュレーションツールからのデータ出力に応じて、配線モジュール６０５−３のデータ送受信メソッドを呼び出してデータを配線モジュール６０５−３に渡す。一方、配線モジュール６０５−３からのデータ設定要求に応じて周辺シミュレーションツールにデータを送る。また、同期モジュール６０５−２の同期時間分の処理実行開始指示に応じて、各アプリケーションに所定の同期間隔での動作を指示し、各アプリケーションの１同期分処理終了を同期モジュール６０５−２に報知する。
【００６０】
外部インタフェース６０７は、オペレータがシミュレーションを行うために必要なシミュレーションシステム環境情報を、前記システム管理モジュール６０５−１に渡す際のインタフェースとなる。シミュレーションシステム環境情報としては、例えば、各アプリケーション間での連携動作に必要な情報が含まれる。
【００６１】
システム管理モジュール６０５−１は、予め設定されたシステム構成定義情報に応じて、インタフェースモジュール６０６の構成を管理する。また、外部インタフェース６０７を介して設定された連携動作を決定するための情報を管理する。
【００６２】
配線モジュール６０５−３は、予め設定された配線定義情報をもとに、周辺シミュレーションツール間を接続する。また、配線モジュール６０５−３は、各インタフェースモジュール６０６−１〜３に対して、データ送受信のメソッドを提供する。
【００６３】
ログモジュール６０５−４は、配線モジュール６０５−３と各インタフェースモジュール６０６−１〜３間でやり取りされる送受信データを、シミュレーション時間情報とともに所定の書式でファイルに記録する。このとき、シミュレータアプリケーション６０２によるタイミングチャートの作成、試験結果の解析、評価は、ログモジュール６０５−４によって取得したログ情報を使用する。
【００６４】
同期モジュール６０５−２は、各アプリケーションがもつ固有の仮想時間の一定仮想時間を１単位として、前記1単位ごとに全アプリケーションソフト間の仮想時間を一致させる同期処理を行う。同期モジュール６０５−２は、各インタフェースモジュール６０６−１〜３を介して、それぞれの周辺シミュレーションツールに予め定義した１同期分の処理実行開始を指示する処理開始指示手段６０５−２−１を有している。そして、各インタフェースモジュール６０６−１〜３を介してそれぞれの周辺シミュレーションツールから１同期間隔の動作終了の通知を受ける。全周辺シミュレーションツールから１同期間隔の動作終了通知を受けた時点で、次の１同期の実行処理に移る。以上の処理の繰り返しにより、機器制御シミュレーションシステムを構成する全システムを同じ仮想時間の中で動作させることができる。
【００６５】
このような同期処理において、従来は各周辺シミュレーションツールに対する１同期間隔の実行を一斉に指示していたが、本実施形態では、前記のような基本動作に、順次処理開始指示手段６０５−２−２による処理が付加される。順次処理開始指示手段６０５−２−２は、複数のアプリケーションソフトの中で各プリケーションソフトの１同期分の処理を実行させる順序情報に従って、各アプリケーションソフトに１同期分の処理実行を順次指示する。すなわち、前記順次処理開始指示手段６０５−２−２は、各プロセスに定義付けられたシミュレーションの実行順序に従って、周辺シミュレーションツールに同期間隔分の処理実行を指示する手段である。
【００６６】
＜実施形態１の順次処理開始指示手段６０５−２−２の制御手順例＞
図３は、実施形態１の順次処理開始指示手段６０５−２−２の制御フローチャートである。以下では、プロセス処理実行順序変数Ｐn、全プロセス数Ｎとする。また、本実施形態では、実行順序は“１”から指定可能であり、実行順序の数字が小さいほど実行順序が高くなるものとする。
【００６７】
まず、ステップＳ１０１で、プロセス処理実行順序変数Ｐnを“１”に初期化する。次に、ステップＳ１０２で、Ｐn≦Ｎが成立するか否かをチェックする。ステップＳ１０２のチェックでＰn≦Ｎが成立する場合は、ステップＳ１０３へ進み、実行順序Ｐnのプロセスに基準同期時間分のシミュレーション処理（以下、単に処理と記す）実行を指示する。ステップＳ１０２のチェックでＰn≦Ｎが不成立する場合は、ステップＳ１０６でシミュレーションの終了か否かを判定する。シミュレーションの終了でなければステップＳ１０１へ戻り、Ｐnの初期化を行う。
【００６８】
ステップＳ１０３で実行順序Ｐnのプロセスに基準同期時間分の処理実行を指示した後、処理実行を指示した実行順序Ｐnのプロセスから処理実行終了通知を受けるまで待つ(ステップＳ１０４)。ステップＳ１０４で実行終了通知を受けたら、プロセス処理実行順序Ｐnを１つ進め(ステップＳ１０５)、ステップＳ１０２のＰn≦Ｎの成立チェックに戻る。
【００６９】
ここで、実行優先順位が同じプロセスが複数存在する場合は、ステップＳ１０３で実行順序が同じプロセスに同時に処理実行開始を指示し、ステップＳ１０４で実行順序が同じ全プロセスから実行処理終了通知を受け取るまで待つことになる。
【００７０】
図３のように、順次処理開始指示手段６０５−２−２は、プロセスの処理実行開始を制御し、定義つけられたプロセス処理の実行順序に従って、実行順序の高いプロセスから処理実行開始指示を出す。そして、処理開始指示を出したプロセスから処理実行終了通知を受けた時点で、次の実行順序のプロセスに処理実行開始を指示する。各プロセスの処理実行中に発生したイベントは、各インタフェースモジュール６０６−１〜３を介して配線モジュール６０５−３に伝達され、配線モジュールから他プロセスに情報が伝達される。
【００７１】
なお、前述したように各プロセス（シミュレーションツール）と配線モジュール６０５−３は、予め設定された端子定義情報に基づき接続されている。ここで、他プロセスの処理結果により自プロセスの処理内容が変わる対象物のシミュレートを行うプロセス（以下、被制御プロセスと呼ぶ）の処理実行順序を低くする。その結果、１同期分の処理を行う時に、必ず実行順序が高いプロセスの処理実行結果を受けて、被制御プロセスの処理を行うことになる。従って、被制御プロセスにおいて、実行順序が高いプロセスの処理で発生したイベント情報を、イベントが発生した同期内の処理に反映させることができる。
【００７２】
（実行順序の指定方法の例）
ここで、実行順序の指定方法について、外部インタフェース６０７としてグラフィカルユーザインタフェース（以下、ＧＵＩと記す）を使用する場合を例に挙げて説明する。
【００７３】
図４Ａは、前記ＧＵＩによって前記表示装置５０３上に表示される実行順序指定のための表示例である。ＧＵＩには、シミュレーションシステムを構成するアプリケーション名表示欄７０１と実行順序指定欄７０２がある。前記シミュレーションシステムのオペレータは、実行順序指定欄７０２上の設定対象の欄を前記マウス５０５により指定し、該指定個所にキーボード５０４から各アプリケーションに割当てる実行順序番号を数字で記入し、実行順序を設定する。ＧＵＩで設定された実行順序指定の情報は、シミュレーションシステムの中では、図４Ｂに示すような、各アプリケーションに付けられたアプリケーションＩＤ７０３と、実行順序を示す実行順序番号７０４で渡される。
【００７４】
そして、前記アプリケーションＩＤ７０３と前記実行順序番号７０４の情報が、システム管理モジュール６０５−１に渡され、同期モジュール６０５−２に前記アプリケーションＩＤ７０３と前記実行順序番号７０４の情報が記憶される。そして、前記同期モジュール６０５−２に記憶された前記アプリケーションＩＤ７０３と前記実行順序番号７０４の情報に従って、順次処理開始指示手段６０５−２−２が各プロセスに処理実行の開始指示を出す。
【００７５】
なお、上記説明では外部インタフェース６０７としてＧＵＩを使用した例を挙げたが、ＧＵＩ以外に、外部ファイルインタフェースやプロセス間通信を使用し、前記システム管理モジュール６０５−１に実行順序情報を渡す方法もある。
【００７６】
外部ファイルインタフェースを使用する場合は、予め定義された書式に従って実行順序を指定したファイルを用意する。そして、ＯＳのアプリケーションプログラムインタフェースとして提供される外部ファイルインタフェースを介して、システム管理モジュール６０５−１に実行順序情報を渡す。
【００７７】
また、プロセス間通信を使用する場合は、前記コア部分６０４とプロセス間通信で接続されているシミュレーション実行環境指定アプリケーション（前記コア部分６０４と別プロセス）を使用し、実行順序情報を指定する方法もある。
【００７８】
上記のように、外部インタフェース６０７を介した前記実行順序の指定ができることで、シミュレーションユーザの所望の実行順序を指定することができる。
【００７９】
＜実施形態１の具体的な適用例＞
本実施形態では、ＣＰＵがステッピングモータ制御用途の集積回路（以下、ステッピングモータ制御ASICと記す）を使用してステッピングモータ制御のシミュレーションを行う場合を例に挙げて、本実施形態に係る機能を説明する。
【００８０】
実機におけるステッピングモータは、ステッピングモータの各相に与えられる駆動パルスによって制御され動作する。具体的には、ステッピングモータの各相に与える駆動パルス間隔を変化させることにより回転速度を制御し、駆動パルスの変化順により回転方向を変化させる。
【００８１】
本実施形態では、駆動パルスの出力はステッピングモータ制御ASICが行う。前記ステッピングモータ制御ASICは、ＣＰＵが所定のレジスタに設定したステッピングモータ制御に関する値（モータ一回転分の励磁相、励磁パルス幅、および回転方向の設定値など）に従った駆動パルスを出力する。そして、ステッピングモータドライバICを介して、ステッピングモータ駆動が行われる動作をシミュレーションするものとする。
【００８２】
前記のようなシミュレーションを行う場合、シミュレーション対象物を機器制御シミュレーションの構成に置き換えると以下のようになる。
・ＣＰＵ  →  ＣＰＵシミュレータ６０１
・ステッピングモータ制御ASIC  →  シミュレータアプリケーション６０２
・ステッピングモータ  →  機構モデルシミュレータ６０３
ここで、シミュレータアプリケーション６０２で実現するステッピングモータ制御ASICのシミュレーション機能を、以下では擬似モータ制御ASICと記す。
【００８３】
（本具体例におけるプロセス間の制御関係）
図５に、ＣＰＵシミュレータ６０１と擬似モータ制御ASIC６０２、および、機構モデルシミュレーション６０３のプロセス間の制御関係を示す。
【００８４】
実機では、ＣＰＵの各種設定値に従って、モータ制御ASICがステッピングモータ駆動パルスを出力し、モータドライバICを介して、ステッピングモータを駆動する。機器モデルシミュレーションでは、ＣＰＵシミュレーション６０１が擬似モータ制御ASICを制御し、擬似モータ制御ASICが機器モデルシミュレーション６０３を制御することになる。
【００８５】
従って、各プロセスの実行順序は高い方から順に、ＣＰＵシミュレーション６０１の処理［１］→擬似モータ制御ASICの処理［２］→機器モデルシミュレーションの処理［３］となる。
【００８６】
本実施形態で挙げる機構モデルミュレータ６０３では、モータモデルに対して、予め１パルスあたりの回転角[°]を指定し、回転方向と１同期間隔でのパルス数をモータ駆動信号として与える。モータ駆動信号は、１同期間隔でのパルス数に、回転方向情報として符号を加えたものである。（回転方向を表す符合は、正回転ではプラス[+]、逆回転ではマイナス[-]である。）
擬似モータ制御ASICは、ＣＰＵシミュレータ６０１から設定されるステッピングモータ制御関連値からステッピングモータの動作量を算出し、機構モデルシミュレータ６０３のモータモデルに対して、モータ駆動信号を出力する。モータ駆動信号については前述の通りである。
【００８７】
（本具体例における各プロセス間の同期連携例）
図６に、ステッピングモータ制御シミュレーションを行う場合、本実施形態の同期方式による各プロセス間の同期連携の状況を示す。
【００８８】
図６中の(1)で、順次処理開始指示手段６０５−２−２は実行順序が一番高い（実行順序［１］）アプリケーションソフトであるＣＰＵシミュレータ６０１に対して、ｎ同期目の処理として１同期時間Ｔsの処理実行を指示する。ＣＰＵシミュレータ６０１は、ＣＰＵシミュレータ固有の仮想時間によるＴs分の処理実行を開始する(2)。ＣＰＵシミュレータ６０１は、指示された処理の中で、ステッピングモータ制御に関する値を設定する(3)。ＣＰＵシミュレータ６０１のステッピングモータ制御関連値設定によって発生したイベント情報は、配線モジュール６０５−３に伝えられる。配線モジュール６０５−３は、前記ステッピングモータ制御関連設定値をシミュレータアプリケーションの一部である擬似モータ制御ASICに報知する(4)。擬似モータ制御ASICは、配線モジュール６０５−３からイベント(3)の情報を報知される(5)。しかしながら、擬似モータ制御ASICはまだｎ同期目の処理を開始していないため、前記設定値情報は擬似モータ制御ASICの処理開始時に反映される(8)。
【００８９】
ＣＰＵシミュレータ６０１が１同期時間分Ｔsの実行処理を終了(6)すると、処理実行終了通知が同期モジュール６０５−２に伝えられる。同期モジュール６０５−２は、次の実行順序（実行順序［２］）のアプリケーションである擬似モータ制御ASICに対して、１同期時間Ｔsの処理実行を指示する(7)。
【００９０】
擬似モータ制御ASICは、同期モジュール６０５−２からの処理実行指示を受け、仮想時間Ｔs分の処理を開始する(8)。ＣＰＵシミュレータ６０１が設定したステッピングモータ制御関連設定値（イベント(3)）の情報は、この時点から擬似モータ制御ASICの処理に反映される。擬似モータ制御ASICは、ＣＰＵシミュレータ６０１が設定したステッピングモータ制御設定値に従って、機構モデルシミュレータ６０３のモータモデル駆動信号を出力する(9)。ここで、ステッピングモータ制御関連設定値の情報が、擬似モータ制御ASICの処理開始時に、前記モータモデル駆動信号出力として配線モジュール６０５−３に伝わる。配線モジュール６０５−３は、モータモデル駆動信号の変化を機構モデルシミュレータ６０３に報知する(10)。機構モデルシミュレータ６０３は、配線モジュール６０５−３からのイベント(9)の情報を報知される(11)。しかしながら、機構モデルシミュレータ６０３はｎ同期目の処理を開始していないため、機構モデルシミュレータの処理開始時にモータモデル駆動信号の変化が反映される(14)。
【００９１】
擬似モータ制御ASICが１同期時間分Ｔsの実行処理を終了(12)すると、同期モジュール６０５−２は、擬似モータ制御ASICから処理実行終了通知を受ける。そして、次の実行順序（実行順序３）のアプリケーションである機構モデルシミュレータ６０３に対して、１同期時間Ｔsの処理実行を指示する(13)。
【００９２】
機構モデルシミュレータ６０３は、同期モジュール６０５−２から処理実行指示を受け、仮想時間Ｔs分の処理を開始する(14)。擬似モータ制御ASICが変更したモータモデル駆動信号情報は、機構モデルシミュレータ６０３の処理プロセスを開始したの時点(14)から、機構モデルシミュレータ６０３の処理に反映される。そして、前記モータモデル駆動信号情報に従って、モータモデルをコンピュータ上で擬似的に動作させることができる。
【００９３】
機構モデルシミュレータ６０３が１同期時間分Ｔsの実行処理を終了(15)すると、同期モジュール６０５−２は、機構モデルシミュレータ６０３から処理実行終了通知を受け、（n+１）同期目の同期処理へ移る(16)。同期モジュール６０５−２は、実行順序の一番低いアプリケーションからの処理実行終了通知を受けた後、実行順序の一番高いアプリケーションであるＣＰＵシミュレータ６０１に対して次の同期処理として１同期時間Ｔsの処理実行を指示する(14)。そして、ＣＰＵシミュレータ６０１は、（n+１）同期目の処理を開始する(17)。
【００９４】
以降は、前記(2)と同様に同期処理を繰り返し、シミュレーションを行う。
【００９５】
＜実施形態１の作用効果＞
以上のように同期処理を行うことで、ＣＰＵシミュレータ６０１がステッピングモータ制御関連値を変更したのと同じ同期内に、ステッピングモータ制御関連値の変更を反映させモータモデルを動作させることができる。
【００９６】
［実施形態２］
＜実施形態２の特徴＞
実施形態１では、各プロセス全てに実行順序をつけてシミュレーションを行った。しかし、機器制御シミュレーションにおいてシミュレーション精度が必要なのは特定のアプリケーションソフト間だけである場合がある。また、同じパフォーマンスのコンピュータシステムでシミュレーションを実行した場合には、次のような問題がある。すなわち、実行順序をつけて各プロセスをシーケンシャルに処理を実行すると、実行順序をつけずに各プロセスを並行に処理実行するのに比べ、シミュレーションにかかる時間を多く要してしまう。
【００９７】
本実施形態２では、複数の独立プロセスからなる機器制御シミュレーションシステムにおいて、以下の処理を行なう。各プロセスがシミュレーション上の仮想時間で同期を取って機器制御シミュレーションを行う場合に、所望のプロセス間にだけ実行順序をつけて１同期分の処理を行うものである。実行順序がつけられているプロセスは、実施形態１のように実行順序の順番に従いプロセス処理を実行する。一方、実行順序のつけられていないプロセスは、実行順序を考慮せずに複数プロセスの処理を同時に開始し、全プロセスの１同期分処理が終了したことをもって次の同期処理へ移行する。このように、実施形態２では、実行順序のつけられているプロセスと実行順序のつけられていないプロセスとが混在した場合の処理を行なう。
【００９８】
実行順序がつけられたプロセスのみ実行順序に従いシーケンシャルに処理を実行し、プロセス間の連携を取ってシミュレーションを行うことで、全プロセスに実行順序をつけなくとも、特定プロセス間ではシミュレーション精度を高めることができる。且つ、全プロセスに実行順序をつけてシミュレーションを行う場合に比べ、シミュレーションに要する時間も短くすることができる。
【００９９】
実施形態２を実行するプログラム連携システムの構成は、実施形態１と同様である。
【０１００】
＜実施形態２の順次処理開始指示手段６０５−２−２の制御手順例＞
実施形態２では、図６の順次処理開始指示手段６０５−２−２が、実行順序のないプロセスと実行順序のあるプロセスを同時に実行管理できる機能をもつ。
【０１０１】
図７は、実施形態２における順次処理開始指示手段６０５−２−２の制御手順例を示したフローチャートである。以下では、プロセス処理実行順序変数Ｐn、実行順序のついているプロセス数をＭとする。
【０１０２】
まず、実行するプロセスの中に実行順序の指定がないプロセスがあるかをチェックする(ステップＳ１００１)。ステップＳ１００１で実行順序の指定がないプロセスがある場合、実行順序の指定がない全プロセスに対して基準同期時間分の処理実行を指示する（ステップＳ１００２）。続いて、プロセス処理実行順序変数Ｐnの初期化を行う(ステップＳ１００３)。ステップＳ１００１にて全プロセスに実行順序の指定があると判断された場合には、ステップＳ１００３を実行する。
【０１０３】
ステップＳ１００３でプロセス処理実行順序変数Ｐnの初期化を行った後、ステップＳ１００４でＰn≦Ｍが成立するか否かをチェックする。ステップＳ１００４のチェックでＰn≦Ｍが成立する場合は、ステップＳ１００５へ進み、実行順序Ｐnのプロセスに基準同期時間分の処理実行を指示する。ステップＳ１００５で実行順序Ｐnのプロセスに基準同期時間分の処理実行を指示した後、処理実行を指示した実行順序Ｐnのプロセスから処理実行終了通知を受けるまで待つ(ステップＳ１００６)。ステップＳ１００６で実行終了通知を受けたら、プロセス処理実行順序Ｐnを１つ進め(ステップＳ１００７)、ステップＳ１００４のＰn≦Ｍが成立するかのチェックに戻る。
【０１０４】
また、ステップＳ１００４でＰn≦Ｍが不成立である場合、全プロセスから実行終了通知を受けるまで待つ(ステップＳ１００８)。そして、ステップＳ１００８で全プロセスから実行終了通知を受けた後、ステップＳ１００９でシミュレーションの終了か否かを判定する。シミュレーションの終了でなければ、ステップＳ１００１に戻り、次の同期分処理を行う。
【０１０５】
＜実施形態２の具体的な適用例＞
ここで、３つの独立プロセスからなるシミュレーションシステムを動作させる例にあげて、各プロセス間の同期連携状況を説明する。各アプリケーションソフトのシステム構成は下記のようになっている。
（実行順序の指定）
・アプリケーションソフト１：実行順序［１］
・アプリケーションソフト２：実行順序［２］
・アプリケーションソフト３：実行順序［指定なし］
（端子接続状況の設定）
・信号Ａ：アプリケーションソフト１から出力され、アプリケーションソフト２に入力される。
・信号Ｂ：アプリケーションソフト２から出力され、アプリケーションソフト１に入力される。
・なお、アプリケーションソフト２の処理は信号Ａに依存し、信号Ｂは信号Ａによって決定される。
【０１０６】
（本具体例における各プロセス間の同期連携例）
アプリケーションソフト１，２、アプリケーションソフト３の各プロセス間の同期連携状況を図８に示す。
【０１０７】
図８中の(1)で、同期モジュール６０５−２は、実行順序［１］であるアプリケーションソフト１と実行順序のついていないアプリケーションソフト３に処理実行の開始を指示する。アプリケーションソフト１とアプリケーションソフト３は処理開始指示(1)を受け、１同期時間Ｔs分の処理を開始する(2),(3)。アプリケーションソフト１実行途中に、信号Ａの変化イベント(4)が発生する。前記イベント情報は、配線モジュール６０５−３に伝わり、配線モジュール６０５−３は信号Ａの変化情報をアプリケーションソフト２に報知する(5)。アプリケーションソフト２には、配線モジュール６０５−２からイベント(4)の情報が報知される(6)。しかしながら、アプリケーションソフト２はｎ同期目の処理を開始していないため、信号Ａの変化情報はアプリケーションソフト２の処理開始時に反映される(9)。
【０１０８】
アプリケーションソフト１が１同期時間分Ｔsの実行処理を終了(7)すると、処理実行終了通知が同期モジュール６０５−２に伝えられる。同期モジュール６０５−２は、次の実行順序（実行順序［２］）のアプリケーションソフト２に対して１同期時間Ｔsの処理実行開始を指示する(8)。
【０１０９】
アプリケーションソフト２は、同期モジュール６０５−２から処理実行開始指示を受け１同期時間分Ｔsの処理を開始する(9)。その後、アプリケーションソフト３で１同期時間分の処理が終了し、処理実行終了を同期モジュールに対して通知する(10)。同期モジュール６０５−２は、アプリケーションソフト３の処理実行終了通知を受け取る(11)。
【０１１０】
次に、アプリケーションソフト２が信号Ｂを変更したことによるイベントが発生する(12)。前記イベント(12)の情報は、配線モジュール６０５−３に伝わり、配線モジュール６０５−３は、信号B変化のイベント情報をアプリケーションソフト１に報知する(13)。ここで、アプリケーションソフト１は、イベント(12)の情報の報知を受ける(14)。しかしながら、アプリケーションソフト１はｎ同期目の処理を終了しているため、前記情報(14)がアプリケーションソフト１の処理に反映されるのは、(ｎ+１)同期目の処理開始時である。
【０１１１】
アプリケーションソフト２のｎ同期目の処理が終了した時点で、同期モジュール６０５−２に処理終了通知が出される(15)。アプリケーションソフト２から処理実行終了通知を受け取った時点で、全アプリケーションソフトからｎ同期目の処理実行終了通知を受け取ったことになり、同期モジュール６０５−２は、(n+１)同期目の処理開始へと移行する(16)。
【０１１２】
同期モジュール６０５−２は、前記(1)と同様にして、アプリケーションソフト１とアプリケーションソフト３に、１同期時間Ｔs分の処理開始を指示する(17),(18)。以降、ｎ同期目と同様に同期処理を行う
＜実施形態２の作用効果＞
順次処理開始指示手段６０５−２−２が、図７に記した処理フローチャートに従って同期処理を行うことで、
・実行順序がついているプロセスとついていないプロセスが混合している場合、
・全てのプロセスに実行順序がついている場合、
・全てのプロセスに実行順序がついていない場合、
以上の全ての場合において、シミュレーションの実行速度優先、または、シミュレーションの精度優先かをユーザのニーズにあったシミュレーションができるように、各プロセスの同期を管理できる。
【０１１３】
［実施形態３］
＜実施形態３の特徴＞
実施形態１、２では、各プロセスに実行順序情報をつけてシーケンスシミュレーションを行った。実施形態３では、シミュレーション実行時に、並列実行方式か／シーケンスシャル実行方式かを必要に応じてシミュレーションシステムのユーザが選択できるようにするものである。ここで、並列実行方式は、従来のプロセス間連携動作方法のように、各プロセスに実行順序をつけずに並列的にプロセスを実行して行く方式である。一方、シーケンスシャル実行方式は、実施形態１または実施形態２のように各プロセスに実行順序をつけシーケンスシャルにプロセスを実行して行く方式である。
【０１１４】
シミュレーションシステムのプロセス処理の実行方法を選択可能にすることで、ユーザがシミュレーションの実行速度を優先したい場合も、シミュレーションの精度を優先したい場合も、どちらの場合にも応えられるシミュレーションができる。
【０１１５】
＜本実施形態を実行するプログラム連携システムの概略構成例＞
本実施形態３に係るプログラム連携システムの構成は、実施形態１で示した図２の処理開始指示手段６０５−２−１に、新たな２つの手段が加わったものである。図９に、本実施形態に係るプログラム連携システムの処理開始指示手段６０５−２−１を含めた同期モジュール６０５−２の機能構成を示す。
【０１１６】
前記処理開始指示手段６０５−２−１は、順次処理開始指示手段６０５−２−２に加えて、次の構成要素を含む。すなわち、全アプリケーションソフトに１同期分の処理実行を同時に指示することにより、全アプリケーションソフト間の同期を行う同時処理開始指示手段１２００−１を含む。また、同時処理開始指示手段１２００−１と順次処理開始指示手段６０５−２−２のどちらを使用して同期処理を行うかを決定する処理開始指示手段決定情報に従い、２つの処理開始指示手段の切替えを行う処理開始指示切替手段１２００−２を含む。
【０１１７】
＜実施形態３の処理開始指示手段６０５−２−１の制御手順例＞
図１０に、本実施形態における処理開始指示手段６０５−２−１の制御フローチャートを示す。以下では、プロセス処理実行順序変数Ｐn、実行順序のついているプロセス数をＭとする。
【０１１８】
まず、ステップＳ１３００で各プロセスをシーケンシャル実行指定がなされているかをチェックする。各プロセスがシーケンシャル実行の指定がされている場合は、ステップＳ１３０１の実行順序の指定がないプロセスがあるかを判断する処理に続く。
【０１１９】
ステップＳ１３０１からステップＳ１３０９までの処理は、実施形態２で示した、順次処理開始指示手段６０５−２−２による図７のステップＳ１００１からステップＳ１００８の処理と同様であるのでここでの説明は避ける。
【０１２０】
１同期処理実行をステップＳ１３００でシーケンシャル実行の指定がない場合、全プロセスに基準同期時間分の処理実行を指示するステップＳ１３１０の処理を行う。ステップＳ１３１０の後、全プロセスから実行終了通知を受けるまで待つ（ステップＳ１３１１）。ステップＳ１３１１で全プロセスから実行終了通知を受けた後、ステップＳ１３１２でシミュレーションの終了か否かを判定する。シミュレーションの終了でなければ、ステップＳ１３１０に戻り、次の同期時間分の処理を行う。
【０１２１】
各プロセスをシーケンシャル実行するか、並列実行するかの指定は、実施形態２で説明したように、ＧＵＩから指定する方法、外部ファイルインタフェースを介して指定する方法、もしくはプロセス間通信を介して指定する方法がある。
【０１２２】
また、処理開始指示手段６０５−２−２を構成する各々の手段（順次処理開始指示手段、同時処理開始指示手段、処理開始指示切替手段）の行う処理は、前述した処理開始指示手段６０５−２−１の制御フローチャートの下記処理に相当する。
・ステップＳ１３００：処理開始指示切替手段１２００−２
・ステップＳ１３０１〜Ｓ１３０９：順次処理開始指示手段６０５−２−２
・ステップＳ１３１０〜Ｓ１３１２：同時処理開始指示手段１２００−１
＜実施形態３の作用効果＞
本実施形態を行うことにより、各アプリケーションソフトの処理実行方法をユーザが選択してシミュレーションを行うことが可能になり、シミュレーションを実行速度優先か、精度優先かユーザのニーズにあったシミュレーションを行うことができる。
【０１２３】
なお、上記実施形態では、図１に示したコンピュータシステム５０１による集中制御の例を示したが、本発明は複数のコンピュータがネットワークを介して接続されたシステムにおける分散制御によっても実現できることは、明らかである。
【０１２４】
又、上記実施形態の具体例では、例えば、ステッピングモータの制御を例に示したが、本発明はこれに限定されることなく、あらゆるシミュレーションに適用できる。特に、アプリケーションソフト間のイベント情報のやり取り、とりわけイベント情報により処理の前後関係が明らかなシミュレーションに有用である。
【０１２５】
又、本発明は、複数の機器（例えばホストコンピュータ、インターフェース機器、プリンタなど）から構成されるシステムあるいは統合装置に適用しても、ひとつの機器からなる装置に適用してもよい。
【０１２６】
又、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給する。そして、そのシステムあるいは装置のコンピュータ（またはu CPUやMPU）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
【０１２７】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１２８】
又、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけではない。そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（OS）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１２９】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行う。このような処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１３０】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１３１】
【図１】本実施形態に係るプログラム連携システムの概略構成例を示す図である
【図２】本実施形態に係るプログラム連携システムの機能構成例を示す図である
【図３】実施形態１に係る順次処理開始指示手段の制御手順例を示すフローチャートである
【図４Ａ】本実施形態に係る実行順序を指定するＧＵＩによって表示される実行順序指定のための表示例を示した図である
【図４Ｂ】本実施形態に係る実行順序情報の模式図である
【図５】実施形態１の具体例における、ＣＰＵシミュレータと擬似モータ制御ASICおよび機構モデルシミュレーションのアプリケーションソフト間の制御関係を示す図である
【図６】実施形態１における同期方式による各プロセスの同期連携の状況を示す図である
【図７】実施形態２に係る順次処理開始指示手段の制御手順例を示すフローチャートである
【図８】実施形態２における同期方式による各プロセスの同期連携の状況を示す図である
【図９】実施形態３に係るプログラム連携システムの同期モジュールの機能構成例を示す図である
【図１０】実施形態３に係る処理開始指示手段を含む制御手順例を示すフローチャートである
【図１１】従来のアプリケーション間での連携動作の形態についての模式図である
【図１２】従来のプロセス接続手段の制御によるアプリケーションの同期連携の状況を示す図である
【図１３Ａ】従来のプロセス間連携動作で、プロセス処理終了の後にイベントが発生した場合の例を示す図である
【図１３Ｂ】従来のプロセス間連携動作で、プロセス処理終了の前にイベントが発生した場合の例を示す図である
【図１】
2009163423.tif 000003
【図２】
2009163423.tif 000004
【図３】
2009163423.tif 000005
【図４Ａ】
2009163423.tif 000006
【図４Ｂ】
2009163423.tif 000007
【図５】
2009163423.tif 000008
【図６】
2009163423.tif 000009
【図７】
2009163423.tif 000010
【図８】
2009163423.tif 000011
【図９】
2009163423.tif 000012
【図１０】
2009163423.tif 000013
【図１１】
2009163423.tif 000014
【図１２】
2009163423.tif 000015
【図１３Ａ】
2009163423.tif 000016
【図１３Ｂ】
2009163423.tif 000017