(57)【要約】【課題】実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止すること。【解決手段】実施形態に係るシミュレーション装置は、イベント駆動部と、シミュレーション実行部とを備える。イベント駆動部は、優先度および発生順序が対応付けられたイベントのリスト情報に基づいてイベントを発生順序に沿って順次発生させる。シミュレーション実行部は、イベント駆動部により発生されたイベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、実時間上の所定の時間間隔において制御処理に処理漏れが発生する場合に、優先度が高いイベントに応じた制御処理のシミュレーションを優先的に実行する。【選択図】図２
2019020891.tif 000002
【特許請求の範囲】
【請求項１】
優先度および発生順序が対応付けられたイベントのリスト情報に基づいて前記イベントを前記発生順序に沿って順次発生させるイベント駆動部と、
前記イベント駆動部により発生された前記イベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、前記実時間上の所定の時間間隔において前記制御処理に処理漏れが発生する場合に、前記優先度が高い前記イベントに応じた前記制御処理のシミュレーションを優先的に実行するシミュレーション実行部と
を備えることを特徴とするシミュレーション装置。
【請求項２】
前記シミュレーション実行部は、
前記制御処理のシミュレーションを実行する第１の実行部と、
前記第１の実行部によるシミュレーションに先行する前記制御処理の先行シミュレーションを実行する第２の実行部と、
前記第２の実行部の実行結果に基づいて前記処理漏れが発生するか否かを判定する判定部と
を備えることを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記判定部は、
前記先行シミュレーションにおける前記制御処理それぞれの処理時間を計測し、前記時間間隔において実行されるべき前記制御処理の前記処理時間の合計が前記時間間隔を超える場合に、前記処理漏れが発生すると判定すること
を特徴とする請求項２に記載のシミュレーション装置。
【請求項４】
前記判定部は、
前記処理漏れが発生すると判定した場合に、当該処理漏れが発生する前記時間間隔において実行される前記制御処理それぞれに対応する前記イベントを、前記第１の実行部によるシミュレーションにおいては前記イベント駆動部に前記優先度が低い方から破棄させること
を特徴とする請求項３に記載のシミュレーション装置。
【請求項５】
優先度および発生順序が対応付けられたイベントのリスト情報に基づいて前記イベントを前記発生順序に沿って順次発生させるイベント駆動工程と、
前記イベント駆動工程により発生された前記イベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、前記実時間上の所定の時間間隔において前記制御処理に処理漏れが発生する場合に、前記優先度が高い前記イベントに応じた前記制御処理のシミュレーションを優先的に実行するシミュレーション実行工程と
を含むことを特徴とするシミュレーション方法。
【請求項６】
優先度および発生順序が対応付けられたイベントのリスト情報に基づいて前記イベントを前記発生順序に沿って順次発生させるイベント駆動ステップと、
前記イベント駆動ステップにより発生された前記イベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、前記実時間上の所定の時間間隔において前記制御処理に処理漏れが発生する場合に、前記優先度が高い前記イベントに応じた前記制御処理のシミュレーションを優先的に実行するシミュレーション実行ステップと
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の実施形態は、シミュレーション装置、シミュレーション方法およびプログラムに関する。
【背景技術】
【０００２】
従来、ＥＣＵ（Electronic  Control  Unit）の開発工程において、コンピュータ上に設けられたＥＣＵの制御対象の仮想モデル（いわゆるプラントモデル）とＥＣＵの実機とを連携させた閉ループ環境を構築し、かかる環境下でシミュレーションを実行するＨＩＬＳ（Hardware  In  the  Loop  Simulator）が知られている（たとえば、特許文献１参照）。
【０００３】
また、ＥＣＵの実機が入手できない場合などに、コンピュータ上でＥＣＵの制御プログラムのロードモジュールと前述の仮想モデルとを連携させた閉ループ環境を構築し、かかる環境下でシミュレーションを実行するＳＩＬＳ（Software  In  the  Loop  Simulator）も知られている（たとえば、特許文献２参照）。
【０００４】
なお、一般にＨＩＬＳでは、コンピュータのＯＳ（Operating  System）にはリアルタイムＯＳが用いられ、シミュレーションは実時間に同期して実行される。一方、ＳＩＬＳでは、シミュレーションは実時間に同期せず、コンピュータにおける仮想時間上で実行される。したがって、ＳＩＬＳで実行されるシミュレーションの各タスクは、実時間に対する時間的な制約を受けない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−３３６７２号公報
【特許文献２】特開２０１０−９７４０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術には、実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止するうえで更なる改善の余地がある。
【０００７】
たとえば、自部門で開発したＥＣＵを動作検証したい場合に、自部門ではＥＣＵの実機が入手でき、ＨＩＬＳ環境が構築できるものの、連携させたい他部門のＥＣＵの実機が入手できなかったとする。この場合に、他部門のＥＣＵのＳＩＬＳ環境を自部門のＨＩＬＳ環境へ取り込んで動作させることができれば、開発工程の大幅な効率化を図ることができる。
【０００８】
ただし、上述したように、ＳＩＬＳでは実時間に同期していないため、自部門のＨＩＬＳ環境で他部門のＳＩＬＳをそのまま動作させると、実時間上の時間的な制約の中で、漏れなく実行されるべき重要なタスクの実行漏れが起きてしまうおそれがある。
【０００９】
実施形態の一態様は、上記に鑑みてなされたものであって、実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止することができるシミュレーション装置、シミュレーション方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
実施形態の一態様に係るシミュレーション装置は、イベント駆動部と、シミュレーション実行部とを備える。前記イベント駆動部は、優先度および発生順序が対応付けられたイベントのリスト情報に基づいて前記イベントを前記発生順序に沿って順次発生させる。前記シミュレーション実行部は、前記イベント駆動部により発生された前記イベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、前記実時間上の所定の時間間隔において前記制御処理に処理漏れが発生する場合に、前記優先度が高い前記イベントに応じた前記制御処理のシミュレーションを優先的に実行する。
【発明の効果】
【００１１】
実施形態の一態様によれば、実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止することができる。
【図面の簡単な説明】
【００１２】
【図１Ａ】図１Ａは、実施形態に係るシミュレーション方法の概要説明図（その１）である。
【図１Ｂ】図１Ｂは、実施形態に係るシミュレーション方法の概要説明図（その２）である。
【図１Ｃ】図１Ｃは、実施形態に係るシミュレーション方法の概要説明図（その３）である。
【図１Ｄ】図１Ｄは、実施形態に係るシミュレーション方法の概要説明図（その４）である。
【図２】図２は、実施形態に係るシミュレーション装置のブロック図である。
【図３】図３は、イベントリストの設定例を示す図である。
【図４Ａ】図４Ａは、イベントの選別の具体例を示す図（その１）である。
【図４Ｂ】図４Ｂは、イベントの選別の具体例を示す図（その２）である。
【図４Ｃ】図４Ｃは、イベントの選別の具体例を示す図（その３）である。
【図５】図５は、イベントの優先度の具体例を示す図である。
【図６】図６は、実施形態に係るシミュレーション装置が実行する処理手順を示すフローチャートである。
【図７】図７は、実施形態に係るシミュレーション装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して、本願の開示するシミュレーション装置、シミュレーション方法およびプログラムの実施形態を詳細に説明する。なお、以下に示す実施形態によりこの発明が限定されるものではない。
【００１４】
また、以下では、シミュレーション装置がパソコンＰＣ（図１Ａ参照）である場合を例に挙げて説明を進める。
【００１５】
また、以下では、本実施形態に係るシミュレーション方法の概要について図１Ａ〜図１Ｄを用いて説明した後に、本実施形態に係るシミュレーション方法を適用したシミュレーション装置１０の具体的な構成について、図２〜図７を用いて説明することとする。
【００１６】
まず、本実施形態に係るシミュレーション方法の概要について図１Ａ〜図１Ｄを用いて説明する。図１Ａ〜図１Ｄは、本実施形態に係るシミュレーション方法の概要説明図（その１）〜（その４）である。
【００１７】
端的に言えば、本実施形態に係るシミュレーション方法は、ＳＩＬＳをリアルタイム対応させるものである。具体的には、図１Ａに示すように、本実施形態に係るシミュレーション方法では、パソコンＰＣにＳＩＬＳ環境を構築する。
【００１８】
ＳＩＬＳ環境は、ＥＣＵの実機なしでのシミュレーションを可能とする実行環境であって、パソコンＰＣには、ＥＣＵの制御プログラムと、制御対象となる車両の仮想モデルがインストールされる。
【００１９】
シミュレーションは、かかる制御プログラムおよび仮想モデル間で、制御信号とこれに対応するセンサ信号とがやり取りされることによって逐次進められる。本実施形態に係るシミュレーション方法は、かかるやり取りを実時間に同期した時間的制約の中で逐次進めることで「リアルタイム対応」化を図るものである。
【００２０】
図１Ｂに示すように、シミュレーションは、所定のステップ間隔（ここでは、１ミリ秒）で所定の各種イベントが順次実行されることで進められる。イベントは、予め所定のイベントリストに登録される。なお、イベントは、ＥＣＵを動作させるにあたり、何らかのアクションが発生した際にＥＣＵの制御プログラムに発信される信号を指し、定期的あるいは割り込み的に発生する。たとえばイベントは、「某センサのセンサ値の読み込み」といった情報である。
【００２１】
図１Ｂに示すように、イベントリストは、「Ｎｏ．」項目と、「イベント名」項目と、「イベント発生時刻」項目とを含むリスト情報である。「Ｎｏ．」項目には実行順序が格納される。「イベント名」項目には、イベント名称が格納される。「イベント発生時刻」項目には、各イベントの発生時刻が格納される。「Ｎｏ．」項目の実行順序は、かかる発生時刻順となる。
【００２２】
シミュレーションは、前述のステップ間隔ごとに実行される。すなわち、図１Ｂに示す例でたとえばシミュレーション開始からの現在時点が２．０ミリ秒であった場合、「Ｎｏ．」項目「１」〜「３」の「イベントＡ」、「イベントＢ」、「イベントＤ」が順に、「イベント発生時刻」項目の各発生時刻時点で実行される。次のステップでは、次の１ミリ秒間の、「Ｎｏ．」項目「４」以降の各イベントが同様に実行される。
【００２３】
図１Ｂに示すように、本実施形態に係るシミュレーション方法は基本的に、このようなステップ間隔を実時間と同期させることにより、リアルタイム対応を実現するものである。実時間はたとえばパソコンＰＣのマザーボードに搭載されたリアルタイムクロック（以下、「ＲＴＣ」と記載する）などから取得する。
【００２４】
ただし、このようにＳＩＬＳをリアルタイム対応させた場合、イベントリストのステップ間隔内の各イベントは、実時間に同期したそのステップ間隔内で完了させる必要がある。たとえば図１Ｂの「イベントＡ」、「イベントＢ」、「イベントＤ」は、リアルタイム対応では、２．０〜３．０ミリ秒の１ステップ分の１ミリ秒間で完了しなければならない。
【００２５】
しかし、元々仮想時間上でのシミュレーション実行を前提としていたＳＩＬＳの場合、かかるＳＩＬＳのイベントリストでは、イベントの数や内容によっては、図１Ｂに示すように、「実時間内に処理が完了しない」ことが考えられる。
【００２６】
そこで、本実施形態に係るシミュレーション方法では、図１Ｃに示すように、イベントリストにさらに「優先度」項目を設け、かかる「優先度」項目の格納値として、イベントリスト内の各項目に優先度を付与することとした（ステップＳ１）。なお、説明の便宜上、図１Ｃではかかる優先度を「高」、「中」、「低」の３段階で表しているが、優先度の段階数や「優先度」項目の格納値を限定するものではない。
【００２７】
また、本実施形態に係るシミュレーション方法ではさらに、図１Ｄに示すように、シミュレーションの本番実行である「本実行」に対し、たとえば１ステップ分、仮のシミュレーションを先行実行させることとした（ステップＳ２）。別の言い方をすれば、シミュレーションの予行演習を実施することとした。
【００２８】
そして、本実施形態に係るシミュレーション方法では、かかる先行実行の結果に基づき、タスク漏れの発生を判定することとした（ステップＳ３）。そして、そのうえで、タスク漏れの発生の判定結果に基づいて「本実行」では、前述の「優先度」に応じて実行イベントを取捨選択することとした（ステップＳ４）。
【００２９】
すなわち、ステップＳ２で先行したシミュレーションを実行することによって、予定していたイベントの処理時間が判明し、ステップＳ３でタスク漏れが発生するか否かを判定することが可能となる。
【００３０】
そして、タスク漏れが発生する場合には、予め付与していた優先度に応じて、たとえば優先度が低いものからイベントの実行をあきらめることで、優先度の高い重要なイベントを確実に実行させる。優先度の低いイベントは、たとえばシミュレーションを破綻させることのない、シミュレーション全体への影響度の低いイベントである。具体例は、図５を用いた説明で後述する。
【００３１】
また、タスク漏れが発生すると判定された場合のイベントの取捨選択、言い換えれば選別の具体例については、図４Ａ〜図４Ｃを用いた説明で後述する。
【００３２】
これにより、本実施形態に係るシミュレーション方法では、シミュレーションを破綻させる可能性のある重要なイベントについては、タスク漏れさせることのないように確実に実行させ、影響度の低いイベントについては適宜選別してタスク漏れの発生を防止する。すなわち、本実施形態に係るシミュレーション方法によれば、実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止することができる。
【００３３】
以下、上述した本実施形態に係るシミュレーション方法を適用したシミュレーション装置１０について、さらに具体的に説明する。
【００３４】
図２は、本実施形態に係るシミュレーション装置１０のブロック図である。なお、図２では、本実施形態の特徴を説明するために必要な構成要素のみを機能ブロックで表しており、一般的な構成要素についての記載を省略している。
【００３５】
換言すれば、図２に図示される各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。例えば、各機能ブロックの分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することが可能である。
【００３６】
図２に示すように、シミュレーション装置１０は、制御部１１と、記憶部１２と、ＲＴＣ１３とを備える。制御部１１は、設定部１１ａと、イベント駆動部１１ｂと、先行実行部１１ｃと、判定部１１ｄと、本実行部１１ｅとを備える。先行実行部１１ｃ、判定部１１ｄおよび本実行部１１ｅは、シミュレーション実行部２０を構成する。
【００３７】
記憶部１２は、ハードディスクドライブや不揮発性メモリ、レジスタといった記憶デバイスであって、イベントリスト１２ａと、仮想モデル１２ｂと、制御プログラム１２ｃとを記憶する。イベントリスト１２ａは、上述したように、シミュレーションにおいて実行される各イベントの、実行順序やイベント名、イベント発生時刻および優先度を含む情報である。
【００３８】
仮想モデル１２ｂは、エンジンやモータなど、ＥＣＵの制御対象となるプラントを仮想化したプラントモデルであって、たとえば所定の入力値に対して予め対応したプラントの挙動を示す出力値を返す。なお、ここでは仮想モデル１２ｂを、記憶部１２が記憶する静的モデルとして挙げているが、制御部１１で実行されるロードモジュールとして構成されてもよい。
【００３９】
制御プログラム１２ｃは、シミュレーション対象となるＥＣＵの制御プログラムであって、シミュレーションに際しては制御部１１へ読み込まれ、実行される。
【００４０】
制御部１１は、シミュレーション装置１０全体を制御する。設定部１１ａは、キーボードやマウスといった入力インタフェースである操作部２を介して、イベントリスト１２ａの設定操作を受け付け、操作内容に応じてイベントリスト１２ａを更新する。
【００４１】
ここで、イベントリスト１２ａの設定例を挙げておく。図３は、イベントリスト１２ａの設定例を示す図である。図３に示すように、更新前のイベントリスト１２ａには、「イベントＡ」〜「イベントＣ」が登録されていたものとする。
【００４２】
かかる場合に、操作部２を介し、図３に示すように「イベントＤ」の登録操作を受け付けた場合、設定部１１ａは、かかる「イベントＤ」の「イベント発生時刻」項目の格納値に基づき、適切な実行順序となるようにかかる「イベントＤ」を登録する。
【００４３】
具体的には、図３に示すように、「イベントＤ」の「イベント発生時刻」は「２．８」ミリ秒であるので、設定部１１ａは、更新後において、かかる「イベントＤ」が「イベントＢ」と「イベントＣ」の間に挿入され、更新前の「イベントＣ」に替わり実行順序が「３」となるように、イベントリスト１２ａを更新する。
【００４４】
図２の説明に戻り、つづいてイベント駆動部１１ｂについて説明する。イベント駆動部１１ｂは、イベントリスト１２ａに基づき、登録された各イベントを実行順序および発生時刻に沿って仮想的に発生させ、先行実行部１１ｃに通知する。
【００４５】
また、イベント駆動部１１ｂは、先行実行部１１ｃにおける先行シミュレーションの処理結果を判定した判定部１１ｄからの指示に基づき、指示された内容で適宜イベントリスト１２ａ内の各イベントを選別し、選別した内容に沿って、各イベントの発生を本実行部１１ｅへ通知する。なお、イベント駆動部１１ｂは、選別した内容でイベントリスト１２ａを更新してもよい。
【００４６】
先行実行部１１ｃは、本実行部１１ｅに先行し、別プロセスで制御プログラム１２ｃを所定のステップ間隔でシミュレーション実行し、イベント駆動部１１ｂから発生を通知される各イベントに応じた制御信号を仮想モデル１２ｂへ入力する。また、先行実行部１１ｃは、入力した制御信号に応じた仮想モデル１２ｂからのセンサ信号を受け取り、各イベントに応じた各処理を実行する。
【００４７】
このとき、先行実行部１１ｃは、ＲＴＣ１３を用いてステップ間隔と実時間とを同期させつつ、シミュレーションを実行する。
【００４８】
判定部１１ｄは、先行実行部１１ｃにおける各イベントに応じた各処理の処理結果に基づき、実行されたステップ間隔においてタスク漏れが生じるか否かを判定する。
【００４９】
具体的には、先行実行部１１ｃによるシミュレーションにおける各イベントに応じた各処理それぞれの処理時間を計測し、ステップ間隔において実行されるべき各処理の処理時間の合計がステップ間隔を超える場合に、タスク漏れが生じると判定する。
【００５０】
また、判定部１１ｄは、タスク漏れが生じると判定した場合に、本実行において優先度の高い重要なタスクが漏れることのないようにイベントを選別し、選別した内容で本実行部１１ｅに対しイベント発生を通知するよう、イベント駆動部１１ｂへ指示する。
【００５１】
ここで、タスク漏れが生じると判定された場合のイベントの選別の具体例について、図４Ａ〜図４Ｃおよび図５を用いて説明しておく。図４Ａ〜図４Ｃは、イベントの選別の具体例を示す図（その１）〜（その３）である。また、図５は、イベントの優先度の具体例を示す図である。
【００５２】
図４Ａに示すように、「先行実行」の「イベントＡ」、「イベントＢ」、「イベントＤ」が実行される１ステップにおいて、判定部１１ｄが、「タスク漏れが発生」したと判定したものとする。
【００５３】
そして、同じく図４Ａに示すように、「イベントＡ」の優先度は「高」、「イベントＢ」の優先度は「中」、「イベントＤ」の優先度は「低」であったものとする。かかる場合、判定部１１ｄは、「イベントＤ」がシミュレーション全体への影響度の低い、優先度「低」であることから、「本実行」においては「イベントＤを破棄」するように、イベント駆動部１１ｂへイベントの選別を指示する。
【００５４】
これにより、該当の１ステップにおいて重要なタスク漏れ、すなわちイベントＡやイベントＢの実行漏れが生じるのを防ぐことができる。
【００５５】
また、図４Ａと同じ１ステップでタスク漏れが発生し、その際の優先度は、図４Ｂに示すように、「イベントＡ」の優先度は「高」、「イベントＢ」の優先度は「低」、「イベントＤ」の優先度は「高」であったものとする。
【００５６】
かかる場合、判定部１１ｄは、「イベントＢ」が優先度「低」であることから、「本実行」においては少なくともイベントＢを破棄するように、イベント駆動部１１ｂへイベントの選別を指示する。なお、イベントＢが破棄されることによる処理負荷の低減により、「イベントＤ」の発生時刻を変更しなくとも「本実行」ではタスク漏れが発生しなくなる可能性はある。
【００５７】
ただし、優先度が「高」の「イベントＤ」の確実な実行を担保するために、図４Ｂに示すように、判定部１１ｄは、「本実行」においては「イベントＢを破棄の上、イベントＤを早める」ように、イベント駆動部１１ｂへイベントの選別を指示してもよい。好ましくは、イベントＡの実行直後にイベントＤが実行されるようにする。
【００５８】
また、図４Ａと同じ１ステップでタスク漏れが発生し、その際の優先度は、図４Ｃに示すように、「イベントＡ」の優先度は「低」、「イベントＢ」の優先度は「中」、「イベントＤ」の優先度は「高」であったものとする。
【００５９】
かかる場合、判定部１１ｄは、「イベントＡ」が優先度「低」であることから、「本実行」においては少なくともイベントＡを破棄するように、イベント駆動部１１ｂへイベントの選別を指示する。
【００６０】
なお、イベントＡが破棄されることによる処理負荷の低減により、「イベントＢ」および「イベントＤ」の発生時刻を変更しなくとも「本実行」ではタスク漏れが発生しなくなる可能性はある。
【００６１】
ただし、優先度が「高」の「イベントＤ」の確実な実行を担保するために、図４Ｃに示すように、判定部１１ｄは、「本実行」においては「イベントＡを破棄の上、イベントＢ，Ｄを早める」ように、イベント駆動部１１ｂへイベントの選別を指示してもよい。
【００６２】
また、「イベントＢ」が優先度「中」ではあるが、破棄可能であり、該当のステップでは最低限「イベントＤ」の確実な実行を担保すればよいのであれば、図４Ｃに示すように、判定部１１ｄは、「または、イベントＡ，Ｂを破棄の上、イベントＤを早める」ように、イベント駆動部１１ｂへイベントの選別を指示してもよい。
【００６３】
なお、各優先度別のイベントの例としては、図５に示すように、たとえば「低優先度イベント例」としては、「吸気温センサ値読み込み」や、「ＥＣＵ温内部センサ値読み込み」、「エンジン水温センサ値読み込み」などを挙げることができる。
【００６４】
たとえば各イベントが数ミリ秒から数十ミリ秒ごとに実行される中、これら低優先度のイベントとして挙げた温度関連のセンサ値読み込みは、毎回実行されなくともＥＣＵの制御を破綻させる要因とはなりにくい。数十ミリ秒で温度が急激に上昇することは通常考えにくいためである。こういった、毎回実行されなくともシミュレーション全体、言い換えれば、ＥＣＵの制御全体に与える影響はきわめて少ないイベントを、低優先度とすることができる。
【００６５】
また、図５に示すように、「中優先度イベント例」としては、たとえば「車速センサ値読み込み」などを挙げることができる。かかる場合は、低優先度よりも優先度は高いものの、車速も数十ミリ秒で急激に変化することは考えにくいため、状況によっては、低優先度に次いで破棄可能な中優先度とすることができる。
【００６６】
また、図５に示すように、「高優先度イベント例」としては、たとえば「電子スロットル開度センサ値読み込み」などを挙げることができる。電子スロットル開度のセンサ値などは、数ミリ秒単位での制御が必要となるので、かかるセンサ値の読み込みは、確実に実行されるべき高優先度のイベントとすることができる。
【００６７】
図２の説明に戻り、つづいて本実行部１１ｅについて説明する。本実行部１１ｅは、先行実行部１１ｃに所定のステップ後行して、制御プログラム１２ｃを所定のステップ間隔でシミュレーション実行し、イベント駆動部１１ｂから発生を通知される各イベントに応じた制御信号を仮想モデル１２ｂへ入力する。また、本実行部１１ｅは、入力した制御信号に応じた仮想モデル１２ｂからのセンサ信号を受け取り、各イベントに応じた各処理を実行する。
【００６８】
このとき、本実行部１１ｅは、先行実行部１１ｃと同様に、ＲＴＣ１３を用いてステップ間隔と実時間とを同期させつつ、シミュレーションを実行する。また、本実行部１１ｅは、シミュレーションの本実行結果を、表示部３へ表示させる。
【００６９】
なお、図２では図示していないが、先行実行部１１ｃが、シミュレーションの先行実行結果を、表示部３へ表示させてもよいし、判定部１１ｄが、タスク漏れの発生の判定結果や、これに応じた本実行でのイベントの選別結果を表示部３へ表示させてもよい。
【００７０】
次に、本実施形態に係るシミュレーション装置１０が実行する処理手順について、図６を用いて説明する。図６は、本実施形態に係るシミュレーション装置１０が実行する処理手順を示すフローチャートである。なお、図６においては、イベントリスト１２ａは予め設定済みであるものとする。また、先行実行部１１ｃによる先行実行は、本実行部１１ｅによる本実行に１ステップ先行するものとする。
【００７１】
図６に示すように、まず、先行実行部１１ｃが１ステップを先行実行する（ステップＳ１０１）。そして、その実行結果に基づき、判定部１１ｄが、タスク漏れありであるか否かを判定する（ステップＳ１０２）。
【００７２】
ここで、タスク漏れありの場合（ステップＳ１０２，Ｙｅｓ）、判定部１１ｄは、該当ステップの各イベントの優先度に応じて実行イベントを選別する（ステップＳ１０３）。本実行部１１ｅは、かかる選別結果に基づいて該当の１ステップを本実行する（ステップＳ１０４）。
【００７３】
一方、タスク漏れなしの場合（ステップＳ１０２，Ｎｏ）、本実行部１１ｅは、選別なしで、すなわち先行実行時と同じ実行順序で、該当の１ステップを本実行する（ステップＳ１０５）。
【００７４】
そして、残ステップありか否かが判定され（ステップＳ１０６）、残ステップありならば（ステップＳ１０６，Ｙｅｓ）、ステップＳ１０１からの処理を繰り返す。一方、残ステップなしならば（ステップＳ１０６，Ｎｏ）、処理を終了する。
【００７５】
本実施形態に係るシミュレーション装置１０は、図７に一例として示す構成のコンピュータ６００で実現することができる。図７は、実施形態に係るシミュレーション装置１０の機能を実現するコンピュータの一例を示すハードウェア構成図である。
【００７６】
コンピュータ６００は、ＣＰＵ（Central  Processing  Unit）６１０と、ＲＯＭ（Read  Only  Memory）６２０と、ＲＡＭ（Random  Access  Memory）６３０と、ＨＤＤ（Hard  Disk  Drive）６４０とを備える。また、コンピュータ６００は、メディアインターフェイス（Ｉ／Ｆ）６５０と、通信インターフェイス（Ｉ／Ｆ）６６０と、入出力インターフェイス（Ｉ／Ｆ）６７０とを備える。
【００７７】
なお、コンピュータ６００は、ＳＳＤ（Solid  State  Drive）を備え、かかるＳＳＤがＨＤＤ６４０の一部または全ての機能を実行するようにしてもよい。また、ＨＤＤ６４０に代えてＳＳＤを設けることとしてもよい。
【００７８】
ＣＰＵ６１０は、ＲＯＭ６２０およびＨＤＤ６４０の少なくとも一方に格納されるプログラムに基づいて動作し、各部の制御を行う。ＲＯＭ６２０は、コンピュータ６００の起動時にＣＰＵ６１０によって実行されるブートプログラムや、コンピュータ６００のハードウェアに依存するプログラムなどを格納する。ＨＤＤ６４０は、ＣＰＵ６１０によって実行されるプログラムおよびかかるプログラムによって使用されるデータ等を格納する。
【００７９】
メディアＩ／Ｆ６５０は、記憶媒体６８０に格納されたプログラムやデータを読み取り、ＲＡＭ６３０を介してＣＰＵ６１０に提供する。ＣＰＵ６１０は、かかるプログラムを、メディアＩ／Ｆ６５０を介して記憶媒体６８０からＲＡＭ６３０上にロードし、ロードしたプログラムを実行する。あるいは、ＣＰＵ６１０は、かかるデータを用いてプログラムを実行する。記憶媒体６８０は、例えばＤＶＤ（Digital  Versatile  Disc）などの光磁気記録媒体やＳＤカード、ＵＳＢメモリなどである。
【００８０】
通信Ｉ／Ｆ６６０は、ネットワーク６９０を介して他の機器からデータを受信してＣＰＵ６１０に送り、ＣＰＵ６１０が生成したデータを、ネットワーク６９０を介して他の機器へ送信する。あるいは、通信Ｉ／Ｆ６６０は、ネットワーク６９０を介して他の機器からプログラムを受信してＣＰＵ６１０に送り、ＣＰＵ６１０がかかるプログラムを実行する。
【００８１】
ＣＰＵ６１０は、入出力Ｉ／Ｆ６７０を介して、表示部３などの出力部、キーボードやマウス、ボタンといった操作部２などの入力部を制御する。ＣＰＵ６１０は、入出力Ｉ／Ｆ６７０を介して、入力部からデータを取得する。また、ＣＰＵ６１０は、生成したデータを入出力Ｉ／Ｆ６７０を介して出力部に出力する。
【００８２】
たとえば、コンピュータ６００がシミュレーション装置１０として機能する場合、コンピュータ６００のＣＰＵ６１０は、ＲＡＭ６３０上にロードされたプログラムを実行することにより、設定部１１ａと、イベント駆動部１１ｂと、先行実行部１１ｃと、判定部１１ｄと、本実行部１１ｅとを含むシミュレーション装置１０の制御部１１の各機能を実現する。
【００８３】
コンピュータ６００のＣＰＵ６１０は、たとえばこれらのプログラムを記憶媒体６８０から読み取って実行するが、他の例として、他の装置からネットワーク６９０を介してこれらのプログラムを取得してもよい。また、ＨＤＤ６４０は、記憶部１２が記憶する情報を記憶することができる。
【００８４】
上述してきたように、本実施形態に係るシミュレーション装置１０は、イベント駆動部１１ｂと、シミュレーション実行部２０とを備える。イベント駆動部１１ｂは、優先度および発生順序が対応付けられたイベントリスト１２ａ（「イベントのリスト情報」の一例に相当）に基づいてイベントを発生順序に沿って順次発生させる。
【００８５】
シミュレーション実行部２０は、イベント駆動部１１ｂにより発生されたイベントに応じた制御処理のシミュレーションを実時間に同期させつつ実行するとともに、実時間上の所定のステップ間隔（「時間間隔」の一例に相当）においてタスクの実行漏れが発生（「制御処理に処理漏れが発生」の一例に相当）する場合に、優先度が高いイベントに応じたタスクのシミュレーションを優先的に実行する。
【００８６】
したがって、本実施形態に係るシミュレーション装置１０によれば、実機を用いない実時間でのシミュレーションにおいて、重要なタスクの実行漏れを防止することができる。
【００８７】
また、シミュレーション実行部２０は、本実行部１１ｅ（「第１の実行部」の一例に相当）と、先行実行部１１ｃ（「第２の実行部」の一例に相当）と、判定部１１ｄとを備える。
【００８８】
本実行部１１ｅは、制御処理のシミュレーションを実行する。先行実行部１１ｃは、本実行部１１ｅによるシミュレーションに先行する制御処理の先行シミュレーションを実行する。判定部１１ｄは、先行実行部１１ｃの実行結果に基づいてタスクの実行漏れが発生するか否かを判定する。
【００８９】
したがって、本実施形態に係るシミュレーション装置１０によれば、先行シミュレーションの実行結果に基づいて前もってタスクの実行漏れが発生するか否かを判定でき、かかる判定結果に基づいてシミュレーションの本実行時にタスクの実行漏れが生じるのを防ぐことができる。
【００９０】
また、判定部１１ｄは、先行シミュレーションにおける制御処理それぞれの処理時間を計測し、ステップ間隔において実行されるべき制御処理の処理時間の合計がステップ間隔を超える場合に、タスクの実行漏れが発生すると判定する。
【００９１】
したがって、本実施形態に係るシミュレーション装置１０によれば、実時間の時間的制約を順守したイベント管理が可能となる。
【００９２】
また、判定部１１ｄは、タスクの実行漏れが発生すると判定した場合に、かかる実行漏れが発生するステップ間隔において実行される制御処理それぞれに対応するイベントを、本実行部１１ｅによるシミュレーションにおいてはイベント駆動部１１ｂに優先度が低い方から破棄させる。
【００９３】
したがって、本実施形態に係るシミュレーション装置１０によれば、優先度の低いタスクについては破棄して処理負荷を軽減しつつ、優先度の高い重要なタスクについては漏れなく確実に実行させることができる。
【００９４】
なお、上述した実施形態では、ステップ間隔を１ミリ秒ごととしたが、１ミリ秒に限られない。また、上述した実施形態では、本実行に先行する先行シミュレーションが１つである場合について説明したが、２つ以上であってもよい。この場合、本実行から先行する先行時間は、先行シミュレーションごとで異なることが好ましい。
【００９５】
また、上述した実施形態では、パソコンＰＣをシミュレーション装置１０とする場合を例に挙げたが、無論、コンピュータの種別を限定するものではない。
【００９６】
さらなる効果や変形例は、当業者によって容易に導き出すことができる。このため、本発明のより広範な態様は、以上のように表しかつ記述した特定の詳細および代表的な実施形態に限定されるものではない。したがって、添付の特許請求の範囲およびその均等物によって定義される総括的な発明の概念の精神または範囲から逸脱することなく、様々な変更が可能である。
【符号の説明】
【００９７】
２    操作部
３    表示部
１０    シミュレーション装置
１１    制御部
１１ａ  設定部
１１ｂ  イベント駆動部
１１ｃ  先行実行部
１１ｄ  判定部
１１ｅ  本実行部
１２    記憶部
１２ａ  イベントリスト
１２ｂ  仮想モデル
１２ｃ  制御プログラム
１３    ＲＴＣ
２０    シミュレーション実行部
【図１Ａ】
2019020891.tif 000003
【図１Ｂ】
2019020891.tif 000004
【図１Ｃ】
2019020891.tif 000005
【図１Ｄ】
2019020891.tif 000006
【図２】
2019020891.tif 000007
【図３】
2019020891.tif 000008
【図４Ａ】
2019020891.tif 000009
【図４Ｂ】
2019020891.tif 000010
【図４Ｃ】
2019020891.tif 000011
【図５】
2019020891.tif 000012
【図６】
2019020891.tif 000013
【図７】
2019020891.tif 000014