(57)【特許請求の範囲】
【請求項１】
シミュレーションの対象となる複数の検査プログラムを擬似システム上で動作させるシミュレーション方式において、
上記複数の検査プログラムを予め記憶するプログラムメモリと、
起動する優先度の高い順に並べられた上記複数の検査プログラムの検査プログラム名と、上記複数の検査プログラムの各検査プログラムを起動する所定の周期と、上記複数の検査プログラムの各検査プログラムの処理時間とを含む起動手順情報を起動プログラム表にして記憶し、複数の検査プログラムの実行にかける時間を検査時間として利用者に入力させ、上記起動プログラム表に記憶した上記起動手順情報が含む複数の検査プログラム名から、上記起動手順情報が含む所定の周期で、次に起動する検査プログラムの検査プログラム名を取得して、取得した検査プログラム名が示す検査プログラムを上記プログラムメモリから読み出して起動する処理をするとともに、起動した検査プログラムの処理時間を上記起動プログラム表から取得し、取得した処理時間を、これまでに実行したすべての検査プログラムの処理時間の合計に加算して、処理時間の合計を更新する処理をし、更新した処理時間の合計と上記検査時間とを比較する処理をして、比較した結果、上記処理時間の合計が上記検査時間に達していない場合に、上記検査プログラムを起動する処理と上記処理時間の合計を更新する処理と上記比較する処理とを繰り返す起動制御部と
を備えたことを特徴とするシミュレーション方式。
【請求項２】
上記起動プログラム表は、さらに、上記複数の検査プログラムの各検査プログラムの起動回数を記憶し、
上記起動制御部は、上記検査プログラムを起動する処理を行った場合に、起動した検査プログラムの起動回数を上記起動プログラム表から取得して、取得した起動回数に１を加算して、上記起動プログラム表の上記起動した検査プログラムの起動回数を更新することを特徴とする請求項１記載のシミュレーション方式。
【請求項３】
複数の検査プログラムを記憶するプログラムメモリと、セントラル・プロセッシング・ユニット（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、以下、「ＣＰＵ」と称する）を備えるコンピュータ上で、シミュレーションの対象となる複数の検査プログラムを動作させるシミュレーション方法において、
起動する優先度の高い順に並べられた上記複数の検査プログラムの検査プログラム名と、上記複数の検査プログラムの各検査プログラムを起動する所定の周期と、上記複数の検査プログラムの各検査プログラムの処理時間とを含む起動手順情報を起動プログラム表にしてＣＰＵにより記憶する工程と、
複数の検査プログラムの実行にかける時間を検査時間としてＣＰＵにより利用者に入力させ、上記起動プログラム表に記憶した上記起動手順情報が含む複数の検査プログラム名から、上記起動手順情報が含む所定の周期で、次に起動する検査プログラムの検査プログラム名をＣＰＵにより取得して、取得した検査プログラム名が示す検査プログラムを上記プログラムメモリからＣＰＵにより読み出して起動する処理をするとともに、起動した検査プログラムの処理時間を上記起動プログラム表からＣＰＵにより取得し、取得した処理時間を、これまでに実行したすべての検査プログラムの処理時間の合計にＣＰＵにより加算して、処理時間の合計をＣＰＵにより更新する処理をし、更新した処理時間の合計と上記検査時間とをＣＰＵにより比較する処理をして、比較した結果、上記処理時間の合計が上記検査時間に達していない場合に、上記検査プログラムを起動する処理と上記処理時間の合計を更新する処理と上記比較する処理とをＣＰＵにより繰り返す工程と
を備えたことを特徴とするシミュレーション方法。
【請求項４】
複数の検査プログラムを記憶するプログラムメモリと、セントラル・プロセッシング・ユニット（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、以下、「ＣＰＵ」と称する）を備えるコンピュータに、シミュレーションの対象となる複数の検査プログラムを動作させるためのプログラムを記録したコンピュータ読取可能な記録媒体において、
起動する優先度の高い順に並べられた上記複数の検査プログラムの検査プログラム名と、上記複数の検査プログラムの各検査プログラムを起動する所定の周期と、上記複数の検査プログラムの各検査プログラムの処理時間とを含む起動手順情報を起動プログラム表にしてＣＰＵにより記憶する処理と、
複数の検査プログラムの実行にかける時間を検査時間としてＣＰＵにより利用者に入力させ、上記起動プログラム表に記憶した上記起動手順情報が含む複数の検査プログラム名から、上記起動手順情報が含む所定の周期で、次に起動する検査プログラムの検査プログラム名をＣＰＵにより取得して、取得した検査プログラム名が示す検査プログラムを上記プログラムメモリからＣＰＵにより読み出して起動する処理をするとともに、起動した検査プログラムの処理時間を上記起動プログラム表からＣＰＵにより取得し、取得した処理時間を、これまでに実行したすべての検査プログラムの処理時間の合計にＣＰＵにより加算して、処理時間の合計をＣＰＵにより更新する処理をし、更新した処理時間の合計と上記検査時間とをＣＰＵにより比較する処理をして、比較した結果、上記処理時間の合計が上記検査時間に達していない場合に、上記検査プログラムを起動する処理と上記処理時間の合計を更新する処理と上記比較する処理とをＣＰＵにより繰り返す処理と
をコンピュータに実行させることを特徴とするプログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、定周期実行プログラムを含むターゲットプログラムのシミュレーション実行をパソコンやワークステーションなどのコンピュータ上で行う、プログラムシミュレーション装置の改良に関するものである。
【０００２】
【従来の技術】
組み込みシステムにおいては、リアルタイム性を実現するために、定周期実行モジュールがしばしば利用される。定周期実行モジュールは、マイコンのタイマにより、定周期毎に起動する方式や、外部からの定周期割り込み信号に対応して起動される割り込みモジュールなどとして実装される。
これらの定周期実行プログラムを含むターゲットシステムのシミュレーション／デバッグでは、定周期処理の時間と、それ以外の処理の時間と、センサ入力やアクチュエータ出力時間のマッチングが必要となる。このため定周期起動プログラムを含むターゲットシステムは、実システムを用いた実機デバッグを行うか、または実ボードを搭載したパソコンでのシミュレーションが必要となっていた。
【０００３】
次に、定周期実行の動作について説明する。
図５は、定周期実行プログラムの動作のタイミングチャートである。
この例では、プログラムＡは５ｍｓ周期、プログラムＢは１０ｍｓ周期、プログラムＣは２５ｍｓ周期の３つの定周期プログラムが動作する際のタイミングを示している。
５ｍｓ毎にプログラムＡが起動され、１０ｍｓ毎にプログラムＢが起動され、２５ｍｓ毎にプログラムＣが起動されている。
【０００４】
【発明が解決しようとする課題】
定周期実行プログラムを含むシステムの実機デバッグでは、プログラムの実行速度を変更できないという問題点があった。
このため、例えば、２０分間の一連の動作の最後の部分をデバッグしたいときは、そこにブレークポイントを設定して実行し、２０分間待つ必要がある。また、実機ではデバッグしたい部分の動作をゆっくり動作させて不具合状況の流れの詳細をチェックすることは困難であった。
【０００５】
実ボードにパソコンのバスインタフェースを追加したボードを作成し、パソコンに搭載し、センサやアクチュエータはパソコン上のソフトウェアでシミュレートすることにより、シミュレーションの動作をゆっくり動作させることが可能となる。
この場合は、高速なパソコンを使用していても、実ボードの速度以上の速度で実行できないという問題点があった。
【０００６】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）シミュレータを搭載したクロスシミュレーションでは、命令セットレベルやクロック精度レベルでの協調シミュレータがあり、時間軸をスケーリングできるが、これらは実機の２−３桁以上遅く、プログラムのデバッグ用途には使えない。
【０００７】
この発明は、上記のような問題点を解決するためになされたもので、定周期実行プログラムを含むシステムのシミュレーション、デバッグをパソコンなどの上で高速に行え、また、特定の実行をゆっくりと動作させる仕組みを実現させ、シミュレーション、デバッグの効率化を図ることを目的とする。
【０００８】
【課題を解決するための手段】
この発明に係るシミュレーション方式は、シミュレーションの対象となる検査プログラムを擬似システム上で動作させるシミュレーション方式において、
上記検査プログラムを予め記憶するプログラムメモリと、
上記プログラムメモリに記憶される検査プログラム示す検査プログラム名と、上記検査プログラム名によって示される検査プログラムを起動する所定の周期とを含む検査プログラムを起動する手順を定義する起動手順を予め記憶する起動プログラム表を作成し、起動プログラム表で定義した所定の周期で上記検査プログラム名の示す検査プログラムを起動する起動制御部と
を備えたことを特徴とする。
【０００９】
上記起動プログラム表は、起動手順として、複数の検査プログラム名と、上記複数のプログラム名それぞれに対応する複数の所定の周期とを記憶し、
上記起動制御部は、上記起動手順から上記複数の検査プログラム名と、上記複数の所定の周期とを取得し、シミュレーションを開始する実時間を零時とし、零時から上記所定の周期の時刻を起動時刻として、上記複数の所定の周期それぞれに対応する複数の起動時刻を算出し、算出した複数の起動時刻それぞれの時点で対応づけられた検査プログラム名の示す検査プログラムを起動することを特徴とする。
【００１０】
上記起動プログラム表は、さらに、起動手順として、一の起動時刻に複数の検査プログラムを起動する場合に、検査プログラムを起動する起動順序を記憶し、
上記起動制御部は、さらに、上記起動手順から、上記起動順序を取得し、一の起動時刻に複数の検査プログラムを起動する場合には、上記起動順序に基づいて、上記起動対応表を生成することを特徴とする。
【００１１】
上記起動プログラム表は、起動手順として、複数の検査プログラム名と、上記複数の検査プログラム名それぞれに対応する複数の所定の周期とを記憶し、
上記起動制御部は、上記起動手順から上記複数の検査プログラム名と、上記複数の所定の周期とを取得し、取得した上記複数の検査プログラム名と上記複数の所定の周期とを用いて、検査プログラムを起動することを特徴とする。
【００１２】
上記起動プログラム表は、起動手順として、さらに、上記複数の検査プログラムが処理を実行する複数の処理時間をそれぞれ上記複数の検査プログラム名に対応づけて記憶し、
上記起動制御部は、上記起動手順から複数の処理時間を取得し、上記複数の検査プログラムそれぞれを起動した回数を上記複数の検査プログラム毎に起動回数としてカウントし、上記複数の処理時間と上記起動回数とを用いて、処理時間の合計を算出することを特徴とする。
【００１３】
上記起動制御部は、一の起動時刻に対応づけられた検査プログラム名の示す検査プログラムを起動した後、任意の時間の経過を待ってから、次の起動時刻に対応づけられた検査プログラム名の示す検査プログラムを起動することを特徴とする。
【００１４】
上記シミュレーション方式は、さらに、
上記検査プログラムが入出力するデータを記憶する入出力データメモリと、
上記入出力データメモリからデータを読み込み、読み込んだデータを上記検査プログラムへ入力する入力部と、
上記検査プログラムから出力されたデータを上記入出力データメモリへ出力する出力部とを備えたことを特徴とする。
【００１５】
上記シミュレーション方式は、さらに、
上記検査プログラムが使用するデータをシミュレーションデータとして生成し、生成したシミュレーションデータを上記入出力データメモリへ格納するシミュレーションデータ模擬部を備え、
上記起動制御部は、上記シミュレーションデータ模擬部へシミュレーションデータの生成を指示することを特徴とする。
【００１６】
上記検査プログラムは、処理を実行した結果として処理結果を上記入出力データメモリへ出力し、
上記シミュレーションデータ模擬部は、上記検査プログラムから上記入出力データメモリへ出力された処理結果を読み込み、読み込んだ処理結果を出力し、
上記起動制御部は、上記処理結果を読み込むことを上記シミュレーションデータ模擬部へ指示することを特徴とする。
【００１７】
上記検査プログラムは、所定の周期でセンサから出力されるデータの入力を受け付け、受け付けたデータを用いて処理を実行するプログラムであり、
上記入力部は、センサからの入力を受け付けることを模擬するセンサ入力部であり、
上記シミュレーションデータ模擬部は、所定の周期でセンサから入力されるデータを模擬するシミュレーションデータを生成し、
上記起動制御部は、所定の周期で上記シミュレーションデータの生成を上記シミュレーション模擬部へ指示することを特徴とする。
【００１８】
上記検査プログラムは、アクチュエータを制御するプログラムであり、
上記出力部は、検査プログラムの実行結果をアクチュエータへ出力することを模擬するアクチュエータ出力部であることを特徴とする。
【００１９】
上記シミュレーションデータ模擬部は、シミュレーションデータを連続して生成する連続系シミュレータであることを特徴とする。
【００２０】
上記起動プログラム表は、起動手順として、さらに、複数のプロセッサで検査プログラムを実行させる並列処理を実行することを指示する並列処理モード情報を記憶し、
上記起動制御部は、上記起動手順から並列処理モード情報を取得し、取得した並列処理モード情報に基づいて、一のプロセッサを用いて複数のプロセッサで実行させる検査プログラムを順番に実行させることを特徴とする。
【００２１】
上記シミュレーション方式は、チップを搭載した計算機上で検査プログラムを動作させ、検査プログラムを実装する計算機のチップに比べ、上位互換であるチップを搭載した計算機上で上記検査プログラムを実行させることを特徴とする。
【００２２】
この発明に係るシミュレーション方法は、シミュレーションの対象となる検査プログラムを擬似システム上で動作させるシミュレーション方法において、
上記検査プログラムを予めプログラムメモリへ記憶する工程と、
上記プログラムメモリに記憶される検査プログラム示す検査プログラム名と、上記検査プログラム名によって示される検査プログラムを起動する所定の周期とを含む検査プログラムを起動する手順を定義する起動手順を予め起動プログラム表へ記憶する工程と、
上記起動プログラム表から上記所定の周期と上記検査プログラム名とを取得し、取得した所定の周期で上記検査プログラム名の示す検査プログラムを起動する起動制御工程と
を備えたことを特徴とする。
【００２３】
この発明に係るシミュレーション方式をコンピュータに実行させるためのプログラムを記録したコンピュータ読取可能な記録媒体は、シミュレーションの対象となる検査プログラムを擬似システム上で動作させるシミュレーション方式をコンピュータに実行させるためのプログラムを記録したコンピュータ読取可能な記録媒体において、
上記検査プログラムを予め記憶するプログラムメモリと、
上記プログラムメモリに記憶される検査プログラム示す検査プログラム名と、上記検査プログラム名によって示される検査プログラムを起動する所定の周期とを含む検査プログラムを起動する手順を定義する起動手順を予め記憶する起動プログラム表と、
上記起動プログラム表から上記所定の周期と上記検査プログラム名とを取得し、取得した所定の周期で上記検査プログラム名の示す検査プログラムを起動する起動制御部と
を備えたシミュレーション方式をコンピュータに実行させるためのプログラムを記録したコンピュータ読取可能な記録媒体であることを特徴とする。
【００２４】
【発明の実施の形態】
実施の形態１．
図１は、この発明に係るシミュレーション方式の一例を示したものである。
また、このシミュレーション方式を用いて、この発明に係るシミュレーション方法を実現する。
このシミュレーション方式は、定周期で起動される定周期実行プログラムの起動機能と、その周期時間と実時間の対応の調整機能を備えるものである。
以下の説明では、シミュレーションの対象となるプログラムを検査プログラムとする。この実施の形態では定周期実行プログラムＡ，Ｂ，Ｃの３つを一例として説明する。しかしながら、検査プログラムの数は、３つに限られるわけではない。
また、この実施の形態では、検査プログラムとして定周期で実行されるプログラムを対象とするため、検査プログラムを定周期実行プログラムということもある。
【００２５】
図１に一例として示すシミュレーション方式は、シミュレーションを制御するシミュレーション部としてシミュレーションプログラム１と、外部に接続される外部機器を模擬するシミュレーション模擬部として外部機器を模擬するためのプログラム８と、それらの間でやりとりされるデータを記憶する入出力データメモリ７から構成される。
【００２６】
シミュレーションプログラム１は、一例として、起動プログラム表１２と、センサからのデータの入力を受け付けるセンサ入力部（入力部）としてセンサ入力プログラム４と、アクチュエータへの出力のかわりに入出力データメモリ７へデータを出力するアクチュエータ出力部（出力部）としてアクチュエータ出力プログラム５と、実際のグラフィックパネルへ入出力するデータを模擬するパネル入出力プログラム６と、それらのプログラム群を起動させ、シミュレーションプログラム１全体を制御する起動制御プログラム２とから成る。
【００２７】
起動プログラム表１２は、少なくとも一の検査プログラム名と、上記検査プログラム名によって示される検査プログラムを起動する所定の周期とを含む検査プログラムを起動する手順を定義する起動手順を記憶する。
この実施の形態では、起動プログラム表１２は、起動手順の一例として、複数の検査プログラム名と、上記複数の検査プログラム名それぞれに対応する複数の所定の周期、上記複数の検査プログラムの処理時間、起動順序など、シミュレーションに関わる情報を記憶する。
図２は、この実施の形態で用いる起動プログラム表１２に記憶されるデータの構造を示した図である。
図３は、具体的な起動プログラム表の一例を示した図である。
【００２８】
以下に、用語を定義する。
シミュレーションパラメータ
Ｔｍａｘ：検査時間。
α：シミュレーション時間倍率≧０
【００２９】
変数（時間の単位は全てｍｓｅｃとする）
Ｔ：実時間。シミュレーション開始時は０とする。
Ｔｐ：周期計算で求めたプログラムを実行させる実時間。
Ｔｏｓｉｍ：シミュレーション開始時間（開始時のＴｃｕｒ値）。
ｉｎｄ：次に実行するプログラムのインデクス。
【００３０】
関数
ｔ＝Ｎｅｘｔ＿Ｐｅｒｉｏｄ（Ａ，Ｔｐ）：Ｔｐの次の実行時間をＡから求める。
ｉ＝Ｎｅｘｔ＿Ｐｒｏｇ（Ａ，ｉｎｄ，Ｔｐ）：ｉｎｄ＝−１のとき、実時間Ｔｐで最初に実行するプログラムのインデクスを返す。ｉｎｄ≧０のとき、実時間Ｔｐでｉｎｄの示すプログラムの次に実行されるプログラムのインデクスを返す。ｉ＝−１は該当無しを示す。
ｔ＝Ｔｃｕｒ（）；現在の時刻を返す（ｍｓｅｃ通し時間）。
【００３１】
起動順序は、複数の検査プログラムを起動する場合、起動する優先順位を定める。同じ起動時刻に複数の検査プログラムを起動する場合に使用する。
検査時間は、シミュレーションを実行する実時間である。
シミュレーション時間倍率αは、シミュレーションを実行する速度を指示する。
並列処理モード情報は、実システム（実機）において、１つのＣＰＵでプログラムを実行する場合か、２つのＣＰＵでプログラムを実行する場合かを指示する。
センサ入力、アクチュエータ出力、パネル入出力のプログラムも起動プログラム表１２に記憶させる。
上記の情報は、予め利用者によって入力される。
また、カウンタは、起動制御プログラム２によって各検査プログラムを起動した回数を格納する。
【００３２】
以下、この実施の形態では、起動プログラム表１２が、複数の検査プログラム名を記憶し、さらに、上記複数の検査プログラム名それぞれに対応する複数の所定の周期をはじめとするシミュレーションに関わる情報を記憶している場合について説明する。
【００３３】
外部機器を模擬するためのプログラム８は、操作・表示機器を模擬するグラフィックパネルシミュレータ９と、センサを模擬するセンサシミュレータ１０と、アクチュエータを模擬するアクチュエータシミュレータ１１から成る。
入出力データメモリ７は、グラフィックパネルからの入出力、センサからの入力、アクチュエータへの出力のキューを記憶する記憶領域である。
図４は、入出力データメモリ７に記憶されるデータの項目の一例を示した図である。
【００３４】
グラフィックパネルシミュレータ９は、利用者からのデータの入力を仲介するとともに、利用者へシミュレーション結果のデータを表示する。グラフィックパネルシミュレータ９は、モニタに接続されており、モニタを介して利用者とデータをやりとりする。
【００３５】
センサシミュレータ１０は、センサから入力されるデータを模擬するデータを生成する。生成したデータは、入出力データメモリ７へ格納される。生成するタイミングは、所定の周期でデータを生成してもよいし、起動制御プログラム２又は起動制御プログラム２によって起動されるセンサ入力プログラム４からデータ生成の指示を通知されることによってデータを生成してもよい。
【００３６】
アクチュエータシミュレータ１１は、アクチュエータに出力するデータを模擬する。アクチュエータシミュレータ１１は、入出力データメモリ７に格納されたアクチュエータからの出力データをアクチュエータのデータとして取得する。取得するタイミングは、所定の周期でデータを取得してもよいし、起動制御プログラム２又は起動制御プログラム２によって起動されるアクチュエータ出力プログラム５からデータ取得の指示を通知されることによってデータを取得してもよい。
【００３７】
このシミュレーション方式では、時間の概念としてシミュレーション時間と実時間とを定義する。
シミュレーション時間とは、シミュレーション方式において実際に経過した時間、すなわち、シミュレーションに要した時間である。
実時間とは、シミュレーションの対象となる検査プログラムを実システム上（実際に動作させるシステム、実機）で予め決められた所定の周期で動作させた場合の経過時間である。また、実システム上で動作する複数の定周期実行プログラムそれぞれは、実時間をベースに同期をとっている。
また、上記起動手順の周期、処理時間は、実時間に基づいて利用者によって入力される。
【００３８】
図５は、３つの定周期実行プログラムをそれぞれの周期で起動させる場合の動作例を示している。図５は、シミュレーションの開始の実時間を零時とし、実時間の経過を用いて各検査プログラムを起動するタイミングを示している。
プログラムＡは、５ｍｓの周期で起動され、プログラムＢは、１０ｍｓの周期で起動され、プログラムＣは、２５ｍｓの周期で起動される設定になっている。
３つの定周期実行プログラムは、図５のように起動されることによって、同期をとっている。
【００３９】
図５では、具体的には、起動実時間０ｍｓで、定周期実行プログラムＡが起動され、処理が終了した後、定周期実行プログラムＢが起動され、その処理が終了した後、さらに、定周期実行プログラムＣが起動され、定周期実行プログラムＣが終了する。次に、検査プログラムが起動されるまで、処理は実行されない。起動実時間５ｍｓでは、定周期実行プログラムＡが起動され、処理を終了する。以下、検査プログラムの起動周期にあわせて、各実時間に検査プログラムが起動される。
【００４０】
起動制御プログラム２の関数Ｎｅｓｔ＿Ｐｅｒｉｏｄ（Ａ，Ｔｐ）は、検査プログラムを起動するに当たって、起動プログラム表Ａと前回の起動実時間Ｔｐに基づいて起動実時間を生成する。
【００４１】
次に、起動制御プログラム２は、シミュレーションを開始する実時刻を零時とし、零時から上記所定の周期の時刻を起動実時間として、上記複数の所定の周期それぞれに対応する複数の起動実時間を算出する。
【００４２】
図６に、起動順序の一例を示している。また、実行内容は、起動するプログラムとして検査プログラム及びセンサ入力プログラム４、アクチュエータ出力プログラム５、パネル入出力プログラム６等の各プログラムも含まれる。
図６では、「定周期実行プログラムＡ」を「Ａ」と、「定周期実行プログラムＢ」を「Ｂ」と、「定周期実行プログラムＣ」を「Ｃ」と、「センサ入力プログラム」を「センサ入力」と、「アクチュエータ出力プログラム」を「アクチュエータ出力」と表している。
例えば、図５の例の検査プログラムの起動に対して、さらに、センサ入力周期を５ｍｓ、アクチュエータ出力周期を５ｍｓ、パネル入出力の周期を５０ｍｓとした図３に対する起動順序の例が、図６の例である。
起動制御プログラム２は、生成した起動対応表に従って検査プログラムを起動する。
【００４３】
図７は、このシミュレーション方式を用いて、図５の例をα＝０．４として高速シミュレーションした時の実時間とシミュレーション時間の関係を示している。
図７の例では、一の周期で起動する検査プログラムの処理が終了した時点で、次の周期の起動時刻まで待つことなく、次の周期の検査プログラムの起動を開始するものであり、パソコンが充分高速な場合は、実時間の０．４倍の時間でシミュレーションを行う。
【００４４】
図８は、図５の例を、α＝２．０を指定して、本装置でゆっくり実行しているとき（低速シミュレーション）の実時間とシミュレーション時間の関係を示している。
図８の例では、各起動時刻にプログラムを起動し、処理が修了した後、所定の時間の待ち時間を入れ、待ち時間終了後、次の起動時刻に起動するプログラムを実行させる。
【００４５】
次に、動作を説明する。
図９は、起動制御プログラム動作（起動制御工程）の一例を表している。
起動制御プログラム２は、まず、起動手順を取得して、起動プログラム表を作成する（Ｓ９−１）。起動手順は、予め利用者によってグラフィックパネルシミュレータ９を介して入力される。その際、必要な初期設定を行う。
【００４６】
Ｓ９−１において、起動手順のデータを読み込み、プログラム名、周期、処理時間をＡテーブルの０列目から順にセットする。また、カウンタは０で初期化する。
【００４７】
次に、起動制御プログラム２は、検査時間Ｔｍａｘとシミュレーション時間の倍率αを設定する（Ｓ９−２）。
Ｓ９−２では、次の動作を行う。
検査時間を読み込み、Ｔｍａｘにセットする。シミュレーション時間倍率を読み込み、αにセットする。例えば、α＝２．０の場合は、実時間の２倍の時間でゆっくりシミュレーションすることを指定している。
シミュレーション処理を実行し、実時間≧Ｔｍａｘとなると、終了処理を行う（Ｓ９−２０）。終了処理は、メモリの開放等である。
【００４８】
Ｓ９−３で、シミュレーションの初期化を行う。
実時間Ｔ＝０、周期時間Ｔｐ＝０とし、シミュレーション開始時間Ｔｏｓｉｍ＝Ｔｃｕｒ（）により現在の時刻とする。次に、実行するプログラムのインデクスｉｎｄ＝−１とする。
【００４９】
Ｓ９−４で、次に実行するプログラムのインデクスを、
ｉｎｄ＝Ｎｅｘｔ＿Ｐｒｏｇ（Ａ，ｉｎｄ，Ｔｐ）；
により求める。この関数は、起動プログラム表Ａから実時間Ｔｐに実行されるプログラム中でｉｎｄの次の優先度のプログラムを求める。入力のｉｎｄ＝−１のときは、Ｔｏで最優先のプログラムのインデクスを返す。リターン値が−１のときは、次にＴｏで実行するプログラムがないことを示す。
【００５０】
ｉｎｄ≧０が返されたときは、ｉｎｄの示すプログラムを実行する（Ｓ９−７）。
Ｓ９−７では、次の動作を行う。
Ａテーブルには、センサ入力プログラム、アクチュエータ出力プログラム、パネル入出プログラムと、その他の定周期実行プログラムが登録される。プロセッサＰ１とＰ２で並列に処理を行う場合は、Ｓ９−７の処理をＰ１のＳ９−７，Ｐ２のＳ９−７の順に実行するように変更すればよい。
実行に先立って、ｔ＝Ｔｃｕｒ（）−Ｔｏｓｉｍ−Ｔ＊αを求め、ｔ＞０のときは、シミュレーションをｔｍｓｅｃウエイトさせる。
【００５１】
実行後、起動プログラム表をカウントアップ
Ａ（３，ｉｎｄ）＝Ａ（３，ｉｎｄ）＋１；
し、実時間を実行プログラムの処理時間分進める。
Ｔ＝Ｔ＋Ａ（２，ｉｎｄ）；
【００５２】
ｉｎｄ＜０のときは、該当時刻のプログラムが全て実行済みのため、
Ｔｐ＝Ｎｅｘｔ＿Ｐｅｒｉｏｄ（Ａ，Ｔｐ）；
によって次の実行実時間を求め、ｉｎｄ＝−１とする。
【００５３】
Ｓ９−１１において、Ｔ＜Ｔｍａｘのときは、検査時間に達していないので、Ｓ９−４に戻り、シミュレーションを継続する。
【００５４】
Ｓ９−１１において、Ｔ≧Ｔｍａｘのときは、検査時間に達しているので、Ｓ９−２０の終了処理を行う。
【００５５】
このようにして、低速シミュレーション処理では、シミュレーション中に、Ｓ９−６で所定の時間処理を中断することによってシミュレーション処理の状況を調査することが可能となる。
上記の場合、シミュレーション時間は、実際にシミュレーションに要した時間を示す。
実時間は、実システム上でプログラムを実施した時間の経過を示す。
【００５６】
このようにして、まず、起動制御プログラム２により、各シミュレーション処理に従って、定周期実行プログラム群が各々の実時間の周期に応じて起動される。パネル入出力とセンサ入力とアクチュエータ出力プログラムは、パネル入出力の周期、センサ入力周期（データ取り込み周期）、アクチュエータ出力周期に応じて起動制御プログラム２によって起動される。
【００５７】
センサ入力は、実際のセンサ入力の代わりに、センサ入力プログラム４によって入出力データメモリ７から値を受け取る。
アクチュエータ出力は、実際のアクチュエータ出力の代わりに、アクチュエータ出力プログラム５によって入出力データに値を出力する。
パネル入出力は、実際のグラフィックパネル入出力の代わりに、パネル入出力プログラム６によって入出力データメモリ７に値を入出力する。
【００５８】
以上のように、実時間の実行周期に応じてプログラムの起動をするようにしたことで、基本周期（上記例では５ｍｓ）の精度で対象システムのシミュレーションデバッグをすることができる。実時間とシミュレーション時間を独立に扱うため、シミュレーション時間を自由にスケーリングすることができる。高速パソコン上でシミュレーション時間を短縮（高速シミュレーション）することができ、逆に基本周期の起動の際にｗａｉｔ時間を入れ、その時間を修正することにより、シミュレーション時間をダイナミックに変更することができ、ゆっくり（低速シミュレーション）することが可能となる。
【００５９】
また、センサ値の定期的取り込みは、センサ入力プログラム４を定周期起動することにより実現できる。
アクチュエータへの定期的出力は、アクチュエータ出力プログラム５を定周期起動することにより実現できる。
【００６０】
実施の形態２．
この実施の形態では、当シミュレーションプログラムと、連続系シミュレータとの協調シミュレーションを実施する場合を説明する。
連続系シミュレータは、連続系システムをシミュレーションするシミュレータである。連続系システムとは、システムの変化が時間軸に対して連続的に変化するシステムである。連続系システムは、一般には、微分方程式としてモデル化できる。
【００６１】
この実施の形態では、図１に示す外部入出力を模擬するプログラム８に代えて、連続系シミュレータを用いる。
このシミュレーションプログラム１と、連続系シミュレータとの協調シミュレーションは、以下の手段で実現できる。
（１）連続系シミュレータのモデルを作成する。
（２）同期を取る周期を決め、連続系シミュレータを、その周期で入出力データメモリ７から入出力データを取り込み、周期時間分シミュレーションし、結果を入出力データメモリ７に出力するように設定する。
（３）シミュレーションプログラム１のセンサ入力プログラム４とアクチュエータ出力プログラム５とをこの周期で、センサ入力とアクチュエータ出力を行うように設定する。
（４）アクチュエータ出力完了後、連続系シミュレータのシミュレーションを起動する。
（５）センサ入力の起動は、この連続系シミュレーションが完了してから行うように同期を取る。
【００６２】
以下に、連続系システムの一例に、このシミュレーション方式を適用する場合を説明する。
例えば、時間遅れのないｘ軸方向への直線運動の簡単な連続系システムのモデルの場合、現在の時間０の位置ｘ（０）、速度ｖ（０）と、加速度ａが与えられると、時間ｔ後の速度ｖ（ｔ）＝ｖ（０）＋ａ＊ｔ、位置ｘ（ｔ）＝ｘ（０）＋ｖ（０）＊ｔ＋０．５＊ａ＊（ｔ＊＊２）となる。ｔは、実時間を示す。
【００６３】
例えば、上記連続系システムのモデルについて、５ｍｓ毎に位置と速度を受センサから入力し、（目標）加速度計算をし、アクチュエータ出力する定周期実行プログラムを一例としてシミュレーションすると、以下の（１），（２）を５ｍｓ毎に実行することになる。
（１）定周期実行プログラムは、５ｍｓ毎にセンサー値を取り込み、目標加速度を計算し、アクチュエータに出力する。
（２）連続系シミュレータは、アクチュエータ値（上記目標加速度）を取り込み、現在の位置、速度とアクチュエータ値から、５ｍｓ後の位置、速度を計算し、センサ値として出力する。
【００６４】
このように、連続系モデルで、時刻ｔの位置ｘ（ｔ）、速度ｖ（ｔ）が求まっているとき、加速度ａ（ｔ）を定周期実行プログラムが計算し、連続系シミュレータに与える。連続系シミュレータは、５ｍｓ後の速度ｖ（ｔ＋５）＝ｖ（ｔ）＋５ａ、位置ｘ（ｔ＋５）＝ｘ（ｔ）＋５＊ｖ（ｔ）＋１２．５＊ａを計算し、定周期実行プログラムに次の計算のための入力として与える。
定周期実行プログラムは、ｖ（ｔ＋５）、ｘ（ｔ＋５）から次の加速度ａ’を計算し、連続系シミュレータに与える。
以下、同様に検査時間に到達するまで繰り返す。
【００６５】
連続系シミュレータの１回のシミュレーション時間が２ｍｓ、定周期実行プログラムの１回のシミュレーション時間が１ｍｓとすると、３ｍｓのシミュレーション時間で、５ｍｓの実時間のシミュレーションができることになる。
【００６６】
実施の形態３．
定周期実行プログラムを含むターゲットが、複数プロセッサの並列処理を含む場合のシミュレーションは、以下の手段で実現できる。
この実施の形態では、一例として２つのプロセッサＰ１，Ｐ２がある場合を説明する。
複数プロセッサの並列処理を含む場合、複数のプロセッサで並列して実施する処理を１つのプロセッサを用いて順番に処理を実施することによってシミュレーションを行う。
【００６７】
図１０に、この実施の形態で図３の例を２プロセッサＰ１，Ｐ２で実行した場合の実行順序を示している。
前述した図６と同様の名称を用いて起動するプログラムを表している。図１０の例では、起動制御プログラム２は、まず、０ｍｓでＰ１のセンサ入力、Ｐ２のセンサ入力、Ｐ１のＡ実行、Ｐ２のＡ実行、Ｐ１のＢ実行、Ｐ２のＢ実行、Ｐ１のＣ実行、Ｐ２のＣ実行、Ｐ１のアクチュエータ出力、Ｐ２のアクチュエータ出力、Ｐ１のパネル入出力、Ｐ２のパネル入出力を実行させる。
【００６８】
実施の形態４．
また、ターゲットプログラムＡ，Ｂ，Ｃがパソコン上で直接実行できない場合は、クロスアセンブラ、またはクロスコンパイラを用いて、パソコン上の定周期実行プログラムＡ，Ｂ，Ｃを作成する。ターゲットチップの上位互換チップを搭載した高速パソコンがある場合、自己のアセンブラや自己のコンパイラでパソコン上の定周期実行プログラムＡ，Ｂ，Ｃを作成する。この場合はターゲットプログラムＡ，Ｂ，Ｃにとっては、パソコンは高速エミュレータの役割を果たすので、高速なシミュレーションが可能となる。
【００６９】
実施の形態５．
このシミュレーション方式は、図１に一例として示したようにコンピュータ上で実行させるプログラムによって実現することができる。
また、このシミュレーション方式を実現するプログラムは、記録媒体に記録される。この記録媒体からコンピュータにプログラムを読み込み、読み込んだプログラムを動作させることによって、このシミュレーション方式を実現することが可能である。
【００７０】
図１１に、この実施の形態の一例を示している。
１００は、このシミュレーション方式を実現する計算機の一例である。
計算機１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０、メモリ１２０、ハードディスク１３０、記録媒体入出力部１４０を備える。
メモリ１２０は、ロードされたプログラム１２１と処理用一時記憶エリア１２２とに利用される。処理用一時記憶エリア１２２の一部は、入出力データメモリ７として利用する。
記録媒体１５０に記録されたプログラムは、記録媒体入出力部１４０を介して計算機のハードディスク１３０にシミュレーションプログラム１、外部入出力を模擬するプログラム、試験対象プログラム１３１として記録される。
上記ハードディスク１３０に記録されたプログラムは、ＣＰＵ１１０によって、メモリ１２０上にロードされ、処理用一時記憶エリアの入出力データメモリ７を利用して実行される。
【００７１】
さらに、このシミュレーション方式は、プログラムに限らず、ハードウェア、ファームフェアによって実現するものであってもよく、プログラムとハードウェア、あるいはファームウェアとの組み合わせであっても構わない。
また、プログラムは、記録媒体によって配布される場合であっても、ネットワークを介して、上記プログラムが記録されている記憶領域から利用者が使用する計算機へ配布される場合であっても構わない。
また、記録媒体は、計算機で読み取り可能なものであればよい。例えば、フレキシブルディスク、磁気テープ、コンパクトディスク等である。
【００７２】
【発明の効果】
この発明のシミュレーション方式及び方法によれば、１つまたは複数の定周期実行プログラムを含むターゲットとなるプログラムを、パソコンなどの上で、実時間の基本周期の精度でシミュレーションできる。
【００７３】
また、この発明によれば、シミュレーション時にシミュレーション時間を自由に調整できる。
【００７４】
また、この発明によれば、センサ値の定期的取り込みもシミュレートや、アクチュエータへの定期的出力もシミュレートができる。
【００７５】
また、この発明によれば、連続系シミュレータとの協調シミュレーションもできる。
【００７６】
また、この発明によれば、複数のプロセッサを用いた並列実行もシミュレートできる。
【００７７】
また、この発明によれば、ターゲットチップの上位互換チップ搭載パソコンがある場合は、特に高速のシミュレーションができる。
【図面の簡単な説明】
【図１】  実施の形態１のシミュレーション方式のシステムの構成の一例を表わす図。
【図２】  起動プログラム表を表す図。
【図３】  起動プログラム表の例を示す図。
【図４】  実施の形態１の入出力メモリに記憶されるデータの一例を表わす図。
【図５】  実施の形態１の定周期実行プログラムの動作例を示す図。
【図６】  実施の形態１で生成される起動順序の一例を表わす図。
【図７】  実施の形態１の定周期実行プログラムの高速シミュレーションの動作例を示す図。
【図８】  実施の形態１の定周期実行プログラムの低速シミュレーションの動作例を示す図。
【図９】  実施の形態１の起動手順プログラムの動作（起動手順工程）のフローチャート図。
【図１０】  実施の形態３で生成される起動順序の例を表わす図。
【図１１】  実施の形態４のシミュレーション方式の一例を表わす図。
【符号の説明】
１  シミュレーションプログラム、２  起動制御プログラム（起動制御部）、３  プログラムメモリ、４  センサ入力プログラム（入力部）、５  アクチュエータ出力プログラム（出力部）、６  パネル入出力プログラム、７  入出力データメモリ、８  外部入出力を模擬するプログラム群（シミュレーションデータ模擬部）、９  グラフィックパネルシミュレータ、１０  センサシミュレータ、１１  アクチュエータシミュレータ、１２  起動プログラム表、３１  定周期実行プログラムＡ、３２  定周期実行プログラムＢ、３３  定周期実行プログラムＣ、１００  計算機、１１０  ＣＰＵ、１２０  メモリ、１２１  ロードされたプログラム、１２２  処理用一時記憶エリア、１３０  ハードディスク、１３１  試験対象プログラム、１４０  記録媒体入出力部、１５０  記録媒体。
【図１】
0004137434.tif 000002
【図２】
0004137434.tif 000003
【図３】
0004137434.tif 000004
【図４】
0004137434.tif 000005
【図５】
0004137434.tif 000006
【図６】
0004137434.tif 000007
【図７】
0004137434.tif 000008
【図８】
0004137434.tif 000009
【図９】
0004137434.tif 000010
【図１０】
0004137434.tif 000011
【図１１】
0004137434.tif 000012