(57)【要約】【課題】「−０＜＋０」という条件を真と判定し、「−０≧＋０」という条件を偽と判定しするマイクロコンピュータと、「−０＜＋０」という条件を偽と判定し、「−０≧＋０」という条件を真と判定するモデルのシミュレーションとで、制御内容が食い違ってしまうことを防止する。【解決手段】モデルをソースコードに変換する際、モデル中の「ａ＜ｂ」を判定するブロックを、ソースコードにおいて、「（ａ＜ｂ）かつ（ａ≠ｂ）」を判定する命令に置き換える。また、モデルをソースコードに変換する際、モデル中の「ａ≧ｂ」を判定するブロックを、ソースコードにおいて、「（ａ≧ｂ）または（ａ＝ｂ）」を判定する命令に置き換える。【選択図】図７
2010015435.tif 000002
【特許請求の範囲】
【請求項１】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルから、前記制御処理をマイクロコンピュータ（２）において実現するためのプログラムを生成する制御プログラム生成装置であって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換する第１変換手段（３３０）と、
前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する第２変換手段（３４０）と、
を備えた制御プログラム生成装置。
【請求項２】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換えるモデル書き換え装置であって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）を備えたモデル書き換え装置。
【請求項３】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルから生成されたプログラムのソースコードを、前記制御処理を実現するマイクロコンピュータ（２）において実行可能なオブジェクトコードに変換するオブジェクトコード生成装置であって、
前記ソースコード中における、第１の値ａと第２の値ｂについての条件式「ａ＜ｂ」の真偽を判定する命令を、前記オブジェクトコードにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、前記ソースコード中における、第３の値ｃと第４の値ｄについての条件式「ｃ≧ｄ」の真偽を判定する命令を、前記オブジェクトコードにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する変換手段（１２０）を備えたオブジェクトコード生成装置。
【請求項４】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換える機能と、前記制御処理をマイクロコンピュータ（２）において実現するためのプログラムを前記モデルから生成する機能と、を備えた制御プログラム生成装置であって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する変換手段（３３０、３４０）と、
前記モデル中における、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）と、
前記変換手段（３３０、３４０）および前記置換手段（４５０）のどちらを作動させるかについての切り替えを行う切替手段（１４０）と、
を備えた制御プログラム生成装置。
【請求項５】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換えるモデル書き換え装置であって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）を備えたモデル書き換え装置。
【請求項６】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルに基づいて、前記制御処理を仮想的に実現するモデルシミュレーション装置であって、
前記モデルを仮想的に実行しているときに、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素に対して、前記第１の値ａとして−０が入力され、前記第２の値ｂとして＋０が入力されたことに基づいて、前記処理要素の出力として真値を出力する第１出力手段（５３５）と、
前記モデルを仮想的に実行しているときに、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素に対して、前記第３の値ｃとして−０が入力され、前記第４の値ｄとして＋０が入力されたことに基づいて、前記処理要素の出力として偽値を出力する第２出力手段（５４５）と、
を備えたモデルシミュレーション装置。
【請求項７】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換える機能と、前記モデルに基づいて、前記制御処理を仮想的に実現するモデルシミュレーション装置であって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）と、
前記モデルを仮想的に実行しているときに、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素に対して、前記第１の値ａとして−０が入力され、前記第２の値ｂとして＋０が入力されたことに基づいて、前記処理要素の出力として真値を出力し、また、前記モデルを仮想的に実行しているときに、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素に対して、前記第３の値ｃとして−０が入力され、前記第４の値ｄとして＋０が入力されたことに基づいて、前記処理要素の出力として偽値を出力する出力手段（５３５、５４５）と、
前記置換手段（４５０）および前記出力手段（５３５、５４５）のどちらを作動させるかについての切り替えを行う切替手段（１４０）と、
を備えたモデルシミュレーション装置。
【請求項８】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルから、前記制御処理をマイクロコンピュータ（２）において実現するためのプログラムを生成する制御プログラム生成装置に用いるプログラムであって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換する第１変換手段（３３０）、および
前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する第２変換手段（３４０）として、コンピュータを機能させるプログラム。
【請求項９】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換えるモデル書き換え装置に用いるプログラムであって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）として、コンピュータを機能させるプログラム。
【請求項１０】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルから生成されたプログラムのソースコードを、前記制御処理を実現するマイクロコンピュータ（２）において実行可能なオブジェクトコードに変換するオブジェクトコード生成装置に用いるプログラムであって、
前記ソースコード中における、第１の値ａと第２の値ｂについての条件式「ａ＜ｂ」の真偽を判定する命令を、前記オブジェクトコードにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、前記ソースコード中における、第３の値ｃと第４の値ｄについての条件式「ｃ≧ｄ」の真偽を判定する命令を、前記オブジェクトコードにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する変換手段（１２０）として、コンピュータを機能させるプログラム。
【請求項１１】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換える機能と、前記制御処理をマイクロコンピュータ（２）において実現するためのプログラムを前記モデルから生成する機能と、を備えた制御プログラム生成装置に用いるプログラムであって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、前記プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する変換手段（３３０、３４０）、
前記モデル中における、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）、および
前記変換手段（３３０、３４０）および前記置換手段（４５０）のどちらを作動させるかについての切り替えを行う切替手段（１４０）として、コンピュータを機能させるプログラム。
【請求項１２】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換えるモデル書き換え装置に用いるプログラムであって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）として、コンピュータを機能させるプログラム。
【請求項１３】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルに基づいて、前記制御処理を仮想的に実現するモデルシミュレーション装置に用いるプログラムであって、
前記モデルを仮想的に実行しているときに、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素に対して、前記第１の値ａとして−０が入力され、前記第２の値ｂとして＋０が入力されたことに基づいて、前記処理要素の出力として真値を出力する第１出力手段（５３５）、および
前記モデルを仮想的に実行しているときに、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素に対して、前記第３の値ｃとして−０が入力され、前記第４の値ｄとして＋０が入力されたことに基づいて、前記処理要素の出力として偽値を出力する第２出力手段（５４５）として、コンピュータを機能させるプログラム。
【請求項１４】
入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルを書き換える機能と、前記モデルに基づいて、前記制御処理を仮想的に実現するモデルシミュレーション装置に用いるプログラムであって、
前記モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換え、また、前記モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える置換手段（４５０）、
前記モデルを仮想的に実行しているときに、入力された前記第１の値ａと入力された前記第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素に対して、前記第１の値ａとして−０が入力され、前記第２の値ｂとして＋０が入力されたことに基づいて、前記処理要素の出力として真値を出力し、また、前記モデルを仮想的に実行しているときに、入力された前記第３の値ｃと入力された前記第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素に対して、前記第３の値ｃとして−０が入力され、前記第４の値ｄとして＋０が入力されたことに基づいて、前記処理要素の出力として偽値を出力する出力手段（５３５、５４５）、および
前記置換手段（４５０）および前記出力手段（５３５、５４５）のどちらを作動させるかについての切り替えを行う切替手段（１４０）として、コンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム生成装置、制御プログラム生成装置用のプログラム、モデル書き換え装置、モデル書き換え装置用のプログラム、オブジェクトコード生成装置、オブジェクトコード生成装置用のプログラム、モデルシミュレーション装置、および、モデルシミュレーション装置用のプログラムに関するものである。
【背景技術】
【０００２】
従来、入力データに応じた制御処理（例えば、エンジン制御、ブレーキ制御等の車両制御）を複数の処理要素間のデータの入出力の仕様として記述するために、モデルが用いられている（例えば、特許文献１参照）。
【０００３】
モデルからは、そのモデルが記述する制御処理を実現するためのプログラム（ソースコード、オブジェクトコード等）を作成することができる。また、モデルを用いて、そのモデルが記述する制御処理を仮想的にコンピュータ（例えば、パーソナルコンピュータ、ワークステーション等）でシミュレーションすることができる。このような、モデルの生成、モデルに基づくプログラムの作成、モデルのシミュレーション等のためのシステムを、モデルベース開発システムという。
【０００４】
なお、モデルから作成されたオブジェクトコードは、最終的に当該モデルの記述する制御処理を実現するためのマイクロコンピュータに実装（具体的には記録）される。マイクロコンピュータは、実装されたオブジェクトコードを実行することで、当該制御処理を実現する。
【特許文献１】特開２００２−９１７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
モデルに記述される制御処理には、浮動小数点演算が含まれる場合が多い。浮動小数点演算においては、「＋０」と負の数で乗除算を行った場合等に、「＋０」とは数値表現が異なる「−０」が演算結果として生成されることがある。「−０」と「＋０」の大小比較については、ＩＥＥＥ規格で厳密に規定されていないので、マイクロコンピュータの種類によって扱いが異なっているのが実情である。
【０００６】
したがって、モデルのシミュレーションにおける「−０」と「＋０」の大小比較の取り扱いと同じ取り扱いを行うマイクロコンピュータもあれば、モデルのシミュレーションとは異なる取り扱いを行うマイクロコンピュータもある。
【０００７】
具体的には、モデルの生成、プログラムへの変換、およびシミュレーションを行うＳｉｍｕｌｉｎｋ（登録商標）のシミュレーションと、ＮＥＣエレクトロニクス社（登録商標）のマイクロコンピュータＶ８５０Ｆ（登録商標）とでは、２値を比較する条件のうち、「−０＜＋０」という条件、および「−０≧＋０」という条件のみにおいて、真偽値が異なり、他の条件（例えば、「−０＝＋０」、「＋０＝−０」、「−０≠＋０」、「＋０≠−０」「＋０＞−０」、「＋０≦−０」、「−０≦＋０」、「−０＞＋０」、「−０＝＋０」、「−０≠＋０」等の条件）においては真偽値が同じとなる。
【０００８】
具体的には、「−０＜＋０」という条件については、Ｓｉｍｕｌｉｎｋのシミュレーションでは偽となり、Ｖ８５０Ｆの作動においては真となる。また、「−０≧＋０」という条件については、Ｓｉｍｕｌｉｎｋのシミュレーションでは真となり、Ｖ８５０Ｆでは偽となる。
【０００９】
なお、Ｓｉｍｕｌｉｎｋのシミュレーションにおいて「−０＜＋０」が偽となり「−０≧＋０」が真となるのは、Ｓｉｍｕｌｉｎｋのシミュレーションにおいては、通常「−０」と「＋０」を区別せず同じものと見なしているからである。
【００１０】
したがって、以下のような問題が発生する可能性がある。あるモデルをＳｉｍｕｌｉｎｋ上でシミュレーションし、その結果制御処理が正常に動作することを確認したとする。そしてその後、当該モデルからＶ８５０Ｆ用のオブジェクトコードを生成してＶ８５０Ｆに実装したとする。しかし、モデルに「ａ＜ｂ」という条件または「ｃ≧ｄ」という条件が含まれている場合は、ａ＝−０、ｂ＝＋０となった場合、または、ｃ＝−０、ｄ＝＋０となる状況が発生すると、シミュレーションでは発見できなかった不具合がＶ８５０Ｆにおいて発生する可能性がある。
【００１１】
本発明は上記点に鑑み、「−０＜＋０」という条件を真と判定し、「−０≧＋０」という条件を偽と判定してしまうマイクロコンピュータ（例えばＶ８５０Ｆ）と、「−０＜＋０」という条件を偽と判定し、「−０≧＋０」という条件を真と判定してしまうモデルのシミュレーション（例えばＳｉｍｕｌｉｎｋのシミュレーション）とで、制御内容が食い違ってしまうことを防止する技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するための請求項１に記載の発明は、入力データに応じた制御処理を複数の処理要素間のデータの入出力の仕様として記述するモデルから、当該制御処理をマイクロコンピュータ（２）において実現するためのプログラムを生成する制御プログラム生成装置についてのものである。
【００１３】
この制御プログラム生成装置は、当該モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、当該プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換する。
【００１４】
また制御プログラム生成装置は、当該モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、当該プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する。
【００１５】
ここで、まず条件式「ａ＜ｂ」の真偽値を出力する処理要素から、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令へ変換することの意義について、図９を用いて説明する。図９は、Ｖ８５０Ｆと同じ「＋０」と「−０」の比較の取り扱いを行う任意のマイクロコンピュータ（以下、単にＶマイコンという）と、Ｓｉｍｕｋｉｎｋのシミュレーションと同じ「＋０」と「−０」の比較の取り扱いを行う任意のシミュレーション（以下、Ｓシミュレーションという）のそれぞれにおける、「−０＜＋０」、「−０≠＋０」、「（−０＜＋０）かつ（−０≠＋０）」という３つの条件に対する真偽値を示す真理表である。
【００１６】
上述した通り、「−０＜＋０」という条件については、Ｖマイコンにおいては真（図９においてはＴと記す）と判定し、Ｓシミュレーションにおいては偽（図９においてはＦと記す）と判定する。また、「−０≠＋０」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。したがって、「（−０＜＋０）かつ（−０≠＋０）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。
【００１７】
したがって、モデル中での条件式「ａ＜ｂ」の真偽値を出力する処理要素があった場合、Ｓシミュレーションにおいては、ａが−０でｂが＋０のときには、その処理要素に対応する判定結果は偽となる（図９下段左の斜線部に相当する）。
【００１８】
また、Ｖマイコンが実行するプログラムにおいては、条件式「ａ＜ｂ」の真偽値を出力する処理要素が、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令へ変換されているので、Ｖマイコンにおいても、当該処理要素に対応する判定結果は偽となる（図９上段右の斜線部に相当する）。すなわち、このような変換によって、Ｖマイコンの処理結果がＳシミュレーションの結果に合致するようになる。
【００１９】
なお、このような変換によって、図９の斜線で示したように、ＶマイコンとＳシミュレーションとでは、異なる条件式の判定を行うことになる。しかし、そうなったとしても、ａが−０でｂが＋０となる場合以外においても、Ｖマイコンの判定結果がＳシミュレーションの結果と異なってしまうことはない。
【００２０】
なぜなら、ａが−０でかつｂが＋０であるという場合でない限り、ａ＜ｂなら必ずａ≠ｂが成り立つので、「ａ＜ｂ」という条件は、「（ａ＜ｂ）かつ（ａ≠ｂ）」という条件と論理的に同値だからである。
【００２１】
次に、条件式「ｃ≧ｄ」の真偽値を出力する処理要素から、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令へ変換することの意義について、図１０を用いて説明する。図１０は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０≧＋０」、「−０＝＋０」、「（−０≧＋０）または（−０＝＋０）」という３つの条件に対する真偽値を示す真理表である。
【００２２】
上述した通り、「−０≧＋０」という条件については、Ｖマイコンにおいては偽（図１０においてはＦと記す）と判定し、Ｓシミュレーションにおいては真（図１０においてはＴと記す）と判定する。また、「−０＝＋０」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。したがって、「（−０≧＋０）または（−０＝＋０）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。
【００２３】
したがって、モデル中での条件式「ｃ≧ｄ」の真偽値を出力する処理要素があった場合、Ｓシミュレーションにおいては、ｃが−０でｄが＋０のときには、その処理要素に対応する判定結果は真となる（図１０下段左の斜線部に相当する）。
【００２４】
また、Ｖマイコンが実行するプログラムにおいては、条件式「ｃ≧ｄ」の真偽値を出力する処理要素が、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令へ変換されているので、Ｖマイコンにおいても、当該処理要素に対応する判定結果は真となる（図１０上段右の斜線部に相当する）。このような変換によって、Ｖマイコンの処理結果がＳシミュレーションの結果に合致するようになる。
【００２５】
なお、このような変換によって、図１０の斜線で示したように、ＶマイコンとＳシミュレーションとでは、異なる条件式の判定を行うことになる。しかし、そうなったとしても、ｃが−０でｄが＋０となる場合以外においても、Ｖマイコンの判定結果がＳシミュレーションの結果と異なってしまうことはない。
【００２６】
なぜなら、ｃが−０でかつｄが＋０であるという場合でない限り、ｃ＜ｄなら（すなわち「ｃ≧ｄ」が偽ならば）必ずｃ≠ｄ（すなわち「ｃ＝ｄ」が偽）が成り立つので、「ｃ≧ｄ」という条件は、「（ｃ≧ｄ）または（ｃ＝ｄ）」という条件と論理的に同値だからである。
【００２７】
したがって、上記のようなモデルからプログラムへの変換は、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させる変換となる。したがって、このような変換により、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【００２８】
また、上記目的を達成するための請求項２に記載の発明は、モデルを書き換えるモデル書き換え装置についてのものである。このモデル書き換え装置は、当該モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された当該第１の値ａと入力された当該第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換える。
【００２９】
また、書き換え装置は、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された当該第３の値ｃと入力された当該第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する１つ以上の処理要素に置き換える。
【００３０】
このように、請求項２に記載の発明では、モデルそのものを書き換えるようになっている。このようにすることの意義について、図１５および図１６を用いて説明する。図１５は図９と同じ真理表であり、斜線を施した部分のみが異なっている。また図１６は図１０と同じ真理表であり、斜線を施した部分のみが異なっている。
【００３１】
書き換えられる前のモデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を処理要素Ｐ０とし、上述の置換によって処理要素Ｐ０に取って代わった処理要素を処理要素Ｐ１とする。また、書き換えられる前のモデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素をＱ０とし、上述の置換によって処理要素Ｑ０に取って代わった処理要素を処理要素Ｑ１とする。
【００３２】
書き換え前のモデルの処理要素Ｐ０に対する、ａ＝−０かつｂ＝＋０の場合のＳシミュレーションの結果は、図１５中の下段左側の斜線部に示す通り偽である。また、書き換え後のモデルの処理要素Ｐ１に対する、ａ＝−０かつｂ＝＋０の場合のＳシミュレーションの結果は、図１５中の下段右側の斜線部に示す通り偽である。
【００３３】
また、書き換え前のモデルの処理要素Ｑ０に対する、ｃ＝−０かつｄ＝＋０の場合のＳシミュレーションの結果は、図１６中の下段左側の斜線部に示す通り真である。また、書き換え後のモデルの処理要素Ｑ１に対する、ｃ＝−０かつｄ＝＋０の場合のＳシミュレーションの結果は、図１６中の下段右側の斜線部に示す通り真である。したがって、ａ＝ｃ＝−０かつｂ＝ｄ＝＋０の場合においては、モデルの書き換え前後でＳシミュレーションの結果に変化がない。
【００３４】
また、書き換え後のモデルを通常の方法でプログラムに変換し、そのプログラムをＶマイコンで実行した場合を考える。この場合、モデルの処理要素Ｐ１に対応するプログラム中の命令に対する、ａ＝−０かつｂ＝＋０の場合のＶマイコンの判定結果は、図１５中の上段右側の斜線部に示す通り偽である。またこの場合、モデルの処理要素Ｑ１に対応するプログラム中の命令に対する、ｃ＝−０かつｄ＝＋０の場合のＶマイコンの判定結果は、図１６中の上段右側の斜線部に示す通り真である。
【００３５】
すなわち、ａ＝ｃ＝−０かつｂ＝ｄ＝＋０の場合においては、書き換え前のモデルに対するＳシミュレーションの結果と、書き換え後のモデルから生成したプログラムによるＶマイコンの作動の結果とは、同じである。
【００３６】
また、既述の通り、「ａ＝−０かつｂ＝＋０」でない場合においては、処理要素Ｐ０とＰ１は論理的に同値であり、「ｃ＝−０かつｄ＝＋０」でない場合においては、処理要素Ｑ０とＱ１は論理的に同値である。したがってこれらの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【００３７】
以上のようなことから、上記のようなモデルの書き換えは、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させる書き換えとなる。したがって、このような変換により、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【００３８】
また、この方法においては、モデルそのものを書き換えるので、書き換えられたモデルのみを、他のモデルベース開発システムにコピーさえすれば、コピー先のモデルベース開発システムにおいては、従来通りのＳシミュレーションおよびプログラム生成を行うだけでも、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことを防止することができる。
【００３９】
また、本発明の目的を達成するための請求項３に記載の発明は、モデルから生成されたプログラムのソースコードを、モデルの制御処理を実現するＶマイコンにおいて実行可能なオブジェクトコードに変換するオブジェクトコード生成装置についてのものである。
【００４０】
なお、この請求項３（および後述する請求項１０）でいう「モデルから生成されたプログラムのソースコード」は、モデルからソースコードを自動的に生成する装置によって生成されたソースコードであってもよいし、人がモデルを見てそのモデルに対応するソースコードを作成した結果のソースコードであってもよい。
【００４１】
このオブジェクトコード生成装置は、ソースコード中における、第１の値ａと第２の値ｂについての条件式「ａ＜ｂ」の真偽を判定する命令を、当該オブジェクトコードにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、当該ソースコード中における、第３の値ｃと第４の値ｄについての条件式「ｃ≧ｄ」の真偽を判定する命令を、当該オブジェクトコードにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換する。
【００４２】
このように、モデルから生成されたプログラムのソースコード中の、（ａ＜ｂ）を判定する命令および（ｃ≧ｄ）を判定する命令の部分を、当該プログラムのオブジェクトコードにおいて、上述のように変換することで、請求項１に記載した発明と同等の効果を得ることができる。
【００４３】
なぜなら、Ｖマイコンにおいて実行されるオブジェクトコードの内容は、請求項１に記載の発明における場合と同様、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させるように変換されているからである。したがって、このような変換により、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【００４４】
また、上記目的を達成するための請求項４に記載の発明は、モデルを書き換える機能と、モデルの制御処理をＶマイコンにおいて実現するためのプログラムを当該モデルから生成する機能と、を備えた制御プログラム生成装置についてのものである。
【００４５】
あるときには、この制御プログラム生成装置は、第１の作動として、当該モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素Ｐ０を、当該プログラムにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換し、また、当該モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素Ｑ０を、当該プログラムにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する。
【００４６】
またあるときには、この制御プログラム生成装置は、第２の作動として、処理要素Ｐ０を、入力された当該第１の値ａと入力された当該第２の値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力する１つ以上の処理要素に置き換え、また、処理要素Ｑ０を、入力された当該第３の値ｃと入力された当該第４の値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力する。
【００４７】
第１の作動によって、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがなくなるのは、請求項１に記載の発明の説明において述べた通りである。また、第２の作動によって、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがなくなるのは請求項２に記載の発明の説明において述べた通りである。
【００４８】
本発明の制御プログラム生成装置は、第１の作動および第２の作動のどちらを作動させるかについての切り替えを行うようになっている。このようになっていることで、必要に応じて、モデル中の処理要素Ｐ０、Ｑ０に対して、第１の作動によってプログラムにおいて置き換えるか、あるいは、第２の作動によってモデル自体を書き換えるかを適宜切り替えることができる。
【００４９】
また、上記目的を達成するための請求項５に記載の発明は、モデルを書き換えるモデル書き換え装置についてのものである。このモデル書き換え装置は、モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素Ｐ０を、上記の場合とは異なり、入力された当該第１の値ａと入力された当該第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える。
【００５０】
また、モデル書き換え装置は、当該モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素Ｑ０を、上記の場合とは異なり、入力された当該第３の値ｃと入力された当該第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える。
【００５１】
ここで、まず条件式「ａ＜ｂ」の真偽値を出力する処理要素を、条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する処理要素に置き換えることの意義について、図２２を用いて説明する。図２２は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０＜＋０」、「左辺が−０かつ右辺が＋０」、「（−０＜＋０）または（左辺が−０かつ右辺が＋０）」という３つの条件式に対する真偽値を示す真理表である。なお、「左辺」とは、処理要素Ｐ０への第１入力値ａをいい、「右辺」とは、処理要素Ｐ０への第２入力値ｂをいう。
【００５２】
上述した通り、「−０＜＋０」という条件式については、Ｖマイコンにおいては真と判定し、Ｓシミュレーションにおいては偽と判定する。また、「左辺が−０かつ右辺が＋０」という条件式に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。したがって、「（−０＜＋０）または（左辺が−０かつ右辺が＋０）」という条件式に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。
【００５３】
したがって、書き換え後のモデルに対してＳシミュレーションを行った場合、書き換え前のモデルの処理要素Ｐ０に取って代わった置き換え部分に対する判定結果は、ａが−０でｂが＋０のときには、真となる（図２２下段右の斜線部に相当する）。
【００５４】
また、Ｖマイコンが実行するプログラムにおいては、書き換え後のモデルから生成されたプログラムの実行において、当該置き換え部分に対する判定結果は、ａが−０でｂが＋０のときには、真となる（図２２上段右の斜線部に相当する）。すなわち、このようなモデルの書き換えによって、Ｖマイコンの処理結果とＳシミュレーションの結果とが一致する。
【００５５】
なお、モデル書き換え後のＶマイコンの処理結果とＳシミュレーションの結果は、書き換え前のモデルから生成されたプログラムをＶマイコンが実行したときの処理結果と同じになる（図２２上段左の斜線部参照）。したがって、上述のモデルの書き換えの前後で、Ｖマイコンの処理内容は変化しない。それ故、上述のモデルの書き換えは、Ｓシミュレーションの制御処理を修正してＶマイコンの制御処理の内容と一致させるような書き換えである。
【００５６】
また、「ａ＝−０かつｂ＝＋０」でない場合においては、｛（ａ＝−０）かつ（ｂ＝＋０）｝という条件式が常に偽となるので、「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」という条件式の真偽は、（ａ＜ｂ）という条件式の真偽と完全に一致する。したがってこの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【００５７】
次に、条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する処理要素に置き換えることの意義について、図２３を用いて説明する。図２３は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０≧＋０」、「（左辺が−０でない）または（右辺が＋０でない）」、「（−０≧＋０）かつ｛（左辺が−０でない）または（右辺が＋０でない）｝」という３つの条件式に対する真偽値を示す真理表である。なお、「左辺」とは、処理要素Ｑ０への第１入力値ｃをいい、「右辺」とは、処理要素Ｑ０への第２入力値ｄをいう。
【００５８】
上述した通り、「−０≧＋０」という条件式については、Ｖマイコンにおいては偽と判定し、Ｓシミュレーションにおいては真と判定する。また、「（左辺が−０でない）または（右辺が＋０でない）」という条件式に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。したがって、「（−０≧＋０）かつ｛（左辺が−０でない）または（右辺が＋０でない）｝」という条件式に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。
【００５９】
したがって、書き換え後のモデルに対してＳシミュレーションを行った場合、書き換え前のモデルの処理要素Ｑ０に取って代わった置き換え部分に対する判定結果は、ｃが−０でｄが＋０のときには、偽となる（図２３下段右の斜線部に相当する）。
【００６０】
また、Ｖマイコンが実行するプログラムにおいては、書き換え後のモデルから生成されたプログラムの実行において、当該置き換え部分に対する判定結果は、ｃが−０でｄが＋０のときには、偽となる（図２３上段右の斜線部に相当する）。すなわち、このようなモデルの書き換えによって、Ｖマイコンの処理結果とＳシミュレーションの結果とが一致する。
【００６１】
なお、モデル書き換え後のＶマイコンの処理結果とＳシミュレーションの結果は、書き換え前のモデルから生成されたプログラムをＶマイコンが実行したときの処理結果と同じになる（図２３上段左の斜線部参照）。したがって、上述のモデルの書き換えの前後で、Ｖマイコンの処理内容は変化しない。それ故、上述のモデルの書き換えは、Ｓシミュレーションの制御処理を修正してＶマイコンの制御処理の内容と一致させるような書き換えである。
【００６２】
また、「ｃ＝−０かつｄ＝＋０」でない場合においては、｛（ｃ≠−０）または（ｄ≠＋０）｝という条件式が常に真となるので、「（ｃ≧ｄ）かつ｛ｃ≠−０）または（ｄ≠＋０）｝」という条件式の真偽は、（ｃ≧ｄ）という条件式の真偽と完全に一致する。したがってこの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【００６３】
以上説明した通り、このようなモデルの書き換えにより、Ｓシミュレーションの制御処理の内容がとＶマイコンの制御処理の内容と一致するので、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【００６４】
また、このようなモデルの書き換えにより、Ｓシミュレーションの制御処理が修正されてＶマイコンの制御処理の内容と一致する。このようにすることで、Ｖマイコンの「−０」と「＋０」の大小比較の扱いの特徴を生かしたモデルを設計する際においても、シミュレーションで、当該Ｖマイコンの作動を正しくシミュレートすることができる。
【００６５】
また、この方法においては、モデルそのものを書き換えるので、書き換えられたモデルのみを、他のモデルベース開発システムにコピーさえすれば、コピー先のモデルベース開発システムにおいては、従来通りのＳシミュレーションおよびプログラム生成を行うだけでも、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことを防止することができる。
【００６６】
また、上記目的を達成するための請求項６に記載の発明は、モデルに基づいて、モデルの制御処理を仮想的に実現するモデルシミュレーション装置についてのものである。このモデルシミュレーション装置は、モデルを仮想的に実行しているときに、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素Ｐ０に対して、当該第１の値ａとして−０が入力され、当該第２の値ｂとして＋０が入力されたことに基づいて、当該処理要素の出力として真値を出力する。すなわち、処理要素Ｐ０についての判定結果が真となる。
【００６７】
また、モデルシミュレーション装置は、当該モデルを仮想的に実行しているときに、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素Ｑ０に対して、当該第３の値ｃとして−０が入力され、当該第４の値ｄとして＋０が入力されたことに基づいて、当該処理要素Ｑ０の出力として偽値を出力する。すなわち、当該処理要素Ｑ０についての判定結果が偽となる。
【００６８】
このようにすることで、モデルシミュレーション装置のシミュレーションにおいて、処理要素Ｐ０、Ｑ０に対する判定結果が、Ｖマイコンにおける当該処理要素Ｐ０、Ｑ０に対応する条件の判定結果と一致するので、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【００６９】
また、このようなモデルの書き換えにより、モデルシミュレーション装置がシミュレートする制御処理が修正されてＶマイコンの制御処理の内容と一致する。このようにすることで、Ｖマイコンの−０と＋０の大小比較の扱いの特徴を生かしたモデルを設計する際においても、シミュレーションで、当該Ｖマイコンの作動を正しくシミュレートすることができる。
【００７０】
また、上記目的を達成するための請求項７に記載の発明は、モデルを書き換える機能と、モデルに基づいて、モデルの制御処理を仮想的に実現するモデルシミュレーション装置についてのものである。
【００７１】
あるときには、このモデルシミュレーション装置は、第３の作動として、当該モデル中における、入力された第１の値ａと入力された第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素を、入力された当該第１の値ａと入力された当該第２の値ｂについての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換え、また、当該モデル中における、入力された第３の値ｃと入力された第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素を、入力された当該第３の値ｃと入力された当該第４の値ｄについての条件式「（ｃ≧ｄ）かつ｛（ａ≠−０）または（ｂ≠＋０）｝」の真偽値を出力する１つ以上の処理要素に置き換える。
【００７２】
またあるときには、このモデルシミュレーション装置は、第４の作動として、当該モデルを仮想的に実行しているときに、入力された当該第１の値ａと入力された当該第２の値ｂについての条件式「ａ＜ｂ」の真偽値を出力する処理要素に対して、当該第１の値ａとして−０が入力され、当該第２の値ｂとして＋０が入力されたことに基づいて、当該処理要素の出力として真値を出力し、また、当該モデルを仮想的に実行しているときに、入力された当該第３の値ｃと入力された当該第４の値ｄについての条件式「ｃ≧ｄ」の真偽値を出力する処理要素に対して、当該第３の値ｃとして−０が入力され、当該第４の値ｄとして＋０が入力されたことに基づいて、当該処理要素の出力として偽値を出力する。
【００７３】
第３の作動によって、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがなくなるのは、請求項５に記載の発明の説明において述べた通りである。また、第４の作動によって、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがなくなるのは、請求項６に記載の発明の説明において述べた通りである。
【００７４】
本発明のモデルシミュレーション装置は、第３の作動および第４の作動のどちらを作動させるかについての切り替えを行うようになっている。このようになっていることで、必要に応じて、モデル中の処理要素Ｐ０、Ｑ０に対して、第３の作動によってモデル自体を書き換えて別の処理要素に置き換えるか、あるいは、第４の作動によって当該処理要素Ｐ０、Ｑ０に対応するプログラムに対するＶマイコンの判定をモデルシミュレーション装置上でエミュレートするかを適宜切り替えることができる。
【００７５】
なお、請求項８〜１４に示す通り、上記請求項１〜７に記載の発明の特徴は、プログラムとしても捉えることができる。
【００７６】
なお、上記および特許請求の範囲における括弧内の符号は、特許請求の範囲に記載された用語と後述の実施形態に記載される当該用語を例示する具体物等との対応関係を示すものである。
【発明を実施するための最良の形態】
【００７７】
（第１実施形態）
以下、本発明の第１実施形態について説明する。図１に、本実施形態に係るパーソナルコンピュータ１（制御プログラム生成装置、モデル書き換え装置、オブジェクトコード生成装置、モデルシミュレーション装置の一例に相当する）の構成を示す。
【００７８】
以下詳述する通り、このパーソナルコンピュータ１は、モデルからプログラム（ソースコード、オブジェクトコード）を生成し、また、モデルに記述された制御処理をシミュレートする。生成したプログラムのオブジェクトコードは、当該プログラムのインストール先であるマイクロコンピュータにおいて実行される。
【００７９】
パーソナルコンピュータ１は、このマイクロコンピュータにおけるオブジェクトコードの実行と、パーソナルコンピュータ１内におけるシミュレーションとで、「−０」と「＋０」との大小比較の取り扱いに違いがあったとしても、全体としての作動に食い違いが生じないよう、特殊な処理を実行する。
【００８０】
具体的には、パーソナルコンピュータ１は、あるときにはモデルからソースコードを生成する際に特殊な書き換え処理を行い、またあるときにはモデルに対して特殊な修正を行い、またあるときにはソースコードからオブジェクトコードを生成する際に特殊な書き換え処理を行い、またあるときにはシミュレーション実行時に特殊な処理を行う。
【００８１】
このパーソナルコンピュータ１の構成および作動について、以下詳述する。パーソナルコンピュータ１は、ディスプレイ１１、入力装置１２、ＲＡＭ１３、ＲＯＭ１４、ＨＤＤ（ハードディスクドライブ）１５、ＣＰＵ（コンピュータの一例に相当する）１６等から構成される。
【００８２】
ディスプレイ１１は、ＣＰＵ１６から受けた映像信号を、ユーザ（開発者）に対して映像として表示する。入力装置１２は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１６に出力する。
【００８３】
ＲＡＭ１３は読み出し、書き込み可能な揮発性記憶媒体であり、ＲＯＭ１４は読み出し専用の不揮発性記憶媒体であり、ＨＤＤ１５は読み出し、書き込み可能な不揮発性記憶媒体である。ＲＯＭ１４、ＨＤＤ１５には、ＣＰＵ１６が読み出して実行するプログラム等があらかじめ記憶されている。またＨＤＤ１５には、後述するモデルが記憶されている。
【００８４】
ＲＡＭ１３は、ＣＰＵ１６がＲＯＭ１４、ＨＤＤ１５に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、および作業用のデータを一時的に保存するための記憶領域として用いられる。
【００８５】
ＣＰＵ１６は、パーソナルコンピュータ１に電源が投入されることによって起動すると、ＲＯＭ１４から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（以下ＯＳと記す）その他のプログラムをＨＤＤ１５から読み出して実行することにより、起動処理を行う。起動処理以後、電源が遮断されるまで、ＣＰＵ１６は、入力装置１２からの信号、ＯＳによって予め定められたスケジュール等に基づいて、ＨＤＤ１５に記録されている各種プログラムを当該ＯＳ上のプロセスとして実行する。また、上記の起動処理およびプロセスにおいて、ＣＰＵ１６は必要に応じて入力装置１２から信号の入力を受け付け、またディスプレイ１１に映像信号を出力し、またＲＡＭ１３、ＨＤＤ１５に対してデータの読み出し／書き込みの制御を行う。
【００８６】
本実施形態のＣＰＵ１６は、車両制御のためのＥＣＵ（例えばエンジン制御ＥＣＵ、ブレーキ制御ＥＣＵ）に搭載されたマイクロコンピュータにおいて実行させるソースコード（すなわち、Ｃ、Ｃ＋＋等の高級言語で記述されたプログラム）をモデルから生成し、生したソースコードからＥＣＵのマイクロコンピュータで実行可能なオブジェクトコード（すなわち、機械語のプログラム）に変換し、あるいは、モデルの記述する制御処理をパーソナルコンピュータ１上で仮想的に実現するためのシミュレーションを行う。
【００８７】
ＣＰＵ１６は、これらのような処理を実現するために、後述するモデルベース開発プログラムを実行するようになっている。ＣＰＵ１６がこれらのような処理を実現することで、パーソナルコンピュータ１は、モデルベース開発システムとして機能する。以下、ＣＰＵ１６がプログラムを実行することによる作動を、そのプログラム自体の作動であるとして説明する。
【００８８】
図２に、この統合開発環境としてのモデルベース開発プログラム１００の構成を示す。モデルベース開発プログラム１００は、ソースソースコード生成プログラム１１０、実行形式変換プログラム１２０、モデル修正プログラム１３０、指示処理プログラム１４０、シミュレーションプログラム１５０、出力表示プログラム１６０等のプログラム群から構成される。これらプログラム群は、それぞれユーザの入力装置１２を用いた実行開始の操作に基づいて、その実行が開始される。
【００８９】
ソースコード生成プログラム１１０は、ユーザによってよって作成され、ＨＤＤ１５に記憶されているモデル２１０を読み出し、この読み出したモデル２１０の示すデータ入出力処理を実現するための命令が記述されたソースコードを生成する。なお、「ＨＤＤ１５からデータを読み出す」とは、ＨＤＤ１５からＲＯＭ１４にデータをコピーすることをいう。
【００９０】
ソースコード生成プログラム１１０の例としては、Ｍａｔｈｗｏｒｋｓ（登録商標）社のＲｅａｌ Ｔｉｍｅ Ｗｏｒｋｓｈｏｐ（登録商標）がある。なお、モデルは、モデルエディタ等のモデル作成用プログラムをＣＰＵ１６が実行し、その実行時にユーザがモデル作成のための作業を入力装置１２を用いて行うことで、作成されるようなっていてもよい。このようなモデルエディタもモデルベース開発プログラム１００に含まれていてもよい。
【００９１】
ここで、モデルについて説明する。モデルは、時系列の中でのデータ演算、データ入力およびデータ出力のうち少なくともいずれか１つの機能を表す処理要素（以下、ブロックという）、およびブロック間の入出力関係の仕様（すなわち、どのブロックからどのブロックにデータが渡されるか）を示す結線の組み合わせとして記述される。これらブロックおよび結線の組み合わせによって、入力データに応じた当該モデルの処理内容が記述される。処理の内容としては、例えば、エンジン制御、ブレーキ制御等の車載装置の制御処理がある。
【００９２】
モデルの例としては、Ｍａｔｈｗｏｒｋｓ（登録商標）社のＳｉｍｕｌｉｎｋ（登録商標）モデルがある。図３に、モデルの一例２０を示す。このモデル２０は、データ読み出しブロック２１ａ、２１ｂ、比較演算ブロック２３、定数ブロック２４、定数ブロック２５、切替ブロック２６、およびデータ書き込みブロック２７ｐを有している。
【００９３】
データ読み出しブロック２１ａおよび２１ｂは、それぞれ記憶媒体（より詳しくは、ＥＣＵのマイクロコンピュータ２（以下、マイコン２という）中のＲＡＭ等の記憶媒体）に記録された変数ａおよび変数ｂを読み出して出力する処理を表す。
【００９４】
比較演算ブロック２３は、データ読み出しブロック２１ａからの出力値を第１入力値とし、データ読み出しブロック２１ｂからの出力値を第２入力値とし、「第１入力値＜第２入力値」という条件の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【００９５】
定数ブロック２４は、１という定数を出力する処理を表す。定数ブロック２５は、２という定数を出力する処理を表す。切替ブロック２６は、定数ブロック２４の出力値を第１入力値とし、定数ブロック２５の出力値を第２入力値とし、比較演算ブロック２３の出力値（論理値すなわち真偽値）を参照入力値とし、参照入力値が１（真値）であるときには第１入力値を出力し、参照入力値が０（偽値）であるときには第２入力値を出力する処理を表す。
【００９６】
データ書き込みブロック２７ｐは、切替ブロック２６の出力値を変数ｐとして記憶媒体（より詳しくは、マイコン２中のＲＡＭ等の記憶媒体）に記録する処理を表す。
【００９７】
このような構成のモデル２０は、全体として見れば、記憶媒体から読み出した変数ａと変数ｂとを比較し、変数ａの方が小さければ１という値を変数ｐとして記憶媒体に記録し、変数ａの方が小さくなければ２という値を変数ｐとして記憶媒体に記録するという制御処理を表している。
【００９８】
従来、このようなモデル２０からは、図４に例示するようなＣ言語のソースコードが生成されるようになっている。このＣのソースコードは、左辺のａが右辺のｂよりも小さいか否かを判定する命令（第１行目のｉｆ文に相当する）、その判定結果が肯定的ならば変数ｐに１を代入する命令、および、その判定結果が否定的ならば変数ｐに２を代入する命令を含んでいる。したがって、モデル２０中の比較演算ブロック２３は、ソースコードにおいて、「左辺のａが右辺のｂよりも小さい」という条件の真偽を判定する命令に変換される。
【００９９】
次に、図５に、モデルの一例３０を示す。このモデル２０は、データ読み出しブロック２１ｃ、２１ｄ、比較演算ブロック２８、定数ブロック２４、定数ブロック２５、切替ブロック２６、およびデータ書き込みブロック２７ｑを有している。なお、図３と図５において、同一の符合が付されているブロックは、互いに同じ機能を有しているので、それらのブロックについての説明は省略する。
【０１００】
データ読み出しブロック２１ｃおよび２１ｄは、それぞれ記憶媒体（より詳しくは、マイコン２中のＲＡＭ等の記憶媒体）に記録された変数ｃおよび変数ｄを読み出して出力する処理を表す。
【０１０１】
比較演算ブロック２８は、データ読み出しブロック２１ｃからの出力値を第１入力値とし、データ読み出しブロック２１ｄからの出力値を第２入力値とし、「第１入力値≧第２入力値」という条件の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０１０２】
データ書き込みブロック２７ｑは、切替ブロック２６の出力値を変数ｑとして記憶媒体（より詳しくは、マイコン２中のＲＡＭ等の記憶媒体）に記録する処理を表す。
【０１０３】
このような構成のモデル３０は、全体として見れば、記憶媒体から読み出した変数ｃと変数ｄとを比較し、変数ｃ値が変数ｄの値以上であれば１という値を変数ｑとして記憶媒体に記録し、変数ｃ値が変数ｄの値以上でなければ２という値を変数ｑとして記憶媒体に記録するという制御処理を表している。
【０１０４】
従来、このようなモデル３０からは、図６に例示するようなＣのソースコードが生成されるようになっている。このＣのソースコードは、左辺のｃが右辺のｄ以上であるか否かを判定する命令（第１行目のｉｆ文に相当する）、その判定結果が肯定的ならば変数ｑに１を代入する命令、および、その判定結果が否定的ならば変数ｑに２を代入する命令を含んでいる。したがって、モデル３０中の比較演算ブロック２８は、ソースコードにおいて、「左辺のｃが右辺のｄ以上である」という条件の真偽を判定する命令に変換される。
【０１０５】
ただし、本実施形態のソースコード生成プログラム１１０は、後述する指示処理プログラム１４０からの指示内容に応じて、上記のような従来通りのソースコード（すなわち、比較ブロックの条件式を変化させずにそのまま保持したソースコード）を生成する場合と、従来とは異なるのソースコードを生成する場合とを切り替えるようになっている。ソースコード生成プログラム１１０の詳細な作動については後述する。
【０１０６】
実行形式変換プログラム１２０は、ソースコード生成プログラム１１０によって生成されてＨＤＤ１５に記録されたソースコード２２０を読み出し、読み出したソースコード２２０を実行形式（すなわち、オブジェクトコード）に変換する。ここで、オブジェクトコードとは、インストール先のＥＣＵのマイコン２が認識できる命令によって記載されたプログラム、すなわち、機械語のプログラムである。そして実行形式変換プログラム１２０は、変換結果としてのオブジェクトコード２３０を、ＨＤＤ１５に記録する。
【０１０７】
なお、ＨＤＤ１５に記録されたオブジェクトコード２３０は、ＲＯＭ、フラッシュメモリ等のマイコン２の不揮発性記憶媒体に記録される。そしてマイコン２は、ＥＣＵが車両に搭載された後、記録されたオブジェクトコード２３０を実行することで、オブジェクトコード２３０中に命令として記述された車両制御を実行する。
【０１０８】
なお、本実施形態においては、オブジェクトコード２３０のインストール先となるマイコン２は、Ｖマイコンである。Ｖマイコンは、「−０」と「＋０」の大小比較の取り扱いが、ＥＣエレクトロニクス社のＶ８５０Ｆと同じとなっているマイクロコンピュータ（例えばＶ８５０Ｆそのもの）をいう。具体的には、「−０＜＋０」という条件の判定結果が真となり、「−０≧＋０」という条件の判定結果が偽となることを特徴とするマイクロコンピュータが、Ｖマイコンである。なお、Ｖマイコンにおいては、他の「−０」と「＋０」の比較の取り扱いは、「−０」と「＋０」とが同じものであると考えた場合の判定結果と同じになる。例えば「−０＝＋０」、「＋０＝−０」、「＋０≦−０」、「−０≦＋０」という条件のそれぞれに対しては判定結果が真となり、「−０≠＋０」、「＋０≠−０」「＋０＞−０」、「−０＞＋０」、「−０＝＋０」、「−０≠＋０」という条件のそれぞれに対しては判定結果が偽となる。
【０１０９】
シミュレーションプログラム１５０は、モデル２１０をＨＤＤ１５から読み出し、そのモデルのシミュレーションを実行する。シミュレーションとは、そのモデルの記述する制御処理（例えばデータの入出力）の時間変化をパーソナルコンピュータ１上で仮想的に再現する処理をいう。そしてシミュレーションプログラム１５０は、モデル２１０のシミュレーションの結果外部へ出力されるデータ、ならびに、モデル２１０中のブロック毎の実行時間および入出力データを、実行結果データとして、ＨＤＤ１５に記録する。
【０１１０】
なお、ここで実行するシミュレーションは、Ｓシミュレーションである。Ｓシミュレーションは、「−０」と「＋０」の大小比較の取り扱いが、Ｓｉｍｕｌｉｎｋ（登録商標）のシミュレーションと同じになっているシミュレーションをいう。具体的には、Ｓシミュレーションでは、「−０」と「＋０」とを同じものだとして取り扱っている。
【０１１１】
したがって、Ｓシミュレーションと、上述のＶマイコンの作動とを比較すると、「−０＜＋０」、「−０≧＋０」という条件の判定結果のみが、互いに異なる。すなわち、「−０＜＋０」という条件に対しては、Ｖマイコンでは真となり、Ｓシミュレーションでは偽となる。また、「−０≧＋０」という条件に対しては、Ｖマイコンでは偽となり、Ｓシミュレーションでは真となる。
【０１１２】
出力表示プログラム１６０は、シミュレーションプログラム１５０によってＨＤＤ１５に記録された実行結果データを読み出して、ディスプレイ１１に表示させる。
【０１１３】
モデル修正プログラム１３０は、ＨＤＤ１５に記録されているモデル２１０を読み出し、読み出したモデル２１０に対して修正を加え、修正結果のモデル２１０を再度ＨＤＤ１５に記録する。修正の詳細については後述する。
【０１１４】
指示処理プログラム１４０は、入力装置１２に対するユーザの操作内容に応じて、ソースコード生成プログラム１１０、実行形式変換プログラム１２０、モデル修正プログラム１３０のいずれかに対して、シミュレーションの作動とマイコン２の作動に食い違いが生じないようにするための指示を出力する。「指示を出力する」とは、具体的には、ＨＤＤ１５またはＲＡＭ１３中の指示用データ領域に、指示対象のプログラムを指定するデータを記録する。
【０１１５】
例えば、ユーザが入力装置１２に対してソースコード生成時の特殊処理（後述する作動Ａに相当する）を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、ソースコード生成プログラム１１０を指定するデータを記録する。
【０１１６】
また例えば、ユーザが入力装置１２に対してモデル自体の特殊な修正（後述する作動Ｂに相当する）を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、モデル修正プログラム１３０を指定するデータを記録する。
【０１１７】
また例えば、ユーザが入力装置１２に対してオブジェクトコード生成時の特殊処理（後述する作動Ｃに相当する）を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、実行形式変換プログラム１２０を指定するデータを記録する。
【０１１８】
また例えば、ユーザが入力装置１２に対して通常処理を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、何も指定しない旨のデータを記録する。
【０１１９】
以上が、モデルベース開発プログラム１００の構成である。ここで、モデル２０のような、「ａ＜ｂ」という判定を行う比較演算ブロック２３を有しているモデル、およびモデル３０のような、「ｃ≧ｄ」という判定を行う比較演算ブロック２８を有しているモデルについて考える。なお、任意の変数ａ、ｂ、ｃ、ｄの具体的なは、マイコン２上での作動、および、ＣＰＵ１６におけるシミュレーションにおいて、制御処理の状況に応じて変化する。
【０１２０】
これらの比較演算ブロック２３、２８に対して、第１入力値ａ（またはｃ）が「−０」となり、第２入力値ｂ（またはｄ）が「＋０」となってしまう可能性がある。したがって、このようなモデルから従来の方法で生成されたオブジェクトコードをＶマイコンで実行した場合と、このようなモデルについてＳシミュレーションを実行した場合とでは、実行結果に食い違いが生じてしまう可能性がある。このことは、「ａ＜ｂ」という判定を行う比較演算ブロックおよび「ａ≧ｂ」という判定を行う比較演算ブロックを併せ持っているモデルについても同様である。
【０１２１】
このような食い違いを解消する方法として、本実施形態においては、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させる。一致させるための作動としては、作動Ａ（第１の作動の一例に相当する）、作動Ｂ（第２の作動の一例に相当する）、作動Ｃの３つがある。
【０１２２】
［作動Ａ］
まず、作動Ａ（第１の作動の一例に相当する）について説明する。作動Ａは、指示処理プログラム１４０がソースコード生成プログラム１１０を指定している場合に実行される。作動Ａでは、ソースコード生成プログラム１１０が、モデル２１０からソースコード２２０を生成する際に、モデル２１０中の特定の比較ブロックを、ソースコード２２０において、従来とは異なる命令に変換する。
【０１２３】
具体的には、ソースコード生成プログラム１１０は、図３に示したモデル２０から、図７に示すようなＣソースコードを生成する。このＣソースコードが、従来の方法によってモデル２０から生成された図４のＣソースコードと異なるのは、ｉｆ文中の判定条件である。すなわち、従来においては、「ａ＜ｂ」という条件式の真偽値を出力する比較演算ブロック２３を、「ａ＜ｂ」という条件式を判定する命令文に変換していたところを、本実施形態においては、当該比較演算ブロック２３を、「ａ＜ｂかつａ≠ｂ」という条件式を判定する命令文に変換する。
【０１２４】
また、ソースコード生成プログラム１１０は、図５に示したモデル３０から、図８に示すようなＣソースコードを生成する。このＣソースコードが、従来の方法によってモデル３０から生成された図６のＣソースコードと異なるのは、ｉｆ文中の判定条件である。すなわち、従来においては、「ｃ≧ｄ」という条件式の真偽値を出力する比較演算ブロック２８を、「ｃ≧ｄ」という条件を判定する命令文に変換していたところを、本実施形態においては、当該比較演算ブロック２８を、「ｃ≧ｄまたはｃ＝ｄ」という条件を判定する命令文に変換する。
【０１２５】
なお、作動Ａにおいては、実行形式変換プログラム１２０は、後述する通り、従来と同じ方法（すなわち、条件式を実質的に変更しない方法で）で、ソースコード２２０をオブジェクトコード２３０に変換する。
【０１２６】
ここで、まず条件式「ａ＜ｂ」の真偽値を出力する比較演算ブロック２３（処理要素Ｐ０に相当する）から、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令（すなわちｉｆ文）へ変換することの意義について、図９を用いて説明する。図９は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０＜＋０」、「−０≠＋０」、「（−０＜＋０）かつ（−０≠＋０）」という３つの条件に対する真偽値を示す真理表である。
【０１２７】
上述した通り、「−０＜＋０」という条件については、Ｖマイコンにおいては真（図においてはＴと記す）と判定し、Ｓシミュレーションにおいては偽（図においてはＦと記す）と判定する。また、「−０≠＋０」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。したがって、「（−０＜＋０）かつ（−０≠＋０）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。
【０１２８】
したがって、モデル中での条件式「ａ＜ｂ」の真偽値を出力する比較判定ブロックがあった場合、Ｓシミュレーションにおいては、ａが−０でｂが＋０のときには、その比較判定ブロックに対応する判定結果は偽となる（図９下段左の斜線部に相当する）。
【０１２９】
また、Ｖマイコンが実行するオブジェクトコード２３０は、オブジェクトコード２３０によってソースコード２２０から生成される。この際、ソースコード２２０中の「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令は、単にオブジェクトコード２３０において「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換される。
【０１３０】
したがって、Ｖマイコンにおいては、条件式「ａ＜ｂ」の真偽値を出力する比較判定ブロックが、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令へ変換されているので、Ｖマイコンにおいても、比較演算ブロック２３に対応する判定の判定結果は偽となる（図９上段右の斜線部に相当する）。すなわち、このような変換によって、Ｖマイコンの処理結果がＳシミュレーションの結果に合致するようになる。
【０１３１】
なお、このような変換によって、図９の斜線で示したように、ＶマイコンとＳシミュレーションとでは、異なる条件式の判定を行うことになる。しかし、そうなったとしても、ａが−０でｂが＋０となる場合以外においても、Ｖマイコンの判定結果がＳシミュレーションの結果と異なってしまうことはない。
【０１３２】
なぜなら、「ａが−０でかつｂが＋０である」という場合でない限り、ａ＜ｂなら必ずａ≠ｂが成り立つので、「ａ＜ｂ」という条件は、「（ａ＜ｂ）かつ（ａ≠ｂ）」という条件と論理的に同値だからである。
【０１３３】
次に、条件式「ｃ≧ｄ」の真偽値を出力する比較演算ブロック２８（処理要素Ｑ０に相当する）から、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令（すなわちｉｆ文）へ変換することの意義について、図１０を用いて説明する。図１０は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０≧＋０」、「−０＝＋０」、「（−０≧＋０）または（−０＝＋０）」という３つの条件に対する真偽値を示す真理表である。
【０１３４】
上述した通り、「−０≧＋０」という条件については、Ｖマイコンにおいては偽と判定し、Ｓシミュレーションにおいては真と判定する。また、「−０＝＋０」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。したがって、「（−０≧＋０）または（−０＝＋０）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。
【０１３５】
したがって、モデル中での条件式「ｃ≧ｄ」の真偽値を出力する比較判定ブロックがあった場合、Ｓシミュレーションにおいては、ｃが−０でｄが＋０のときには、その比較判定ブロックに対応する判定結果は真となる（図１０下段左の斜線部に相当する）。
【０１３６】
また、Ｖマイコンが実行するプログラムにおいては、条件式「ｃ≧ｄ」の真偽値を出力する比較判定ブロックが、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令へ変換されているので、Ｖマイコンにおいても、当該比較判定ブロックに対応する判定結果は真となる（図１０上段右の斜線部に相当する）。このような変換によって、Ｖマイコンの処理結果がＳシミュレーションの結果に合致するようになる。
【０１３７】
なお、このような変換によって、図１０の斜線で示したように、ＶマイコンとＳシミュレーションとでは、異なる条件式の判定を行うことになる。しかし、そうなったとしても、ｃが−０でｄが＋０となる場合以外においても、Ｖマイコンの判定結果がＳシミュレーションの結果と異なってしまうことはない。
【０１３８】
なぜなら、「ｃが−０でかつｄが＋０である」という場合でない限り、ｃ＜ｄなら（すなわち「ｃ≧ｄ」が偽ならば）必ずｃ≠ｄ（すなわち「ｃ＝ｄ」が偽）が成り立つので、「ｃ≧ｄ」という条件は、「（ｃ≧ｄ）または（ｃ＝ｄ）」という条件と論理的に同値だからである。
【０１３９】
したがって、上記のようなモデルからプログラムへの変換は、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させる変換となる。したがって、このような変換により、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【０１４０】
このような作動Ａを実現するためには、パーソナルコンピュータ１のユーザは、入力装置１２を操作して指示処理プログラム１４０を起動し、入力装置１２を操作して作動Ａを選択する入力を行う。すると、指示処理プログラム１４０は、上述した指示用データ領域に対して、ソースコード生成プログラム１１０を指定するデータを記録する。すなわち、指示処理プログラム１４０は、ソースコード生成プログラム１１０を指定する。
【０１４１】
次に、パーソナルコンピュータ１のユーザは、ＨＤＤ１５にモデル２１０を記録し、入力装置１２を操作してソースコード生成プログラム１１０を起動する。図１１に、ソースコード生成プログラム１１０の作動のフローチャート３００を示す。
【０１４２】
この図に示すように、ソースコード生成プログラム１１０は、まずステップ３０５においてＨＤＤ１５からモデル２１０を読み出し、続いてステップ３１０で、従来と同じ方法で、モデル２１０に対応するソースコードを生成し、生成したソースコードをＲＡＭ１３中に記録する。
【０１４３】
続いてステップ３１５では、指示処理プログラム１４０（図中では指示部と記す）から指示があったか否かを判定する。具体的には、指示用データ領域に、ソースコード生成プログラム１１０を指定するデータが記録されているか否かを判定する。判定結果が肯定的な場合、続いてステップ３２０を実行する。否定的な場合、続いてステップ３６０で、従来通りに生成されたままのソースコードを、ソースコード２２０としてＨＤＤ１５に記録し、その後ソースコード生成プログラム１１０の実行を終了する。
【０１４４】
ステップ３２０では、ステップ３１０で生成されたソースコードの先頭の命令（図中ではコードと記す）にポインタを設定する。ポインタとは、ソースコード中の特定の位置を指定するためのＲＡＭ１３中のデータである。
【０１４５】
ステップ３２５では、現在のポインタの示す位置の命令が「ａ＜ｂ」という条件を判定する命令であるか否かを判定し、そのような命令であれば、続いてステップ３３０を実行し、そのような命令でなければ、続いてステップ３３５を実行する。
【０１４６】
ステップ３３０では、ＲＡＭ１３中のソースコードにおいて、ポインタの指定する位置における「ａ＜ｂ」という条件を判定する命令を、「（ａ＜ｂ）かつ（ａ≠ｂ）」という条件を判定する命令に書き換える。ステップ３３０に続いては、ステップ３４５を実行する。
【０１４７】
ステップ３３５では、読み出した命令（すなわちポインタのある位置の命令）が「ｃ≧ｄ」という条件を判定する命令であるか否かを判定し、そのような命令であれば、続いてステップ３４０を実行し、そのような命令でなければ、続いてステップ３４５を実行する。
【０１４８】
ステップ３４０では、ＲＡＭ１３中のソースコードにおいて、ポインタの指定する位置における「ｃ≧ｄ」という条件を判定する命令を、「（ｃ≧ｄ）または（ｃ＝ｄ）」という条件を判定する命令に書き換える。ステップ３４０に続いては、ステップ３４５を実行する。
【０１４９】
ステップ３４５では、現在ポインタの指定する位置が、ソースコード中の最後の命令であるか否かを判定し、最後であれば続いてステップ３６０で、ＲＡＭ１３中のソースコードを、ソースコード２２０としてＨＤＤ１５に記録し、ソースコード生成プログラム１１０の実行を終了する。ステップ３５０では、ポインタの指定先を次の命令に移動させ、その後再度ステップ３２５を実行する。
【０１５０】
以上のような処理により、ソースコード生成プログラム１１０は、ＨＤＤ１５に記録されたモデル２１０から従来通りの方法（すなわち、条件式を実質的に変更しない方法）でソースコードを生成してＲＡＭ１３に記録する（ステップ３０５、３１０参照）。
【０１５１】
そして、指示処理プログラム１４０がソースコード生成プログラム１１０を指定していない場合においては（ステップ３１５参照）、そのままＲＡＭ１３中の従来通りのソースコードを、モデル２１０に対応するソースコード２２０として、ＨＤＤ１５に記録する（ステップ３６０参照）。
【０１５２】
しかし、指示処理プログラム１４０からソースコード生成プログラム１１０を指定している場合においては（ステップ３１５参照）、作動Ａを実行し、当該ＲＡＭ１３中のソースコードのうち、比較演算ブロック２３に対応して生成された命令のすべてを、「（ａ＜ｂ）かつ（ａ≠ｂ）」という条件を判定する命令に書き換える（ステップ３２５、３３０参照）と共に、比較演算ブロック２８に対応して生成された命令のすべてを、「（ｃ≧ｄ）または（ｃ＝ｄ）」という条件を判定する命令に書き換え（ステップ３３５、３４０参照）、その後に、ＲＡＭ１３中の書き換えられたソースコードを、モデル２１０に対応するソースコード２２０としてＨＤＤ１５に記録する（ステップ３６０参照）。
【０１５３】
なお、後述するように、実行形式変換プログラム１２０は、指示処理プログラム１４０によって実行形式変換プログラム１２０が指定されていない場合、従来通りの方法で、比較演算の条件式を変化させないまま、ソースコード２２０をＶマイコン用のオブジェクトコード２３０に変換する。
【０１５４】
また、後述するように、モデル修正プログラム１３０は、指示処理プログラム１４０によってモデル修正プログラム１３０が指定されていない場合、モデル２１０を書き換えない。
【０１５５】
したがって、作動Ａにおいては、モデル２１０中における、第１入力値ａ（入力された第１の値ａに相当する）と第２入力値ｂ（入力された第２の値ｂに相当する）についての条件式「ａ＜ｂ」の真偽値を出力するブロックのすべてが、当該モデル２１０に対応するソースコードおよびオブジェクトコードにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令に変換されている。
【０１５６】
また、モデル２１０中における、第１入力値ｃ（入力された第３の値ｃに相当する）と第２入力値ｄ（入力された第４の値ｄに相当する）についての条件式「ｃ≧ｄ」の真偽値を出力するブロックのすべてが、当該モデル２１０に対応するソースコードおよびオブジェクトコードにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令に変換されれている。
【０１５７】
また、シミュレーションプログラム１５０は、Ｓシミュレーションを実行することで、モデル２１０中の比較演算の条件式をそのまま判定する。
【０１５８】
したがって、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがなくなる。
【０１５９】
［作動Ｂ］
次に、作動Ｂについて説明する。作動Ｂを実現するためには、パーソナルコンピュータ１のユーザは、入力装置１２を操作して指示処理プログラム１４０を起動し、入力装置１２を操作して作動Ｂを選択する入力を行う。すると、指示処理プログラム１４０は、上述した指示用データ領域に対して、モデル修正プログラム１３０を指定するデータを記録する。すなわち、指示処理プログラム１４０は、モデル修正プログラム１３０を指定する。
【０１６０】
このようにすることで、ユーザが入力装置１２を用いてモデル修正プログラム１３０を起動したとき、モデル修正プログラム１３０が作動Ｂを実行し、モデル２１０中の、すべての比較演算ブロック２３および比較演算ブロック２８を、別のブロック群に置き換える。
【０１６１】
そして、ソースコード生成プログラム１１０は、図１１のステップ３１５の判定結果が否定的になるので、書き換えられたモデル２１０に対応するソースコード２２０中の命令においては、従来通り、モデル２１０の比較演算の条件式を実質的に変化させていない。
【０１６２】
そして、実行形式変換プログラム１２０は、指示処理プログラム１４０によって指定されていないので、後述する通り、ソースコード２２０に対応するオブジェクトコード２３０中の命令においては、従来通り、ソースコード２２０のｉｆ文の条件式を実質的に変化させていない。
【０１６３】
そして、シミュレーションプログラム１５０は、モデル修正プログラム１３０によって書き換えられたモデル２１０中の比較演算の条件式を、Ｓシミュレーションによってそのまま（すなわち条件式を実質的に変更せず）判定する。
【０１６４】
図１２に、モデル修正プログラム１３０の処理のフローチャート４００を示す。モデル修正プログラム１３０は、まずステップ４１０で、指示処理プログラム１４０（図中では指示部と記す）から指示があったか否かを判定する。具体的には、指示用データ領域に、モデル修正プログラム１３０を指定するデータが記録されているか否かを判定する。判定結果が肯定的である場合、続いてステップ４２０を実行し、否定的である場合、モデル２１０に変更を加えないままモデル修正プログラム１３０を終了する。
【０１６５】
ステップ４２０では、ＨＤＤ１５からＲＡＭ１３にモデル２１０を読み出し、続いてステップ４３０では、読み出したＲＡＭ１３中のモデルの先頭のブロックにポインタを設定する。ここでいうポインタとは、モデル中の特定の位置を指定するためのＲＡＭ１３中のデータである。
【０１６６】
続いてステップ４４０では、現在のポインタの示すブロックが置換対象のブロックであるか否かを判定し、置換対象のブロックでなければ続いてステップ４６０を実行する。置換対象のブロックであれば、続いてステップ４５０で当該置換対象ブロックを別のブロック群に置換し、続いてステップ４６０を実行する。
【０１６７】
ステップ４６０では、現在のポインタの示すブロックがＲＡＭ１３中の最後のブロックであるか否かを判定し、最後のブロックでなければ続いてステップ４７０でポインタの指定先を次のブロックに設定し、再度ステップ４４０を実行する。また、最後のブロックであれば、続いてステップ４８０で、ＲＡＭ１３中の書き換えられたモデルを、ＨＤＤ１５中のモデル２１０に上書き記録し、その後モデル修正プログラム１３０の実行を終了する。
【０１６８】
以上のような処理により、モデル修正プログラム１３０は、指示処理プログラム１４０がモデル修正プログラム１３０を指定していない場合においては（ステップ４１０参照）、モデル２１０を書き換えない。
【０１６９】
しかし、指示処理プログラム１４０がモデル修正プログラム１３０を指定している場合においては（ステップ４１０参照）、作動Ｂを実行し、モデル２１０をＨＤＤ１５からＲＡＭ１３に読み込み（ステップ４２０参照）、読み込んだモデルの置換対象ブロックのすべてを特定のブロック群に置換し（ステップ４４０、４５０参照）、置換後のモデルをＨＤＤ１５のモデル２１０に上書き記録する（ステップ４８０参照）。
【０１７０】
ここで、置換対象ブロックと、置換によって置換対象ブロックに取って代わる代替ブロック群について説明する。置換対象ブロックとなるブロックは、２種類ある。１つは、モデル２１０中の、第１入力値ａ（入力された第１の値ａに相当する）と第２入力値ｂ（入力された第２の値ｂに相当する）についての条件式「ａ＜ｂ」の真偽値を出力する比較演算ブロック２３である。もう１つは、第１入力値ｃ（入力された第３の値ｃに相当する）と第２入力値ｄ（入力された第４の値ｄに相当する）についての条件式「ｃ≧ｄ」の真偽値を出力する比較演算ブロック２８である。
【０１７１】
ここで、モデル修正プログラム１３０が図３に示したモデル２０に対して作動Ｂにより書き換えを行った結果のモデル４０を、図１３に示す。モデル４０においては、モデル２０中の比較演算ブロック２３が、比較演算ブロック３１、比較演算ブロック３２、および論理積ブロック３３に置き換わっている。なお、図３と図１３において、同一の符合が付されているブロックは、互いに同じ機能を有しているので、それらのブロックについての説明は省略する。
【０１７２】
比較演算ブロック３１は、データ読み出しブロック２１ａからの出力値ａを第１入力値とし、データ読み出しブロック２１ｂからの出力値ｂを第２入力値とし、「第１入力値＜第２入力値」という条件式の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０１７３】
比較演算ブロック３２は、データ読み出しブロック２１ａからの出力値ａを第１入力値とし、データ読み出しブロック２１ｂからの出力値ｂを第２入力値とし、「第１入力値≠第２入力値」という条件式の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０１７４】
論理積ブロック３３は、比較演算ブロック３１からの出力値（真偽値）と比較演算ブロック３２からの出力値（真偽値）の論理積を出力する処理を表す。
【０１７５】
このようなブロック３１〜３３は、比較演算ブロック２３の代替ブロック群である。このブロック群３１〜３３は全体として、「データ読み出しブロック２１ａからの出力値ａがデータ読み出しブロック２１ｂからの出力値ｂよりも小さく、かつ、データ読み出しブロック２１ａからの出力値ａがデータ読み出しブロック２１ｂからの出力値ｂと同じでない」という条件が満たされたときに真値を出力し、当該条件が満たされていないときに偽値を出力する機能を表している。
【０１７６】
つまり、置換によって比較演算ブロック２３に取って代わるブロック３１〜３３は、第１入力値ａと第２入力値ｂについての条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽値を出力するブロック群（処理要素Ｐ１の一例に相当する）である。
【０１７７】
次に、モデル修正プログラム１３０が図５に示したモデル３０に対して作動Ｂにより書き換えを行った結果のモデル５０を、図１４に示す。モデル５０においては、モデル３０中の比較演算ブロック２８が、比較演算ブロック３５、比較演算ブロック３６、および論理和ブロック３７に置き換わっている。なお、図５と図１４において、同一の符合が付されているブロックは、互いに同じ機能を有しているので、それらのブロックについての説明は省略する。
【０１７８】
比較演算ブロック３５は、データ読み出しブロック２１ｃからの出力値ｃを第１入力値とし、データ読み出しブロック２１ｄからの出力値ｄを第２入力値とし、「第１入力値≧第２入力値」という条件式の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０１７９】
比較演算ブロック３６は、データ読み出しブロック２１ｃからの出力値ｃを第１入力値とし、データ読み出しブロック２１ｄからの出力値ｄを第２入力値とし、「第１入力値＝第２入力値」という条件式の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０１８０】
論理和ブロック３７は、比較演算ブロック３５からの出力値（真偽値）と比較演算ブロック３６からの出力値（真偽値）の論理和を出力する処理を表す。
【０１８１】
このようなブロック３５〜３７は、比較演算ブロック２８の代替ブロック群である。ここのブロック群３５〜３７は、全体として、「データ読み出しブロック２１ｃからの出力値ｃがデータ読み出しブロック２１ｄからの出力値ｄ以上であり、または、データ読み出しブロック２１ｃからの出力値ｃがデータ読み出しブロック２１ｄからの出力値ｄと同じである」という条件が満たされたときに真値を出力し、当該条件が満たされていないときに偽値を出力する機能を表している。
【０１８２】
つまり、置換によって比較演算ブロック２８に取って代わるブロック３１〜３３は、第１入力値ｃと第２入力値ｄについての条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽値を出力するブロック群（処理要素Ｑ１の一例に相当する）である。
【０１８３】
モデルそのものをこのように書き換えることの意義について、図１５および図１６を用いて説明する。図１５は図９と同じ真理表であり、斜線を施した部分のみが異なっている。また図１６は図１０と同じ真理表であり、斜線を施した部分のみが異なっている。
【０１８４】
書き換え前のモデルの比較演算ブロック２３に対する、ａ＝−０かつｂ＝＋０の場合のＳシミュレーションの結果は、図１５中の下段左側の斜線部に示す通り偽である。また、書き換え後のモデルのブロック群３１〜３３に対する、ａ＝−０かつｂ＝＋０の場合のＳシミュレーションの結果は、図１５中の下段右側の斜線部に示す通り偽である。
【０１８５】
また、書き換え前の比較演算ブロック２８に対する、ｃ＝−０かつｄ＝＋０の場合のＳシミュレーションの結果は、図１６中の下段左側の斜線部に示す通り真である。また、書き換え後のモデルのブロック群３５〜３７に対する、ｃ＝−０かつｄ＝＋０の場合のＳシミュレーションの結果は、図１６中の下段右側の斜線部に示す通り真である。したがって、ａ＝ｃ＝−０かつｂ＝ｄ＝＋０の場合においては、モデルの書き換え前後でＳシミュレーションの結果に変化がない。
【０１８６】
また、書き換え後のモデルを通常の方法（すなわち条件式を変化させない方法）でオブジェクトコードに変換し、そのオブジェクトコードをＶマイコンで実行した場合を考える。この場合、モデルのブロック群３１〜３３に対応するプログラム中の命令に対する、ａ＝−０かつｂ＝＋０の場合のＶマイコンの判定結果は、図１５中の上段右側の斜線部に示す通り偽である。またこの場合、モデルのブロック群に対応するプログラム中の命令に対する、ｃ＝−０かつｄ＝＋０の場合のＶマイコンの判定結果は、図１６中の上段右側の斜線部に示す通り真である。
【０１８７】
すなわち、ａ＝ｃ＝−０かつｂ＝ｄ＝＋０の場合においては、書き換え前のモデルに対するＳシミュレーションの結果と、書き換え後のモデルから生成したプログラムによるＶマイコンの作動の結果とは、同じである。
【０１８８】
また、既述の通り、「ａ＝−０かつｂ＝＋０」でない場合においては、比較演算ブロック２３とブロック群３１〜３３は論理的に同値であり、「ｃ＝−０かつｄ＝＋０」でない場合においては、比較演算ブロック２８とブロック群３５〜３７は論理的に同値である。したがってこれらの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【０１８９】
以上のようなことから、上記のようなモデルの書き換えは、Ｖマイコンの制御処理を修正してＳシミュレーションの制御処理の内容と一致させる書き換えとなる。したがって、このような変換により、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【０１９０】
また、この方法においては、モデルそのものを書き換えるので、書き換えられたモデルのみを、他のモデルベース開発システムにコピーさえすれば、コピー先のモデルベース開発システムにおいては、従来通りのＳシミュレーションおよびプログラム生成を行うだけでも、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことを防止することができる。
【０１９１】
［作動Ｃ］
次に、作動Ｃについて説明する。作動Ｃを実現するためには、パーソナルコンピュータ１のユーザは、入力装置１２を操作して指示処理プログラム１４０を起動し、入力装置１２を操作して作動Ｃを選択する入力を行う。すると、指示処理プログラム１４０は、上述した指示用データ領域に対して、実行形式変換プログラム１２０を指定するデータを記録する。すなわち、指示処理プログラム１４０は、実行形式変換プログラム１２０を指定する。
【０１９２】
このようにすることで、ユーザが入力装置１２を操作して実行形式変換プログラム１２０を起動すると、実行形式変換プログラム１２０が作動Ｃを実行し、ソースコード２２０中の、「ａ＜ｂ」という条件を判定する命令のすべて、および、「ｃ≧ｄ」という条件を判定する命令のすべてを、オブジェクトコードにおいて、別の条件を判定する命令に置き換える。
【０１９３】
そして、ソースコード生成プログラム１１０は、図１１のステップ３１５の判定結果が否定的になるので、モデル２１０に対応するソースコード２２０中の命令においては、従来通り、モデル２１０の比較演算の条件式を実質的に変化させていない。
【０１９４】
そして、モデル修正プログラム１３０は、図１２のステップ４１０の判定結果が否定的になるので、モデル２１０を書き換えない。
【０１９５】
そして、シミュレーションプログラム１５０は、Ｓシミュレーションを実行することで、モデル２１０中の比較演算の条件式をそのまま判定する。
【０１９６】
図１７に、実行形式変換プログラム１２０の処理のフローチャート６００を示す。実行形式変換プログラム１２０は、まずステップ６０５で、ＨＤＤ１５からソースコード２２０を読み出し、続いてステップ６１０で、従来と同じ方法（すなわち、比較ブロックの条件式を実質的に変化させない方法）で、ソースコード２２０に対応するオブジェクトコードを生成し、生成したオブジェクトコードをＲＡＭ１３中に記録する。
【０１９７】
なお、ステップ６０５で読み出すソースコード２２０は、上述のソースコード生成プログラム１１０によってモデル２１０から自動的に生成されたソースコードであってもよい。あるいは、ステップ６０５で読み出すソースコード２２０は、人がモデル２１０の構成を見て、頭の中でそのモデルに対応するソースコードを考案し、考案したソースコードを入力装置１２（または他のコンピュータ）を用いて入力することによって生成されたソースコードであってもよい。すなわち、ステップ６０５で読み出すソースコード２２０は、人によって作成されたものであってもよい。
【０１９８】
続いてステップ６２０では、指示処理プログラム１４０（図中では指示部と記す）から指示があったか否かを判定する。具体的には、指示用データ領域に、実行形式変換プログラム１２０を指定するデータが記録されているか否かを判定する。判定結果が肯定的である場合、続いてステップ６３０を実行する。否定的である場合、続いてステップ６８０で、従来通りに生成されたままのＲＡＭ１３中のオブジェクトコードを、ソースコード２２０に対応するオブジェクトコード２３０としてＨＤＤ１５に記録し、その後実行形式変換プログラム１２０の実行を終了する。
【０１９９】
ステップ６３０では、読み出したＲＡＭ１３中のオブジェクトコードの先頭の命令（図中ではコードと記す）にポインタを設定する。ここでいうポインタとは、オブジェクトコード中の特定の位置を指定するためのＲＡＭ１３中のデータである。
【０２００】
続いてステップ６４０では、現在のポインタの示す命令が置換対象の命令であるか否かを判定し、置換対象の命令でなければ続いてステップ６６０を実行する。置換対象の命令であれば、続いてステップ６５０で当該置換対象命令を別の命令に置換し、続いてステップ６６０を実行する。
【０２０１】
ステップ６６０では、現在のポインタの示す命令がＲＡＭ１３中の最後の命令であるか否かを判定し、最後の命令でなければ続いてステップ６７０でポインタの指定先を次の命令に設定し、再度ステップ６４０を実行する。また、最後のブロックであれば、続いてステップ６８０で、ＲＡＭ１３中の書き換えられたオブジェクトコードを、ソースコード２２０に対応するオブジェクトコード２３０として、ＨＤＤ１５に記録し、その後実行形式変換プログラム１２０の実行を終了する。
【０２０２】
以上のような処理により、実行形式変換プログラム１２０は、指示処理プログラム１４０が実行形式変換プログラム１２０においては（ステップ６２０参照）、ソースコード２２０から従来通り条件式を実質的に変更しないまま生成したオブジェクトコード（ステップ６１０参照）をＨＤＤ１５に記録する（ステップ６８０参照）。
【０２０３】
しかし、指示処理プログラム１４０が実行形式変換プログラム１２０を指定している場合においては（ステップ６２０参照）、作動Ｃを実行し、ソースコード２２０から従来通り条件式を実質的に変更しないまま生成したオブジェクトコード（ステップ６１０参照）の置換対象の命令のすべてを特定の命令に置換し（ステップ６４０、６５０参照）、置換後のオブジェクトコードをソースコード２２０に対応するオブジェクトコード２３０としてＨＤＤ１５に記録する（ステップ６８０参照）。
【０２０４】
ここで、置換対象の命令と、置換によって置換対象命令に取って代わる代替命令について説明する。置換対象命令となる命令は、２種類ある。１つは、ソースコード２２０中の、変数ａと変数ｂについての条件式「ａ＜ｂ」の真偽を判定する命令である。もう１つは、変数ｃと変数ｄについての条件式「ｃ≧ｄ」の真偽を判定する命令である。
【０２０５】
まず、実行形式変換プログラム１２０が図４に示したＣソースコード（モデル２０に対応する）から作動Ｃにより作成した結果のマイコン２用のオブジェクトコード（すなわち機械語プログラム）を、図１８に示す。なお、図１８においては、機械語プログラムをアセンブリ言語の形式で表している。
【０２０６】
マイコン２は、この機械語プログラムを実行することで、以下のような処理を行う。すなわち、第１行目で、ＣＰＵ１６中のレジスタｒ１に変数ａをロードし、続いて第２行目で、ＣＰＵ１６中のレジスタｒ２に変数ｂをロードし、続いて第３行目で、ｒ１−ｒ２という演算を行い、続いて第４行目で、演算結果の値すなわちｒ１−ｒ２が＋０以上であるか否かの判定を行い、＋０以上であればｌａｂｅｌ２の行（９行目）にジャンプし、＋０以上でなければ次行に進む。
【０２０７】
５行目では、ｒ１−ｒ２という演算を行い、続いて第６行目で、演算結果の値すなわちｒ１−ｒ２が＋０に等しいか否かの判定を行い、等しければｌａｂｅｌ２の行（９行目）にジャンプし、等しくなければ次行に進む。
【０２０８】
７行目（ｌａｂｅｌ１の行）では、ＣＰＵ１６中のレジスタｒ３に０ｘ３ｆ８０００００（浮動小数点表現における１）をロードし、続いて８行目ではｌａｂｅｌ３の行（１０行目）にジャンプする。
【０２０９】
９行目（ｌａｂｅｌ２の行）では、レジスタｒ３に０ｘ４０００００００（浮動小数点表現における２）をロードし、続いて１０行目（ｌａｂｅｌ３の行）では、レジスタｒ３の値をＲＡＭ１３中の変数ｐにストアし、その後実行を終了する。
【０２１０】
例えば、ａが−０で、ｂが＋０である場合、４行目で「−０−（−０）」≧＋０が評価される。マイコン２においては、「−０−（−０）」は−０となり、「−０≧＋０」という条件は偽となるので、変数ｐには１が代入される。
【０２１１】
このように、図１８のオブジェクトコードを実行することで、マイコン２は、「（ａ−ｂ≧＋０）または（ａ＝ｂ）」であるときに、変数ｐに２を代入し、そうでない場合は、変数ｐに１を代入する。
【０２１２】
ここで、「（ａ−ｂ≧０）または（ａ＝ｂ）」の否定が「（ａ−ｂ＜＋０）かつ（ａ≠ｂ）」であることに鑑みれば、このマイコン２の作動は、『「（ａ＜ｂ）かつ（ａ≠ｂ）」であるときに、変数ｐが１となり、そうでない場合は、変数ｐが２となる』という作動と同じである。
【０２１３】
このように、実行形式変換プログラム１２０は、図４のソースコード中の第１行目の命令（ｉｆ文）を、図１８のオブジェクトコードにおける１行目〜６行目までに変換している。すなわち、ソースコード中における、変数ａ（第１の値ａに相当する）と変数ｂ（第２の値ｂに相当する）についての条件式「ａ＜ｂ」の真偽を判定する命令を、当該ソースコードに対応するオブジェクトコードにおいて、条件式「（ａ＜ｂ）かつ（ａ≠ｂ）」の真偽を判定する命令（代替命令に相当する）に変換している。
【０２１４】
次に、実行形式変換プログラム１２０が図６に示したＣソースコード（モデル３０に対応する）から作動Ｃにより作成した結果のマイコン２用のオブジェクトコードを、図１９に示す。なお、図１９においては、機械語プログラムをアセンブリ言語の形式で表している。
【０２１５】
マイコン２は、この機械語プログラムを実行することで、以下のような処理を行う。すなわち、第１行目で、ＣＰＵ１６中のレジスタｒ１に変数ｃをロードし、続いて第２行目で、ＣＰＵ１６中のレジスタｒ２に変数ｄをロードし、続いて第３行目で、ｒ１−ｒ２という演算を行い、続いて第４行目で、演算結果の値すなわちｒ１−ｒ２が＋０以上であるか否かの判定を行い、＋０以上であればｌａｂｅｌ１の行（７行目）にジャンプし、＋０以上でなければ次行に進む。
【０２１６】
５行目では、ｒ１−ｒ２という演算を行い、続いて第６行目で、演算結果の値すなわちｒ１−ｒ２が＋０に等しくないか等しいかの判定を行い、等しくなければｌａｂｅｌ２の行（９行目）にジャンプし、等しければ次行に進む。
【０２１７】
７行目（ｌａｂｅｌ１の行）では、ＣＰＵ１６中のレジスタｒ３に０ｘ３ｆ８０００００（浮動小数点表現における１）をロードし、続いて８行目ではｌａｂｅｌ３の行（１０行目）にジャンプする。
【０２１８】
９行目（ｌａｂｅｌ２の行）では、レジスタｒ３に０ｘ４０００００００（浮動小数点表現における２）をロードし、続いて１０行目（ｌａｂｅｌ３の行）では、レジスタｒ３の値をＲＡＭ１３中の変数ｐにストアし、その後実行を終了する。
【０２１９】
例えば、ｃが−０で、ｄが＋０である場合、４行目で「−０−（−０）」≧＋０が評価される。マイコン２においては、「−０−（−０）」は−０となり、「−０≧＋０」という条件は偽となるので、５行目に進み、６行目で、「−０−（−０）」≠＋０が評価される。マイコン２においては、「−０≠＋０」という条件は真となるので、次行に進み、変数ｐには１が代入される。
【０２２０】
このように、図１９のオブジェクトコードを実行することで、マイコン２は、「（ｃ−ｄ≧＋０）または（ｃ＝ｄ）」であるときに、変数ｑに１を代入し、そうでない場合は、変数ｑに２を代入する。
【０２２１】
したがって、実行形式変換プログラム１２０は、図６のソースコード中の第１行目の命令（ｉｆ文）を、図１８のオブジェクトコードにおける１行目〜６行目までに変換している。すなわち、ソースコード中における、変数ｃ（第３の値ｃに相当する）と変数ｄ（第４の値ｄに相当する）についての条件式「ｃ≧ｄ」の真偽を判定する命令を、当該ソースコードに対応するオブジェクトコードにおいて、条件式「（ｃ≧ｄ）または（ｃ＝ｄ）」の真偽を判定する命令（代替命令に相当する）に変換している。
【０２２２】
このように、モデル２１０から従来の方法で（すなわち、判定の条件式を変化させない方法で）生成されたプログラム２２０のソースコード中の、「ａ＜ｂ」という条件式を判定する命令および「ｃ≧ｄ」という条件式を判定する命令の部分のすべてを、当該プログラムのオブジェクトコード２３０において、上述のように変換することで、作動Ａの場合と同等の効果を得ることができる。
【０２２３】
なぜなら、マイコン２（すなわちＶマイコン）において実行されるオブジェクトコードの内容は、作動Ａの場合と同様、マイコン２の制御処理を修正してＳシミュレーションの制御処理の内容と一致させるように変換されているからである。したがって、このような変換により、マイコン２とＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【０２２４】
また、ＣＰＵ１６は、入力装置１２に対するユーザの操作に応じて、指示処理プログラム１４０を実行することで、作動Ａ、作動Ｂ、作動Ｃのいずれを作動させるかについての排他的な切り替えを行うようになっている。このようになっていることで、ＣＰＵ１６は、モデル中の比較演算ブロック２３、比較演算ブロック２８に対して、必要に応じて、作動Ａでソースコード生成時に条件式の置き換えを行うか、作動Ｂでモデルそのものの条件式を書き換えるか、作動Ｃでオブジェクトコード生成時に条件式の置き換えを行うかを適宜切り替えることができる。
（第２実施形態）
次に、本発明の第２実施形態について説明する。本実施形態は、ＶマイコンとＳシミュレーションとの間で「−０＜＋０」、「−０≧＋０」の判定結果が異なることに起因する作動の食い違いを解消する点では同じである。しかし、第１実施形態においては、マイコン２における作動を修正してＳシミュレーションの作動に合わせるよう、ソースコードの修正、モデルの修正、およびオブジェクトコードの修正を行っている。これに対し、本実施形態においては、シミュレーションプログラム１５０によるシミュレーションの作動を修正してマイコン２の作動に合わせるよう、モデルの修正およびシミュレーション方法の変更を行う。
【０２２５】
以下、本実施形態が第１実施形態と異なる部分について説明し、第１実施形態と同じ部分については説明を省略する。
【０２２６】
本実施形態においては、指示処理プログラム１４０は、入力装置１２に対するユーザの操作内容に応じて、モデル修正プログラム１３０およびシミュレーションプログラム１５０のいずれかに対して、シミュレーションの作動とマイコン２の作動に食い違いが生じないようにするための指示を出力する。「指示を出力する」とは、具体的には、ＨＤＤ１５またはＲＡＭ１３中の指示用データ領域に、指示対象のプログラムを指定するデータを記録する。
【０２２７】
例えば、ユーザが入力装置１２に対してモデル自体の特殊な修正（後述する作動Ｄに相当する）を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、モデル修正プログラム１３０を指定するデータを記録する。
【０２２８】
また例えば、ユーザが入力装置１２に対してシミュレーション時の特殊処理（後述する作動Ｅに相当する）を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、シミュレーションプログラム１５０を指定するデータを記録する。
【０２２９】
また例えば、ユーザが入力装置１２に対して通常処理を選択する入力があった場合、指示処理プログラム１４０は、当該指示用データ領域に対して、何も指定しない旨のデータを記録する。
【０２３０】
したがって、本実施形態においては、指示用データ領域に対して、ソースコード生成プログラム１１０および実行形式変換プログラム１２０を指定する旨のデータが記録されることはない。
【０２３１】
それ故、ソースコード生成プログラム１１０は、図１１のステップ３１５で指示なしと判定し、従来通りモデル２１０中の比較判定の条件式を実質的に変更せずに、モデル２１０からソースコード２２０を生成する。
【０２３２】
また、実行形式変換プログラム１２０は、図１７のステップ６２０で指示なしと判定し、従来通りソースコード２２０中の比較判定の条件式を実質的に変更せずに、ソースコード２２０からオブジェクトコード２３０を生成する。
【０２３３】
シミュレーションプログラム１５０によるシミュレーションの作動を修正してマイコン２の作動に合わせるよう、モデルの修正およびシミュレーション方法の変更を行うための作動としては、作動Ｄ（第３の作動に相当する）、作動Ｅ（第４の作動に相当する）の２つがある。
【０２３４】
［作動Ｄ］
まず、作動Ｄについて説明する。作動Ｄは、ユーザが入力装置１２に対してモデル自体の特殊な修正を選択する入力を行った結果、指示用データ領域に対して、モデル修正プログラム１３０を指定するデータが記録された場合に、ＣＰＵ１６が実行する作動である。
【０２３５】
この場合、シミュレーションプログラム１５０は、後述する通り、第１実施形態と同様、モデル２１０についてのＳシミュレーションを行う。
【０２３６】
モデル修正プログラム１３０は、第１実施形態において図１２に示した処理を実行する。したがって、指示処理プログラム１４０によって、モデル修正プログラム１３０を指定するデータが指示用データ領域に記録されている場合（ステップ４１０参照）、モデル修正プログラム１３０は、作動Ｄによって、モデル２１０をＨＤＤ１５からＲＡＭ１３に読み込み（ステップ４２０参照）、読み込んだモデルの置換対象ブロックのすべてを特定のブロック群に置換し（ステップ４４０、４５０参照）、置換後のモデルをＨＤＤ１５のモデル２１０に上書き記録する（ステップ４８０参照）。
【０２３７】
ここで、置換対象ブロックは、第１実施形態と同様に、比較演算ブロック２３および比較演算ブロック２８である。ただし、比較演算ブロック２３および比較演算ブロック２８に取って代わる代替ブロック群が、第１実施形態と異なる。
【０２３８】
ここで、本実施形態のモデル修正プログラム１３０が図３に示したモデル２０に対して書き換えを行った結果のモデル６０を、図２０に示す。モデル６０においては、モデル２０中の比較演算ブロック２３が、比較演算ブロック４１、定数ブロック４２、特別比較演算ブロック４３、定数ブロック４４、特別比較演算ブロック４５、論理積ブロック４６、および論理和ブロック４７に置き換わっている。なお、図３と図２０において、同一の符合が付されているブロックは、互いに同じ機能を有しているので、それらのブロックについての説明は省略する。
【０２３９】
比較演算ブロック４１は、データ読み出しブロック２１ａからの出力値ａを第１入力値とし、データ読み出しブロック２１ｂからの出力値ｂを第２入力値とし、「第１入力値＜第２入力値」という条件の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０２４０】
定数ブロック４２は、「−０」という定数を出力するブロックである。また、定数ブロック４４は、「＋０」という定数を出力するブロックである。したがって、定数ブロック４２、４４は、「＋０」と「−０」とを区別する特殊なブロックである。
【０２４１】
なお、Ｓシミュレーションにおいても、ブロック間での値の入出力の受け渡し（すなわちモデル中の結線部分）に関しては、従来から、「−０」と「＋０」とが区別されている。すなわち、「−０」と「＋０」には異なる数値表現を割り当てている。ただし、Ｓシミュレーションは、通常のブロック内の比較演算においては、既述の通り、「−０」と「＋０」とは等しい値であるとして扱っている。
【０２４２】
特別比較演算ブロック４３は、データ読み出しブロック２１ａからの出力値ａを第１入力値とし、定数ブロック４２からの出力（すなわち「−０」）を第２入力値とし、「第１入力値＝第２入力値」という条件式の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０２４３】
ただし、この条件式の判定については、Ｓシミュレーションにおいて、例外的に「＋０」と「−０」とを等しくない値として扱わせる。したがって、特別比較演算ブロック４３は、第１入力値が「−０」であるときにのみ真値を出力し、それ以外の場合には偽値を出力する。
【０２４４】
以下、このように、「＋０」と「−０」とを区別するという例外的な取り扱いを表現する特殊なブロック４２、４３、４４の作成方法を説明する。このために、まず、モデル（例えば、Ｓｉｍｕｌｉｎｋモデル）中のブロックの表現する機能をシミュレーションプログラム１５０が実現するしくみについて説明する。
【０２４５】
ブロックは、その内部に、当該ブロックの表現する制御処理に相当する命令群から成る内部プログラム（例えばＣソースコード）を含んでいる。例えば、比較演算ブロックは、その内部に、当該比較演算ブロックの表現する比較演算に相当する処理の内部プログラムを含んでいる。シミュレーションプログラム１５０においては、当該ブロックが表現する制御処理を実行する際には、当該内部プログラム中の命令群に従って処理を行う。
【０２４６】
それゆえ、Ｓシミュレーション中の制御処理（例えば比較演算）において、通常のブロックについては、「＋０」と「−０」を区別しないのは、当該通常ブロック中の内部プログラムにおいて、「＋０」と「−０」とを、同じものであると見なすようにするための命令が含まれているからであることになる。
【０２４７】
例えば、「−０」の数値表現（例えば、単精度浮動小数点の１６進数表現における「８０００００００」）が当該ブロックに入力された場合、および、「−０」の数値表現がブロック内で算出された場合、その数値表現を、「＋０」の数値表現に変換するような命令は、「＋０」と「−０」とを、同じものであると見なすようにするための命令である。このような命令が、当該ブロック中の内部プログラムに記述されていてもよい。
【０２４８】
本実施形態のブロック４２、４３、４４は、通常のブロックにおいては同じものとして扱われる「＋０」と「−０」とを区別するよう、内部プログラムが記述されている。例えば、内部プログラムにおいて、入力された「−０」および「＋０」の数値表現を変換せずそのまま用いることで、「＋０」と「−０」との区別が実現する。
【０２４９】
特別比較演算ブロック４５は、データ読み出しブロック２１ｂからの出力値ｂを第１入力値とし、定数ブロック４２からの出力（すなわち「＋０」）を第２入力値とし、「第１入力値＝第２入力値」という条件式の判定を行う処理を表す。なお、この特別比較演算ブロック４５も、「＋０」と「−０」とを区別する特殊なブロックとして作成されている。したがって、特別比較演算ブロック４５は、第１入力値が「＋０」であるときにのみ真値を出力し、それ以外の場合には偽値を出力する。
【０２５０】
論理積ブロック４６は、特別比較演算ブロック４３と特別比較演算ブロック４５の出力値（真偽値）の論理積を出力する処理を表す。論理和ブロック４７は、比較演算ブロック４１の出力値（真偽値）と論理積ブロック４６の出力値（真偽値）との論理和を出力する処理を表す。
【０２５１】
このようなブロック４１〜４７は、比較演算ブロック２３の代替ブロック群である。このブロック４１〜４７は、全体として、「（データ読み出しブロック２１ａからの出力値ａがデータ読み出しブロック２１ｂからの出力値ｂよりも小さい）または｛（データ読み出しブロック２１ａからの出力値ａが「−０」である）かつ（データ読み出しブロック２１ｂからの出力値ｂが「＋０」である）｝」という条件が満たされたときに真値を出力し、当該条件が満たされていないときに偽値を出力する機能を表している。
【０２５２】
つまり、置換によって比較演算ブロック２３に取って代わるブロック４１〜４７は、第１入力値ａ（第１の値ａに相当する）と第２入力値ｂ（第２の値ｂに相当する）についての条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力するブロック群である。
【０２５３】
次に、本実施形態のモデル修正プログラム１３０が図５に示したモデル３０に対して書き換えを行った結果のモデル７０を、図２１に示す。モデル７０においては、モデル３０中の比較演算ブロック２８が、比較演算ブロック４１、定数ブロック５２、特別比較演算ブロック５３、定数ブロック５４、特別比較演算ブロック５５、論理和ブロック５６、論理積ブロック５７に置き換わっている。なお、図５と図２１において、同一の符合が付されているブロックは、互いに同じ機能を有しているので、それらのブロックについての説明は省略する。
【０２５４】
比較演算ブロック５１は、データ読み出しブロック２１ｃからの出力値ｃを第１入力値とし、データ読み出しブロック２１ｄからの出力値ｄを第２入力値とし、「第１入力値≧第２入力値」という条件の判定を行い、判定結果が肯定的なら１（すなわち真値）を出力し、判定結果が否定的なら０（すなわち偽値）を出力する処理を表す。
【０２５５】
定数ブロック５２は、「−０」という定数を出力するブロックである。また、定数ブロック５４は、「＋０」という定数を出力するブロックである。なお、これらの定数ブロック５２、５４も、「＋０」と「−０」とを区別する特殊なブロックとして作成されている。
【０２５６】
特別比較演算ブロック５３は、データ読み出しブロック２１ｃからの出力値ｃを第１入力値とし、定数ブロック５２からの出力（すなわち「−０」）を第２入力値とし、「第１入力値≠第２入力値」という条件式の判定を行う処理を表す。なお、この特別比較演算ブロック５３も、「＋０」と「−０」とを区別する特殊なブロックとして作成されている。したがって、特別比較演算ブロック５３は、第１入力値が「−０」であるときにのみ偽値を出力し、それ以外の場合には真値を出力する。
【０２５７】
特別比較演算ブロック５５は、データ読み出しブロック２１ｄからの出力値ｄを第１入力値とし、定数ブロック５２からの出力（すなわち「＋０」）を第２入力値とし、「第１入力値≠第２入力値」という条件式の判定を行う処理を表す。なお、この特別比較演算ブロック５３も、「＋０」と「−０」とを区別する特殊なブロックとして作成されている。したがって、特別比較演算ブロック５５は、第１入力値が「＋０」であるときにのみ偽値を出力し、それ以外の場合には真値を出力する。
【０２５８】
論理和ブロック５６は、特別比較演算ブロック５３と特別比較演算ブロック５５の出力値（真偽値）の論理和を出力する処理を表す。論理積ブロック５７は、比較演算ブロック５１の出力値（真偽値）と論理和ブロック５６の出力値（真偽値）との論理積を出力する処理を表す。
【０２５９】
このようなブロック５１〜５７は、比較演算ブロック２８の代替ブロック群である。このブロック５１〜５７は、全体として、「（データ読み出しブロック２１ｃからの出力値ｃがデータ読み出しブロック２１ｄからの出力値ｄ以上である）かつ｛（データ読み出しブロック２１ｃからの出力値ｃが「−０」でない）または（データ読み出しブロック２１ｄからの出力値ｄが「＋０」でない）｝」という条件が満たされたときに真値を出力し、当該条件が満たされていないときに偽値を出力する機能を表している。
【０２６０】
つまり、置換によって比較演算ブロック２８に取って代わるブロック５１〜５７は、第１入力値ｃ（第３の値ｃに相当する）と第２入力値ｄ（第４の値ｄに相当する）についての条件式「（ｃ≧ｄ）かつ｛（ｃ≠−０）または（ｄ≠＋０）｝」の真偽値を出力するブロック群である。
【０２６１】
ここで、まずモデル中の条件式「ａ＜ｂ」の真偽値を出力する比較演算ブロック２３を、条件式「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」の真偽値を出力するブロック群４１〜４７に置き換えることの意義について、図２２を用いて説明する。図２２は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０＜＋０」、「左辺ｂが−０かつ右辺ｂが＋０」、「（−０＜＋０）または（左辺ａが−０かつ右辺ｂが＋０）」という３つの条件に対する真偽値を示す真理表である。なお、「左辺」とは、置換前の比較演算ブロック２３への第１入力値ａをいい、「右辺」とは、第２入力値ｂをいう。
【０２６２】
上述した通り、「−０＜＋０」という条件については、Ｖマイコンにおいては真と判定し、Ｓシミュレーションにおいては偽と判定する。また、「左辺が−０かつ右辺が＋０」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。したがって、「（−０＜＋０）または（左辺が−０かつ右辺が＋０）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても真と判定する。
【０２６３】
したがって、書き換え後のモデルに対してＳシミュレーションを行った場合、書き換え前のモデルの比較演算ブロック２３に取って代わった置き換え部分に対する判定結果は、ａが−０でｂが＋０のときには、真となる（図２２下段右の斜線部に相当する）。
【０２６４】
また、Ｖマイコンが実行するプログラムにおいては、書き換え後のモデルから生成されたプログラムの実行において、当該置き換え部分に対する判定結果は、ａが−０でｂが＋０のときには、真となる（図２２上段右の斜線部に相当する）。すなわち、このようなモデルの書き換えによって、Ｖマイコンの処理結果とＳシミュレーションの結果とが一致する。
【０２６５】
なお、モデル書き換え後のＶマイコンの処理結果とＳシミュレーションの結果は、書き換え前のモデルから生成されたプログラムをＶマイコンが実行したときの処理結果と同じになる（図２２上段左の斜線部参照）。したがって、上述のモデルの書き換えの前後で、Ｖマイコンの処理内容は変化しない。それ故、上述のモデルの書き換えは、Ｓシミュレーションの制御処理を修正してＶマイコンの制御処理の内容と一致させるような書き換えである。
【０２６６】
また、「ａ＝−０かつｂ＝＋０」でない場合においては、｛ａ＝−０かつｂ＝＋０｝という条件式が常に偽となるので、「（ａ＜ｂ）または｛（ａ＝−０）かつ（ｂ＝＋０）｝」という条件式の真偽は、（ａ＜ｂ）という条件式の真偽と完全に一致する。したがってこの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【０２６７】
次に、条件式「ｃ≧ｄ」の真偽値を出力する比較演算ブロック２８を、条件式「（ｃ≧ｄ）かつ｛（ｃ≠−０）または（ｄ≠＋０）｝」の真偽値を出力するブロック群５１〜５７に置き換えることの意義について、図２３を用いて説明する。図２３は、ＶマイコンとＳシミュレーションのそれぞれにおける、「−０≧＋０」、「（左辺ｃが−０でない）または（右辺ｄが＋０でない）」、「（−０≧＋０）かつ｛（左辺ｃが−０でない）または（右辺ｄが＋０でない）｝」という３つの条件に対する真偽値を示す真理表である。なお、「左辺」とは、置換前の比較演算ブロック２８への第１入力値ｃをいい、「右辺」とは、第２入力値ｄをいう。
【０２６８】
上述した通り、「−０≧＋０」という条件については、Ｖマイコンにおいては偽と判定し、Ｓシミュレーションにおいては真と判定する。また、「（左辺が−０でない）または（右辺が＋０でない）」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。したがって、「（−０≧＋０）かつ｛（左辺が−０でない）または（右辺が＋０でない）｝」という条件に関しては、ＶマイコンにおいてもＳシミュレーションにおいても偽と判定する。
【０２６９】
したがって、書き換え後のモデルに対してＳシミュレーションを行った場合、書き換え前のモデルの比較演算ブロック２３に取って代わった置き換え部分のブロック５１〜５７に対する判定結果は、ｃが−０でｄが＋０のときには、偽となる（図２３下段右の斜線部に相当する）。
【０２７０】
また、Ｖマイコンが実行するプログラムにおいては、書き換え後のモデルから生成されたプログラムの実行において、当該置き換え部分に対する判定結果は、ｃが−０でｄが＋０のときには、偽となる（図２３上段右の斜線部に相当する）。すなわち、このようなモデルの書き換えによって、Ｖマイコンの処理結果とＳシミュレーションの結果とが一致する。
【０２７１】
なお、モデル書き換え後のＶマイコンの処理結果とＳシミュレーションの結果は、書き換え前のモデルから生成されたプログラムをＶマイコンが実行したときの処理結果と同じになる（図２３上段左の斜線部参照）。したがって、上述のモデルの書き換えの前後で、Ｖマイコンの処理内容は変化しない。それ故、上述のモデルの書き換えは、Ｓシミュレーションの制御処理を修正してＶマイコンの制御処理の内容と一致させるような書き換えである。
【０２７２】
また、「ｃ＝−０かつｄ＝＋０」でない場合においては、｛（ｃ≠−０）または（ｄ≠＋０）｝という条件が常に真となるので、「（ｃ≧ｄ）かつ｛ｃ≠−０）または（ｄ≠＋０）｝」という条件の真偽は、（ｃ≧ｄ）という条件の真偽と完全に一致する。したがってこの場合、モデルの書き換えの前後に関わらず、Ｖマイコンの作動の結果およびＳシミュレーションの結果は同じとなる。
【０２７３】
以上説明した通り、このようなモデルの書き換えにより、Ｓシミュレーションの制御処理の内容がとＶマイコンの制御処理の内容と一致するので、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことがない。
【０２７４】
また、このようなモデルの書き換えにより、Ｓシミュレーションの制御処理が修正されてＶマイコンの制御処理の内容と一致する。このようにすることで、Ｖマイコンの「−０」と「＋０」の大小比較の扱いの特徴を生かしたモデルを設計する際においても、シミュレーションで、当該Ｖマイコンの作動を正しくシミュレートすることができる。
【０２７５】
また、この方法においては、モデルそのものを書き換えるので、書き換えられたモデルのみを、他のモデルベース開発システムにコピーさえすれば、コピー先のモデルベース開発システムにおいては、従来通りのＳシミュレーションおよびプログラム生成を行うだけでも、ＶマイコンとＳシミュレーションとで、制御内容が食い違ってしまうことを防止することができる。
【０２７６】
［作動Ｅ］
次に、作動Ｅについて説明する。作動Ｅは、ユーザが入力装置１２に対してミュレーション時の特殊処理を選択する入力を行った結果、指示用データ領域に対して、シミュレーションプログラム１５０を指定するデータが記録された場合に、ＣＰＵ１６が実行する作動である。
【０２７７】
この場合、モデル修正プログラム１３０は、図１２のステップ４１０で指示なしと判定し、モデル２１０を書き換えない。
【０２７８】
本実施形態のシミュレーションプログラム１５０が実行する処理のフローチャート５００を図２４に示す。この処理の実行において、シミュレーションプログラム１５０は、まずステップ５１０で、シミュレート対象のモデル２１０をＨＤＤ１５からＲＡＭ１３に読み出し、続いてステップ５１５で、当該ＲＡＭ１３中のモデルの最初のブロック（すなわち、データの入出力に関して最も前段のブロック）にポインタを設定する。ここでポインタとは、モデル中の特定のブロックを指定するためのＲＡＭ１３中のデータである。
【０２７９】
続いてステップ５２０で、指示処理プログラム１４０（図中では指示部と記す）から指示があったか否かを判定する。具体的には、指示用データ領域に、シミュレーションプログラム１５０を指定するデータが記録されているか否かを判定する。判定結果が肯定的である場合、続いてステップ５２０を実行する。否定的である場合、続いてステップ５２５で、当該ブロックについては従来通りのＳシミュレーションを実行し、続いてステップ５５０を実行する。
【０２８０】
ステップ５３０では、現在のポインタが示すブロックにおける処理が−０＜＋０を判定する処理であるか否かを判定する。「ブロックにおける処理が−０＜＋０を判定する処理である」とは、当該ブロックが条件式（ａ＞ｂ）を判定する比較演算ブロック２３であり、かつ、比較演算ブロック２３への第１入力値が「−０」であり、かつ、比較演算ブロック２３への第２入力値が「＋０」であることをいう。ステップ５３０の判定結果が肯定的である場合は、続いてステップ５３５で、当該ブロックの出力値を真値とし、続いてステップ５５０を実行する。
【０２８１】
ステップ５３０の判定結果が否定的な場合は、続いてステップ５４０で、現在のポインタが示すブロックにおける処理が−０≧＋０を判定する処理であるか否かを判定する。「ブロックにおける処理が−０≧＋０を判定する処理である」とは、当該ブロックが条件式（ｃ≦ｄ）を判定する比較演算ブロック２８であり、かつ、比較演算ブロック２８への第１入力値が「−０」であり、かつ、比較演算ブロック２３への第２入力値が「＋０」であることをいう。ステップ５４０の判定結果が肯定的である場合は、続いてステップ５４５で、当該ブロックの出力値を偽値とし、続いてステップ５５０を実行する。
【０２８２】
ステップ５４０の判定結果が否定的である場合は、続いてステップ５２５で、当該ブロックについては従来通りのＳシミュレーションを実行し、続いてステップ５５０を実行する。
【０２８３】
ステップ５５０では、現在のポインタの示すブロックがＲＡＭ１３中の最後のブロックであるか否かを判定し、最後のブロックであれば処理を終了する。最後のブロックでなければ、続いてステップ５５５でポインタの指定先を次のブロックに設定し、再度ステップ５３０を実行する。
【０２８４】
ここで、次のブロックとは、データの入出力の関係において現在のブロックのすぐ後段となるブロック、または、データの入出力の関係において現在のブロックと並列的なブロックのうちいずれかをいう。
【０２８５】
以上のような処理により、シミュレーションプログラム１５０は、指示処理プログラム１４０がシミュレーションプログラム１５０を指示していない場合においては（ステップ５２０参照）、シミュレート対象のモデル２１０をＨＤＤ１５からＲＡＭ１３に読み出し（ステップ５１０参照）、読み出したモデル中のすべてのブロックについてＳシミュレーションを実行する（ステップ５２５参照）。
【０２８６】
しかし、指示処理プログラム１４０がシミュレーションプログラム１５０を指示している場合においては（ステップ５２０参照）、作動Ｅを実行し、シミュレート対象のモデル２１０をＨＤＤ１５からＲＡＭ１３に読み出し（ステップ５１０参照）、読み出したモデルのブロックのうち、「−０＜＋０」という条件式を判定する処理を行うブロックについては、真値を出力し（ステップ５３０、５３５参照）、「−０≧＋０」という条件式を判定する処理を行うブロックについては、偽値を出力し（ステップ５４０、５４５参照）、それ以外のブロックについては、Ｓシミュレーションを実行する（ステップ５２５参照）。
【０２８７】
このように、作動Ｅにおいては、シミュレーションプログラム１５０は、モデル２１０をシミュレートしているときに、ａ＜ｂを判定する比較演算ブロック２３に対して第１入力値ａとして「−０」が入力され、第２入力値ｂとして「＋０」が入力されたことに基づいて、当該比較演算ブロック２３の出力として真値を出力する。すなわち、比較演算ブロック２３の表す条件式についての判定結果が真となる。
【０２８８】
また、シミュレーションプログラム１５０は、モデル２１０をシミュレートしているときに、ｃ≧ｄを判定する比較演算ブロック２８に対して第１入力値ｃとして「−０」が入力され、当該第４の値ｄとして「＋０」が入力されたことに基づいて、当該比較演算ブロック２８の出力として偽値を出力する。すなわち、当該比較演算ブロック２８の表す条件式についての判定結果が偽となる。
【０２８９】
このようにすることで、シミュレーションプログラム１５０において、比較演算ブロック２３（処理要素Ｐ０に相当する）、比較演算ブロック２８（処理要素Ｑ０に相当する）に対する判定結果が、Ｖマイコンにおける当該比較演算ブロック２３、２８に対応する条件の判定結果と一致するので、Ｖマイコンとシミュレーションプログラム１５０とで、制御内容が食い違ってしまうことがない。
【０２９０】
また、このようなモデルの書き換えにより、シミュレーションプログラム１５０の制御処理が修正されてＶマイコンの制御処理の内容と一致する。このようにすることで、Ｖマイコンの「−０」と「＋０」の大小比較の扱いの特徴を生かしたモデルを設計する際においても、シミュレーションで、当該Ｖマイコンの作動を正しくシミュレートすることができる。
【０２９１】
また、ＣＰＵ１６は、入力装置１２に対するユーザの操作に応じて、指示処理プログラム１４０を実行することで、作動Ｄ、作動Ｅのいずれを作動させるかについての排他的な切り替えを行うようになっている。このようになっていることで、ＣＰＵ１６は、モデル中の比較演算ブロック２３、比較演算ブロック２８に対して、必要に応じて、作動Ｄでモデルそのものの条件式を書き換えるか、作動Ｅで当該ブロック２３、２８の部分の出力値を強制的に設定するかを適宜切り替えることができる。
【０２９２】
（他の実施形態）
以上、本発明の実施形態について説明したが、本発明の範囲は、上記実施形態のみに限定されるものではなく、本発明の各発明特定事項の機能を実現し得る種々の形態を包含するものである。
【０２９３】
例えば、ソースコード生成プログラム１１０、実行形式変換プログラム１２０、モデル修正プログラム１３０、シミュレーションプログラム１５０は、それぞれ異なる装置で実行されるようになっていてもよい。その場合、モデル２１０、ソースコード２２０、オブジェクトコード２３０等のデータについては、ユーザがそれぞれの装置間の移動を行うようになっていてもよい。あるいは、これらデータは、各装置からアクセス可能な記憶媒体に記録するようになっていてもよい。
【０２９４】
また、作動Ｂ、作動Ｄにおいて、モデル修正プログラム１３０における置換処理によって、モデル２１０中の置換対象ブロック２３、２８に取って代わる代替ブロックは、上記実施形態のように複数のブロック群であってもよいし、当該ブロック群と同一の機能を表現する単一のブロックであってもよい。
【０２９５】
また、ＣＰＵ１６は、ユーザの入力装置１２に対する切替操作に従って、第１実施形態の作動と第２実施形態の作動とを切り替えることができるようになっていてもよい。
【図面の簡単な説明】
【０２９６】
【図１】本発明の実施形態に係るパーソナルコンピュータ１の構成図である。
【図２】モデルベース開発プログラム１００の構成図である。
【図３】モデル２０の構成を示す図である。
【図４】モデル２０から従来生成されるソースコードの一例を示す図である。
【図５】モデル３０の構成を示す図である。
【図６】モデル３０から従来生成されるソースコードの一例を示す図である。
【図７】モデル２０から生成されるＣソースコードを示す図である。
【図８】モデル３０から生成されるＣソースコードを示す図である。
【図９】真理表を示すための図表である。
【図１０】真理表を示すための図表である。
【図１１】ソースコード生成プログラム１１０の処理のフローチャートである。
【図１２】モデル修正プログラム１３０の処理のフローチャートである。
【図１３】モデル２０を書き換えた後のモデル４０を示す図である。
【図１４】モデル３０を書き換えた後のモデル５０を示す図である。
【図１５】真理表を示すための図表である。
【図１６】真理表を示すための図表である。
【図１７】実行形式変換プログラム１２０の処理のフローチャートである。
【図１８】図４のソースコードから生成されたオブジェクトコードを示す図である。
【図１９】図６のソースコードから生成されたオブジェクトコードを示す図である。
【図２０】モデル２０を書き換えた後のモデル６０を示す図である。
【図２１】モデル２０を書き換えた後のモデル７０を示す図である。
【図２２】真理表を示すための図表である。
【図２３】真理表を示すための図表である。
【図２４】シミュレーションプログラム１５０の処理のフローチャートである。
【符号の説明】
【０２９７】
１                                              パーソナルコンピュータ
２                                              マイコン
２０、３０、４０、５０、６０、７０、２１０      モデル
２１ａ〜２１ｄ                                  データ読み出しブロック
２３、２８、３１、３２、３５、３６、４１、５１  比較演算ブロック
２４、２５、４２、４４、５２、５４              定数ブロック
２６                                            切替ブロック
２７ｐ、２７ｑ                                  データ書き込みブロック
３３、４６、５７                                論理積ブロック
３７、４７、５６                                論理和ブロック
４３、４５、５３、５５                          特別比較演算ブロック
１００                                          モデルベース開発プログラム
１１０                                          ソースコード生成プログラム
１２０                                          実行形式変換プログラム
１３０                                          モデル修正プログラム
１４０                                          指示処理プログラム
１５０                                          シミュレーションプログラム
１６０                                          出力表示プログラム
２２０                                          ソースコード
２３０                                          オブジェクトコード
【図１】
2010015435.tif 000003
【図２】
2010015435.tif 000004
【図３】
2010015435.tif 000005
【図４】
2010015435.tif 000006
【図５】
2010015435.tif 000007
【図６】
2010015435.tif 000008
【図７】
2010015435.tif 000009
【図８】
2010015435.tif 000010
【図９】
2010015435.tif 000011
【図１０】
2010015435.tif 000012
【図１１】
2010015435.tif 000013
【図１２】
2010015435.tif 000014
【図１３】
2010015435.tif 000015
【図１４】
2010015435.tif 000016
【図１５】
2010015435.tif 000017
【図１６】
2010015435.tif 000018
【図１７】
2010015435.tif 000019
【図１８】
2010015435.tif 000020
【図１９】
2010015435.tif 000021
【図２０】
2010015435.tif 000022
【図２１】
2010015435.tif 000023
【図２２】
2010015435.tif 000024
【図２３】
2010015435.tif 000025
【図２４】
2010015435.tif 000026