(57)【要約】【課題】プログラムの処理速度及びオブジェクトコードサイズを改善すること。【解決手段】ＰＣは、科学技術計算ソフトウェアにて作成された計算モデルを、Ｃ言語のソースコードに変換するに際し、１入力１出力、２入力１出力、３入力１出力の各ブロックセット毎に、ブロックセットをマップに置換する必要があるか否かを判断する（Ｓ１４０〜Ｓ２００）。具体的には、該当ブロックセットをマップ化せずにコンパイルしたときのオブジェクトコードサイズと、マップ化してコンパイルしたときのオブジェクトコードサイズとを比較し、マップ化によりサイズが小さくなるかを判断する。そして、サイズが小さくなる場合には（Ｓ１８０でＹｅｓ）、該当ブロックセットをマップのブロックに置換する（Ｓ２１０）。そして、マップ化された計算モデルに基づいて、Ｃ言語のソースコードを生成する（Ｓ２２０）。【選択図】図２
2008003914.tif 000002
【特許請求の範囲】
【請求項１】
変換対象のプログラムを、特定のコンピュータ言語で記述した特定言語プログラムに変換する変換装置であって、
前記変換対象のプログラムに記述された演算式毎に、演算式に対応するマップを組み込む必要があるか否かを判定する判定手段と、
前記変換対象のプログラムに記述された演算式毎に、入力値に対応する出力値を記した演算式と等価な入出力関係を表すマップ、を生成するマップ生成手段と、
前記変換対象のプログラムを、前記特定言語プログラムに変換する変換手段と、
を備え、
前記変換手段は、前記変換対象のプログラムを、前記特定言語プログラムに変換するに際し、前記判定手段によりマップの組込が必要であると判定された各演算式について、演算式を前記特定のコンピュータ言語で表した命令文に代えて、前記マップ生成手段によって生成されたマップを記した前記演算式と等価な処理を実現可能な命令文を、前記特定言語プログラムに組み込むことを特徴とする変換装置。
【請求項２】
前記判定手段は、演算式毎に、演算式を前記特定のコンピュータ言語で表した命令文を前記特定言語プログラムに組み込んだ際の前記特定言語プログラムのオブジェクトコードサイズ、及び、この命令文に代えて前記マップを記した前記演算式と等価な処理を実現可能な命令文を前記特定言語プログラムに組み込んだ際の前記特定言語プログラムのオブジェクトコードサイズを導出し、この導出結果に基づいて、演算式に対応するマップを組み込む必要があるか否かを判定する構成にされていることを特徴とする請求項１記載の変換装置。
【請求項３】
前記判定手段は、演算式毎に、演算式を前記特定のコンピュータ言語で表した命令文を前記特定言語プログラムに組み込んだ際の前記特定言語プログラムについてのコンピュータの処理速度、及び、この命令文に代えて前記マップを記した前記演算式と等価な処理を実現可能な命令文を前記特定言語プログラムに組み込んだ際の前記特定言語プログラムについてのコンピュータの処理速度を推定し、この推定結果に基づいて、演算式に対応するマップを組み込む必要があるか否かを判定する構成にされていることを特徴とする請求項１又は請求項２記載の変換装置。
【請求項４】
変換対象のプログラムを、特定のコンピュータ言語で記述した特定言語プログラムに変換するためのプログラムであって、
コンピュータに、
前記変換対象のプログラムについて、このプログラムに記述された演算式毎に、演算式に対応するマップを組み込む必要があるか否かを判定する判定手段と、
前記変換対象のプログラムに記述された演算式毎に、入力値に対応する出力値を記した前記演算式と等価な入出力関係を表すマップ、を生成するマップ生成手段と、
前記変換対象のプログラムを、前記特定言語プログラムに変換する手段であって、前記判定手段によりマップの組込が必要であると判定された各演算式に関し、演算式を前記特定のコンピュータ言語で表した命令文に代えて、前記マップ生成手段によって生成されたマップを記した前記演算式と等価な処理を実現可能な命令文を、前記特定言語プログラムに組み込む変換手段
としての機能を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変換対象のプログラムを、特定コンピュータ言語のプログラムに変換する変換装置及びプログラムに関する。
【背景技術】
【０００２】
従来知られているように、コンピュータに処理を実行させるためのプログラムは、まず、人間が解釈しやすい言語で作成された後、ＣＰＵが直接解釈・実行可能なマシン語に変換される。周知のように、プログラミング言語（コンピュータ言語）に関しては、よりコンピュータが解釈しやすい言語が低級言語に位置付けられ、人間が解釈しやすい言語が高級言語に位置付けられている。即ち、最も低級な言語は、マシン語であり、これに対して高級言語としては、Ｃ言語等が知られている。
【０００３】
また、技術計算に特化した高級言語としては、ＭＡＴＬＡＢ（登録商標）等の高級言語が知られている。この種の高級言語は、ＧＵＩ（グラフィカルユーザインタフェース）を利用し、機能ブロックの接続関係により、計算モデルを簡単に記述することができることから、車両制御用のプログラム開発等、種々のプログラム開発に広く利用されている（例えば、特許文献１参照）。
【特許文献１】特開２００３−２９６１１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、車両用の電子制御装置に予め組み込まれるプログラム等は、パーソナルコンピュータにインストールされるプログラムとは異なり、記憶容量の限られたＲＯＭに記録される。このため、プログラムの生成に際しては、共通する処理を行うプログラムを、関数化して、プログラムのオブジェクトコードサイズを低減することが行われている。
【０００５】
しかしながら、関数化を採用すると、プログラムの実行に際しては、関数の呼び出しに伴いレジスタやプログラムカウンタ等のデータ退避・復元が行われるため、ＣＰＵによるプログラムの処理速度が悪化する。一方で、車両用の電子制御装置では、高速処理が求められる制御等も存在するため、従来の手法では、プログラムの処理速度及びオブジェクトコードサイズのどちらかを一方を優先し、プログラムを設計することしかできないといった問題があった。
【０００６】
本発明は、こうした問題に鑑みなされたものであり、コンピュータに実行させるプログラムの処理速度及びオブジェクトコードサイズを従来よりも総合的に改善することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
かかる目的を達成するためになされた本発明の変換装置は、変換対象のプログラムを、特定のコンピュータ言語（例えば、変換対象よりも低級言語）のプログラム（即ち、特定言語プログラム）に変換するに際し、判定手段にて、変換対象のプログラムに記述された演算式毎に、演算式に対応するマップを組み込む必要があるか否かを判定し、マップ生成手段にて、演算式毎に、入力値に対応する出力値を記したマップであって、演算式と等価な入出力関係を表すマップを生成する。
【０００８】
また、変換対象のプログラムを特定言語プログラムに変換する変換手段では、判定手段によりマップの組込が必要であると判定された各演算式について、演算式を上記特定のコンピュータ言語で表した命令文に代えて、マップ生成手段によって生成された上記マップを記した演算式と等価な処理を実現可能な命令文を、特定言語プログラムに組み込む。
【０００９】
複雑な演算を行うプログラムでは、高級言語で記述されたプログラムを、単にコンパイルすると、コンパイル後のプログラムのオブジェクトコードサイズが大きくなる。このため、従来では、共通する演算式を関数化し、プログラム全体のオブジェクトコードサイズを抑えていた。しかしながら、この手法を採用すると、関数の呼び出しにより処理のオーバーヘッドが生じ、プログラムの処理速度が遅くなるといった欠点があった。また、関数化して利益があるのは、同種の演算が複数回行われる場合に限られ、従来の手法では、プログラムの全体のオブジェクトコードサイズの抑制に限界があった。
【００１０】
そこで、本発明者は、複雑な演算については、入出力関係を示すマップにて同種の処理を実現したほうが、プログラムのオブジェクトコードサイズを低減することができる可能性が高いことに着目し、所定の基準にてマップ組込の要否を判定して、必要に応じて演算式をマップ化するようにした。複雑な演算については、これをマシン語レベルで見た場合、実行ステップ数も多くなるため、マップ化したほうが、処理の実行速度も改善される可能性が高い。
【００１１】
従って、本発明のように、所定基準が満足された場合に、演算式をマップ化する手法を採用すれば、プログラム実行時の処理速度及びオブジェクトコードサイズを従来よりも総合的に改善することができ、従来よりも好適な実行用プログラム（オブジェクトコード）を、対象装置に搭載することができる。
【００１２】
具体的に、判定手段は、次のように構成されると好ましい。即ち、判定手段は、演算式を上記特定のコンピュータ言語で表した命令文、を特定言語プログラムに組み込んだ際の特定言語プログラムのオブジェクトコードサイズ、及び、この命令文に代えて上記マップを記した演算式と等価な処理を実現可能な命令文を特定言語プログラムに組み込んだ際の特定言語プログラムのオブジェクトコードサイズを導出し、この導出結果に基づいて、演算式に対応するマップを組み込む必要があるか否かを判定する構成にされると好ましい（請求項２）。
【００１３】
このように構成された変換装置によれば、演算式に対応する命令文を特定言語プログラムに組み込んだときの特定言語プログラムのオブジェクトコードサイズ、及び、マップを記した上記演算式と等価な処理を実現可能な命令文を特定言語プログラムに組み込んだときの特定言語プログラムのオブジェクトコードサイズ、の大小関係を評価して、演算式をマップ化するか否か決定するので、オブジェクトコードサイズの観点から、マップ化の適否を精度よく判定することができ、変換対象のプログラムから、実行用プログラムとして、好適なプログラムを生成することができる。
【００１４】
また、判定手段は、次のように構成されてもよい。即ち、判定手段は、演算式毎に、演算式を上記特定のコンピュータ言語で表した命令文を特定言語プログラムに組み込んだ際の特定言語プログラムについてのコンピュータの処理速度、及び、この命令文に代えて上記マップを記した演算式と等価な処理を実現可能な命令文を特定言語プログラムに組み込んだ際の特定言語プログラムについてのコンピュータの処理速度を推定し、この推定結果に基づいて、演算式に対応するマップを組み込む必要があるか否かを判定する構成にされると好ましい（請求項３）。
【００１５】
このように構成された変換装置によれば、演算式に対応した命令文を特定言語プログラムに組み込んだときの処理速度、及び、マップを記した上記演算式と等価な処理を実現可能な命令文を特定言語プログラムに組み込んだときの処理速度、の高低を評価して、演算式をマップ化するか否か決定するので、処理速度の観点から、マップ化の適否を精度良く判定することができ、変換対象のプログラムから、実行用プログラムとして、好適なプログラムを生成することができる。特に、従来技術では、処理速度を優先するとオブジェクトコードサイズの増大は免れなかったが、本発明によれば、マップ化により処理速度を改善しつつ、オブジェクトコードサイズも低減することができるケースもあるので、この発明によれば、コンピュータに実行させるプログラムの処理速度及びオブジェクトコードサイズを従来よりも総合的に改善することができる。
【００１６】
また、上述の変換装置が備える各手段としての機能は、プログラムにより、コンピュータに実現させることができる（請求項４）。このプログラムによれば、上述の変換装置としての機能を、パーソナルコンピュータ等に実現させることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施例について、図面と共に説明する。図１は、本発明が適用された自動コード生成プログラムがインストールされたパーソナルコンピュータ（以下、単に「ＰＣ」と表現する。）１０の構成を表す説明図である。
【００１８】
図１に示すように、本実施例のＰＣ１０は、周知のＰＣと同様、各種プログラムを実行するＣＰＵ１１と、ＣＰＵ１１によるプログラム実行時に作業領域として使用されるＲＡＭ１３と、ブートプログラム等を記憶するＲＯＭ１５と、各種データファイルを記憶するハードディスク装置（ＨＤＤ）１７と、液晶ディスプレイ等で構成される表示部１９と、キーボードやポインティングデバイス等で構成される操作部２１と、ＣＰＵ１１からの指令に従って記録媒体に記録されたデータファイルを読み出し、又、記録媒体にデータファイルを書き込む入出力装置２３と、を備える。尚、記録媒体としては、磁気ディスクや光ディスク、半導体製のメモリカード等を挙げることができる。
【００１９】
このＰＣ１０は、ハードディスク装置１７にインストールされたオペレーティングシステムによって運営され、例えば、操作部２１を通じて入力されるユーザからの指令に従って、ハードディスク装置１７に記録されたアプリケーションプログラムを読み出し、このプログラムに従って、上記ユーザからの指令に対応する処理を実行する。
【００２０】
具体的に、ＰＣ１０は、科学技術計算に特化し、計算モデルの構築・シミュレーション等を行うことが可能な周知のソフトウェア（以下、「科学技術計算ソフトウェア」と表現する。）を、ハードディスク装置１７に有する。尚、この種の科学技術計算ソフトウェアとしては、ＭＡＴＬＡＢ（登録商標）やＳｉｍｕｌｉｎｋ（登録商標）等を挙げることができる。
【００２１】
この科学技術計算ソフトウェアによれば、ブロック線図、即ち、機能ブロックと各機能ブロックの接続関係により計算モデルを構築することができる。また、この科学技術計算ソフトウェアは、インタプリタとしての機能を有し、計算モデルをプログラムとして解釈して、計算モデルに対応する演算を行い、シミュレーションを、ＣＰＵ１１上で実現可能な構成にされている。
【００２２】
即ち、ユーザは、この科学技術計算ソフトウェアをＣＰＵ１１に実行させ、それにより表示部１９に表示されるＧＵＩ構成の編集画面を操作することにより、ブロック線図にて計算モデル（図４参照）を構築することができ、更に、この計算モデルに対応したシミュレーション結果を、ＰＣ１０を通じて得ることができる。この科学技術計算ソフトウェアは、上記の機能を有することから、制御プログラムの開発の際などに用いられる。
【００２３】
但し、この科学技術計算ソフトウェアにより生成される計算モデルは、特殊なコンピュータ言語により表現され、このソフトウェアを通じてインタプリタ方式で実行されるため、ユーザは、この科学技術計算ソフトウェアを通じて生成した計算モデルを、直接、実行用のプログラムとして、計算モデルに対応する演算を行って制御を実現する電子制御装置に組み込むことができない。このような理由から、従来、この種の計算モデルを利用した制御プログラムの開発に際しては、一旦、上記計算モデルを、Ｃ言語などの汎用コンピュータ言語のソースコードに変換した後、適宜、そのソースコードを編集し、その編集後のソースコードを、コンパイルして、電子制御装置に組み込むといったことが行われている。
【００２４】
しかしながら、従来では、この計算モデルをＣ言語のソースコードに変換する際、純粋に計算モデルをＣ言語の記述に置き換えていたため、このようにして生成したソースコードをコンパイルして、制御プログラムを生成した際には、そのオブジェクトコードサイズが大きくなりがちであった。そこで、本実施例では、ソースコードを生成する際、所定条件を満たす演算式をマップ化するようにした。
【００２５】
上述の自動コード生成プログラムは、演算式をマップ化する機能を有した、上記計算モデルをＣ言語のソースコードに変換するためのプログラムであり、本実施例においては、ＰＣ１０のハードディスク装置１７にインストールされている。
【００２６】
次には、この自動コード生成プログラムに従って、ＣＰＵ１１が実行する自動コード生成処理について、図２及び図３を用いて説明する。図２は、操作部２１を通じてユーザからの実行指令が入力されると、ＣＰＵ１１が上記自動コード生成プログラムに従って実行する自動コード生成処理を表すフローチャートである。また、図３は、ＣＰＵ１１が、自動コード生成処理内で実行する対象検索処理を表すフローチャートである。
【００２７】
この自動コード生成処理については、ソースコードの生成対象の具体例を示したほうが、処理の理解が容易になるので、本実施例では、ソースコードの生成対象として、図４に示す計算モデルを例に挙げて説明する。
【００２８】
図４は、クランク角Θ（＝ＴＨＥＴＡ）から、エンジンを構成するシリンダ内のエネルギーＥ及びピストン変位角Ｘを算出する計算モデルを表す図である。具体的に、この計算モデルは、次式
【００２９】
【数１】
2008003914.tif 000003
に従って、シリンダ内のエネルギーＥ及びピストン変位角Ｘを求めるものである。但し、上式に用いられているｖは流速を表し、Ｃは比熱定数を表し、Ｐは圧力を表し、Ｓはピストン断面積を表し、ｎは質量を表し、Ｒはガス定数を表し、Ｈは、クランクシャフトの軸心Ｏからコンロッドの接続点Ｓａまでの長さを表し、Ｌは、接続点Ｓａからコンロッドとピストンとの接続点Ｓｂまでの長さを表す。具体的に、Ｈ，Ｌ，Θ，Ｘの関係は、図５に示す通りである。尚、図４に示す計算モデルでは、サイン関数及びコサイン関数が、多項式近似され、式（１）（２）に示すｖ，Ｐ，Θ，Ｅ，Ｘ以外のパラメータが全て定数として設定され、Ｈ＝２，Ｌ＝１０，Ｃ＝５，Ｓ＝９，ｎ＝１，Ｒ＝０．０８に設定されていることに注意されたい。
【００３０】
ＣＰＵ１１は、図４に示す自動コード生成処理を開始すると、まず、当該自動コード生成処理の実行開始時に、ユーザにより指定されたデータファイルであって、上記科学技術計算ソフトウェアにて作成された計算モデルのデータファイルから、計算モデルの内容を読み出し、この計算モデルを置換対象の計算モデルに設定する（Ｓ１１０）。
【００３１】
また、この処理を終えると、ＣＰＵ１１は、図３に示す対象検索処理を実行する（Ｓ１２０）。尚、対象検索処理は、マップ化の要否を判定するブロックセット（機能ブロックの一群）を、検索するための処理である。
【００３２】
対象検索処理を開始すると、ＣＰＵ１１は、上記置換対象の計算モデルから、１入力１出力のブロックセットを検索し、この検索結果に基づいて、置換対象の計算モデルに１入力１出力のブロックセットがあるか否かを判断する（Ｓ３１０）。具体的に、１入力１出力のブロックセットの検索は、計算モデルに設定された各出力変数について、順に、対応する入力変数を探索することにより、行われる。尚、ここでいうｍ入力１出力のブロックセットとは、入力変数がｍ個、且つ出力変数が１個である演算式を表すブロックセットのことであり、該当する出力変数のブロックに、演算結果が伝達される上流側（入力変数のブロック側）のブロック群の内、入力変数のブロック及び出力変数のブロックを除いたブロック群をいう。
【００３３】
図４に示す計算モデルでは、ブロックの上辺及び下辺に沿って線が描写され、左上に「Ｒ」の添え字が描写されたブロックが入力変数のブロックであり、左上に「Ｗ」の添え字が描写されたブロックが出力変数のブロックである。即ち、図４に示す計算モデルは、パラメータΘ（＝ＴＨＥＴＡ），ｖ，Ｐが入力変数に設定され、パラメータＥ，Ｘが出力変数に設定されたものであり、出力変数Ｅに関して、出力変数がＥ、入力変数がｖ，Ｐ，Θである３入力１出力のブロックセットを備え、出力変数Ｘに関して、出力変数がＸ、入力変数Θである１入力１出力のブロックセットを備える。
【００３４】
Ｓ３１０において、置換対象の計算モデル内に１入力１出力のブロックセットがあると判断すると（Ｓ３１０でＹｅｓ）、ＣＰＵ１１は、Ｓ３２０に移行し、１入力１出力のブロックセットがないと判断すると（Ｓ３１０でＮｏ）、Ｓ３５０に移行する。
【００３５】
また、Ｓ３２０に移行すると、ＣＰＵ１１は、置換対象の計算モデル内に存在する１入力１出力のブロックセットを、今回の自動コード生成処理にて全てマップ化判定対象に設定したか否かを判断する。尚、マップ化判定対象の設定は、Ｓ３３０，Ｓ３７０，Ｓ４１０で行われる。
【００３６】
そして、全てマップ化判定対象に設定したと判断すると（Ｓ３２０でＹｅｓ）、Ｓ３５０に移行する。一方、マップ化判定対象に設定していない１入力１出力のブロックセットが存在する場合には、Ｓ３２０でＮｏと判断して、Ｓ３３０に移行する。
【００３７】
Ｓ３３０に移行すると、ＣＰＵ１１は、マップ化判定対象として未だ設定されていない１入力１出力のブロックセットの内、ブロック数が最大のブロックセットを、マップ化判定対象に設定する。その後、設定したマップ化判定対象のブロックセットが、マップ化しても他のブロックとの接続関係を保つことのできるブロックセットであるか否かを判断する（Ｓ３４０）。即ち、Ｓ３４０では、マップ化判定対象のブロックセットを、マップを表す単一のブロックに置換しても、その計算モデルにおける他のブロック（外部ブロック）との接続が切断されないか否かを判断する。
【００３８】
例えば、１つの入力変数に対して２つの出力変数が設定されている計算モデルでは、入力変数のブロックから一方の出力変数のブロックへの経路の途中で、他方の出力変数のブロックへ繋がる接続線が存在するが、この場合には、該当ブロックセットを、マップ化すると他のブロックとの接続が切断されてしまうケースがある。従って、このケースに該当するブロックセットがマップ化判定対象のブロックセットに設定されている場合には、Ｓ３４０においてＮｏと判断する。
【００３９】
Ｓ３４０において、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットではないと判断すると、ＣＰＵ１１は、Ｓ３２０に移行し、直前のＳ３３０でマップ化判定対象に設定したブロックセットを、設定済のブロックセットとして取扱って、再度、計算モデル内に存在する１入力１出力のブロックセットを、全てマップ化判定対象に設定したか否かを判断する。そして、直前のＳ３３０でマップ化判定対象に設定したブロックセット以外の１入力１出力のブロックセットであって、未だマップ化判定対象に設定されていないブロックセットが存在する場合、ＣＰＵ１１は、Ｓ３２０でＮｏと判断し、Ｓ３３０においてマップ化判定対象を再設定する。そして、Ｓ３４０に移行する。
【００４０】
また、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットであると判断すると（Ｓ３４０でＹｅｓ）、ＣＰＵ１１は、マップ化判定対象の設定状態を保持した状態で、当該対象検索処理を終了し、Ｓ１３０に移行する。
【００４１】
この他、Ｓ３５０に移行すると、ＣＰＵ１１は、上記置換対象の計算モデルから、２入力１出力のブロックセットを検索し、この検索結果に基づいて、置換対象の計算モデル内に２入力１出力のブロックセットがあるか否かを判断する（Ｓ３５０）。そして、計算モデル内に２入力１出力のブロックセットがあると判断すると（Ｓ３５０でＹｅｓ）、Ｓ３６０に移行し、２入力１出力のブロックセットがないと判断すると（Ｓ３５０でＮｏ）、Ｓ３９０に移行する。
【００４２】
Ｓ３６０に移行すると、ＣＰＵ１１は、置換対象の計算モデル内に存在する２入力１出力のブロックセットを、今回の自動コード生成処理にて全てマップ化判定対象に設定したか否かを判断する。そして、全てマップ化判定対象に設定したと判断すると（Ｓ３６０でＹｅｓ）、Ｓ３９０に移行し、マップ化判定対象に設定されていない２入力１出力のブロックセットが存在する場合には、Ｓ３６０でＮｏと判断して、Ｓ３７０に移行する。
【００４３】
また、Ｓ３７０に移行すると、ＣＰＵ１１は、マップ化判定対象として未だ設定されていない２入力１出力のブロックセットの内、ブロック数が最大のブロックセットを、マップ化判定対象に設定する。その後、設定したマップ化判定対象のブロックセットが、マップ化しても他のブロックとの接続関係を保つことのできるブロックセットであるか否かを判断する（Ｓ３８０）。
【００４４】
Ｓ３８０において、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットではないと判断すると、ＣＰＵ１１は、Ｓ３６０に移行し、直前のＳ３７０でマップ化判定対象に設定したブロックセットを、設定済のブロックセットとして取扱って、再度、計算モデル内に存在する２入力１出力のブロックセットを、全てマップ化判定対象に設定したか否かを判断する。
【００４５】
そして、直前のＳ３７０でマップ化判定対象に設定したブロックセット以外の２入力１出力のブロックセットであって、未だマップ化判定対象に設定していないブロックセットが存在する場合、ＣＰＵ１１は、Ｓ３６０でＮｏと判断し、Ｓ３７０においてマップ化判定対象を再設定し、Ｓ３８０に移行する。そして、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットであると判断すると（Ｓ３８０でＹｅｓ）、マップ化判定対象の設定状態を保持した状態で、当該対象検索処理を終了し、Ｓ１３０に移行する。
【００４６】
その他、Ｓ３９０に移行すると、ＣＰＵ１１は、上記置換対象の計算モデルから、３入力１出力のブロックセットを検索し、この検索結果に基づいて、置換対象の計算モデル内に３入力１出力のブロックセットがあるか否かを判断する。そして、計算モデル内に３入力１出力のブロックセットがあると判断すると（Ｓ３９０でＹｅｓ）、Ｓ４００に移行し、３入力１出力のブロックセットがないと判断すると（Ｓ３９０でＮｏ）、Ｓ４３０に移行する。
【００４７】
Ｓ４００に移行すると、ＣＰＵ１１は、計算モデル内に存在する３入力１出力のブロックセットを、今回の自動コード生成処理にて全てマップ化判定対象に設定したか否かを判断する。そして、全てマップ化判定対象に設定したと判断すると（Ｓ４００でＹｅｓ）、Ｓ４３０に移行し、マップ化判定対象に設定されていない３入力１出力のブロックセットが存在する場合には、Ｓ４００でＮｏと判断して、Ｓ４１０に移行する。
【００４８】
また、Ｓ４１０に移行すると、ＣＰＵ１１は、マップ化判定対象として未だ設定されていない３入力１出力のブロックセットの内、ブロック数が最大のブロックセットを、マップ化判定対象に設定する。その後、設定したマップ化判定対象のブロックセットが、マップ化しても他のブロックとの接続関係を保つことのできるブロックセットであるか否かを判断する（Ｓ４２０）。尚、図４に示す計算モデルにおいて、３入力１出力のブロックセットは、接続関係を保つことのできないブロックセットに該当する。
【００４９】
Ｓ４２０において、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットではないと判断すると、ＣＰＵ１１は、Ｓ４００に移行し、１入力１出力のブロックセット及び２入力１出力のブロックセットの場合と同様の処理を行う。一方、Ｓ４２０において、マップ化判定対象のブロックセットがマップ化しても他のブロックとの接続関係を保つことのできるブロックセットであると判断すると、ＣＰＵ１１は、マップ化判定対象の設定状態を保持した状態で、当該対象検索処理を終了し、Ｓ１３０に移行する。
【００５０】
この他、ＣＰＵ１１は、Ｓ４３０に移行すると、置換対象の計算モデル内に設定すべきマップ化判定対象のブロックセットが存在しないため、マップ化判定対象をクリアし、マップ化判定対象がないと判定する。その後、当該対象検索処理を終了して、Ｓ１３０に移行する。
【００５１】
また、Ｓ１３０に移行すると、ＣＰＵ１１は、直前のＳ１２０にて実行した対象検索処理の結果に基づき、マップ化判定対象が存在するか否かを判断する。尚、対象検索処理にてマップ化判定対象がないと判定された場合、ＣＰＵ１１は、マップ化判定対象が存在しないと判断し（Ｓ１３０でＮｏ）、それ以外の場合には、マップ化判定対象が存在すると判断する（Ｓ１３０でＹｅｓ）。
【００５２】
また、マップ化判定対象が存在すると判断すると（Ｓ１３０でＹｅｓ）、ＣＰＵ１１は、Ｓ１４０に移行し、置換対象の計算モデルをＣ言語で記述して、Ｃ言語のソースコードを生成し、更に、このソースコードをコンパイルして、オブジェクトコードを生成する。
【００５３】
また、この処理を終えると、ＣＰＵ１１は、Ｓ１５０にて、置換対象の計算モデルを複製し、この複製したモデルにおいて、マップ化判定対象のブロックセットをマップ化し、検査対象の計算モデルを新たに生成する。即ち、マップ化判定対象のブロックセットが示す演算式と等価な入出力関係を表すマップのブロックを生成し、複製したモデルにおいて、上記マップ判定対象のブロックセットを、この生成したマップのブロックに置換する。
【００５４】
具体的に、Ｓ１５０におけるマップの生成方法は、次の通りである。
マップの生成に際して、ＣＰＵ１１は、まず、マップ判定対象のブロックセットに対応する各入力変数のブロックに付加されている属性情報を解析し、属性情報が示す各入力変数の下限値Ｄｍｉｎ及び上限値Ｄｍａｘ並びに精度Δを識別する。
【００５５】
そして、下限値Ｄｍｉｎから上限Ｄｍａｘまでの値を、間隔Δ毎に採り、これらを、対応する変数の入力値として設定する。例えば、図４では、入力変数Θの下限値Ｄｍｉｎが０．２であり、上限値Ｄｍａｘが６．０であり、精度が０．２であることから、入力変数がΘ、出力変数がＸのブロックセットをマップ化する場合、入力値として、０．２，０．４，０．６，…，５．８，６．０を設定する。即ち、入力値として、Ｄｍｉｎ＋ｉ×Δを設定する（ｉ＝０，１，２，…）。
【００５６】
そして、各入力値Ｄｍｉｎ＋ｉ×Δを、マップ化判定対象のブロックセットに入力し、対応する値が入力された場合の上記マップ化判定対象のブロックセットの出力値を求める。例えば、マップ化判定対象のブロックセットが、１入力１出力のブロックセットであり、入出力関係が、入力変数Ｘ１、出力変数Ｙとして、関数Ｙ＝Ｆ（Ｘ１）で表される場合には、出力値Ｙ＝Ｆ（Ｘ１＝Ｄｍｉｎ＋ｉ×Δ）を、各入力値Ｘ１＝Ｄｍｉｎ＋ｉ×Δ（ｉ＝０，１，２，…）について求める。
【００５７】
また、マップ化判定対象のブロックセットが、２入力１出力のブロックセットであり、入出力関係が、入力変数Ｘ１，Ｘ２、出力変数Ｙとして、関数Ｙ＝Ｆ（Ｘ１，Ｘ２）で表される場合には、出力値Ｙ＝Ｆ（Ｘ１＝Ｄｍｉｎ１＋ｉ×Δ１，Ｘ２＝Ｄｍｉｎ２＋ｊ×Δ２）を、入力値Ｘ１＝Ｄｍｉｎ１＋ｉ×Δ１（ｉ＝０，１，２，…），Ｘ２＝Ｄｍｉｎ２＋ｊ×Δ２（ｊ＝０，１，２，…）の組合せ毎に求める。尚、Ｄｍｉｎ１は、入力変数Ｘ１の下限値を表し、Δ１は、入力変数Ｘ１の精度を表す。また、Ｄｍｉｎ２は、入力変数Ｘ２の下限値を表し、Δ２は、入力変数Ｘ２の精度を表す。
【００５８】
そして、求めた各出力値Ｙを、出力変数Ｙのブロックの属性情報が示す精度に対応する桁数に調整する。例えば、図４では、出力変数Ｘの精度が０．００１に設定されていることから、この場合には、出力値を、小数点以下３桁に調整する。そして、入力値Ｘ１，Ｘ２，…，の組合せと対応付けて、この組合せに対応する桁数調整後の出力値Ｙ１を記述して、マップ化判定対象のブロックセットに対応するマップを生成する。
【００５９】
また、この処理を終えると、ＣＰＵ１１は、検査対象の計算モデルにおけるマップ化判定対象のブロックセットを、上記科学技術計算ソフトウェアを利用して、上記マップを表すブロックに置換する。尚、図６は、図４に示す計算モデルにおける、入力変数がΘ、出力変数がＸのブロックセットを、マップ化した場合の計算モデルの構成を表す図である。
【００６０】
上述のようにＳ１５０において、マップ化判定対象のブロックセットを、上記マップのブロックに置換すると、ＣＰＵ１１は、Ｓ１６０に移行し、マップ化後の検査対象の計算モデルを、Ｃ言語のソースコードに置換し、更に、このソースコードをコンパイルして、対応するオブジェクトコードを生成する。
【００６１】
尚、本実施例の科学技術計算ソフトウェアにおいて、マップのブロックは、そのブロックに設定された入出力関係に従って、入力値に対応する値を出力することをＣＰＵに命令するブロックとして取り扱われている。従って、上記検査対象の計算モデルを、Ｃ言語のソースコードに置換した際には、マップのブロックに対応するコードとして、上述したマップのブロックと等価な処理を、ＣＰＵ１１に実行させるためのコードがＣ言語で記述される。具体的には、マップに従って入力値に対応する値を出力値として返す処理を、ＣＰＵ１１に実行させるためのコード（命令文）がＣ言語で記述される。
【００６２】
図７（ａ）は、図４に示す計算モデルにおける、入力変数がΘ、出力変数がＸのブロックセットを、マップ化せずに、Ｃ言語に変換した場合のソースコードを表す図であり、図７（ｂ）は、図４に示す計算モデルにおける、入力変数がΘ、出力変数がＸのブロックセットに対応するマップのブロックを、Ｃ言語に変換した場合のソースコードを表す図である。
【００６３】
即ち、図４に示す計算モデルにおける、入力変数がΘ、出力変数がＸのブロックセットをマップ化判定対象のブロックセットに設定し、Ｓ１４０及びＳ１６０で、ソースコードを生成した場合、Ｓ１６０で生成したソースコードは、Ｓ１４０にて生成したソースコードの内、図７（ａ）に示す記述が、図７（ｂ）に変更されたものとなる。
【００６４】
また、Ｓ１６０での処理を終えると、ＣＰＵ１１は、Ｓ１６５に移行し、当該自動コード生成処理の実行指令時に、ユーザから実行モードとして、速度優先モードが指定されたか否かを判断する。そして、速度優先モードが指定されたと判断すると（Ｓ１６５でＹｅｓ）、Ｓ１９０に移行し、速度優先モードが指定されていないと判断すると（Ｓ１６５でＮｏ）、Ｓ１７０に移行する。
【００６５】
Ｓ１７０に移行すると、ＣＰＵ１１は、Ｓ１４０にて生成したオブジェクトコードのサイズＺａと、Ｓ１６０で生成したオブジェクトコードのサイズＺｂとを算出し、算出したサイズＺａ，Ｚｂを比較して、サイズＺｂがサイズＺａ未満であるか否かを判断する（Ｓ１８０）。そして、サイズＺｂがサイズＺａ未満であると判断すると（Ｓ１８０でＹｅｓ）、Ｓ２１０に移行し、サイズＺｂがサイズＺａ以上であると判断すると（Ｓ１８０でＮｏ）、Ｓ１８５に移行する。
【００６６】
Ｓ１８５に移行すると、ＣＰＵ１１は、当該自動コード生成処理の実行指令時に、ユーザから実行モードとして、サイズ優先モードが指定されたか否かを判断する。そして、サイズ優先モードが指定されたと判断すると（Ｓ１８５でＹｅｓ）、Ｓ１２０に移行し、サイズ優先モードが指定されていない、即ち、実行モードの指定がなされていないと判断すると（Ｓ１８５でＮｏ）、Ｓ１９０に移行する。
【００６７】
また、Ｓ１９０に移行すると、ＣＰＵ１１は、Ｓ１４０にて生成したオブジェクトコードの実行ステップ数Ｎａと、Ｓ１６０で生成したオブジェクトコードの実行ステップ数Ｎｂとを算出する。尚、図８は、図７（ａ）に示すソースコードに対応するアセンブラ記述の一部を表すものである。Ｓ１９０での処理を、オブジェクトコードと一対一で対応するアセンブラ記述に基づいて説明すると、Ｓ１９０では、実行ステップ数として、図８に示すように、命令の数をカウントする。
【００６８】
そして、Ｓ１９０での処理を終えると、ＣＰＵ１１は、実行ステップ数Ｎｂが実行ステップ数Ｎａ未満であるか否かを判断し（Ｓ２００）、実行ステップ数Ｎｂが実行ステップ数Ｎａ未満であると判断すると（Ｓ２００でＹｅｓ）、Ｓ２１０に移行する。尚、実行ステップ数は、処理速度と概ね反比例の関係にあるので、Ｓ２００での判断を、処理速度の観点から説明すれば、Ｓ１６０で生成したオブジェクトコードの処理速度が、Ｓ１４０で生成したオブジェクトコードの処理速度より高い場合には、Ｓ２００でＹｅｓと判断し、Ｓ１６０で生成したオブジェクトコードの処理速度が、Ｓ１４０で生成したオブジェクトコードの処理速度以下である場合には、Ｓ２００でＮｏと判断することになる。
【００６９】
その他、Ｓ１８０又はＳ２００でＹｅｓと判断し、Ｓ２１０に移行すると、ＣＰＵ１１は、置換対象の計算モデルにおいて、マップ化判定対象のブロックセットを、検査対象の計算モデルと同様に、上記ブロックセットが示す演算式と等価な処理を実現可能なマップのブロックに置換する。その後、Ｓ１２０に移行する。また、再度実行するＳ１２０では、Ｓ２１０により編集された置換対象の計算モデルを用いて、図３に示す上述の対象検索処理を行う。即ち、一部がマップ化された置換対象の計算モデルから、上述の条件を満足するブロックセットを検索し、該当ブロックセットがある場合には、該当ブロックセットから適当なブロックセットを、マップ化判定対象に設定する。
【００７０】
一方、Ｓ２００において、実行ステップ数Ｎｂが実行ステップ数Ｎａ以上であると判断すると（Ｓ２００でＮｏ）、ＣＰＵ１１は、マップ化判定対象のブロックセットを、置換対象の計算モデルにおいてマップ化することなく、Ｓ１２０に移行する。そして、再度実行するＳ１２０では、この置換対象の計算モデルを用いて、上述の対象検索処理を行い、必要に応じて新たなマップ化判定対象を設定する。
【００７１】
この他、ＣＰＵ１１は、対象検索処理において、マップ化判定対象がないと判定されると、Ｓ１３０でＮｏと判断して、Ｓ２２０に移行する。また、Ｓ２２０では、Ｓ２１０の処理により編集された置換対象の計算モデルを、Ｃ言語のソースコードに変換し、この計算モデルに対応するＣ言語のソースコードを、データファイルに格納して、このデータファイルを、ハードディスク装置１７に書き込む。即ち、計算モデルに対応するＣ言語のソースコードを、ファイル出力する。その後、当該自動コード生成処理を終了する。
【００７２】
以上、本発明の実施例について説明したが、本実施例では、変換対象のプログラムとしての上記科学技術計算ソフトウェアにて作成された計算モデルを、Ｃ言語のソースコードに変換するに際し、１入力１出力、２入力１出力、３入力１出力の各ブロックセット毎に、ブロックセットが示す演算式に対応するマップを組み込む必要があるか否かを判定し（Ｓ１４０〜Ｓ２００）、マップの組込が必要であると判定した各ブロックセットについては、ブロックセットを純粋にＣ言語で記述した命令文に代えて、入力値に対応する出力値を記した該当ブロックセットと等価な入出力関係を表すマップを記したＣ言語の命令文であって、該当ブロックセットと等価な処理を実現可能なＣ言語の命令文を、計算モデルに対応するＣ言語のソースコードに組み込むようにした（Ｓ２１０，Ｓ２２０）。
【００７３】
具体的に、本実施例では、マップ化しなかった場合のオブジェクトコードのサイズＺａと、マップ化した場合のオブジェクトコードのサイズＺｂとを算出し（Ｓ１７０）、この算出結果に基づいて、実際に、該当するブロックセットをマップ化するか否かを判定するようにした（Ｓ１８０）。
【００７４】
従って、本実施例によれば、科学技術計算ソフトウェアにて構築された計算モデルに対応するＣ言語のソースコードとして、コンパイルした際のデータ量の少ないソースコードを、ユーザに提供することができる。即ち、本実施例の自動コード生成処理プログラムを用いれば、ユーザは、従来よりもオブジェクトコードサイズの小さい制御プログラムを生成することができ、これを電子制御装置に搭載することで、電子制御装置のＲＯＭの記憶容量を抑えることができる。
【００７５】
また、オブジェクトコードサイズが小さければ、オブジェクトコードの処理速度も向上する可能性が高いため、本実施例の自動コード生成処理プログラムを用いれば、ユーザは、従来よりも処理負荷の小さい制御プログラムを生成することができる。
【００７６】
その他、本実施例によれば、マップ化しなかった場合のオブジェクトコードの実行ステップ数Ｎａと、マップ化した場合のオブジェクトコードの実行ステップ数Ｎｂとを算出し（Ｓ１９０）、この算出結果に基づいて、該当するブロックセットをマップ化するか否かを判定するようにした（Ｓ２００）。従って、本実施例の自動コード生成処理プログラムを用いれば、ユーザは、従来よりも処理速度の点で優れた制御プログラムを生成することができる。
【００７７】
尚、本実施例では、実行モードの指定がない場合、オブジェクトコードサイズＺｂ≧オブジェクトコードサイズＺａであっても、実行ステップ数Ｎｂ＜実行ステップ数Ｎａであれば、対応するブロックセットをマップ化するようにして、処理速度の向上を図るようにした。この場合には、マップ化しない場合よりも、マップ化したほうがオブジェクトコードサイズが増えてしまうという結果を生じるが、オブジェクトコードサイズがマップ化により低減されるものについては、処理速度も向上する可能性が非常に高いので、このような場合（実行モードの指定がない場合）には、処理速度の改善を優先させながら、全体のオブジェクトコードサイズを、極力抑えることができる。即ち、オブジェクトコードサイズ及び処理速度に関して、総合的に優れた制御プログラムを生成することができる。
【００７８】
尚、本発明の特定言語プログラムは、本実施例において、Ｃ言語のソースコードに対応し、判定手段は、Ｓ１２０〜Ｓ２００の処理にて実現されている。また、マップ生成手段は、Ｓ１５０の処理にて実現され、変換手段は、Ｓ２１０，Ｓ２２０の処理にて実現されている。
【００７９】
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では深く言及しなかったが、マップ化により生成されるＣ言語のソースコードにおいては、マップ化前のブロックセットの演算結果と、マップ化後の演算結果とを、十分に近似させるために、マップ補間の処理ステップを組み込むと好ましい。この場合には、マップ補間を実現可能な関数を呼び出し、この関数にマップと入力値とを与えて出力値を得る処理をＣＰＵが実行するように、ソースコードを記述すればよい。
【００８０】
その他、上記実施例では、ｍ入力１出力のブロックセットの内、１入力１出力、２入力１出力、３入力１出力のブロックセットを、選択的に、マップ化判定対象に設定するようにしたが、これは、入力変数の少ないブロックセット程、マップ化すると、処理速度及びオブジェクトコードサイズの点で、効果があるためである。従って、効果の大小に関係なくマップ化の利益を得たい場合には、全てのブロックセットを、マップ化判定対象に設定して、自動コード生成処理を実行するようにしてもよい。
【００８１】
また、上記実施例では、車両制御に供される電子制御装置の制御プログラムを生成する際に用いられる計算モデルを、具体例に挙げて、自動コード生成処理の内容を説明したが、本発明は、車両用の電子制御装置に組み込まれる制御プログラムの開発の他、種々のプログラム開発に用いることができる。
【図面の簡単な説明】
【００８２】
【図１】本発明が適用されたＰＣ１０の構成を表すブロック図である。
【図２】ＣＰＵ１１が実行する自動コード生成処理を表すフローチャートである。
【図３】ＣＰＵ１１が実行する対象検索処理を表すフローチャートである。
【図４】シリンダ内のエネルギーＥ及びピストン変位角Ｘを算出する計算モデルの一例を示した図である。
【図５】計算モデルで用いられるパラメータの関係を記した図である。
【図６】ブロックセットをマップ化した場合の計算モデルの構成を表した図である。
【図７】マップ化しない場合のソースコード（ａ）及びマップ化した場合のソースコード（ｂ）を表す図である。
【図８】オブジェクトコードの実行ステップ数の算出方法に関する説明図である。
【符号の説明】
【００８３】
１０…ＰＣ、１１…ＣＰＵ、１３…ＲＡＭ、１５…ＲＯＭ、１７…ハードディスク装置、１９…表示部、２１…操作部、２３…入出力装置
【図１】
2008003914.tif 000004
【図２】
2008003914.tif 000005
【図３】
2008003914.tif 000006
【図４】
2008003914.tif 000007
【図６】
2008003914.tif 000008
【図７】
2008003914.tif 000009
【図８】
2008003914.tif 000010
【図５】
2008003914.tif 000011