(57)【特許請求の範囲】
【請求項１】
複数種類のシミュレータより成るシミュレーション装置に係わる各シミュレータ間のデータ送受信プログラムを生成する装置であって、
前記各シミュレータ間で送受信されるデータの仕様情報である送受信データ仕様情報が予め記憶された送受信データ仕様情報記憶手段と、
前記各送受信データ毎の各送信処理／受信処理に係わる仕様情報であるタイミング仕様情報が予め記憶されたタイミング仕様情報記憶手段と、
少なくとも前記送受信データ仕様情報と前記タイミング仕様情報とに基づいて、前記各シミュレータ間のデータ送受信プログラムを生成するデータ送受信プログラム生成手段と、
を有することを特徴とするソフトウェア生成装置。
【請求項２】
前記各送受信データの送信／受信に係わる前処理が、予め登録された前処理記憶手段と、
前記各送受信データの送信／受信に係わる後処理が、予め登録された後処理記憶手段とを更に有し、
前記データ送受信プログラム生成手段は、前記送受信データ仕様情報と前記タイミング仕様情報と、前記前処理または／及び後処理とに基づいて、前記各シミュレータ間のデータ送受信プログラムを生成することを特徴とする請求項１記載のソフトウェア生成装置。
【請求項３】
前記タイミング仕様情報には、前記各送信処理／受信処理の実行条件が含まれていることを特徴とする請求項１記載のソフトウェア生成装置。
【請求項４】
前記送受信データ仕様情報は、前記複数のシミュレータに共通の情報であり、
前記タイミング仕様情報、前記前処理、前記後処理は、各シミュレータ毎に個別に設けられた情報であることを特徴とする請求項２記載のソフトウェア生成装置。
【請求項５】
前記実行条件は、実行周期あるいは他の送信処理／受信処理の実行完了を起動条件とするものであることを特徴とする請求項３記載のソフトウェア生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のシミュレータを含むシミュレーション装置のソフトウェアを生成する装置に関する。
【背景技術】
【０００２】
組込み機器の開発において、実機を使用することなく、主回路とその制御プログラム（制御基板）の動作を、ＰＣ上でシミュレーションすることにより、機器の開発、および動作検証をすることがある。これは、より早い段階で設計の問題点を明確にすることにより、実機開発後に不具合が発見されることに起因する手戻りを、未然に防ぐためである。
【０００３】
これに関して、機器上の全ての装置を単一のシミュレータで動作させるのではなく、主回路のシミュレータと、制御基板（ＣＰＵ／マイコン等を含む）のシミュレータとの間で、同期を取りながら動作させることがある。
【０００４】
ここで、「同期」とは、主回路のシミュレータと制御基板のシミュレータとの間で、シミュレータにおける仮想的時刻（以下、シミュレーション時刻）が一致するように、双方のシミュレータの動作有無あるいは動作速度を調整のうえ、双方のシミュレータの間でデータを送受信することを意味する。
【０００５】
ＰＣ上でのシミュレーションにあたっては、シミュレーション実行に必要なシミュレーションモデルの作成に時間がかかるという課題がある。本課題の解決方法に関しては、例えば特許文献１の従来技術が知られている。
【０００６】
特許文献１の発明は、ハードウェアモデルを構成するソフトウェアを自動生成することにより、ハードウェアモデルの開発工数を削減するものである。
特許文献１の発明では、ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、以下の各構成を有する。
・ハードウェアの処理開始が指示されてから終了するまでの時間を示すタイミング仕様データ（６０３）を記憶する記憶手段；
・上記タイミング仕様データを基に、上記ハードウェアの処理開始が指示されると上記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、上記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェア（１０４）を生成するプロセッサ（６０４）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２０４００６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献1の技術を使用することにより、制御基板に実装されるマイコン内部のペリフェラルモデルを自動生成することが可能であり、シミュレーションモデルの作成時間短縮に有効である。
【０００９】
しかし、特許文献1の技術では、主回路と制御基板の間でデータを送受信する箇所のシミュレーションモデルの自動生成ができない。すなわち、主回路のシミュレータと制御基板のシミュレータの間でデータを送受信するソフトウェアを自動生成することが出来ない。また、この問題は、主回路のシミュレータと制御基板のシミュレータとの間のデータ送受信処理に限らず、何等かの複数のシミュレータ間のデータ送受信処理に関しても、同様である。
【００１０】
本発明の課題は、シミュレータ間のデータ送受信ソフトウェアを自動生成可能にすることができ、これによってシミュレーションソフトウェア作成時間を短縮することができるソフトウェア生成装置等を提供することである。
【課題を解決するための手段】
【００１１】
本発明のソフトウェア生成装置は、複数種類のシミュレータより成るシミュレーション装置に係わる各シミュレータ間のデータ送受信プログラムを生成する装置であって、下記の構成を有する。
【００１２】
・前記各シミュレータ間で送受信されるデータの仕様情報が予め記憶された送受信データ仕様情報記憶手段；
・前記各送受信データ毎の各送信処理／受信処理に係わる仕様情報であるタイミング仕様情報が予め記憶されたタイミング仕様情報記憶手段；
少なくとも前記送受信データ仕様情報と前記タイミング仕様情報とに基づいて、前記各シミュレータ間のデータ送受信プログラムを生成するデータ送受信プログラム生成手段：
【発明の効果】
【００１３】
本発明のソフトウェア生成装置等によれば、シミュレータ間のデータ送受信ソフトウェアを自動生成可能にすることができ、これによってシミュレーションソフトウェア作成時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】本例のソフトウェア生成装置の概略構成図である。
【図２】シミュレーション装置の具体例である。
【図３】（ａ）はデータ仕様、（ｂ）はタイミング仕様の具体例である。
【図４】（ａ）は前処理仕様、（ｂ）は後処理仕様の具体例である。
【図５】データ送受信ソフトウェア生成処理のフローチャート図等（１／２）である。
【図６】データ送受信ソフトウェア生成処理のフローチャート図等（２／２）である。
【図７】図５等に示すソースコード例の説明図（１／２）である。
【図８】図５等に示すソースコード例の説明図（２／２）である。
【図９】制御基板のシミュレータのデータ送受信ソフトウェアの実行例である。
【図１０】主回路のシミュレータのデータ送受信ソフトウェアの実行例である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のソフトウェア生成装置の概略構成図である。
本例のソフトウェア生成装置は、複数種類のシミュレータより成るシミュレーション装置に係わる各シミュレータ間のデータ送受信プログラムを生成する装置である。
【００１６】
図１のソフトウェア生成装置１０は、ソフトウェア生成メイン処理部１１を有する。
ソフトウェア生成装置１０には、その不図示の記憶部（メモリ等）に予め図示のデータ仕様１２、タイミング仕様１３、前処理仕様１４、後処理仕様１５の各種データが記憶されている。尚、これら各種データを記憶する記憶部を、それぞれ、データ仕様記憶部、タイミング仕様記憶部、前処理仕様記憶部、後処理仕様記憶部等と呼ぶものとする。
【００１７】
尚、ソフトウェア生成装置１０は、例えば一例としてはパソコン上で実現される。よって、ハードウェア的には一般的なパソコンの構成を有するものであってよい。つまり、特に図示しないが、例えば、ＣＰＵ／ＭＰＵ等の演算プロセッサ、ハードディスク、メモリ等の記憶装置等を有しており、更に通信機能部や、キーボード、マウス等の入力操作部、ディスプレイ等の表示部等を有するものであってもよい。
【００１８】
上記記憶装置には、予め所定のアプリケーションプログラムが記憶されており、上記演算プロセッサがこのアプリケーションプログラムを実行することにより、例えば上記ソフトウェア生成メイン処理部１１の機能や、後述する図５、図６の処理等が実現される。
【００１９】
また、上記記憶装置には、上記データ仕様１２、タイミング仕様１３、前処理仕様１４、後処理仕様１５の各種データが記憶される。
また、上記データ仕様１２、タイミング仕様１３、前処理仕様１４、後処理仕様１５の各種データは、例えば一例としては、開発者等が上記入力操作部により任意のデータを入力する作業を行うことで、作成されるものであってもよい。
【００２０】
データ仕様１２（データ仕様記憶部）は、上記各シミュレータ間で送受信されるデータ（送受信データ）の仕様情報が予め記憶されたものである。タイミング仕様１３（タイミング仕様記憶部）は、上記各送受信データ毎の各送信処理／受信処理に係わる仕様情報であるタイミング仕様情報が、予め記憶されたものである。
【００２１】
上記ソフトウェア生成メイン処理部１１は、少なくとも上記送受信データ仕様情報と上記タイミング仕様情報とに基づいて、上記各シミュレータ間のデータ送受信プログラム（データ送受信ソフトウェア１６）を生成する。
【００２２】
また、前処理仕様１４（前処理仕様記憶部）は、上記各送受信データの送信／受信に係わる前処理が、予め登録されたものである。後処理仕様１５（後処理仕様記憶部）は、上記各送受信データの送信／受信に係わる後処理が、予め登録されたものである。
【００２３】
上記ソフトウェア生成メイン処理部１１は、例えば、上記送受信データ仕様情報と上記タイミング仕様情報と、上記前処理または／及び後処理とに基づいて、上記各シミュレータ間のデータ送受信プログラムを生成する。
【００２４】
また、例えば、上記タイミング仕様情報には、上記各送信処理／受信処理の実行条件が含まれている。この実行条件は、例えば、実行周期あるいは他の送信処理／受信処理の実行完了を起動条件とするものであり、一例が後述する図３（ｂ）のタイミング324であり、後に説明する。
【００２５】
また、上記データ仕様情報は、上記複数のシミュレータに共通の情報であり、上記タイミング仕様情報、前処理、後処理は、各シミュレータ毎に個別に設けられた情報である。
上記ソフトウェア生成メイン処理部１１は、上記のように予め記憶された各種データを用いて、図示のデータ送受信ソフトウェア１６を生成する。このデータ送受信ソフトウェア１６は、例えば図２に示す２つのシミュレータ２０−３０間のデータ送受信に係わるプログラムである。この例では、データ送受信ソフトウェア１６は、シミュレータ２０用とシミュレータ３０用の２つが生成されることになる。
【００２６】
ここで、図２の例について説明する。
図２には、上記背景技術の説明に応じた、主回路のシミュレータ２０と、制御基板のシミュレータ３０とから成るシミュレーション装置を示す。
【００２７】
主回路のシミュレータ２０、制御基板のシミュレータ３０の各々には、シミュレーション処理部２１、３１、および各種データ格納領域２２，３２があり、これらを使用してシミュレーション処理が実行される。
【００２８】
尚、各シミュレータ２０，３０は、例えば一例としてはパソコン上で実現される。よって、ハードウェア的には一般的なパソコンの構成を有するものであってよい。つまり、特に図示しないが、例えば、ＣＰＵ／ＭＰＵ等の演算プロセッサ、ハードディスク、メモリ等の記憶装置等を有している。そして、記憶装置には上記ソフトウェア生成装置１０で生成されたデータ送受信ソフトウェア１６等のシミュレーション用のプログラムが格納される。上記演算プロセッサが、このプログラムを実行することで、例えば後述する図９や図１０の処理等が実行される。
【００２９】
また、主回路のシミュレータ２０のシミュレーション処理部２１と、制御基板のシミュレータ３０のシミュレーション処理部３１との間で、データの送受信が実行される。送受信されるデータとしては、ＰＷＭ電圧指令値の出力、Ａ／Ｄコンバータの入力電圧、シリアル通信等が挙げられる。この様なデータ送受信処理のプログラムが、上記データ送受信ソフトウェア１６である。但し、本発明の対象は、これらに限定されない。
【００３０】
この様に、ソフトウェア生成装置１０は、例えば一例としては、図２に示すような主回路のシミュレータ２０と、制御基板のシミュレータ３０との間のデータ送受信処理プログラム（ソースコード）を、自動的に生成するものである。本説明では、主に、この例を用いて具体例を説明するが、勿論、この例に限らない。ソフトウェア生成装置１０は、何等かの複数のシミュレータ間のデータ送受信処理プログラムを、自動的に生成するものである。
【００３１】
尚、本例では、複数のシミュレータ間のデータ送受信処理プログラム生成の為に予め用意されるデータとして、図示のようにデータ仕様１２、タイミング仕様１３、前処理仕様１４、および後処理仕様１５の４種類の仕様データを示すが、この例に限らない。例えば、この４種類の全てを纏めて１つの仕様データとして扱ってもよいし、４種類のうちの一部を纏めて扱ってもよい。例えば、前処理仕様１４と後処理仕様１５を纏めて１つの仕様とすることで、これとデータ仕様１２およびタイミング仕様１３の３種類の仕様を入力とするものであってもよい。
【００３２】
尚、上記４種類のデータ仕様は、予め例えば開発者等が任意に設定・入力するものである。また、上記４種類のデータ仕様のうち、前処理仕様１４および後処理仕様１５は、必ずしも必要ないものである。
【００３３】
ここで、図３（ａ）、（ｂ）、図４（ａ）、（ｂ）に、上記４種類のデータ仕様の具体例を示す。
図３（ａ）には、上記データ仕様１２の具体例を示す。
【００３４】
図示の例では、データ仕様１２は、ＩＤ311、名称312、サイズ313等のデータ項目から成る。
データ仕様１２は、上記シミュレータ２０−３０間で送受信されるデータの名前や識別番号やサイズ等が、上記名称312、ＩＤ311、サイズ313（バイト単位）等に登録されたものである。図示の例では、名称312が“UARTData”、“PWMOutput”、“ADCInput”の３つの送受信データが、登録されている。尚、ＩＤ311は、単に各レコードの識別番号等を意味するものであっても構わない。
【００３５】
ここで、上記のように、データ仕様１２で仕様を定義する送受信データは、主回路のシミュレータ２０と制御基板のシミュレータ３０の間で送受信されるデータである。したがって、データ仕様１２は、主回路のシミュレータ２０と制御基板のシミュレータ３０で共通に用いられるものである。
【００３６】
一方、データ仕様１２以外の３種類の仕様１３，１４，１５は、各シミュレータ個別の設定データである。そして、以下に説明する図３（ｂ）、図４（ａ）、（ｂ）に示す３種類の仕様データは、制御基板のシミュレータ３０用のデータ送受信処理プログラム生成の為の仕様データの具体例である。尚、上記のことから主回路のシミュレータ２０用の仕様データも、予め登録・記憶されていることになるが、ここではその具体例は特に示さないものとする。
【００３７】
図３（ｂ）には、制御基板のシミュレータ３０用のタイミング仕様１３の具体例を示す。
図示の例のタイミング仕様１３は、タイミング仕様ＩＤ321、データ仕様ＩＤ322、「受信または送信」323、タイミング324等のデータ項目から成り、これらが上記タイミング仕様情報の一例である。
【００３８】
タイミング仕様１３は、上記データ仕様１２に登録された送受信データの送信または受信のタイミング（条件；周期やトリガ等）等が、登録されたものである。基本的には、このタイミング仕様１３の各レコード毎に、送信処理または受信処理のプログラム（スレッド）が生成される。但し、条件が関連する処理に関しては、１つのスレッドに纏めて生成されても構わない。図示の例では、タイミング324に示す条件より、タイミング仕様ＩＤ321＝‘３’の送信処理は、タイミング仕様ＩＤ321＝‘２’の受信処理に関連する処理であるので、後述するようにこれらを１つに纏めたプログラムが、生成されることになる。詳しくは後述する。
【００３９】
上記タイミング仕様ＩＤ321は、上記各レコードに割当てられるユニークな識別番号と見做してよい。換言すれば、タイミング仕様ＩＤ321は、上記各送受信データの送信／受信に係わる各処理に割当てられるユニークな識別番号と見做してよい。
【００４０】
データ仕様ＩＤ322は、上記データ仕様１２のＩＤ311に対応する。タイミング仕様１３には、各レコード毎に、データ仕様ＩＤ322が示す送受信データに関して、「受信または送信」323によって送信処理であるか受信処理であるかが指定され、タイミング324によって起動条件等が指定されている。
【００４１】
例えば、タイミング仕様１３の先頭レコードを例にすると、データ仕様ＩＤ322＝‘２’であり、「受信または送信」323＝“送信”であるので、これは送受信データ“PWMOutput”の送信処理に関するタイミング仕様情報である。更に、タイミング324＝“100ms周期”であることから、当該“PWMOutput”の送信処理は、100ms周期で実行すべき処理であることが、起動条件として指定されている。
【００４２】
そして、この例では、“PWMOutput”の送信処理に係わる前処理と後処理が、それぞれ、前処理仕様１４と後処理仕様１５に登録されている。これは、図４（ａ）、（ｂ）において、タイミング仕様ＩＤ332,342が‘１’であるレコードである。
【００４３】
尚、図３（ｂ）においてタイミング324に示す内容は、実際にはコンピュータ処理用に予め決められたフォーマットに従って記述されているが、その具体例は特に示さない。
図４（ａ）に示す具体例では、前処理仕様１４は、前処理仕様ＩＤ331、タイミング仕様ＩＤ332、前処理333等の各データ項目より成る。
【００４４】
ここでは、予め、様々な前処理のプログラム（関数など）が予め開発者等によって任意に作成されているものとし、前処理333には任意の前処理の関数などの関数名などが登録される。尚、これら各関数のプログラム等は、ソフトウェア生成装置１０に記憶されており、生成したデータ送受信ソフトウェア１６を例えば図２の各シミュレータ２０，３０に送信する際に、一緒に送信するようにしてもよい。
【００４５】
上記前処理仕様１４の各レコード毎に、タイミング仕様ＩＤ332が示すデータ送受信処理に係わる前処理の関数名などが、前処理333に登録される。尚、上記前処理仕様ＩＤ331は、各レコードに割当てられるユニークな識別番号と見做してよい。
【００４６】
例えば、一例として図示の先頭レコードを例にすると、そのタイミング仕様ＩＤ332＝‘１’であることから、上記「“PWMOutput”の送信処理」の直前に実行する処理の名称（関数名など）が、前処理333に登録されていることになる。図示の例では、関数名“pwm.getValue()”が、登録されている。
【００４７】
尚、図示の３番目のレコードの前処理333における「#sendData」は、送信されるデータへの参照を示すための記法であり、本記法は発明の本質ではない。
図４（ｂ）に示す具体例では、後処理仕様１５は、後処理仕様ＩＤ341、タイミング仕様ＩＤ342、後処理343等の各データ項目より成る。
【００４８】
後処理も上記前処理と同様に、予め、様々な後処理のプログラム（関数など）が予め開発者等によって任意に作成されているものとし、後処理343には任意の後処理の関数などの関数名などが登録される。各レコード毎に、タイミング仕様ＩＤ342が示すデータ送受信処理に係わる後処理の関数名などが、後処理343に登録される。尚、上記後処理仕様ＩＤ341は、各レコードに割当てられるユニークな識別番号と見做してよい。
【００４９】
例えば、一例として図示の先頭レコードを例にすると、そのタイミング仕様ＩＤ342＝‘１’であることから、上記「“PWMOutput”の送信処理」の直後に実行する処理の名称（関数名など）が、後処理343に登録されていることになる。但し、図示の例では、「無し」が登録されており、つまり、上記「“PWMOutput”の送信処理」に関しては、後処理は無いことになる。
【００５０】
あるいは、一例として、図４（ｂ）の２番目のレコードを例にすると、そのタイミング仕様ＩＤ342＝‘２’であるので、図３（ｂ）の例より、“UARTData”の受信処理の直後に、関数uart.setRecvData(引数は受信データ)を実行することが、定義されていることになる。尚、図示の後処理343に示す「#recvData」は、受信したデータへの参照を示すための記法であり、それ故に上記の通り“引数は受信データ”としているが、本記法は発明の本質ではない。
【００５１】
図５、図６には、制御基板のシミュレータ用のデータ送受信ソフトウェア生成処理のフローチャート図と、この処理によって生成されるデータ送受信ソフトウェア１６（制御基板のシミュレータ用のデータ送受信ソフトウェア１６のソースコード）の具体例を示す図である。
【００５２】
図５、図６とも、図上左側にフローチャート図を示し、図上右側にデータ送受信ソフトウェア１６の具体例を示す。また、図５、図６は、１つの処理を２つの図面に分けて示している。これより、以下、特に区別せずに図５等と記す場合もあるものとする。
【００５３】
また、図５、図６の図上右側に示すデータ送受信ソフトウェア１６の具体例における各プログラムの記述に関する説明一覧を、図７、図８に示す。
以下、図５、図６、図７、図８を参照して、制御基板のシミュレータのデータ送受信ソフトウェア生成処理について、説明する。
【００５４】
尚、ここでは一例として、出力されるソースコードは、Java（登録商標）の仕様に準じた記載としているが、ソースコードの言語は発明の本質ではない。
また、図５、図６の図上右側に示す各ソースコードには、説明の都合上、5020、5030、5040の番号を付してあり、以下の説明ではこの番号を用いて説明する場合があるものとする。これら３つのソースコード5020,5030,5040を合わせたものが、本例で生成されるデータ送受信ソフトウェア１６である。尚、図示の番号5010が付されたものは、ソースコードではなく、本処理中に得られるデータ（グラフ）である。
【００５５】
図５等に示す処理は、まず、タイミング仕様１３のタイミング324の内容に基づいて、各データ送受信処理間の依存関係を判別する（ステップＳ１１）。これは、例えば、図３（ｂ）の例では、先頭レコードのタイミング324の「100ms周期」のような定周期が規定されている場合には、依存関係は無いと判定する。そして、依存関係が無いデータ送受信処理に関しては、それ単独に対して後述するスレッドを割当てる。一方、図３（ｂ）に示す３番目のレコードのタイミング324のような、他のデータ送受信処理（タイミング仕様ＩＤ）と関連する記述がある場合には、依存関係があると判定する。この様な依存関係があるデータ送受信処理に関しては、依存先のデータ送受信処理と纏めて、後述するスレッドを割当てる。
【００５６】
この様な依存関係の判定結果より、例えば図５に示すグラフ5010を生成する。具体的には、タイミング仕様ＩＤ321が‘１’である処理は、他のタイミング仕様ＩＤの処理には依存しない。一方で、タイミング仕様ＩＤ321が‘３’である処理は、タイミング仕様ＩＤ321が‘２’である処理と依存関係がある。図３（ｂ）の例では、タイミング仕様ＩＤ321が‘２’である処理が実行完了したら、続いて、タイミング仕様ＩＤ321が‘３’の処理を実行する必要がある。
【００５７】
尚、グラフ5010を、グラフ理論におけるグラフ（ノードとエッジから構成されるグラフ）と見做した場合、各ノード内の番号（ノード番号；図示の１，２，３）は、上記タイミング仕様ＩＤ321である。
【００５８】
次に、ステップＳ１１で抽出した依存関係（例えば上記グラフ5010）をもとに、スレッドのメイン関数を呼び出す処理を生成する（ステップＳ１２）。出力結果は、図示のソースコード5020に示す通りである。つまり、上記のように、各データ送受信処理に対して、単独または複数纏めて、スレッドのメイン関数を呼び出す処理を生成する。
【００５９】
具体的には、例えば、グラフ5010を、グラフ理論におけるグラフ（ノードとエッジから構成されるグラフ）と見做した場合、エッジで接続されているノード群ごとに１個のスレッドを作成する。エッジが接続されていない単独のノードは、当該１つのノードについて１個のスレッドを作成する。これより、この例では、タイミング仕様ＩＤが‘１’の処理のみのスレッドと、タイミング仕様ＩＤが‘２’と‘３’の処理が含まれるスレッドという、２個のスレッドが作成されることになる。
【００６０】
ここで、図示のソースコード5020の生成処理について、図７も参照して説明する。
まず、本例では、予め、各ソースコードの雛形が、開発者等によって任意に作成されて、メモリ等に記憶されているものとする。雛形には、定型表現等が記述されている。例えば、メイン関数を呼び出す処理であるソースコード5020の場合、図示の１行目と２行目の記述は、図７に示すように定型表現であり、予め「メイン関数を呼び出す処理」の雛形に、記述されているものである。すなわち、ソースコード5020における“class Main”や“public static void main()”は、予め雛形に記述されている定型表現である。
【００６１】
また、ソースコード5020の４行目と６行目の記述における“new”と“start()”も、定型表現である。“new”と“start()”の間の“Thread1”や“Thread2_3”における“Thread”の部分は、予め登録されている固定文字列である。
【００６２】
尚、図７に示すように、“new”は、Javaの新しいオブジェクトの作成を示す定型表現であり、“start()”はJavaでスレッドを開始する場合の関数である。
そして、ステップＳ１２の処理では、“new”と“start()”との間に任意のスレッド名を記述する。図示の一例では、上記固定文字列“Thread”とタイミング仕様ＩＤ（ノード番号）を用いたスレッド名としている。つまり、上記タイミング仕様ＩＤ（ノード番号）＝‘１’の処理に対応するスレッド名はThread1としている。同様に、上記タイミング仕様ＩＤ（ノード番号）＝‘２’と‘３’の処理に対応するスレッド名はThread2_3としている。勿論、これは一例であり、この例に限るものではない。
【００６３】
尚、図５に示すソースコード5020の３行目と５行目の記述（//で始まる説明文）は、説明の為に示しているだけであり、実際のソースコード5020には存在しなくてもよい。
次に、データ送受信ソフトウェア１６におけるデータ型定義部分を生成する（ステップＳ１３）。図示の例では、ステップＳ１３の処理は、データ仕様１２の名称312とサイズ313の情報を使用して、上記データ型定義部分を、図示のソースコード5030として生成・出力する。図示のようにソースコード5030には、上記データ仕様１２に登録された３つのデータについて、それぞれ、データ型が定義されている。
【００６４】
ここで、図示のソースコード5030において、“class”は、図７に示すようにJavaのクラス宣言関連の定型表現である。また、List<Byte>と記載しているデータは可変長配列、byte[数字]と記載しているデータは固定長配列である。換言すれば、図７に示すように、List<Byte>は可変長データの型、byte[ｘ]は、長さｘバイト固定のデータの型である（尚、ｘは整数）。
【００６５】
これより、例えば、上記データ仕様１２に登録された各データ毎に、雛形の“class”の記述の後に名称312を記述すると共に、サイズ313が固定長である場合には雛形のbyte[ｘ]のｘにサイズ313を代入し、あるいはサイズ313が可変長である場合にはList<Byte>を記述することで、図示のソースコード5030を生成する。尚、本例では、図３（ａ）のデータ仕様１２のサイズ313の「１以上」が、可変長であることを意味するものとするが、この例に限らない。また、尚、ソースコード5030におけるbyte[ｘ]の後に記述の“data”は、予め雛形に記述されている定型表現である。
【００６６】
ステップＳ１３では、例えば一例としては上記のようにして、データ型定義部分の一例であるソースコード5030を生成する。
そして、続いて、ステップＳ１４において、上記ソースコード5020で呼び出す各スレッドの記述を生成する。例えば、依存関係の先頭（グラフ5010においてエッジの始点側のノードに対応するもの）から順に、下記の各処理（i）〜（iv）を実行するソースコードを順に作成のうえ、対応するスレッドのメイン関数中に出力する。
【００６７】
なお、下記の各処理（i）〜（iv）においては、必要に応じて、ステップＳ１３で生成した各データ型定義を使用する。また、本処理結果の一例は、図６に示すソースコード5040である。
【００６８】
（i）  指定された周期の時間、待つ処理を作成（タイミング仕様１３のタイミング324をもとに作成）
（ii）  前処理作成（前処理仕様１４の前処理333をもとに作成）
（iii）  受信処理または送信処理作成（タイミング仕様１３の「受信または送信」323やデータ仕様ＩＤ322等に基づいて作成）
（iv）  後処理作成（後処理仕様１５の後処理343をもとに作成）
但し、定周期処理ではない場合、上記（i）の処理は行われない。
【００６９】
上記処理（i）〜（iv）によって、例えば図６に示すソースコード5040が生成される。これについて、以下、図８等も参照して説明する。
まず、図６に示すソースコード5040において、下記の記述は、予め雛形に記述されている定型表現である。
【００７０】
『  class スレッド名extends Thread {
void run() {
while (true)                     』
上記定型表現における“スレッド名”として、上記ソースコード5020で作成した各スレッド名を記述する。これより、例えば、図示の“class Thread1 extends Thread”等が記述される。
【００７１】
そして、各スレッドの処理が記述される。以下、まず、Thread1のスレッド処理の生成について説明する。上記の通り、Thread1は、タイミング仕様ＩＤ＝‘１’に対応する処理であり、図３（ｂ）のタイミング仕様１３と図３（ａ）のデータ仕様１２とから、タイミング仕様ＩＤ＝‘１’に対応する処理は、データ“PWMOutput”の送信処理であって、“１００ms周期”の定周期処理であることが分かる。
【００７２】
これより、まず上記（i）の処理によって、処理実行を１００ms待つ処理として、図示の“wait(100,SIM_TIME_MS)”が記述される。尚、SIM_TIME_MSは、100の単位がMS（ミリ秒）であることを示す記述である。
【００７３】
次に、上記（ii）前処理作成を行う。タイミング仕様ＩＤ＝‘１’に対応する前処理（その関数名）は、図４（ａ）に示す前処理仕様１４の例では“pwm.getValue()”である。これと上記データ“PWMOutput”と定型表現によって、ソースコード5040に示す“PWMOutput data = pwm.getValue()”が記述される。
【００７４】
そして、上記(iii)の処理を行う。ここでは送信処理であるので、データ送信時の呼出しの定型表現である図示の“sendData(data)”が記述される。
図４（ｂ）に示す例では、タイミング仕様ＩＤ＝‘１’に対応する後処理は無いので、以上でThread1の処理を生成完了となる。
【００７５】
次に、以下、Thread2_3のスレッド処理の生成について説明する。
この場合、上記のことから、まず、タイミング仕様ＩＤ＝‘２’に係わる処理を生成し、続いて、タイミング仕様ＩＤ＝‘３’に係わる処理を生成する。
【００７６】
まず、タイミング仕様ＩＤ＝‘２’に関して、上記（ii）前処理作成を行う。これは、図４（ａ）の例ではタイミング仕様ＩＤ332＝‘２’に対応する前処理333は、“uart.clearRecvDataArea()”であるので、これをそのままソースコード5040に記述する。続いて上記（iii）では、タイミング仕様ＩＤ＝‘２’は受信処理であり、データ名称は図３（ａ）の例では“UARTData”であるので、これと図８に示すデータ受信時の呼出の定型表現とから、図示の“UARTData recvData = receive()”が、ソースコード5040に記述される。
【００７７】
そして、上記（iv）後処理では、図４（ｂ）の例ではタイミング仕様ＩＤ342＝‘２’に対応する後処理343は、“uart.setRecvData(#recvData)”であるので、これがソースコード5040に記述される。
【００７８】
以上で、タイミング仕様ＩＤ＝‘２’に係わる処理が生成完了する。
続いて、タイミング仕様ＩＤ＝‘３’に係わる処理生成を行う。まず、上記（ii）前処理作成を行う。これは、まず、図４（ａ）の例ではタイミング仕様ＩＤ332＝‘３’に対応する前処理333は、“#sendData=uart.getDataToBeSent()”であり、これを取得する。更に、図３（ｂ）の例では対応するデータ仕様ＩＤ322＝‘１’であるので図３（ａ）のデータ仕様１２よりデータ名称は“UARTData”であるので、これを取得する。そして、これら取得データを用いて、図６のソースコード5040に下記の記述を行う。
【００７９】
UARTData sendData=uart.getDataToBeSent()
次に、上記（iii）では、タイミング仕様ＩＤ321＝‘３’に対応する「受信または送信」323は、“送信”であることから、データ送信時の呼出の定型表現である“send(sendData)”を、図６のソースコード5040に記述する。
【００８０】
最後に、上記（iv）後処理で、タイミング仕様ＩＤ342＝‘３’に対応する後処理343である“uart.cleanDataAreaToBeSent()”が、図６のソースコード5040に記述される。
例えば、この様にして、図６のソースコード5040が生成される。
【００８１】
尚、上述したデータ送受信ソフトウェア１６の自動生成処理は、上記ソフトウェア生成メイン処理部１１が実行する。
図９に、図５、図６に示したデータ送受信ソフトウェア１６（ソースコード5020,5030,5040）の動作を示す処理フローチャート図を示す。尚、本装置で作成されたデータ送受信ソフトウェア１６は、例えば制御基板のシミュレータ３０に転送されて記憶され、このシミュレータ３０において実行されることで、例えば図９の処理が実行されるものである。尚、制御基板のシミュレータ３０の上記シミュレーション処理部３１が、例えば図９の処理を実行するものである。
【００８２】
まず、図９の図上左側に示すように、ソースコード5020（メイン関数）が実行され、上記２つのスレッド（Thread1,Thread2_3）を起動する。そして、これでメイン関数は終了する。
【００８３】
起動されたThread1は、無限ループで図示のステップＳ２１〜Ｓ２３の処理を実行する。起動されたThread2_3は、無限ループで図示のステップＳ３１〜Ｓ３６の処理を実行する。
【００８４】
まず、Thread1の処理について説明する。
この処理は、１００ｍｓ経過する毎に（ステップＳ２１）、ステップＳ２２、Ｓ２３の処理を実行するものである。ステップＳ２２では、上記関数“pwm.getValue()”を実行する。ここでは、この関数は、ＰＷＭデータをＰＷＭ処理オブジェクト（pwm）から取得する処理を実行するものとする。そして、ステップＳ２３では、上記“sendData(data)”を実行することで、上記取得したＰＷＭデータを、主回路のシミュレータ２０へ送信する。
【００８５】
次に、Thread2_3の処理について説明する。
この処理では、まず上記関数“uart.clearRecvDataArea()”を実行する。ここでは、この関数は、上記“UARTData”の受信データ領域をクリアする処理であるものとする（ステップＳ３１）。そして、主回路のシミュレータ２０から送信された“UARTData”を受信したら（ステップＳ３２）、この受信データをＵＡＲＴ処理オブジェクト（uart）に設定する（上記“uart.setRecvData(recvData)”を実行する）（ステップＳ３３）。
【００８６】
ここまでが上記タイミング仕様ＩＤ＝‘２’の処理であり、続いて、上記タイミング仕様ＩＤ＝‘３’の処理を実行する。この処理では、まず、“UARTData”をＵＡＲＴ処理オブジェクト（uart）から取得する（上記“UARTData sendData=uart.getDataToBeSent()”を実行する）（ステップＳ３４）。
【００８７】
続いて、ステップＳ３５では、上記“sendData(data)”を実行することで、上記ステップＳ３４で取得した“UARTData”を、主回路のシミュレータ２０へ送信する。最後に、上記関数“uart.cleanDataAreaToBeSent()”を実行することで、“UARTData”の送信データ領域をクリアする（ステップＳ３６）。
【００８８】
尚、上記“UARTData”の送信データ領域や受信データ領域は、上記各種データ格納領域３２の一部であると見做しても構わない。
以上、本装置で自動的に生成されて制御基板のシミュレータ３０で実行されるデータ送受信処理の一例について説明した。
【００８９】
ここで、上記の通り、本装置では、主回路のシミュレータ２０のデータ送受信処理も自動生成する。この処理は、上記制御基板のシミュレータ３０のデータ送受信処理と関連する処理である。これより、上述したように、データ仕様１２に関しては制御基板と共通の例えば図３（ａ）に示すものを使用する。一方、上記タイミング仕様１３、前処理仕様１４、後処理仕様１５に関しては、主回路のシミュレータ２０用のものを別途作成しておく。ここでは、主回路のシミュレータ２０用のタイミング仕様１３、前処理仕様１４、後処理仕様１５の具体例は、特に示さないが、例えば上記図３（ｂ）、図４（ａ）、（ｂ）に示した制御基板用の場合と略同様にして、開発者等が任意に作成するものである。
【００９０】
そして、これらデータ仕様１２や、主回路のシミュレータ２０用のタイミング仕様１３、前処理仕様１４、後処理仕様１５等に基づいて、例えば図５、図６に示すフローチャート図の処理と同様の処理によって、主回路のシミュレータ２０用のデータ送受信ソフトウェア１６を生成する。
【００９１】
主回路のシミュレータ２０用のデータ送受信ソフトウェア１６の具体例は、特に示さないが、シミュレータ２０においてこのソフトウェア１６を実行する場合の処理フローチャート図を、図１０に示すものとする。
【００９２】
ここで、上記のように、図９の処理と図１０の処理とは、互いに関連している。例えば、制御基板のシミュレータ３０における送信処理と、主回路のシミュレータ２０による受信処理とは、関連している。つまり、例えば、制御基板のシミュレータ３０で上記ステップＳ２３の送信処理により送信されたＰＷＭデータは、主回路のシミュレータ２０における後述するステップＳ４１の受信処理により受信される。
【００９３】
同様に、制御基板のシミュレータ３０における受信処理と、主回路のシミュレータ２０による送信処理とは、関連している。つまり、例えば、主回路のシミュレータ２０で後述するステップＳ５２の処理により送信されたUARTデータは、制御基板のシミュレータ３０において上記ステップＳ３２の処理で受信される。
【００９４】
尚、上記の通り、主回路のシミュレータ２０におけるデータ仕様は、制御基板のシミュレータ３０と共通であるため、新たに作成する必要はない。また、図９の処理（制御基板のシミュレータ３０の処理）と図１０の処理（主回路のシミュレータ２０の処理）とは、互いに異なるプログラムの処理であるため、同一名称の関数（main、Thread1,Thread2_3等）があっても、これらの処理が主回路のシミュレータ２０と制御基板のシミュレータ３０で混同されることはない。
【００９５】
以下、図１０について、簡単に説明するものとする。尚、図１０の処理は、主回路のシミュレータ２０の上記シミュレーション処理部２１によって実行されるものである。
まず、図１０の図上左側に示すように、メイン関数が実行され、２つのスレッド（Thread1,Thread2_3）を起動する。そして、これでメイン関数は終了する。尚、上記の通り、これらThread1,Thread2_3は、図９の２つのスレッドと同一名称であるが、処理内容は異なるものである。
【００９６】
起動されたThread1は、無限ループで図示のステップＳ４１、Ｓ４２の処理を実行する。起動されたThread2_3は、無限ループで図示のステップＳ５１〜Ｓ５６の処理を実行する。
【００９７】
まず、Thread1の処理について説明する。
Thread1の処理は、図示の例では、上記ステップＳ２３で制御基板のシミュレータ３０から送信されてくる上記ＰＷＭデータを受信すると（ステップＳ４１）、この受信データをＰＷＭ処理オブジェクト（pwm）に設定する処理である（ステップＳ４２）。
【００９８】
また、Thread2_3の処理は、図示の例では、まず、“UARTData”をＵＡＲＴ処理オブジェクト（uart）から取得し（ステップＳ５１）、この“UARTData”を制御基板のシミュレータ３０へ送信する（ステップＳ５２）。そして、“UARTData”の送信データ領域をクリアする（ステップＳ５３）。
【００９９】
続いて、“UARTData”の受信データ領域をクリアして（ステップＳ５４）、制御基板のシミュレータ３０が上記ステップＳ３５によって上記“UARTData”を送信してくるのを待つ。そして、制御基板のシミュレータ３０が送信した“UARTData”を受信すると（ステップＳ５５）、この受信データをUART処理オブジェクト（uart）に設定する（ステップＳ５６）。
【０１００】
尚、上記“UARTData”の送信データ領域や受信データ領域は、上記各種データ格納領域２２の一部と見做して構わない。
尚、上記ステップＳ３２、Ｓ４１、Ｓ５５の処理は、所定のデータを受信したら次処理に移行するもの（ブロッキングコール）である。
【０１０１】
尚、上記前処理仕様１４の前処理333に示す関数名の関数のプログラムや、上記後処理仕様１５の後処理343に示す関数名の関数のプログラムは、例えば上記作成されたデータ送受信ソフトウェア１６を、制御基板のシミュレータ３０や主回路のシミュレータ２０に転送する際に一緒に送信するようにしてもよい。あるいは、この様な関数のプログラムは、予めシミュレータ２０、３０に記憶させておくようにしてもよい。
【０１０２】
以上説明したように、ソフトウェア生成装置１０によれば、例えば、図９と図１０に示すような、制御基板のシミュレータ３０と主回路のシミュレータ２０とで相互に関連するデータ送信／受信処理を、自動的に生成することができる。
【０１０３】
尚、上述した一例では、データ送受信ソフトウェア１６（ソースコード）のプログラム言語は、Java言語を例にして説明したが、勿論、この例に限らない。また、制御基板のシミュレータ３０用のソースコードと、主回路のシミュレータ２０用のソースコードとで、プログラム言語が異なっていてもよい。
【０１０４】
また、本実施例では、主回路のシミュレータ２０用のソースコード生成時と制御基板のシミュレータ３０用のソースコード生成に関し、別々にソフトウェア生成装置を動作させた。しかし、ソフトウェア生成装置の１回の動作により、主回路のシミュレータ２０用のソースコードと制御基板のシミュレータ３０用のソースコードの双方を生成および出力してもよい。
【符号の説明】
【０１０５】
１０  ソフトウェア生成装置
１１  ソフトウェア生成メイン処理部
１２  データ仕様
１３  タイミング仕様
１４  前処理仕様
１５  後処理仕様
１６  データ送受信ソフトウェア
２０  主回路のシミュレータ
２１  シミュレーション処理部
２２  各種データ格納領域
３０  制御基板のシミュレータ
３１  シミュレーション処理部
３２  各種データ格納領域
３１１  ＩＤ
３１２  名称
３１３  サイズ
３２１  タイミング仕様ＩＤ
３２２  データ仕様ＩＤ
３２３  「受信または送信」
３２４  タイミング
３３１  前処理仕様ＩＤ
３３２  タイミング仕様ＩＤ
３３３  前処理
３４１  後処理仕様ＩＤ
３４２  タイミング仕様ＩＤ
３４３  前処理
5010  グラフ
5020  ソースコード
5030  ソースコード
5040  ソースコード
【図１】
0006398456.tif 000002
【図２】
0006398456.tif 000003
【図３】
0006398456.tif 000004
【図４】
0006398456.tif 000005
【図５】
0006398456.tif 000006
【図６】
0006398456.tif 000007
【図７】
0006398456.tif 000008
【図８】
0006398456.tif 000009
【図９】
0006398456.tif 000010
【図１０】
0006398456.tif 000011