(57)【特許請求の範囲】
【請求項１】
ソフトウェアにより機器のシミュレーションを実行するシミュレータ部と、
要求コマンド送信後、一定時間内に応答コマンドを受信しなかった場合には、同一要求コマンドを再送する機能を有する外部装置との間で通信を行い、前記外部装置から受信した要求コマンドを前記シミュレータ部へ通知し、当該要求コマンドに基づいて前記シミュレータ部で生成される応答コマンドを受け取る通信インタフェース部と、を備えたシミュレーション装置であって、
前記外部装置からの要求コマンドと、前記シミュレータ部からの応答コマンドと保存するための記憶手段を備え、
前記通信インタフェース部は、前記外部装置からの要求コマンドが再送されたものか否かを判定し、再送された要求コマンドの場合には前記記憶手段に保存されている応答コマンドを前記外部装置へ送信することを特徴とするシミュレーション装置。
【請求項２】
前記通信インタフェース部は、受信した要求コマンドに対応して前記記憶手段に保存されている応答コマンドを前記外部装置へ送信する一方、前記シミュレータ部は、前記通信インタフェース部から通知される当該要求コマンドの指令に従って応答コマンドを生成し、前記記憶手段に保存されている応答コマンドを更新することを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記通信インタフェース部は、受信した要求コマンドが前記記憶手段に保存されている要求コマンドと同一ではない場合は、前記記憶手段に保存されている応答コマンドを削除する一方、新たに受信した要求コマンドを保存することを特徴とする請求項１に記載のシミュレーション装置。
【請求項４】
一または二以上の要求コマンドと、夫々の前記要求コマンドに対応する応答コマンドとを関連付けて格納する送受信データテーブルを備え、
前記通信インタフェース部は、要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在するか否かを判定し、当該要求コマンドが前記送受信データテーブルに存在する場合は、当該要求コマンドに対応する応答コマンドを前記外部装置に送信し、当該要求コマンドが前記送受信データテーブルに存在しない場合は、前記シミュレータ部によって当該要求コマンドに基づいて応答コマンドを生成し、生成した応答コマンドを当該要求コマンドに関連付けて前記送受信データテーブルに格納することを特徴とする請求項１に記載のシミュレーション装置。
【請求項５】
前記通信インタフェース部は、前記要求コマンドに対応する応答コマンドが前記送受信データテーブルに存在する場合は、当該応答コマンドを前記外部装置に送信した後に、前記送受信データテーブルから該要求コマンド及び該応答コマンドを削除することを特徴とする請求項４に記載のシミュレーション装置。
【請求項６】
前記送受信データテーブルは、さらに、夫々の前記要求コマンドに関連付けてレディフラグを格納し、
前記レディフラグのオン時間を計測する計測手段を備え、
前記通信インタフェース部は、要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在しない場合、または、当該要求コマンドが存在し、かつ該要求コマンドに関連付けられたレディフラグがオフの場合は、前記シミュレータ部によって該要求コマンドに対応する応答コマンドが生成されるのを待って、当該応答コマンドを前記外部装置へ送信すると共に、当該レディフラグをオンにし、
要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在し、かつ、当該要求コマンドに関連付けられたレディフラグがオンの場合は、当該要求コマンドに関連付けられた応答コマンドを前記外部装置へ送信し、その後、当該レディフラグが一定時間以上オンか否かを判定し、一定時間以上オンの場合は当該レディフラグをオフにすることを特徴とする請求項４または５に記載のシミュレーション装置。
【請求項７】
前記シミュレータ部への通知対象である要求コマンド、または、前記シミュレータ部への通知対象でない要求コマンドを登録する再送許可コマンドテーブルを備え、
前記通信インタフェース部は、前記外部装置から要求コマンドが再送されたときに前記再送許可コマンドテーブルに基づいて当該要求コマンドをシミュレータ部へ通知するか否かを決定することを特徴とする請求項１乃至６のいずれか一項に記載のシミュレーション装置。
【請求項８】
シミュレータ装置において、受信データに基づいて生成された送信データを出力するシミュレーション方法であって、
前記受信データと前記送信データとを前記シミュレータ装置の記憶手段に保存しておき、前記受信した受信データと同一のデータを受信した場合は、前記記憶手段に保存されている送信データを出力する一方、今回の受信データに基づいて送信データを生成し、当該送信データによって前記記憶手段に格納されている送信データを更新することを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置に外部装置を接続するシステム構成において、外部装置からシミュレーション装置へ要求コマンドを送信し、シミュレーション装置から外部装置へ要求コマンドに対する応答コマンドを返信するシミュレーション装置及びシミュレーション方法に関する。
【背景技術】
【０００２】
従来、組込み機器のソフトウェア開発において、開発したソフトウェアを実機の代わりにパーソナルコンピュータ上でシミュレーションを行い、動作確認を行うという手法が採られている。この手法は、実機の製作や準備が不要であり、またパソコン上で予め動作確認を行うことにより実機で動作させても、爆発や感電等の危険がないことなど安全性を確認できるなどの利点がある。
【０００３】
具体的には、このシミュレーション装置に、実運用において実機との間でデータを送受信して実機の動作設定や監視を行う装置（以下、「外部装置」という。）を使用し、外部装置からの要求コマンドに対して、開発ソフトウェアの動作するシミュレーション装置が正しく応答コマンドを返してくるかという動作確認を行うことがある。
【０００４】
外部装置は、最終的には実機と接続して用いられる。このため、実機の応答性能を前提として一定の時間内に応答コマンドが返信されなかった場合は通信タイムアウトを検出し、必要に応じて要求コマンドを再送するという構成となっていることが多い。
ところが、シミュレーション装置は、実機に比べて動作が遅い場合が多く、特にシミュレーション装置が、シミュレーション機能に特化した専用機器（HILS：Hardware in the Loop Simulator）等ではなく、市販のパーソナルコンピュータを用いるような場合は顕著である。この場合、外部装置は要求コマンドに対する応答を一定時間内に受信しなかったとしてタイムアウトになるため再送を繰り返し、通信を正常に行うことができず、シミュレーションを継続することが困難になる。
【０００５】
以下、図面を用いて、従来のシミュレーション装置の構成と、シミュレーション動作が実機に比べて遅いときの通信装置との通信シーケンスについて詳述する。
【０００６】
従来のシミュレーション装置は、図２０に示すように外部装置８との間でデータの送受信を行う通信手段２、データを記憶する記憶手段４、データを用いて演算処理を実行する演算処理手段３とを備えている。このシミュレーション装置１は、パーソナルコンピュータなどの汎用のコンピュータ装置によって実現することができる。また、演算処理手段３は、その機能として開発ソフトウェアを実装してシミュレーションを実行するシミュレータ部３２と、外部装置８と当該シミュレータ部３２との間の通信処理を実行する通信インタフェース部３１から構成されている。なお、外部装置８は、通信回線７を介してシミュレーション装置１の通信手段２に接続されている。
【０００７】
シミュレーション動作が遅いときの通信シーケンスを図２１に示す。
まず外部装置８からシミュレーション装置１の通信インタフェース部３１へ要求コマンドが送られる（ａ１）。通信インタフェース部３１は要求コマンドを受信すると、その要求コマンドをシミュレータ部３２へ渡し（ａ２）、シミュレータ部３２はその要求コマンドを実行する（ａ３）。なお、図２１において、スローモーション動作とは、シミュレーション動作が実機に比べて遅いことを意味する。シミュレータ部３２は実行結果を応答コマンドとして通信インタフェース部３１へ渡す（ａ４）。
【０００８】
シミュレータ部３２は、実機に比べると処理スピードが遅いため、外部装置８側では応答コマンドのタイムアウト監視により（ａ６）、タイムオーバーとなり、応答コマンドを受信した時点では既に通信異常が発生したと判定して再送処理に入る。このときシミュレーション装置１から応答コマンドが返信されてきたとしても（ａ５）、それが再送処理開始後であると、外部装置８から要求コマンドが再送されることになる（ａ７）。
再送された要求コマンドは、上記と同様に、通信インタフェース部３１で受信され、シミュレータ部３２から渡された応答コマンドを外部装置８へ送信する（ａ８〜ａ１１）。しかし、このときも外部装置８側では通信異常と判定され再送処理が行われる（ａ１２）。したがって、再送処理が永遠に繰り返されることになる。
【０００９】
この問題を解決する一つの方法として、外部装置８のタイムアウト時間の設定を都度変更することも考えられるが、外部装置８においてその接続先が実機の場合とシミュレーション装置の場合とで設定を変更することは試験作業の負担が大きくなり、また試験後に設定を実機用に戻す際のミスも発生しやすくなる。また、外部装置８が実機との接続を前提としており、シミュレーション装置に適した設定に変更できない場合もある。
【００１０】
外部装置のタイムアウトの問題に関する技術として、たとえば特許文献1では、タイムアウトを検出する側の装置（外部装置）において、通信方式を切り替える技術が提案されている。しかしながら、この技術は外部装置の接続先がシミュレーション装置か、あるいは実機かによって通信方式を切り替える必要が生じ、設定を都度変更する作業負担や設定ミスの発生の可能性を解消することはできない。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００６−５７４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は上述のかかる事情に鑑みてなされたものであり、既存の外部装置の設定を変更することなく、実時間よりも遅く動作するシミュレーション装置によるシミュレーションテストを可能とし、効果的な試験を実施することのできるシミュレーション装置およびシミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明に係るシミュレーション装置は、
ソフトウェアにより機器のシミュレーションを実行するシミュレータ部と、
要求コマンド送信後、一定時間内に応答コマンドを受信しなかった場合には、再度同一要求コマンドを送信する機能を有する外部装置との間で通信を行い、前記外部装置から受信した要求コマンドを前記シミュレータ部へ通知し、当該要求コマンドに基づいて前記シミュレータ部で生成される応答コマンドを受け取る通信インタフェース部と、を備えたシミュレーション装置であって、
前記外部装置からの要求コマンドと、前記シミュレータ部からの応答コマンドとを保存するための記憶手段を備え、
前記通信インタフェース部は、前記外部装置からの要求コマンドが前回受信した要求コマンドと同一か否かを判定し、同一の場合には前記記憶手段に保存されている応答コマンドを前記外部装置へ送信することを特徴とする。
【００１４】
本発明では、シミュレーション装置において、外部装置からの要求コマンドを受信したときに、その要求コマンド、およびシミュレーション結果による応答コマンドを記憶しておき、外部装置から再度同じ要求コマンドが送信されてきたときは、記憶されている応答コマンドを直ちに返信する。これにより、外部装置は再送処理を繰り返すことなく、次の処理に進むことができる。
【００１５】
特に、本発明に係るシミュレーション装置は、前記通信インタフェース部が受信した要求コマンドに対応して前記記憶手段に保存されている応答コマンドを前記外部装置へ送信する一方、前記シミュレータ部は当該要求コマンドの指令に従って応答コマンドを生成し、前記記憶手段に保存されている応答コマンドを更新することを特徴とする。
【００１６】
今回受信した要求コマンドに対して、予め応答コマンドを生成し、次回の要求コマンドの受信に備えておくことにより、同一要求コマンドを受信したときに即座に応答コマンドを返信できるので、外部装置側でのタイムアウトによる再送処理を回避でき、円滑なシミュレーションテストが可能になる。
【００１７】
なお、前記通信インタフェース部は、受信した要求コマンドが前記記憶手段に保存されている要求コマンドと同一ではない場合は、保存されている要求コマンドに関連付けられている応答コマンドを削除する一方、新たに受信した要求コマンドを保存する。
【００１８】
これにより、新たな要求コマンドに対しても同様に、外部装置側のタイムアウトによる再送の繰り返しを回避することができる。
【００１９】
また、本発明に係るシミュレーション装置は、一または二以上の要求コマンドと、夫々の前記要求コマンドに対応する応答コマンドとを関連付けて格納する送受信データテーブルを備え、前記通信インタフェース部は、要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在するか否かを判定し、当該要求コマンドが前記送受信データテーブルに存在する場合は、当該要求コマンドに対応する応答コマンドを前記外部装置に送信し、当該要求コマンドが前記送受信データテーブルに存在しない場合は、前記シミュレータ部によって当該要求コマンドに基づいて応答コマンドを生成し、生成した応答コマンドを当該要求コマンドに関連付けて前記送受信データテーブルに格納することを特徴とする。
【００２０】
この場合、前記通信インタフェース部は、前記要求コマンドに対応する応答コマンドが前記送受信データテーブルに存在する場合は、当該応答コマンドを前記外部装置に送信した後に、前記送受信データテーブルから該要求コマンド及び該応答コマンドを削除する。
【００２１】
本発明では、各要求コマンドと応答コマンドを関連付けたテーブルを備えるので、外部装置側でタイムアウト検出する前に複数の要求コマンドが送信された場合でも、夫々の要求コマンドごとに即座に応答コマンドを返信することができる。
【００２２】
また、本発明に係るシミュレーション装置では、前記送受信データテーブルは、さらに、夫々の前記要求コマンドに関連付けてレディフラグを格納し、
前記レディフラグのオン時間を計測する計測手段を備え、
前記通信インタフェース部は、要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在しない場合、または当該要求コマンドが存在し、かつ該要求コマンドに関連付けられたレディフラグがオフの場合は、前記シミュレータ部によって該要求コマンドに対応する応答コマンドが生成されるのを待って、当該応答コマンドを前記外部装置へ送信すると共に、当該レディフラグをオンにし、
要求コマンド受信時に前記送受信データテーブルに当該要求コマンドが存在し、かつ、当該要求コマンドに関連付けられたレディフラグがオンの場合は、当該要求コマンドに関連付けられた応答コマンドを前記外部装置へ送信し、その後、当該レディフラグが一定時間以上オンか否かを判定し、一定時間以上オンの場合は当該レディフラグをオフにすることを特徴とする。
【００２３】
本発明では、送受信データテーブルに、要求コマンド、応答コマンド、及びレディフラグを関連付けて格納する。そして、レディフラグの状態によって直ちに応答コマンドを送信するか否かを判定し、また一定時間以上オンの場合は当該レディフラグをオフにする。これにより、物理的原因により一時的に通信障害が発生し、再送処理が行われたような場合には、効果的に復帰することが可能になる。
【００２４】
また、本発明に係るシミュレーション装置は、前記シミュレータ部への通知対象である要求コマンド、または、前記シミュレータ部への通知対象でない要求コマンドを登録する再送許可コマンドテーブルを備え、前記通信インタフェース部は、前記外部装置から要求コマンドが再送されたときに前記再送許可コマンドテーブルに基づいて当該要求コマンドをシミュレータ部へ通知するか否かを決定することを特徴とする。なお、要求コマンドが初送、すなわち再送でない場合には、通信インタフェース部は無条件で当該要求コマンドをシミュレータ部へ通知し、シミュレーション処理を実行させる。
【００２５】
本発明では、外部装置から要求コマンドの再送があったときに当該要求コマンドに対する応答コマンドを直ちに返信する一方、シミュレーション部に対しては不要な呼び出し（起動）をしないようにして誤動作を防止する。
【００２６】
本発明に係るシミュレーション方法は、シミュレータ装置において、受信データに基づいて生成された送信データを出力するシミュレーション方法であって、
前記受信データと前記送信データとを前記シミュレータ装置の記憶手段に保存しておき、前記受信した受信データと同一のデータを受信した場合は、前記記憶手段に保存されている送信データを出力する一方、今回の受信データに基づいて送信データを生成し、当該送信データによって前記記憶手段に格納されている送信データを更新することを特徴とする。
【発明の効果】
【００２７】
本発明によれば、シミュレーション装置において、外部装置から送られてくる要求コマンドを受信したときに、その要求コマンドおよびシミュレーション動作による応答コマンドを記憶しておき、外部装置から再度同じ要求コマンドが送信されてきたときには、記憶されている応答コマンドを直ちに返信するので、既存の外部装置の設定を変更することなく、実時間よりも遅く動作するシミュレーション装置によるシミュレーションテストが可能になる。これにより、シミュレーションテスト時の作業負担が軽減し、設定ミスを回避することができる。
【図面の簡単な説明】
【００２８】
【図１】本発明の第１の実施の形態によるシミュレーション装置の機能ブロック図である。
【図２】図１の通信インタフェース部の要求コマンド受信処理手順を示すフローチャートである。
【図３】図１の通信インタフェース部の応答コマンド送信処理手順を示すフローチャートである。
【図４】図１のシミュレーション装置と外部装置との通信シーケンスの説明図である。
【図５】本発明の第２の実施の形態による外部装置からの送信データのフォーマットの説明図である。
【図６】本発明の第２の実施の形態による送受信データテーブルのデータ構成の説明図である。
【図７】本発明の第２の実施の形態による通信インタフェース部の処理手順を示すフローチャートである。
【図８】本発明の第２の実施の形態によるシミュレーション装置と外部装置との通信シーケンスの説明図である。
【図９】本発明の第３の実施の形態によるシミュレーション装置の機能ブロック図である。
【図１０】図９の送受信データテーブルのデータ構成の説明図である。
【図１１】図９の通信インタフェース部の要求コマンド受信処理手順を示すフローチャートである。
【図１２】図９の通信インタフェース部の応答コマンド送信処理手順を示すフローチャートである。
【図１３】本発明の第４の実施の形態によるシミュレーション装置の機能ブロック図である。
【図１４】図１３の再送許可コマンドテーブルの説明図である。
【図１５】図１３の送受信データテーブルの説明図である。
【図１６】図１３の通信インタフェース部の処理手順を示すフローチャートである。
【図１７】本発明の第４の実施の形態によるシミュレーション装置と外部装置との通信シーケンスの説明図である。
【図１８】図１３の再送許可コマンドテーブルを備えず、通信インタフェース部が常に要求コマンドの再送に対してシミュレーション処理を実行するとした場合の通信シーケンス図である。
【図１９】図１３の再送許可コマンドテーブルを備えず、通信インタフェース部が常に要求コマンドの再送に対してシミュレーション処理を実行しないとした場合の通信シーケンス図である。
【図２０】従来技術によるシミュレーション装置の機能ブロック図である。
【図２１】従来技術によるシミュレーション装置と外部装置との通信シーケンスの説明図である。
【発明を実施するための形態】
【００２９】
［第１の実施の形態］
以下に本発明に係るシミュレーション装置の第１の実施の形態を図１に基づいて説明する。本発明に係るシミュレーション装置１は、外部装置８との間でデータの送受信を行う通信手段２、データを記憶する記憶手段４、データを用いて演算処理を実行する演算処理手段３とを備えている。外部装置８は、通信回線７を介してシミュレーション装置１の通信手段２に接続されている。通信回線７は、無線、有線、ＬＡＮ、ＷＡＮあるいはシリアル通信など既存の技術によるものが含まれる。
【００３０】
演算処理手段３は、その機能としてシミュレーションを実行するシミュレータ部３２と、外部装置８と当該シミュレータ部３２との間での通信処理を実行する通信インタフェース部３１ａとを備えている。この通信インタフェース部３１ａとシミュレータ部３２は、ＣＰＵの機能としてプログラムによって実現することができる。
【００３１】
図１において、図２０の従来の構成との主な違いは、通信インタフェース部３１ａの処理内容にある。以下、シミュレーション装置１の動作について通信インタフェース部３１ａの処理を中心に説明する。
【００３２】
（通信インタフェース部の要求コマンド受信処理手順）
まず図２を用いて上記の処理を実行する通信インタフェース部３１ａの要求コマンド受信処理手順を説明する。
【００３３】
通信インタフェース部３１ａは、シミュレーション装置１の動作開始によって起動されるとまず要求コマンドの受信待ち状態になる（Ｓ１０１）。この状態で外部装置８から要求コマンドが送られてくると通信手段２によって受信される。通信インタフェース部３１ａは、通信手段２から受信通知を受けると、動作モードを受信済み状態にする（Ｓ１０２）。次に通信インタフェース部３１ａは、通信手段２から渡された要求コマンド（以下、「今回値」という）と、記憶手段４に保存されている要求コマンド（以下、「前回値」という。）とを比較する（Ｓ１０３）。
【００３４】
ステップＳ１０３の比較の結果、今回値と前回値が等しくない場合は、要求コマンドを前回値として記憶手段４の一時記憶バッファ４１に保存して（Ｓ１０４）、応答コマンドの前回値をクリアする（Ｓ１０５）。そして要求コマンドをシミュレータ部３２へ通知する（Ｓ１０９）。
【００３５】
一方、ステップＳ１０３の比較の結果、今回値と前回値が等しい場合は、さらに一時記憶バッファ４１内の応答コマンドの前回値の有無を判定し（Ｓ１０６）、前回値が存在する場合は、外部装置８へその応答コマンドの前回値を送信する（Ｓ１０７）。そして、動作モードを初期状態、すなわち未受信の状態にする（Ｓ１０８）。その後、要求コマンドの今回値をシミュレータ部３２へ通知する（Ｓ１０９）。
【００３６】
通信インタフェース部３１ａは、ステップＳ１０６の判定の結果、今回値が存在しない場合は、直ちにステップＳ１０９へ移行して要求コマンドをシミュレータ部３２へ通知する。
【００３７】
（通信インタフェース部の応答コマンド送信処理）
次に図３を用いて通信インタフェース部３１ａの応答コマンド送信処理について説明する。この応答コマンド送信処理は、上述した要求コマンド受信処理とは独立して動作するものである。
【００３８】
応答コマンド送信処理は、装置１の動作開始によって起動されると、シミュレータ部３２からの応答コマンド通知の待ち合わせ状態になる（Ｓ２０１）。そして、シミュレータ部３２から応答コマンドの生成完了済みの通知があると以降のステップを実行する。
【００３９】
通信インタフェース部３１ａは、まず動作モードが受信済状態か否かを判定して（Ｓ２０２）、受信済状態の場合は応答コマンドを送信し（Ｓ２０３）、動作モードを初期状態にセットする（Ｓ２０４）。そして応答コマンドを前回値として保存する（Ｓ２０５）。その後、ステップＳ２０１へ戻り上述した処理を繰り返す。
【００４０】
したがって、通信インタフェース部３１ａの応答コマンド送信処理は、シミュレータ部３２からの応答コマンド通知の待ち合わせ状態のときに実質的に処理が実行されることになるので、要求コマンド受信処理のステップＳ１０３（図２）で要求コマンドの前回値と今回値が等しくないとき、またはステップＳ１０６（図２）で応答コマンドの前回値が存在しないときに応答コマンド送信処理のステップＳ２０２以降の処理が実行されることになる。
【００４１】
（通信シーケンス）
次に図４を用いて、上記処理手順を実行する通信インタフェース部３１ａと、外部装置８との通信シーケンスについて説明する。
【００４２】
外部装置８から送信されたデータ（要求コマンド）は、通信回線７を介してシミュレーション装置１へ送られ、シミュレーション装置１の通信手段２によって受信される。通信インタフェース部３１ａは通信手段２から要求コマンドを受け取ると（ｂ１）、その要求コマンドを記憶手段４の一時記憶バッファ４１に保存するとともに、シミュレータ部３２へ渡す（ｂ２）。シミュレータ部３２は、通信インタフェース部３１ａから渡された要求コマンドを実行し（ｂ３）、実行結果から応答コマンドを生成して通信インタフェース部３１ａへ渡す（ｂ４）。通信インタフェース部３１ａは、シミュレータ部３２から渡された応答コマンドを一時記憶バッファ４１へ保存するとともに、外部装置８へ送信する（ｂ５）。
【００４３】
外部装置８は、通信インタフェース部３１ａから送信されてきた応答コマンドを受信した時点がタイムアウト検出前ならば、その応答コマンドを有効とみなして処理を継続し、次の要求コマンドを送信することになるが、応答コマンド受信前にタイムアウトを検出した場合は、前回の要求コマンドの再送処理に入る（ｂ６）。
【００４４】
外部装置８から再送された要求コマンドは、シミュレーション装置１の通信インタフェース部３１ａに受信される（ｂ７）。
【００４５】
通信インタフェース部３１ａは、今回受信した要求コマンドと一時記憶バッファ４１に保存されている要求コマンドとを比較して、同一かどうかを判定する。その結果、同一の場合は、一時記憶バッファ４１に保存されている応答コマンドを外部装置８へ送信し（ｂ８）、またその要求コマンドをシミュレータ部３２へ渡す（ｂ９）。シミュレータ部３２は、その要求コマンドに基づいて、シミュレーションソフトウェアの動作によって作成した応答コマンドを通信インタフェース部３１ａへ渡す（ｂ１０，ｂ１１）。通信インタフェース部３１ａは渡された応答コマンドを一時記憶バッファ４１に保存する。
【００４６】
以上、本実施の形態によれば、シミュレーション装置において、外部装置からの要求コマンドを受信したときに、その要求コマンドおよび、シミュレーション結果による応答コマンドを記憶しておき、外部装置から再度同じ要求コマンドが送信されてきたときは、記憶されている応答コマンドを直ちに返信するので、既存の外部装置の設定を変更することなく、実時間よりも遅く動作するシミュレーション装置によるシミュレーションテストが可能になる。
【００４７】
［第２の実施の形態］
次に第２の実施の形態について説明する。第２の実施の形態の特徴は、第１の実施の形態が、通信装置からは常に一つずつ要求コマンドが送信されることを前提としているのに対して、本実施の形態では、外部装置からタイムアウト検出前に複数の異なる要求コマンドが送信される場合に、実機に比べて動作の遅いシミュレーション装置に対しても正常に送受信できるようにしたものである。
【００４８】
より具体的に説明すると、第１の実施の形態によるシミュレーション装置１は、外部装置８から複数種類の要求コマンド(要求コマンドＸ、要求コマンドＹ)が一度に送られると、後から送られてきた要求コマンドＹに対する応答コマンドが一時記憶バッファ４１に保存されることになる。
【００４９】
そうすると、外部装置８がタイムアウトを検出し、要求コマンドＸを再送したときに、要求コマンドＹに対する応答コマンド（応答コマンドＹ）が送信されることになる。このため、外部装置８は、受信した応答コマンドＹを、要求コマンドＸに対する応答コマンドであると判断してしまう。本実施の形態は、この問題を解決するものである。
【００５０】
本実施の形態と第１の実施の形態との主な構成の違いは、図１において、記憶手段４に一時記憶バッファ４１の代わりに、要求コマンド別にその要求コマンドと応答コマンドとを関連付けて保存する送受信データテーブル４２（図示せず）を設けたことである。なお、本実施の形態では、外部装置８からの送信データは、図５に示すように、送信順に付されるシーケンス番号と、要求コマンドで構成されているものとして説明する。
【００５１】
この送受信データテーブル４２のデータ構成を図６に示す。
この図６において、送受信データテーブル４２は、それぞれの行ごとに受信データに含まれているシーケンス番号と要求コマンド、およびその要求コマンドに対する応答コマンドが互いに関連付けられて保存されている。
【００５２】
次に上記の構成を有するシミュレーション装置１の動作について通信インタフェース部３１ａの処理を中心に説明する。なお本実施の形態では、通信インタフェース部３１ａは、通信手段２からの割り込みにより起動し、通信手段２から渡される要求コマンドを処理するという構成になっている。
【００５３】
図７において、通信インタフェース部３１ａは起動されると、まず受信データ中の要求コマンドが送受信データテーブル４２に含まれているか否かを判定する（Ｓ３０１）。
【００５４】
その結果、要求コマンドが送受信データテーブル４２に含まれている場合は、送受信データテーブル４２の行にアクセスして、要求コマンドに関連付けられた応答コマンドを外部装置８へ送信する（Ｓ３０２）。その後、送受信データテーブル４２から当該要求コマンドが含まれている行を削除する（Ｓ３０３）。
【００５５】
一方、ステップＳ３０１で受信データ中の要求コマンドが送受信データテーブル４２に含まれていない場合は、送信すべき応答コマンドを作成するため、シミュレータ部３２を呼び出す（Ｓ３０４）。その後、通信インタフェース部３１ａは応答コマンドをシミュレータ部３２から受け取ると、外部装置８へ送信する（Ｓ３０５）。
【００５６】
そして、送受信データテーブル４２の行に、受信データに含まれているシーケンス番号、要求コマンド、および応答コマンドを互いに関連付けて追加する（Ｓ３０６）。
【００５７】
以上の処理手順により、外部装置８とシミュレーション装置１との通信シーケンスは図８のようになる。なお、上記は処理手順の一実施例であり、必要により種々変形して実施することができる。例えば、ステップＳ３０３において、都度、送受信データテーブル４２から当該要求コマンドが含まれている行を削除する代わりに、その行の追加から一定時間経過した時点で削除するようにしても良い。
【００５８】
外部装置８から送信されたデータ、すなわち要求コマンドＸ，要求コマンドＹは、通信回線７を介してシミュレーション装置１へ送られ、シミュレーション装置１の通信手段２によって受信される（ｃｘ１、ｃｙ１）。通信インタフェース部３１ａは通信手段２から要求コマンドを受け取ると、その要求コマンドを記憶手段４の送受信データテーブル４２に保存するとともに、シミュレータ部３２へ渡す（ｃｘ２，ｃｙ２）。シミュレータ部３２は、通信インタフェース部３１ａから渡された要求コマンドを実行し（ｃ３）、実行結果から応答コマンドＸ，Ｙを生成して通信インタフェース部３１ａへ渡す（ｃｘ４，ｃｙ４）。
【００５９】
なお、通信インタフェース部３１ａにおいて、はじめて要求コマンドＸ，Ｙを受けたときの処理は、図７のステップＳ３０１で「ＮＯ」の判定になる。このため、ステップＳ３０４〜ステップＳ３０６の処理において、要求コマンドＸ，Ｙとそれに対応する応答コマンドＸ，Ｙがそれぞれ関連付けられて送受信データテーブル４２に保存されことになる。
【００６０】
したがって、外部装置８の再送処理において、要求コマンドＸが再送されたときには（ｃｘ７）、シミュレーション装置１の通信インタフェース部３１ａは図７のステップＳ３０２の処理により送受信データテーブル４２から要求コマンドＸの行から応答コマンドＸを選択して、外部装置８へ送信する（ｃｘ８）。そしてシミュレータ部３２により、この要求コマンドＸに基づいて応答コマンドＸが生成され、送受信データテーブル４２が更新される（ｃｘ１１）。
【００６１】
図８は、要求コマンドＸが再送されたときの手順を示しているが、要求コマンドＹが再送されたときも同様に、通信インタフェース部３１ａは送受信データテーブル４２から要求コマンドＹの行から応答コマンドＹを選択して、外部装置８へ送信する。
【００６２】
本実施の形態によれば、複数種類の要求コマンドごとに応答コマンドを関連付けた送受信データテーブルを用いて管理するので、外部装置から複数の異なる要求コマンドがタイムアウト検出前に送信される場合においても、実機に比べて動作の遅いシミュレーション装置に対して正常に送受信できるようにしたものである。
【００６３】
なお、本実施の形態において、送受信データテーブル中にシーケンス番号を保存することにより、受信した要求コマンドが再送か否かを容易に把握することができる。この送受信データテーブルを用いた構成は、要求コマンドが一種類のときにも有効に機能することは明らかである。
【００６４】
［第３の実施の形態］
次に第３の実施の形態について説明する。図９は第３の実施の形態によるシミュレーション装置１の機能ブロック図である。本実施の形態の主な特徴は、第２の実施の形態の送受信データテーブルの構成に対して、レディフラグを設け、通信インタフェース部３１ａは、このレディフラグに基づいて応答コマンドを外部装置８へ送信するようにしたこと、およびレディフラグのオン時間を計測する計測手段３３を設けたことである。
【００６５】
図１０にこの送受信データテーブル４２ａの構成例を示す。要求コマンドの種別ごとに、シミュレータ部３２で生成される応答コマンド、レディフラグ、および経過時間（レディフラグのオン時間）が関連付けられて保存されている。この経過時間は、計測手段３３によって設定されるものである。すなわち計測手段３３は周期的に起動されると、送受信データテーブル４２ａの各レディフラグがオンか否かを判定し、オンになっている場合は、そのレディフラグの経過時間をカウントアップし、レディフラグがオフの場合はクリアする。
【００６６】
次に、本実施の形態による通信インタフェース部３１ａの処理手順について図１１を用いて説明する。なお本実施の形態は、第２の実施の形態と同様に、通信インタフェース部３１ａは、通信手段２からの割り込みにより起動し、通信手段２から渡される要求コマンドを処理するという構成になっている。
【００６７】
通信インタフェース部３１ａは起動されると、受信データから要求コマンドを抽出し（Ｓ４０１）、その要求コマンドが送受信データテーブル４２ａに含まれているか否かを判定する（Ｓ４０２）。この判定の結果、送受信データテーブル４２ａに含まれている場合は、当該要求コマンドに関連付けられたレディフラグがオンか否かを判定する（Ｓ４０３）。この判定の結果、レディフラグがオンの場合は、当該要求コマンドに関連付けられた応答コマンドを外部装置８へ送信する（Ｓ４０４）。そして、レディフラグ継続時間が所定時間以上か否かを判定し（Ｓ４０５）、所定時間以上の場合は、当該要求コマンドに関連付けられたレディフラグをオフにする（Ｓ４０６）。そして要求コマンドをシミュレータ部３２へ通知して（Ｓ４０７）、ステップＳ４０１へ移行し、以降の処理を繰り返す。
【００６８】
一方、ステップＳ４０２において、送受信データテーブル４２ａに要求コマンドが含まれていない場合は、送受信データテーブル４２ａに当該要求コマンドの行を追加する（Ｓ４０８）。このとき、応答コマンドはブランク、レディフラグはオフに設定する。そして、ステップＳ４０７へ移行する。
【００６９】
次に、本実施の形態による通信インタフェース部３１ａがシミュレータ部３２から応答コマンドの通知を受けたときの処理手順を説明する。
【００７０】
図１２において、通信インタフェース部３１ａは、シミュレータ部３２からの割り込み等により起動すると、応答コマンドを送受信データテーブル４２ａの要求コマンドに関連付けて保存する（Ｓ５０１）。そして、レディフラグがオフか否かを判定し（Ｓ５０２）、オフの場合は、直ちに応答コマンドを送信し（Ｓ５０３）、レディフラグをオンにする（Ｓ５０４）。ステップＳ５０２において、レディフラグが既にオンになっている場合は、そのまま終了する。
【００７１】
以上、本実施の形態によれば、要求コマンドごとにレディフラグを持たせた送受信データテーブルを用い、一旦セットされたレディフラグは、一定時間経過するまでオンしているので、シミュレータの処理が遅く通常ならば外部装置のタイムアウト監視でタイムオーバーになるような場合でも、順次予め準備した応答コマンドが返信されるのでタイムアウトの度重なる発生を回避することができ、シミュレーションテストの実施が可能になる。
【００７２】
さらに、シミュレーション処理の遅れではなく、一時的な通信エラーによって応答コマンドが通信装置に届かなかったような場合には正常に復帰し、要求コマンド受信時にその要求コマンドに対する応答コマンドを返信できるようになる。
【００７３】
［第４の実施の形態］
次に第４の実施の形態について説明する。図１３は第４の実施の形態によるシミュレーション装置１の機能ブロック図である。本実施の形態の主な特徴は、第２の実施の形態の構成において、外部装置８から要求コマンドが再送されたときにシミュレーション処理を実行するか否かを判定するための再送許可コマンドテーブル４３を設けたことである。図１４に再送許可コマンドテーブル４３のデータ例を示す。通信インタフェース部３１ａは、要求コマンドの再送時にこの再送許可コマンドテーブル４３に基づいてシミュレータ部３２を起動するか否かを決定する。
【００７４】
以下、本実施の形態におけるシミュレーション装置１の動作について通信インタフェース部３１ａの処理を中心に説明する。
【００７５】
図１６は、通信インタフェース部３１ａの処理手順を示すフローチャートである。この図において、通信インタフェース部３１ａは外部装置８から送られてくる要求コマンドを受信すると、送受信データテーブル４２にその要求コマンドが含まれているか否かを判定する（Ｓ６０１）。ここで、送受信データテーブル４２は、図１５に例示するように要求コマンドとその応答（応答コマンド）とを関連付けて登録したテーブルである。送受信データテーブル４２を図１５に示すようなリスト形式で形成する場合は、要求コマンドとそれに対応する応答コマンドを同じ行に書き込むことにより互いのデータを関連付けることができる。
【００７６】
ステップＳ６０１の判定の結果、送受信データテーブル４２に当該要求コマンドが含まれていない場合には、当該要求コマンドを引数として指定して、シミュレータ部３２を起動する（Ｓ６０２）。シミュレータ部３２は起動されると、渡された要求コマンドに基づいて処理を実行し、その結果を戻り値として通信インタフェース部３１ａに返す。通信インタフェース部３１ａは、この戻り値から応答コマンドを生成し（Ｓ６０３）、この応答コマンドと受信した要求コマンドとを関連付けて送受信データテーブル４２に追加する（Ｓ６０４）。そして、通信インタフェース部３１ａは、この応答コマンドを外部装置８へ送信する（Ｓ６０５）。
【００７７】
一方、ステップＳ６０１において、受信した要求コマンドが送受信データテーブル４２に含まれている場合には、通信インタフェース部３１ａは送受信データテーブル４２の中で、その要求コマンドに関連付けられている応答コマンドを抽出して外部装置８へ送信する（Ｓ６０６）。その後、通信インタフェース部３１ａは送受信データテーブル４２から、ステップＳ６０６で送信した要求コマンドおよびこれに関連付けられた応答コマンドを削除する（Ｓ６０７）。次に通信インタフェース部３１ａは、受信した要求コマンドが再送許可コマンドテーブル４３に含まれているか否かを判定し（Ｓ６０８）、含まれている場合には、前述したステップＳ６０２〜ステップＳ６０４の処理を繰り返す（Ｓ６０９〜Ｓ６１１）。
【００７８】
すなわち、本実施の形態では、外部装置８から再送があったときに再度シミュレーション処理を実行してよい要求コマンドのみを予め再送許可コマンドテーブル４３に登録しておく。そして通信インタフェース部３１ａは、外部装置８から再送要求があった場合は、この再送許可コマンドテーブル４３を参照して、再送に係る要求コマンドが再送許可コマンドテーブル４３に登録されている場合には、シミュレータ部３２を起動する。一方、再送に係る要求コマンドが再送許可コマンドテーブル４３に登録されていない場合には、通信インタフェース部３１ａはシミュレータ部３２を起動しない。
【００７９】
次に、上記の処理手順を有する通信インタフェース部３１ａが、外部装置８から要求コマンドの再送を受けたときの通信シーケンスについて、要求コマンドとして運転開始コマンドと電圧取得コマンドを例にして図１６と図１７を参照しながら説明する。なお、運転開始コマンドは、再送時のシミュレーション処理は禁止され、電圧取得コマンドは、再送時のシミュレーションは許可されているものとする。この場合、再送許可コマンドテーブル４３には予め電圧取得コマンドのみを登録しておく。
【００８０】
図１７において外部装置８から送信された運転開始コマンドＸ（要求コマンド）は、通信回線７を介してシミュレーション装置１へ送られ、シミュレーション装置１の通信手段２によって受信される（ｄ１）。通信インタフェース部３１ａは通信手段２からの割り込み等によって起動されると、受信データすなわち運転開始コマンドＸを引数として受け取る。そして通信インタフェース部３１ａは、図１６のステップＳ６０１の処理によって記憶手段４の送受信データテーブル４２にアクセスして、運転開始コマンドＸが登録済みか否かを判定する。
【００８１】
通信インタフェース部３１ａが運転開始コマンドＸを最初に受信した場合は、送受信データテーブル４２に運転開始コマンドＸは存在しないので、ステップＳ６０１において「Ｎｏ」の判定になる。したがって、通信インタフェース部３１ａは、ステップＳ６０２において、シミュレータ部３２を呼び出して、運転開始コマンドＸを引数としてシミュレーション処理を実行させる（ｄ２）。その後、通信インタフェース部３１ａは、シミュレータ部３２から処理結果である戻り値を受け取ると（ｄ３）、ステップＳ６０３，ステップＳ６０４において、当該戻り値から生成した応答コマンドと運転開始コマンドＸとを関連付けて送受信データテーブル４２に追加し、ステップＳ６０５においてその応答コマンドを外部装置８へ送信する。
【００８２】
しかし、このとき既に外部装置８でタイムアウトを検出して、運転開始コマンドＸを再送していたとすると（ｄ４）、当該コマンド受信により起動された通信インタフェース部３１ａは、図１６のステップＳ６０１の処理において「Ｙｅｓ」の判定になり、ステップＳ６０６において、送受信データテーブル４２中の運転開始コマンドＸに関連付けられた応答コマンドを外部装置８へ送信する（ｄ５）。そして通信インタフェース部３１ａは、送受信データテーブル４２から運転開始コマンドＸを削除する。この運転開始コマンドＸは、再送許可コマンドテーブル４３に含まれていないので、ステップＳ６０８において「Ｎｏ」の判定になり、通信インタフェース部３１ａは処理を終了する。すなわち、シミュレーション装置１は、運転開始コマンドＸの再送に対してはシミュレーション処理を実行しないことになる。これにより、運転開始コマンドＸの複数回実行によるシステムの誤動作を防止することができる。
【００８３】
次に外部装置８から電圧取得コマンドＹ（要求コマンド）がシミュレーション装置１へ送られてくると、シミュレーション装置１は通信手段２によってこれを受信する（ｄ６）。そして、通信手段２によって起動された通信インタフェース部３１ａは、受信データすなわち電圧取得コマンドＸを引数として受け取り、図１６のステップＳ６０１の処理によって記憶手段４の送受信データテーブル４２にアクセスして、電圧取得コマンドＹが登録済みか否かを判定する。通信インタフェース部３１ａが電圧取得コマンドＹを最初に受信した場合は、送受信データテーブル４２に電圧取得コマンドＹは存在しないので、ステップＳ６０１において「Ｎｏ」の判定になる。したがって、通信インタフェース部３１ａは、ステップＳ６０２において、シミュレータ部３２を呼び出して、電圧取得コマンドＹを引数としてシミュレーション処理を実行させる（ｄ７）。その後、通信インタフェース部３１ａは、シミュレータ部３２から処理結果である戻り値を受け取ると（ｄ８）、ステップＳ６０３，ステップＳ６０４において、当該戻り値から生成した応答コマンドと電圧取得コマンドＹとを関連付けて送受信データテーブル４２に追加し、ステップＳ６０５においてその応答コマンドを外部装置８に送信する。
【００８４】
しかし、このとき既に外部装置８でタイムアウトを検出して、電圧取得コマンドＹを再送していたとすると（ｄ９）、当該コマンド受信により起動された通信インタフェース部３１ａは、図１６のステップＳ６０１の処理において「Ｙｅｓ」の判定になり、ステップＳ６０６において、送受信データテーブル４２中の電圧取得コマンドＹに関連付けられた応答コマンドを外部装置８へ送信する（ｄ１２）。そして通信インタフェース部３１ａは、送受信データテーブル４２から電圧取得コマンドＹを削除する。この電圧取得コマンドＹは、再送許可コマンドテーブル４３に含まれているので、ステップＳ６０８において「Ｙｅｓ」の判定になり、通信インタフェース部３１ａは、ステップＳ６０９〜ステップ６１１の処理を実行することになる。すなわち通信インタフェース部３１ａは、シミュレータ部３２を呼び出して、電圧取得コマンドＹを引数としてシミュレーション処理を実行させる（ｄ１０）。その後、通信インタフェース部３１ａは、シミュレータ部３２から処理結果である戻り値を受け取ると（ｄ１１）、当該戻り値から生成した応答コマンドと電圧取得コマンドＹとを関連付けて送受信データテーブル４２に追加する。
【００８５】
したがって、外部装置８から電圧取得コマンドＹが送られてきたときには、通信インタフェース部３１ａは、当該電圧取得コマンドＹが再送処理によるものでなくても、ステップＳ６０１で「Ｙｅｓ」の判定になり、ステップＳ６０６〜ステップＳ６１１の処理を実行することになる。即ち通信インタフェース部３１ａは、次の電圧取得コマンドＹの受信（ｄ１３）に対して、送受信データテーブル４２に登録されている電圧取得コマンドＹに関連付けられた応答コマンドを返信するとともに（ｄ１６）、ステップｄ１３で受信した電圧取得コマンドＹに対するシミュレーション処理を実行し（ｄ１４）、その結果を応答コマンドとして送受信データテーブル４２に追加する。これにより、シミュレーション装置１は、電圧取得コマンドＹに対しては常に最新の値を応答コマンドとして外部装置８へ送信することができる。
【００８６】
ちなみに、再送許可コマンドテーブル４３を備えず、通信インタフェース部３１ａが常に要求コマンドの再送に対してシミュレーション処理を実行するとした場合は、図１８に示すように運転開始コマンドを二重に実行することになり（図１８の処理ｅ６）、この結果システムの誤動作を招くことになる。一方、通信インタフェース部３１ａが常に要求コマンドの再送に対してシミュレーション処理を実行しないとすると、次に要求コマンドを受信したときに、図１９に示すように、古い情報が返信されることになる。
【００８７】
本実施の形態によれば、再送許可コマンドテーブル４３を備え、予め許可された要求コマンドに対してのみ、再送があったときに当該要求コマンドを実行するので、運転開始コマンドが再送により複数回実行されてしまうことや、過去の古い電圧データを取得するような事態を回避することができる。
【００８８】
なお、この再送許可コマンドテーブル４３は、シミュレーション装置１の図示しない入力手段から登録してもよいし、あるいは、外部装置８から設定するようにしてもよい。また、再送許可コマンドテーブル４３には、図１４の例示の如く個々の要求コマンドごとにその識別情報を登録するようにしてもよいが、運転開始などの制御コマンドは再送時のシミュレーション処理を実行しない、電圧取得などの監視コマンドは再送時のシミュレーション処理を実行するなど要求コマンドの種別ごとに設定するようにしてもよい。
【００８９】
なお本実施の形態では、第２の実施の形態の構成に対して再送許可コマンドテーブル４３を設けることを例にして説明したが、図１に示す第１の実施の形態や図９に示す第３の実施の形態の構成に対して再送許可コマンドテーブル４３を設け、通信インタフェース部３１ａはこの再送許可コマンドテーブル４３を参照しながら、シミュレータ部３２を起動するか否かを決定するようにしてもよい。
【００９０】
本発明は、上述した実施の形態に限定されることなく、その要旨を逸脱しない範囲で種々変形して実現することができる。例えば、第３の実施の形態においてレディフラグの代わりにシーケンス番号を用いて、ある種別の要求コマンドに対して前回受信時のシーケンス番号と今回受信時のシーケンス番号の差が一定以下のときのみ、送受信データテーブルに保存されている応答コマンドを返信するようにしても良い。
【００９１】
あるいは、計測手段の代わりにシーケンス番号を用いて、シーケンス番号の前回値と今回値の差が一定以上になったときに、レディフラグをリセットするようにしても良い。
【００９２】
また第４の実施の形態では、外部装置８からの再送時にもシミュレーション処理を実行する要求コマンドのみを予め再送許可コマンドテーブル４３に登録しておくことを前提として説明したが、再送のあったときにシミュレーション処理を実行しない要求コマンドのみを予めテーブルに登録しておき、通信インタフェース部３１ａは、再送に係る要求コマンドが当該テーブルに登録されている場合はシミュレータ部３２を起動せず、それ以外の場合は起動して当該要求コマンドをシミュレータ部３２へ通知するという構成にしてもよい。
【符号の説明】
【００９３】
１    シミュレーション装置
２    通信手段
３    演算処理手段
４    記憶手段
７    通信回線
８    外部装置
３１，３１ａ    通信インタフェース部
３２    シミュレータ部
３３    計測手段
４１    一時記憶バッファ
４２，４２ａ    送受信データテーブル
４３    再送許可コマンドテーブル
【図１】
0006631301.tif 000002
【図２】
0006631301.tif 000003
【図３】
0006631301.tif 000004
【図４】
0006631301.tif 000005
【図５】
0006631301.tif 000006
【図６】
0006631301.tif 000007
【図７】
0006631301.tif 000008
【図８】
0006631301.tif 000009
【図９】
0006631301.tif 000010
【図１０】
0006631301.tif 000011
【図１１】
0006631301.tif 000012
【図１２】
0006631301.tif 000013
【図１３】
0006631301.tif 000014
【図１４】
0006631301.tif 000015
【図１５】
0006631301.tif 000016
【図１６】
0006631301.tif 000017
【図１７】
0006631301.tif 000018
【図１８】
0006631301.tif 000019
【図１９】
0006631301.tif 000020
【図２０】
0006631301.tif 000021
【図２１】
0006631301.tif 000022