(57)【要約】【課題】モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようにする。【解決手段】コード生成ツール２が、ＴＬＣファイルに記述された変換規則に従って、ソースコードを生成する元のモデル中から、ゼロ除算候補部（本実施形態においては除算部）を識別し、また当該ゼロ除算候補部のゼロ除算に対処するソースコードを生成する。【選択図】        図２
2004252841.tif 000002
【特許請求の範囲】
【請求項１】
モデルに基づいてソースコードを生成するソースコード生成装置において、
前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別するゼロ除算識別手段と、
前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成するゼロ除算対処コード生成手段と、を備えたソースコード生成装置。
【請求項２】
前記ゼロ除算識別手段は、除算を含む除算部を、前記モデル中のゼロ除算候補部として識別することを特徴とする請求項１に記載のソースコード生成装置。
【請求項３】
前記ゼロ除算識別手段は、前記除算部における前記除算の分母が可変値の場合に、前記除算部を前記モデル中のゼロ除算候補部として識別することを特徴とする請求項２に記載のソースコード生成装置。
【請求項４】
前記ゼロ除算識別手段は、前記モデルに含まれる、前記モデル中の前記ゼロ除算候補部の所在に関する情報に基づいて、前記モデル中のゼロ除算候補部を識別することを特徴とする請求項１に記載のソースコード生成装置。
【請求項５】
前記モデル中の前記ゼロ除算候補部の所在に関する情報は、前記モデル中の特定の部分のゼロ除算可能性の有無を示す情報を含むことを特徴とする請求項４に記載のソースコード生成装置。
【請求項６】
前記モデル中の前記ゼロ除算候補部の所在に関する情報は、前記モデル中の除算を含む除算部の分母の値域を示す情報を含むことを特徴とする請求項４または５に記載のソースコード生成装置。
【請求項７】
前記ゼロ除算対処コード生成手段が生成するゼロ除算に対処するソースコードは、ゼロ除算に対処するアルゴリズムを有するライブラリをコールすることを特徴とする請求項１ないし６のいずれか１つに記載のソースコード生成装置。
【請求項８】
前記ゼロ除算対処コード生成手段が生成するゼロ除算に対処するソースコードは、ゼロ除算に対処するアルゴリズムを直接有することを特徴とする請求項１ないし６のいずれか１つに記載のソースコード生成装置。
【請求項９】
前記ゼロ除算対処コード生成手段は、切り替え情報に基づいて、生成するゼロ除算に対処するソースコードを、ゼロ除算に対処するアルゴリズムを有するライブラリをコールするものにするか、あるいはゼロ除算に対処するアルゴリズムを直接有するものにするかを切り替えることを特徴とする請求項１ないし６のいずれか１つに記載のソースコード生成装置。
【請求項１０】
前記ゼロ除算対処コード生成手段は、前記ゼロ除算に対処するソースコードとして、ゼロ除算の演算結果を固定値とするソースコードを生成することを特徴とする請求項１ないし６のいずれか１つに記載のソースコード生成装置。
【請求項１１】
前記ゼロ除算対処コード生成手段は、前記ゼロ除算に対処するソースコードとして、前記除算部におけるゼロ除算の演算結果を、前記除算部におけるゼロ除算でない最近の除算結果と同じものにするソースコードを生成することを特徴とする請求項１ないし７のいずれか１つに記載のソースコード生成装置。
【請求項１２】
コンピュータを、モデルに基づいてソースコードを生成する機能を実現させるソースコード生成プログラムにおいて、前記コンピュータを、
前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別するゼロ除算識別手段、および
前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成するゼロ除算対処コード生成手段、として機能させるためのソースコード生成プログラム。
【請求項１３】
モデルに基づいてソースコードを生成するソースコード生成方法であって、
前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別する手順と、
前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成する手順と、を備えたソースコード生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、モデルによるプログラムの開発において用いられるソースコード生成装置、ソースコード生成プログラム、ソースコード生成方法に関するものである。
【０００２】
【従来の技術】
従来、自動車制御のための処理装置、例えばエンジンＥＣＵの作動のためのプログラムにおいては、開発者が直接そのプログラムのソースコードを記述せず、目的とするプログラムの機能をモデルとして記述する場合がある。開発者は、ワークステーション、パーソナルコンピュータ等において実行されるモデルに対応したモデル開発環境用のプログラムを用いて、そのモデルの動作の確認および試験を行い、更にそのモデルからソースコードを生成する。モデルからソースコードを生成する機能を担うプログラムをコード生成ツールと呼ぶ。コード生成ツールは、最初からモデル開発環境に統合されている場合もあれば、追加モジュールとしてモデル開発環境に後から組み込まれる場合もある。
【０００３】
コード生成ツールの一例としては、Ｓｉｍｕｌｉｎｋ（登録商標）がある。Ｓｉｍｕｌｉｎｋ（登録商標）においては、開発者は目的とするプログラムの機能を、ブロックと呼ばれる機能単位の組み合わせとして記述する。この組み合わされたブロックの集合体がモデルである。Ｓｉｍｕｌｉｎｋ（登録商標）のブロックとしては、例えばサイン関数を生成するブロック、ファイルからデータを読み出すブロック、入力されたデータに対する特定の四則演算を行うブロック等がある。
【０００４】
このように、プログラム開発において、開発者がモデルを生成し、コード生成ツールによってモデルからソースコードが生成され、最終的にソースコードからプログラムが生成されるという手順を取ることによって、いくつかの有益な効果を得ることができる。
【０００５】
例えば、ソースコードよりもモデルを見た方が、人にとって目的とするプログラムの制御内容を理解することが容易である。これは、開発者がソースコードの詳細なロジックを記述せず、制御機能を記述するだけで目的とするプログラムを生成するという、モデルによる開発の趣旨からも明らかである。
【０００６】
【発明が解決しようとする課題】
図９に、エンジンＥＣＵにおけるある四則演算の機能を実現するモデルを例示する。これは、エンジンにおける燃料噴射の量を補正するための機能のモデルである。このモデルは、基本噴射量、補正係数１、補正係数２という３つの値の入力に対して、（基本噴射量  ×  補正係数１  ÷  補正係数２）という演算を行い、その結果を噴射量として出力する機能を記述している。ここで、長方形で示され、入力に応じて出力を行う部分がブロック５１である。
【０００７】
図９においては、補正係数２が除算の分母である。この分母にゼロが入力された場合、一般に出力結果は非数、すなわち数値でない値となってしまう。実際にこのような除算機能を含むプログラムがエンジンＥＣＵ内で実行されるときには、そのような値が出力された場合、エンジンＥＣＵが制御不能に陥ってしまう可能性がある。
【０００８】
この可能性を回避するには、分母すなわち補正係数２にゼロが入力された場合に対応できるようにプログラムを設計しなければならない。図９の例に代えて、ゼロ除算への対処を取り入れたモデルを図１０に示す。図１０中、楕円で囲んだ部分がゼロ除算に対応するために付加された部分である。！＝とラベルされているブロックは、２つの入力の値が異なっていれば真を、同じであれば偽を出力するブロックである。
【０００９】
ブロック５２は、ゼロの値を出力する。ブロック５３は１の値を出力する。ブロック５４は、補正係数２とブロック５２からの入力を比較し、それらの値が異なっていれば真値を出力し、同じであれば偽値を出力する。ブロック５５は、ブロック５３からの入力５６、ブロック５４からの入力５７、補正係数２の入力５８を受け、入力５７が真値であれば入力５８を出力し、入力５７が偽値であれば入力５６を出力する。したがって、ブロック５２、５３、５４によって、補正係数２がゼロ以外の場合、ブロック５１には補正係数そのものが入力され、補正係数２がゼロの場合、ブロック５１には１が入力される。このようにすることで、ブロック５１の出力が非数となることがなくなる。
【００１０】
しかし、このようにゼロ除算に対応する部分をモデル中に記述すると、ゼロ除算対応という本来のエンジン制御機能とは直接関係のないロジックのために多数のブロックを記述する必要が発生し、結果としてモデルを用いることによる利点である可読性の良さが損なわれる。
【００１１】
本発明は上記点に鑑みて、モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようにすることを目的とする。
【００１２】
【課題を解決するための手段】
上記目的を達成するための請求項１に記載の発明は、モデルに基づいてソースコードを生成するソースコード生成装置において、前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別するゼロ除算識別手段と、前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成するゼロ除算対処コード生成手段と、を備えたソースコード生成装置である。
【００１３】
これによって、ソースコードを生成する元のモデル中から、ゼロ除算手段がゼロ除算候補部を識別し、またゼロ除算対処コード生成手段が、当該ゼロ除算候補部のゼロ除算に対処するソースコードを生成するので、モデルの開発者はモデルにゼロ除算を考慮してモデルを作成する必要がない。従って、モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようになる。
【００１４】
なお、「ゼロ除算に対処する」とは、「ゼロ除算があっても非数を出力しない」ことをいう。
【００１５】
また、請求項２に記載の発明は、請求項１に記載のソースコード生成装置において、前記ゼロ除算識別手段は、除算を含む除算部を、前記モデル中のゼロ除算候補部として識別することを特徴とする。
【００１６】
また、請求項３に記載の発明は、請求項２に記載のソースコード生成装置において、前記ゼロ除算識別手段は、前記除算部における前記除算の分母が可変値の場合に、前記除算部を前記モデル中のゼロ除算候補部として識別することを特徴とする。
【００１７】
なお、可変値とは、変数および後述する適合定数を含む概念である。
【００１８】
また、請求項４に記載の発明は、請求項１に記載のソースコード生成装置において、前記ゼロ除算識別手段は、前記モデルに含まれる、前記モデル中の前記ゼロ除算候補部の所在に関する情報に基づいて、前記モデル中のゼロ除算候補部を識別することを特徴とする。
【００１９】
また、請求項５に記載の発明は、請求項４に記載のソースコード生成装置において、前記モデル中の前記ゼロ除算候補部の所在に関する情報は、前記モデル中の特定の部分のゼロ除算可能性の有無を示す情報を含むことを特徴とする。
【００２０】
また、請求項６に記載の発明は、請求項４または５に記載のソースコード生成装置において、前記モデル中の前記ゼロ除算候補部の所在に関する情報は、前記モデル中の除算を含む除算部の分母の値域を示す情報を含むことを特徴とする。
【００２１】
また、請求項７に記載の発明は、請求項１ないし６のいずれか１つに記載のソースコード生成装置において、前記ゼロ除算対処コード生成手段が生成するゼロ除算に対処するソースコードは、ゼロ除算に対処するアルゴリズムを有するライブラリをコールすることを特徴とする。
【００２２】
また、請求項８に記載の発明は、請求項１ないし６のいずれか１つに記載のソースコード生成装置において、前記ゼロ除算対処コード生成手段が生成するゼロ除算に対処するソースコードは、ゼロ除算に対処するアルゴリズムを直接有することを特徴とする。
【００２３】
また、請求項９に記載の発明は、請求項１ないし６のいずれか１つに記載のソースコード生成装置において、前記ゼロ除算対処コード生成手段は、切り替え情報に基づいて、生成するゼロ除算に対処するソースコードを、ゼロ除算に対処するアルゴリズムを有するライブラリをコールするものにするか、あるいはゼロ除算に対処するアルゴリズムを直接有するものにするかを切り替えることを特徴とする。
【００２４】
また、請求項１０に記載の発明は、請求項１ないし６のいずれか１つに記載のソースコード生成装置において、前記ゼロ除算対処コード生成手段は、前記ゼロ除算に対処するソースコードとして、ゼロ除算の演算結果を固定値とするソースコードを生成することを特徴とする。
【００２５】
また、請求項１１に記載の発明は、請求項１ないし７のいずれか１つに記載のソースコード生成装置において、前記ゼロ除算対処コード生成手段は、前記ゼロ除算に対処するソースコードとして、前記除算部におけるゼロ除算の演算結果を、前記除算部におけるゼロ除算でない最近の除算結果と同じものにするソースコードを生成することを特徴とする。
【００２６】
なお、ここでいう「最近の」とは、「最も直前の」という意味である。
【００２７】
また、請求項１１に記載の発明は、コンピュータを、モデルに基づいてソースコードを生成する機能を実現させるソースコード生成プログラムにおいて、前記コンピュータを、前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別するゼロ除算識別手段、および前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成するゼロ除算対処コード生成手段、として機能させるためのソースコード生成プログラムである。
【００２８】
これによって、請求項１と同等の効果をプログラムとして実現できる
また、請求項１２に記載の発明は、モデルに基づいてソースコードを生成するソースコード生成方法であって、前記モデル中から、ゼロ除算発生の可能性のあるゼロ除算候補部を識別する手順と、前記ゼロ除算識別手段が識別した前記ゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成する手順と、を備えたソースコード生成方法である。
【００２９】
これによって、請求項１と同等の効果を方法として実現できる。
【００３０】
【発明の実施の形態】
図１に、本発明の第１実施形態に係るパーソナルコンピュータ１の構成を示す。パーソナルコンピュータ１は、ディスプレイ１１、入力装置１２、ＲＡＭ１３、ＲＯＭ１４、ＨＤＤ１５、およびＣＰＵ１６から構成される。
【００３１】
ディスプレイ１１は、ＣＰＵ１６から入力された映像信号を、ユーザに対して映像として表示する。
【００３２】
入力装置１２は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１６に出力する。
【００３３】
ＣＰＵ１６は、パーソナルコンピュータ１に電源が投入されることによって起動すると、ＲＯＭ（リードオンリーメモリー）１４から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるＭＳ−Ｗｉｎｄｏｗｓ（登録商標）等のオペレーティングシステム（以下ＯＳと記す）その他のプログラムをＨＤＤ（ハードディスクドライブ）１５から読み出して実行することにより、起動処理を行う。起動処理以後電源が遮断されるまで、ＣＰＵ１６は、入力装置１２からの信号、ＯＳによって予め定められたスケジュール等に基づいて、ＨＤＤ１５に記録されている各種プログラムを当該ＯＳ上のプロセスとして実行する。また、上記した起動処理およびプロセスにおいて、ＣＰＵ１６は必要に応じて入力装置１２から信号の入力を受け付け、またディスプレイ１１に映像信号を出力し、またＲＡＭ１３、ＨＤＤ１５に対してデータの読み出し／書き込みの制御を行う。
【００３４】
図２に、ＨＤＤ１５に保存され、ＯＳ上のプロセスとして実行されるプログラムの１つであるコード生成ツール２の機能を概念的に示す。コード生成ツール２は、ＯＳの仕様に従ったユーザの入力装置１２の操作によって起動し、その後ユーザの入力装置１２の操作によって、入力されるモデル３からソースコード４を生成するプログラムである。より具体的には、本実施形態におけるコード生成ツール２は、Ｍａｔｌａｂ（登録商標）上で動作するＲｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐ（登録商標：以下ＲＴＷと記す）として実現される。また、コード生成ツール２は、モデル３からソースコード４を生成する際に、後述するＴＬＣ（Ｔａｒｇｅｔ  Ｌａｎｇｕａｇｅ  Ｃｏｍｐｉｌｅｒ）ファイルの一群から成るコード出力ルール２３を参照する。
【００３５】
ソースコードとは、例えばＣ＋＋等のプログラミング言語の仕様に基づいてプログラム開発者が作成するプログラムの一表現形態である。ソースコードがコンパイラ、リンカ等に入力されることで、ＣＰＵ等が直接実行できるオブジェクトコードに変換される。なお、オブジェクトコードもプログラムの一表現形態である。
【００３６】
モデルとは、ソースコードよりも記述が簡易になり、かつ人による可読性が高くなる目的で定められたモデル言語仕様に基づいて作成されるプログラムの一表現形態である。本実施形態においては、モデル３はＳｉｍｕｌｉｎｋ（登録商標）によって作成されるＳｉｍｕｌｉｎｋ（登録商標）モデルとして実現される。Ｓｉｍｕｌｉｎｋ（登録商標）モデルがＲＴＷに入力されることにより、ＲＴＷが当該Ｓｉｍｕｌｉｎｋ（登録商標）モデルに対応するソースコードを生成する。
【００３７】
モデル３は、ブロックと呼ばれる機能単位の組み合わせからなる集合体として作成される。組み合わせとは、機能単位間の入出力の繋がりをいう。ブロックの具体例としては、例えば入力される２つの数値データを加算して出力する加算ブロック等がある。また、複数のブロックの集合体をサブシステムというブロックの一種として定義することもできる。すなわち、ブロックの中にブロックが含まれるような入れ子構造のブロックの作成も許される。また、モデル３中の各ブロックは、それぞれ属性情報を有することができる。属性情報としては、例えば当該ブロックの名称、入出力するデータの値域を示す情報等がある。
【００３８】
図３に、コード生成ツール２に入力されるモデル３の一例として、車両のエンジンを制御するエンジンＥＣＵのプログラムのためのモデル３を示す。この例におけるモデル３は、エンジンＥＣＵの機能のうち、燃料噴射量制御の機能に関する部分のモデルであり、基本噴射量サブシステム３１、Ａ補正サブシステム３２、Ｂ補正サブシステム３３、Ｃ補正サブシステム３４、Ｄ補正サブシステム３５、および噴射量サブシステム３６から構成される。
基本噴射量サブシステム３１は、エンジンＥＣＵ外部から入力されるスロットル開度等の情報に基づいて大まかな基本燃料噴射量を決めるサブシステムである。Ａ補正サブシステム３２、Ｂ補正サブシステム３３、Ｃ補正サブシステム３４、およびＤ補正サブシステム３５は、車速、シフト位置、気圧、排気ガス中における特定の成分濃度等の、エンジンＥＣＵ外部から入力される情報に基づいて決定される、基本燃料噴射量に対する補正値である。
図４に、噴射量サブシステム３６の構成を示す。噴射量サブシステム３６は、サムブロック４１、プロダクトブロック４２から構成される。
サムブロック４１は、基本噴射量サブシステム３１の出力（楕円囲み数字１）とＡ補正サブシステム３２の出力（楕円囲み数字２）とを加算し、その結果を出力するブロックである。
プロダクトブロックとは、入力されたデータ間で乗算、除算の演算を行い、その演算結果を出力するブロックである。このプロダクトブロックは、入力データの個数、入力データ間の乗算、除算の順序、組み合わせを、個々のブロック毎に設定することができる。図４中においては、プロダクトブロック４２は、サムブロック４１の出力、Ｂ補正サブシステム３３の出力（楕円囲み数字３）、およびＣ補正サブシステム３４の出力（楕円囲み数字４）を順に乗算したものを、Ｄ補正サブシステム３５の出力（楕円囲み数字５）で除算し、その結果を出力する（楕円囲み数字６）ように設定されている。このプロダクトブロック４２の出力が、噴射量サブシステム３６の出力（楕円囲み数字７）となる。
【００３９】
このように、モデル３は、
噴射量＝（基本噴射量＋Ａ補正）×Ｂ補正×Ｃ補正÷Ｄ補正
という値を出力するように構成されている。
以下、ユーザが所定の操作をすることによって開始される、モデル３からソースコード４を生成するためのコード生成ツール２の処理について説明する。所定の操作とは、ユーザがコード生成ツール２に入力するモデル３を指定するために入力装置１２を操作し、さらにソースコード生成の処理を開始するよう要求するために入力装置１２を操作することをいう。このコード生成ツール２の処理は、モデル３中のブロックを１個づつ読み出し、このブロックに対応するＴＬＣファイルをコード出力ルール２３から探し出し、当該ＴＬＣファイルの記述に従って当該ブロックをソースコードに変換する。ＴＬＣファイルは、例えばサムブロックＴＬＣ２４、プロダクトブロックＴＬＣ２５等、ブロックの種類の数だけ存在する。そしてそれぞれのＴＬＣファイルが対応するブロックについて、そのブロックをどのようなソースコードに変換するかの規則を記述する。
プロダクトブロックＴＬＣ２５は、コード生成ツール２がプロダクトブロックをソースコードに変換するときに、図５のフローチャートに示すような処理を行うよう記述される。以下コード生成ツール２の図５の処理について説明する。
まずステップ５１０で、当該プロダクトブロックについて、そのプロダクトブロックが除算を含む演算を行うようになっているか否かを判定する。すなわち、当該プロダクトブロックが除算を含む除算部であるか否かを識別する。更に換言すれば、当該プロダクトブロックがゼロ除算発生の可能性のあるゼロ除算候補部であるか否かを識別する。
図４のプロダクトブロック４２は、除算を含んだ演算を行うようになっているプロダクトブロックの一例であり、当該ブロックがこのようなプロダクトブロック４２の場合、処理はステップ５３０の処理を行い、その後当該ブロックの変換処理を終了する。乗算のみの演算を行うブロックが当該ブロックの場合、処理はステップ５２０の処理を行い、その後当該ブロックの変換処理を終了する。
ステップ５２０では、特にゼロ除算を考慮しない規則でブロックをソースコードに変換する。具体的には、例えば、Ｓｉｍｕｌｉｎｋ（登録商標）によってデフォルトで提供される変換規則に従ってブロックをソースコードに変換する。
ステップ５３０では、特殊コードを出力する。すなわち、ゼロ除算に対処する規則でブロックをソースコードに変換したものを出力する。具体的には、除算の分母（図４においてはＤ補正サブシステム３５の出力）がゼロである場合は演算結果を一律の固定値（例えば１００００等）とし、ゼロ以外のときは通常の除算を行うようなソースコード、すなわち特殊コードを出力する。
【００４０】
このように出力される特殊コードの具体的形式としては、ライブラリコールを含むようになっている。すなわち、例えば変数１、変数２という引数を持つＤｅｖｉｄｅという名称の関数がライブラリとして別途ＨＤＤ１５に保存されており、プロダクトブロック４２から変換されるソースコードは、
Ｆｕｎｃ（）｛
ＸＸＸ＝Ｄｅｖｉｄｅ（ＢＢＢ＊ＣＣＣ＊ＤＤＤ，ＥＥＥ）；
｝
という、Ｄｅｖｉｄｅ関数をコールする文に変換されるようになっていてもよい。ここで、ＸＸＸはプロダクトブロック４２の出力、ＢＢＢはサムブロック４１の出力、ＣＣＣはＢ補正サブシステム３３の出力、ＤＤＤはＣ補正サブシステム３４の出力、ＥＥＥはＤ補正サブシステム３５の出力に、それぞれ対応する変数名である。Ｄｅｖｉｄｅ関数中は、ＥＥＥがゼロなら一律の固定値を出力するように作成される。すなわち、ゼロ除算に対処するアルゴリズムを有している。
【００４１】
このようにして、全てのブロックについてソースコートが生成されると、コード生成ツール２は生成されたソースコードを、ブロックの組み合わせに合うよう結合する。具体的には、あるブロックの出力が別のブロックの入力となっている場合、当該出力と入力の変数名を同一にしてソースコード同士を結合する。
【００４２】
以上のような構成および作動のパーソナルコンピュータ１、あるいはコード生成ツール２が、ＴＬＣファイルに記述された変換規則に従って、ソースコードを生成する元のモデル中から、ゼロ除算候補部（本実施形態においては除算部）を識別し、また当該ゼロ除算候補部のゼロ除算に対処するソースコードを生成するので、モデルの開発者はモデルにゼロ除算を考慮してモデルを作成する必要がない。従って、モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようになる。
【００４３】
なお、上記のように、ゼロ除算に対処する特殊コードは、必ずしも除算の分母がゼロである場合に演算結果を一律固定値とするようなソースコードとなっていなくともよい。例えば、特殊コードとして、除算の分母がゼロであった場合の演算結果を、過去に同ブロックに該当する処理でゼロ除算とならなかった最近の演算結果と同じ値としてもよい。これは、例えば生成されたソースコードにおいて、分母がゼロならば、出力値に対応する変数に何も代入しないことで実現される。なぜなら、この場合に当該変数に残っている値は、過去に同ブロックに該当するする処理でゼロ除算とならなかった最近の演算結果に他ならないからである。
【００４４】
また、上記した固定値を出力するか最近の値を出力するかといった、ゼロ除算発生時の処置の設定を、個々のブロックの属性情報に記述するようにし、プロダクトブロックＴＬＣ２５はこの属性情報に従って適宜出力するソースコードを切り替えるようになっていてもよい。図６に、プロダクトブロック５５およびその属性情報５６を示す。なお、属性情報に記述する処置としては、全体設定継承があってもよい。全体設定継承とは、個々のブロックではなくモデル３全体に適用するゼロ除算発生時の処置の設定に従う旨をいう。
【００４５】
（第２実施形態）
次に、本発明の第２実施形態について説明する。本実施形態は、プロダクトブロックＴＬＣ２５の記述の示す動作が図５と異なっていること、および後述する属性情報以外は、第１実施形態と同等である。本実施形態と第１実施形態との間で同一となる構成、作動についての説明は省略する。
【００４６】
図７に、本実施形態におけるプロダクトブロックＴＬＣ２５の記述に従うコード生成ツール２の動作をフローチャートで示す。ステップ６２０の処理は図５のステップ５２０の処理と同等であり、ステップ６３０の処理はステップ５３０の処理と同等である。またステップ６１０の判定内容はステップ５１０の判定内容と同等である。ステップ６１０で判定が肯定の場合、処理はステップ６１５に進み、判定が否定の場合、処理はステップ６２０に進む。
【００４７】
ステップ６１５では、分母が変数または適合定数のいすれかであるか、あるいはいずれでもないかを判定する。具体的には、当該ブロックの分母となる値の入力が、他のモデル３中のブロックのうちいずれの出力であるかを検出し、その検出したブロックの属性情報を読み出し、当該出力の値が変数である旨、あるいは適合定数である旨の記述があるか否かを判定する。
【００４８】
ここで変数とは、コード生成ツール２によってモデル３から生成されたソースコードをオブジェクトコードにコンパイルして実際に実行する場合に、その実行中に値が変化するデータのことである。また、適合定数とは、当該オブジェクトコードの実行では変化しないが、外部書き換え装置等により書き換えることの出来るデータである。すなわち適合定数とは、上記したような変数ではないが、モデル自体を書き換えない限り恒久的に一定となる定数でもない値である。これらのことから、変数および適合定数は可変値であると言える。属性情報の部分には、その出力が変数、適合定数等である旨の情報を、ブロックの開発者等が予め記載しておく。
【００４９】
変数または適合定数であれば、処理はステップ６３０に進んで特殊コードを出力し、変数でも適合定数でなければ処理はステップ６２０に進んで、ゼロ除算を考慮しないソースコードを出力する。
【００５０】
このようなプロダクトブロックＴＬＣ２５の構成により、プロダクトブロックについて、そのプロダクトブロックが除算を含む演算を行うようになっており、かつ除算部における除算の分母が可変値である場合に、当該ブロックがゼロ除算候補部であるとして、ゼロ除算に対処できる特殊コードを出力する。
【００５１】
以上のような構成および作動のパーソナルコンピュータ１、あるいはコード生成ツール２が、ＴＬＣファイルに記述された変換規則に従って、ソースコードを生成する元のモデル中から、ゼロ除算候補部（本実施形態においては除算部であり、かつ当該除算の分母が可変値であるもの）を識別し、また当該ゼロ除算候補部のゼロ除算に対処するソースコードを生成するので、モデルの開発者はモデルにゼロ除算を考慮してモデルを作成する必要がない。従って、モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようになる。
【００５２】
（第３実施形態）
次に、本発明の第３実施形態について説明する。本実施形態は、プロダクトブロックＴＬＣ２５の記述の示す動作が図７と異なっていること、および後述する属性情報以外は、第２実施形態と同等である。本実施形態と第２実施形態との間で同一となる構成、作動についての説明は省略する。
【００５３】
図８に、本実施形態におけるプロダクトブロックＴＬＣ２５の記述に従うコード生成ツール２の動作をフローチャートで示す。このフローチャートは、図８のフローチャートのステップ６１５をステップ７１５に変更したものであり、ステップ７１０はステップ６１０と、ステップ７２０はステップ６２０と、ステップ７３０はステップ６３０と、それぞれ同等である。
【００５４】
ステップ７１５では、分母がゼロの場合があるか否かを判定し、肯定ならステップ７３０に進み、否定なら７２０に進む。具体的には、当該ブロックの分母となる値の入力が、他のモデル３中のブロックのうちいずれの出力であるかを検出し、その検出したブロックの属性情報を読み出し、当該出力の値がゼロの場合がある、すなわちゼロ除算を発生しうる旨の記述があるか否かを判定する。当該ブロックの属性情報の部分には、その出力がゼロ除算を発生しうるか否かの旨の情報として「０割：有り」「０割：無し」の情報を、モデル３の開発者等が予め記載しておく。
【００５５】
このようなプロダクトブロックＴＬＣ２５の構成により、プロダクトブロックについて、そのプロダクトブロックが除算を含む演算を行うようになっており、かつ除算部における除算の分母がゼロとなる可能性がある場合に、当該ブロックがゼロ除算候補部であるとして、ゼロ除算に対処できる特殊コードを出力する。従って、属性情報中の「０割：有り」「０割：無し」の情報は、モデル中のゼロ除算候補部の所在に関する情報であり、かつ特定の部分のゼロ除算可能性の有無を示す情報である。
【００５６】
以上のような構成および作動のパーソナルコンピュータ１、あるいはコード生成ツール２が、ＴＬＣファイルに記述された変換規則に従って、ソースコードを生成する元のモデル中から、ゼロ除算候補部（本実施形態においては除算部であり、かつ当該除算の分母がゼロとなる可能性があるもの）を識別し、また当該ゼロ除算候補部のゼロ除算に対処するソースコードを生成するので、モデルの開発者はモデルにゼロ除算を考慮してモデルを作成する必要がない。従って、モデルからソースコードを生成する開発環境において、モデルの可読性の良さを損なうことなくゼロ除算に対応できるようになる。
【００５７】
また、上記の属性情報のように、「０割：有り」「０割：無し」といった情報をモデルの各ブロックが属性情報として有することで、個々のブロック毎の個別設定が可能となる。
【００５８】
なお、本発明の各実施形態において、パーソナルコンピュータ１がソースコード生成装置を構成し、コード生成ツール２がソースコード生成プログラムを構成する。
【００５９】
また、コード生成ツール２の実行する処理における、図５のステップ５１０、図７のステップ６１０〜６１５、図８のステップ７１０〜７１５に相当する処理が、ゼロ除算候補部を識別するゼロ除算識別手段を構成する。
【００６０】
また、コード生成ツール２の実行する処理における、図５のステップ５３０、図７のステップ６３０、図８のステップ７３０に相当する処理が、ゼロ除算識別手段が識別したゼロ除算候補部に対応するソースコードとして、ゼロ除算に対処するソースコードを生成するゼロ除算対処コード生成手段を構成する。
【００６１】
なお、各実施形態において、ゼロ除算候補部として除算を含むプロダクトブロックを例示したが、ゼロ除算候補部はプロダクトブロックに限らず、他のブロック中で除算を行う部分にもあり得る。このような場合、当該他のブロックのＴＬＣファイルを、上記実施形態のプロダクトブロックＴＬＣ２５のようにゼロ除算に対応するように記述することで、プロダクトブロックと同じ効果を得ることができる。
【００６２】
また、本実施形態において、コード生成ツール２が出力する特殊コードの具体的形式としては、ライブラリ関数をコールする形式となっているが、必ずしもこれに限る必要はなく、ゼロ除算に対処するアルゴリズムを直接有するソースコードを出力するようになっていてもよい。このようにすると、モデル中のゼロ除算候補部の数だけゼロ除算に対応するコードが生成されるので、ライブラリをコールする場合に比べてソースコードのサイズが増大するが、ライブラリコールの回数が低減されるので、当該ソースコードから生成されるオブジェクトコードの実行速度が向上する。これに対して、上記した各実施形態のようなライブラリをコールする形式の場合には、オブジェクトコードの実行速度は遅いものの、オブジェクトコードのサイズは低く抑えられる。従って、例えばこのオブジェクトコードがエンジンＥＣＵに搭載される場合、エンジンＥＣＵのＲＯＭ領域を節約することができる。
【００６３】
また、ＨＤＤ１５中のファイルに記述される、あるいは開発者の入力装置１２から入力される切り替え情報に基づいて、ライブラリコールの形式でソースコードを出力するか、直接ゼロ除算に対処するコードを出力するかを切り替えることができるようになっていてもよい。これによって、エンジンＥＣＵのＲＯＭ節約を優先するか、あるいはオブジェクトコードの実行速度の向上を優先するかといった状況に応じた最適なソースコードを生成することができる。
【００６４】
また、第３実施形態においては、属性情報中の「０割：有り」「０割：無し」の情報、すなわち特定の部分のゼロ除算可能性の有無を示す情報が、モデル中のゼロ除算候補部の所在に関する情報となっていたが、必ずしもこのようになっている必要は無く、属性情報中の出力の値域を示す情報を予め記述させておき、図８のステップ７１５の判定は、当該分母の値域がゼロを含んでいるかによって、分母がゼロとなり得るか否かを判定するようになっていてもよい。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係るパーソナルコンピュータ１の構成を示す図である。
【図２】コード生成ツール２の機能を概念的に示す図である。
【図３】エンジンＥＣＵのプログラムのためのモデルの一例を示す図である。
【図４】噴射量サブシステム３６の構成を示す図である。
【図５】第１実施形態のコード生成ツール２がプロダクトブロックをソースコードに変換するときに実行する処理のフローチャートである。
【図６】プロダクトブロック５５およびその属性情報５６を示す図である。
【図７】第２実施形態のコード生成ツール２がプロダクトブロックをソースコードに変換するときに実行する処理のフローチャートである。
【図８】第３実施形態のコード生成ツール２がプロダクトブロックをソースコードに変換するときに実行する処理のフローチャートである。
【図９】エンジンＥＣＵにおけるある四則演算の機能を実現するモデルの図である。
【図１０】図９の例に代えて、ゼロ除算に対する対応を取り入れたモデルの図である。
【符号の説明】
１…パーソナルコンピュータ、２…コード生成ツール、３…モデル、
４…ソースコード、１１…ディスプレイ、１２…入力装置、１３…ＲＡＭ、
１４…ＲＯＭ、１５…ＨＤＤ、１６…ＣＰＵ、２３…コード出力ルール、
２４…サムブロックＴＬＣ、２５…プロダクトブロックＴＬＣ、
３１…基本噴射量サブシステム、３２…Ａ補正サブシステム、
３３…Ｂ補正サブシステム、３４…Ｃ補正サブシステム、
３５…Ｄ補正サブシステム、３６…噴射量サブシステム、
４１…サムブロック、４２…プロダクトブロック、
５５…プロダクトブロック、５６…属性情報。
【図１】
2004252841.tif 000003
【図２】
2004252841.tif 000004
【図３】
2004252841.tif 000005
【図４】
2004252841.tif 000006
【図５】
2004252841.tif 000007
【図６】
2004252841.tif 000008
【図７】
2004252841.tif 000009
【図８】
2004252841.tif 000010
【図９】
2004252841.tif 000011
【図１０】
2004252841.tif 000012