(57)【要約】【課題】  モデルベース開発において、モデルからソースコードを生成する際の、入出力データの記憶クラスの設定において、設定の誤りが生じる恐れを低減する。【解決手段】  パーソナルコンピュータが、複数のモデル内におけるデータ入出力ブロック間のデータの受け渡し関係の情報を検出し、その検出結果に基づいて、データ入出力ブロックの入出力データの記憶クラス（外部公開、外部参照、非公開）の判定を行う。【選択図】 図３
2006039993.tif 000002
【特許請求の範囲】
【請求項１】
複数のモデル内におけるデータ入出力ブロックの使用状況を検出する検出手段と、
前記検出手段の検出結果に基づいて、前記データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させる記憶制御手段と、を備えた記憶クラス設定装置。
【請求項２】
前記検出手段は、データ入出力ブロック間の複数のモデルをまたがるデータの受け渡し関係の情報を検出することを特徴とする請求項１に記載の記憶クラス設定装置。
【請求項３】
前記検出手段は、複数のモデル中のデータ入出力ブロックを選択する選択手段と、前記選択手段によって選択された選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックが、前記複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定する第１判定手段と、を有することを特徴とする請求項１または２に記載の記憶クラス設定装置。
【請求項４】
前記記憶制御手段は、前記第１判定手段の判定の結果、前記共通データ入出力ブロックが前記複数のモデルのうち前記外部モデルのいずれにも含まれないことに基づき、その選択データ入出力ブロックの入出力データの記憶クラスが非公開である旨のデータを記憶媒体に記憶させることを特徴とする請求項３に記載の記憶クラス設定装置。
【請求項５】
前記記憶制御手段は、前記第１判定手段の判定の結果、前記共通データ入出力ブロックが前記外部モデルに含まれることに基づき、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開または外部参照である旨のデータを記憶媒体に記憶させることを特徴とする請求項３または４に記載の記憶クラス設定装置。
【請求項６】
前記選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックとは、前記選択データ入出力ブロックと共通する名称を有するデータ入出力ブロックであることを特徴とする請求項３ないし５のいずれか１つに記載の記憶クラス設定装置。
【請求項７】
前記検出手段は、複数のモデル中のデータ入出力ブロックを選択する選択手段と、
前記選択手段によって選択された選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定する第２判定手段と、を備えたことを特徴とする請求項１ないし６のいずれか１つに記載の記憶クラス設定装置。
【請求項８】
前記記憶制御手段は、前記第２判定手段の結果に基づいて、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていないことに基づいて、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照である旨のデータを記憶媒体に記憶させることを特徴とする請求項７に記載の記憶クラス設定装置。
【請求項９】
前記記憶制御手段は、前記第２判定手段の結果に基づいて、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていることに基づいて、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開または非公開である旨のデータを記憶媒体に記憶させることを特徴とする請求項７または８に記載の記憶クラス設定装置。
【請求項１０】
前記第２判定手段は、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを、その選択データ入出力ブロックの名称がそのモデルの名称を含んでいるか否かで判定することを特徴とする請求項７ないし９のいずれか１つに記載の記憶クラス設定装置。
【請求項１１】
前記検出手段は、複数のモデル中のデータ入出力ブロックを選択する選択手段と、前記選択手段によって選択された選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックが、前記複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定する第１判定手段と、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定する第２判定手段と、を有し、
前記記憶制御手段は、前記第１判定手段および前記第２判定手段の結果に基づいて、前記共通データ入出力ブロックが前記複数のモデルのうち前記外部モデルのいずれにも含まれず、かつ、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、エラーメッセージを記憶媒体に記憶させることを特徴とする請求項１または２に記載の記憶クラス設定装置。
【請求項１２】
複数のモデル中のデータ入出力ブロックを逐次選択する選択手段と、
前記選択手段によって選択された選択データ入出力ブロックと共通する名称を有する共通データ入出力ブロックが、前記複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定する第１判定手段と、
前記選択データ入出力ブロックがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定する第２判定手段と、
前記第１判定手段および前記第２判定手段の結果に基づいて、（１）前記共通データ入出力ブロックが前記外部モデルに含まれ、かつ、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開である旨のデータを記憶媒体に記憶させ、（２）前記共通データ入出力ブロックが前記外部モデルに含まれ、かつ、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照である旨のデータを記憶媒体に記憶させ、（３）前記共通データ入出力ブロックが前記複数のモデルのうち前記外部モデルのいずれにも含まれず、かつ、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが非公開である旨のデータを記憶媒体に記憶させ、（４）前記共通データ入出力ブロックが前記複数のモデルのうち前記外部モデルのいずれにも含まれず、かつ、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、エラーメッセージを記憶媒体に記憶させる記憶制御手段と、を備えた記憶クラス設定装置。
【請求項１３】
複数のモデル内におけるデータ入出力ブロックの使用状況を検出する検出手段、および
前記検出手段の検出結果に基づいて、前記データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させる記憶制御手段として、コンピュータを機能させる記憶クラス設定プログラム。
【請求項１４】
複数のモデル内におけるデータ入出力ブロックの使用状況を検出する検出手段と、
前記検出手段の検出結果に基づいて、前記データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させる記憶制御手段と、
前記複数のモデル中のデータ入出力ブロックに対応するソースコードを、前記記憶制御手段によって記憶されたそのデータ入出力ブロックの入出力データの記憶クラスのデータに基づいた形式で生成する生成手段と、を備えたソースコード生成装置。
【請求項１５】
前記生成手段は、前記複数のモデル中のデータ入出力ブロックに対応するソースコードにおける、その入出力データへのデータアクセス手続名の名称を、前記記憶制御手段によって記憶されたそのデータ入出力ブロックの入出力データの記憶クラスのデータに基づく名称とすることを特徴とする請求項１４に記載のソースコード生成装置。
【請求項１６】
複数のモデル内におけるデータ入出力ブロックの使用状況を検出する検出手段、
前記検出手段の検出結果に基づいて、前記データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させる記憶制御手段、および
前記複数のモデル中のデータ入出力ブロックに対応するソースコードを、前記記憶制御手段によって記憶されたそのデータ入出力ブロックの入出力データの記憶クラスのデータに基づいた形式で生成する生成手段、としてコンピュータを機能させるソースコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入出力制御のためのモデルが入出力を行うデータの記憶クラスを設定するための、記憶クラス設定装置、記憶クラス設定プログラム、ソースコード生成装置、およびソースコード生成プログラムに関する
【背景技術】
【０００２】
現在、例えば車両のエンジンＥＣＵの作動等、信号入出力制御のためのプログラムにおいては、開発者が直接そのプログラムのソースコードを記述せず、目的とするプログラムの機能を、より作成が簡易で視認性の良い「モデル」という形態で記述する場合がある（例えば特許文献１参照）。
【０００３】
モデルは、データ演算、データ入力およびデータ出力のうち少なくともいずれか１つの機能を実現する機能単位としてのブロック、およびブロック間の入出力関係を示す結線の組み合わせとして記述される。すなわち、複数のブロックが結線によって繋ぎ合わされることにより、車両制御等のデータ入出力の制御を表現する集合体がモデル（データフローモデル）である。
【０００４】
開発者は、このモデルに対応したプログラム開発環境がインストールされたワークステーション、パーソナルコンピュータ等を用い、このモデルによって定義されたデータの入出力のシミュレーションを行い、また、モデルから自動的にソースコードを生成する。
【０００５】
モデル上で制御を表現し、その内容に基づきソースコードを生成するようなプログラム開発は、モデルベース開発と呼ばれる。
【０００６】
モデルベース開発に対応したプログラムとしては、例えば、Ｔｈｅ  Ｍａｔｈｗｏｒｋｓ（登録商標）社のＭａｔｌａｂ（登録商標）がある。Ｍａｔｌａｂ（登録商標）においては、開発者はＭａｔｌａｂ（登録商標）に対する付加機能を提供するソフトウェアであるＳｉｍｕｌｉｎｋ（登録商標）を用いて、目的とするデータ入出力を表現するモデルを記述する。そして、Ｒｅａｌ−Ｔｉｍｅ Ｗｏｒｋｓｈｏｐ（登録商標）は、記述されたモデルから、そのモデルに対応するＣソースコードを生成する。
【特許文献１】特開平２０００−２０２９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
このようなモデルベース開発において、複数のモデルから個々にソースコードを生成し、それらのソースコードを結合して１つのまとまった制御プログラムを生成する場合は、以下の（１）〜（３）のような開発手順を経ることが考えられる。
【０００８】
手順（１）：作成した複数のモデル内において入出力の対象となるデータ記憶クラスを設定する。記憶クラスとは、そのデータのモデル外への外部公開、非公開、およびそのデータの外部からの参照等、データのモデル間の受け渡しに関する属性をいう。
【０００９】
手順（２）：手順（１）で設定された記憶クラスに基づいて、モデルからソースコードを自動生成する。
【００１０】
手順（３）：手順（３）で生成したソースコードをコンパイルし、その後結合する。
【００１１】
このように、複数のモデル中のデータ毎に記憶クラスが設定された後に、その設定内容に基づいてソースコードが作成される場合、設定された記憶クラスに間違いがあると、上記の結合の段階で結合モジュール間のデータ入出力インターフェースに不整合が生じてしまう恐れがある。
【００１２】
そして、この不整合を修正するためには、改めて記憶クラスを設定し直す必要があり、開発の後戻りが発生してしまう。
【００１３】
本発明は上記点に鑑み、モデルベース開発において、モデルからソースコードを生成する際の、入出力データの記憶クラスの設定において、設定の誤りが生じる恐れを低減することを目的とする。
【課題を解決するための手段】
【００１４】
上記の目的を達成するための本発明の特徴は、記憶クラス設定装置が、複数のモデル内におけるデータ入出力ブロックの使用状況を検出し、その検出結果に基づいて、前記データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させることである。このようになっていることで、記憶クラス設定装置がモデルの記載内容に基づいて入出力データの記憶クラスを設定するので、この設定された記憶クラスに基づいてソースコード生成をすれば、設定の誤りが生じる恐れを低減することが可能となる。
【００１５】
なお、入出力とは「入力および出力のうち少なくとも１つ」をいう。また、データ入出力ブロックとは、「入力および出力のうち少なくとも１つを行うブロック」をいう。
【００１６】
また、具体的には、記憶クラス設定装置が検出するのは、複数のモデル内におけるデータ入出力ブロック間のデータの受け渡し関係の情報であってもよい。このようになっていることで、複数のモデル内におけるデータ入出力ブロック間のデータの受け渡し関係の情報に基づいた記憶クラスの設定が可能となる。
【００１７】
また、上記の検出は、複数のモデル中のデータ入出力ブロックを選択し、その選択された選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックが、上記の複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定することで実現されていてもよい。
【００１８】
そしてこのとき、この判定の結果、共通データ入出力ブロックが複数のモデルのうち外部モデルのいずれにも含まれないことに基づき、その選択データ入出力ブロックの入出力データの記憶クラスが非公開である旨のデータを記憶媒体に記憶させるようになっていてもよい。
【００１９】
またこのとき、この判定の結果、共通データ入出力ブロックが当該外部モデルに含まれることに基づき、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開または外部参照である旨のデータを記憶媒体に記憶させるようになっていてもよい。
【００２０】
そして、選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックであるか否かは、その選択データ入出力ブロックと共通する名称を有するデータ入出力ブロックであることで判定するようになっていてもよい。
【００２１】
また、上記の検出は、複数のモデル中のデータ入出力ブロックを選択し、この選択された選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定することで実現されていてもよい。
【００２２】
そしてこのとき、この判定の結果、前記選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていないことに基づいて、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照である旨のデータを記憶媒体に記憶させるようになっていてもよい。
【００２３】
またこのとき、この判定の結果、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていることに基づいて、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開または非公開である旨のデータを記憶媒体に記憶させるようになっていてもよい。
【００２４】
そして、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かは、その選択データ入出力ブロックの名称がそのモデルの名称を含んでいるか否かで判定するようになっていてもよい。
【００２５】
また、上記の検出は、複数のモデル中のデータ入出力ブロックを選択し、この選択された選択データ入出力ブロックと共通するデータの入出力を行う共通データ入出力ブロックが、複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定し、さらに、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定することで実現されており、さらに、その判定の結果、共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、エラーメッセージを記憶媒体に記憶させるようになっていてもよい。このエラーメッセージが記憶媒体に記憶されることで、モデルの設計等に不整合がある可能性が高い旨の情報を記録することができる。
【００２６】
また、より具体的には、記憶クラス設定装置は、複数のモデル中のデータ入出力ブロックを逐次選択し、その選択された選択データ入出力ブロックと共通する名称を有する共通データ入出力ブロックが、その複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定し、さらに、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定し、そしてこれら判定の結果、（１）共通データ入出力ブロックが当該外部モデルに含まれ、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開である旨のデータを記憶媒体に記憶させ、（２）共通データ入出力ブロックの入出力データが当該外部モデルに含まれ、かつ、選択データ入出力ブロックがその選択データ入出力ブロックを含むモデル内で定義されていない場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照である旨のデータを記憶媒体に記憶させ、（３）共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが非公開である旨のデータを記憶媒体に記憶させ、（４）共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、エラーメッセージを記憶媒体に記憶させるようになっていてもよい。
【００２７】
また、本発明の特徴は、上記した機能をコンピュータに実現させる記憶クラス設定プログラムとしても把握することができる。
【００２８】
また、本発明の特徴は、複数のモデル内におけるデータ入出力ブロックの使用状況を検出し、その検出結果に基づいて、当該データ入出力ブロックの入出力データの記憶クラスのデータを記憶媒体に記憶させ、更に、当該複数のモデル中のデータ入出力ブロックに対応するソースコードを、記憶されたそのデータ入出力ブロックの入出力データの記憶クラスのデータに基づいた形式で生成するような、モデルからソースコードを生成するソースコード生成装置としても把握することができる。
【００２９】
また、このソースコード生成装置は、複数のモデル中のデータ入出力ブロックに対応するソースコードにおける、その入出力データへのデータアクセス手続名の名称を、記憶されたそのデータ入出力ブロックの入出力データの記憶クラスのデータに基づく名称とするようになっていてもよい。なお、データアクセス手続名とは、関数、変数等の、データにアクセスするために提供される手続きの名称をいう。
【００３０】
また、本発明の特徴は、上記した機能をコンピュータに実現させる記憶クラス設定プログラム、およびソースコード生成プログラムとしても把握することができる。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の一実施形態について説明する。図１に、本実施形態に係る開発装置としてのパーソナルコンピュータ１の構成を示す。このパーソナルコンピュータ１は、ディスプレイ１１、入力装置１２、ＲＡＭ１３、ＲＯＭ１４、ＨＤＤ（ハードディスクドライブ）１５、ＣＰＵ（コンピュータに相当する）１６等から構成される。
【００３２】
ディスプレイ１１は、ＣＰＵ１６から受けた映像信号を、ユーザ（開発者）に対して映像として表示する。
【００３３】
入力装置１２は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１６に出力する。
【００３４】
ＲＡＭ１３は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ１４は読み出し専用の不揮発性メモリであり、ＨＤＤ１５は読み出し、書き込み可能な不揮発性メモリである。ＲＯＭ１４、ＨＤＤ１５には、ＣＰＵ１６が読み出して実行するプログラム等があらかじめ記憶されている。またＨＤＤ１５には、後述するモデルが記憶されている。
【００３５】
ＲＡＭ１３は、ＣＰＵ１６がＲＯＭ１４、ＨＤＤ１５に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、および作業用のデータを一時的に保存するための記憶領域として用いられる。
【００３６】
ＣＰＵ１６は、パーソナルコンピュータ１に電源が投入されることによって起動すると、ＲＯＭ１４から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（以下ＯＳと記す）その他のプログラムをＨＤＤ１５から読み出して実行することにより、起動処理を行う。起動処理以後、電源が遮断されるまで、ＣＰＵ１６は、入力装置１２からの信号、ＯＳによって予め定められたスケジュール等に基づいて、ＨＤＤ１５に記録されている各種プログラムを当該ＯＳ上のプロセスとして実行する。また、上記の起動処理およびプロセスにおいて、ＣＰＵ１６は必要に応じて入力装置１２から信号の入力を受け付け、またディスプレイ１１に映像信号を出力し、またＲＡＭ１３、ＨＤＤ１５に対してデータの読み出し／書き込みの制御を行う。
【００３７】
本実施形態のＣＰＵ１６は、車両制御のためのＥＣＵにおいて実行させるＣソースコードをモデルから生成するための統合開発環境として、記憶クラス設定プログラム１００、Ｃコード生成プログラム１５０等を実行するようになっている。
【００３８】
図２〜図５に、本実施形態のＣＰＵ１６が実行するプログラムのフローチャートを示す。ＣＰＵ１６は、図２および図３に示した記憶クラス設定プログラム１００を実行することで、ユーザによってよって作成され、ＨＤＤ１５に記憶されている複数のモデルを読み出し、この読み出した複数のモデルに含まれる入出力ブロックにおける入出力データの記憶クラスを設定し、その設定結果のデータをＨＤＤ１５に保存する。なお、モデルは、モデルエディタ等のモデル作成用プログラムをＣＰＵ１６が実行し、その実行時にユーザがモデル作成のための作業を入力装置１２を用いて行うことで、作成されるようなっていてもよい。
【００３９】
またＣＰＵ１６は、Ｃコード生成プログラム１５０を実行することで、上記した複数のモデルに対応したＣソースコードをそれぞれ生成する。また、このＣコード生成プログラム１５０は、図３および図４に記載の記憶クラス別コード生成プログラム３００を含んでいる。ＣＰＵ１６は、この記憶クラス別コード生成プログラム３００を実行することで、記憶クラス設定プログラム１００が生成する記憶クラス設定データに基づいて、ＨＤＤ１５に記憶されているソースコードの雛形（以下コードパターン）を読み出し、その読み出したコードパターンを加工し、組み合わせることで、後述するデータ入出力ブロックのソースコードを生成する。
【００４０】
なお、複数のモデルから生成された複数のソースコードは、後にそれぞれがコンパイルされた後にリンクされることで、それぞれの間でデータの受け渡しを行う１つのまとまったプログラムとなる。
【００４１】
ここで、モデルについて説明する。モデルは、時系列に沿ったデータ演算、データ入力およびデータ出力のうち少なくともいずれか１つの機能を表すブロック、およびブロック間の入出力関係を示す結線の組み合わせとして記述される。車両制御等のリアルタイム制御用のモデルの例としては、Ｔｈｅ  Ｍａｔｈｗｏｒｋｓ（登録商標）社のＳｉｍｕｌｉｎｋ（登録商標）を用いて作成することができるモデルがある。
【００４２】
図６〜図８に、本実施形態の記憶クラス設定プログラム１００およびＣコード生成プログラム１５０の実行においてＣＰＵ１６が読み出す複数のモデルＡ、Ｂ、Ｃの例を示す。図６のモデルＡは、ＤＳＲ（Ｄａｔａ  Ｓｔｏｒｅ  Ｒｅａｄ）ブロック２１、サブシステム２２、ＤＳＷ（Ｄａｔａ  Ｓｔｏｒｅ  Ｗｒｉｔｅ）ブロック２３およびＤＳＷブロック２４、ならびにこれらの入出力を繋ぐ結線（矢印線に相当する）を有している。また、図７のモデルＢは、ＤＳＲブロック３１、ＤＳＲブロック３２、サブシステム３３およびＤＳＷブロック３４、ならびにこれらの入出力を繋ぐ結線を有している。また、図８のモデルＣは、ＤＳＲブロック４１、サブシステム４２およびＤＳＷブロック４３、ならびにこれらの入出力を繋ぐ結線を有している。
【００４３】
また、各モデルＡ、Ｂ、Ｃは、それぞれ名称を有している。そしてその名称の情報は、モデルに含まれている。モデルＡ、Ｂ、Ｃの名称は、それぞれ、ｍｏｄｅｌＡ、ｍｏｄｅｌＢ、ｍｏｄｅｌＣである。
【００４４】
サブシステム２２、３３、４２は、複数のブロックの集合体としてのブロックである。サブシステム２２は、入力ポート２２１、増幅ブロック２２２、出力ポート２２３、定数ブロック２２４、２項加算ブロック２２５、出力ポート２２６、ならびにこれらを繋ぐ結線を有している。サブシステム３３は、入力ポート３３１、入力ポート３３２、２項加算ブロック３３３、出力ポート３３４、ならびにこれらを繋ぐ結線を有している。サブシステム４２は、入力ポート４２１、増幅ブロック４２２、出力ポート４２３、ならびにこれらを繋ぐ結線を有している。
【００４５】
入力ポート２２１、３３１、３３２、４２１は、サブシステムの外部からの入力データを、結線の後段のブロックに出力する機能を表すブロックである。
【００４６】
出力ポート２２３、２２６、３３４、４２３は、結線の前段から入力を受けたデータをサブシステム外部に出力する機能を表すブロックである。
【００４７】
増幅ブロック２２２、４２２は、結線の前段から入力されたデータの値を増幅して結線の後段に出力する機能を表すブロックである。
【００４８】
２項加算ブロック２２５、３３３は、２つの結線の前段から入力されたデータの値を加算した結果を結線の後段に出力する機能を表すブロックである。
【００４９】
したがって、サブシステム２２は、サブシステム２２の外部から入力されたデータの値を増幅したデータ、および、この入力されたデータに定数を加算した結果のデータを、外部に出力する機能を表現している。また、サブシステム３３は、サブシステム３３の外部から入力された２種類のデータの値を加算した結果のデータを外部に出力する機能を表現している。また、サブシステム４２は、サブシステム４２の外部から入力されたデータの値を増幅したデータを外部に出力する機能を表現している。
【００５０】
ＤＳＲブロック２１、３１、３２、４１は、ＲＡＭ１３またはＨＤＤ１５からデータを読み出して結線の後段（矢印側に相当する）に出力する機能を表現するブロックである。本実施形態においては、これらＤＳＲブロック２１、３１、３２、４１は、そのブロックを含むモデル内のＤＳＷブロックから、または、モデルＡ〜Ｃのうち、そのブロックを含むモデル以外のモデル（以下外部モデルと記す）内のＤＳＷブロックから、記憶媒体を介してデータの入力を受けるためのデータ入出力ブロックとして用いられる。
【００５１】
ＤＳＷブロック２３、２４、３４、４３は、結線の前段から入力されたデータをＲＡＭ１３またはＨＤＤ１５にデータを書き込む機能を表現するブロックである。本実施形態においては、これらＤＳＷブロック２３、２４、３４、４３は、そのブロックを含むモデル内のＤＳＲブロックまたは外部モデル内のＤＳＲブロックへ、記憶媒体を介してデータを出力するためのデータ入出力ブロックとして用いられる。
【００５２】
また、上記のＤＳＲブロック、ＤＳＷブロックは、それぞれ名称を有している。そしてそのブロックの名称の情報は、そのブロックを含むモデルに含まれている。図６〜図８においては、各ＤＳＲブロック、ＤＳＷブロックの直下に示された文字列がそのブロックの名称である。例えばＤＳＲブロック２１の名称は「ＤＳＲ＿Ａ２」である。さらに、上記のＤＳＲブロック、ＤＳＷブロックが入出力するデータは、それぞれ名称を有している。そしてそのデータ名称の情報は、そのブロックを含むモデルに含まれている。図６〜図８においては、各ＤＳＲブロック、ＤＳＷブロックの内部に示された文字列がそのブロックの入出力データの名称である。例えばＤＳＲブロック３１の入出力データの名称は「ｍｏｄｅｌＡ＿Ａ１」であり、ＤＳＷブロック４３の入出力データの名称は「ｍｏｄｅｌＣ＿Ｃ１」である。
【００５３】
以下、記憶クラス設定プログラム１００の規定する具体的な処理内容について説明する。ＣＰＵ１６は、ＨＤＤ１５に記憶されている複数のモデル（例えばモデルＡ、Ｂ、Ｃ）を指定し、記憶クラス設定プログラム１００の実行を開始する旨の、入力装置１２に対する操作を検出すると、この記憶クラス設定プログラム１００の実行を開始する。
【００５４】
そしてステップ１０１で、今回の記憶クラス設定プログラム１００の実行においてまだ選択されていないモデルを１つ選択する。
【００５５】
続いてステップ１０２で、その選択したモデル（以下選択モデルと記す）で使用されているデータのうち、今回の記憶クラス設定プログラム１００の実行においてまだ選択されていないものを１つ選択する。データの選択は、具体的には、ＤＳＲブロック、ＤＳＷブロック等のデータ入出力ブロックを選択することに相当する。
【００５６】
続いてステップ１０３で、その選択されたデータ（以下選択データと記す）、具体的には選択されたデータ入出力ブロック（以下選択データ入出力ブロックと記す）について、図３にフローチャートで示す記憶クラス判別サブルーチン２００を実行する。この実行によって、ＣＰＵ１６は、選択データの記憶クラスを特定することができる。記憶クラス判別サブルーチン２００の詳細については後述する。
【００５７】
続いてステップ１０４で、記憶クラスを設定する。具体的には、記憶クラス判別サブルーチン２００の実行によって特定された選択データに対する記憶クラスを、ＨＤＤ１５に、記憶クラス設定データとして記憶させる。この記憶クラス設定データは、データ入出力ブロックの名称と、そのデータ入出力ブロックの入出力データの名称と、そのデータ入出力ブロックにおける、そのデータ入出力ブロックの記憶クラスのデータとを関連づけたデータとなる。
【００５８】
続いてステップ１０５で、選択モデル内のすべてのデータについて記憶クラス設定が終了したか否かを、選択モデル中の全ての入出力ブロックが選択されたか否かで判定する。すべてのデータについて記憶クラス設定が終了した場合、続いてステップ１０６を実行し、そうでない場合、続いてステップ１０２を実行する。
【００５９】
ステップ１０６では、全てのモデルについて記憶クラス設定が終了したか否かを、指定された複数のモデルの全てが選択されたか否かで判定する。全てのモデルについて記憶クラス設定が終了した場合記憶クラス設定プログラム１００の実行を終了し、そうでなければ、続いてステップ１０１の処理を実行する。
【００６０】
このように、ＣＰＵ１６は、指定されたモデルを網羅的に逐次選択し（ステップ１０１，１０６参照）、その選択されたモデル中のデータ入出力ブロックを網羅的に逐次選択し（ステップ１０２、１０５参照）、その選択されたデータ入出力ブロックの入出力データについて、記憶クラス判別処理を行い（ステップ１０３参照）、その判別結果を記録する（ステップ１０４参照）。
【００６１】
続いてステップ１０３で実行される、記憶クラス設定プログラム１００の一部としての記憶クラス判別サブルーチン２００について説明する。
【００６２】
ＣＰＵ１６は、この記憶クラス判別サブルーチン２００の実行を開始すると、まずステップ２０１で、選択データが他のモデル内で使用されているか否かを検索する。具体的には、指定された複数のモデルのうち、選択ブロックを含むモデル以外の外部モデル内で、選択データと同じデータの入出力を行うデータ入出力ブロック（以下共通データ入出力ブロックと記す）を検索する。
【００６３】
続いてステップ２０２では、上記の検索の結果、選択データが外部モデル内で使用されているとなったか否かを判定し、使用されていれば続いてステップ２０３を実行し、使用されていなければ続いてステップ２０６を実行する。
【００６４】
ステップ２０３では、選択データが、選択モデルで定義されているデータであるか否かを判定する。具体的には、その選択データのデータ名称に、その選択モデルの名称があるか否かを判定する。したがって、モデルを生成する開発者は、あるデータを定義するようなブロック構成（例えばＤＳＭ（Ｄａｔａ Ｓｔｏｒｅ Ｍｅｍｏｒｙ）から成る構成）を含むモデルを生成した場合は、そのデータの名称に、その生成したモデルの名称を含ませるようにしておく必要がある。選択データが選択モデルで定義されているデータであれば、続いてステップ２０４で、その選択データの記憶クラスが「外部公開」であると判定する。選択データが選択モデルで定義されていないデータであれば、続いてステップ２０５で、その選択データの記憶クラスが「外部参照」であると判定する。
【００６５】
ステップ２０４、２０５の後、記憶クラス判別サブルーチン２００の実行は終了し、ＣＰＵ１６は、記憶クラス設定プログラム１００のステップ１０４の実行に戻る。
【００６６】
ステップ２０６では、ステップ２０３と同様に、選択データが、選択モデルで定義されているデータであるか否かを判定する。選択データが選択モデルで定義されているデータであれば、続いてステップ２０７で、その選択データの記憶クラスが「非公開」であると判定する。ステップ２０７の後、記憶クラス判別サブルーチン２００の実行は終了し、ＣＰＵ１６は、記憶クラス設定プログラム１００のステップ１０４の実行に戻る。
【００６７】
ステップ２０６で、選択データが選択モデルで定義されていないデータであると判定すれば、続いてステップ２０８で、エラー処理を行う。エラー処理は、具体的には、外部モデルで定義されていないデータを外部参照しようとしている旨のエラーメッセージを、ディスプレイ１１に表示させ、さらにこのエラーメッセージをＲＡＭ１３、ＨＤＤ１５に記憶させる。ステップ２０８の後、ＣＰＵ１６は、記憶クラス設定プログラム１００のステップ１０４の実行に戻らず、直ちに記憶クラス設定プログラム１００の実行を終了する。
【００６８】
以上のような記憶クラス判別サブルーチン２００を実行することで、ＣＰＵ１６は、選択データの記憶クラスを以下の（１）〜（３）のように判定する。
【００６９】
（１）内部で定義され、外部で使用される入出力データを使用する場合、すなわち、共通データ入出力ブロックが外部モデルに含まれ、かつ、選択データ入出力ブロックの入出力データが選択モデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開であると判定する。
【００７０】
（２）外部で定義された入出力データを使用する場合、すなわち、共通データ入出力ブロックの入出力データが外部モデルに含まれ、かつ、選択データ入出力ブロックがその選択データ入出力ブロックを含むモデル内で定義されていない場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照であると判定する。
【００７１】
（３）内部で定義され、外部で使用されない入出力データを使用する場合、すなわち、共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが非公開であると判定する。
【００７２】
例えば、図６〜図８のモデルＡ〜Ｃの場合、モデルＡのＤＳＲブロック２１、ＤＳＷブロック２４の入出力データのデータ名称はｍｏｄｅｌＡ＿Ａ２であり、このデータ名称を有するデータは外部モデルである他のモデルＢ、モデルＣには含まれない。したがって、データｍｏｄｅｌＡ＿Ａ２は、非公開データである。
【００７３】
また、ＤＳＷブロック２３の入出力データの名称はｍｏｄｅｌＡ＿Ａ１であり、このデータ名称を有するデータは、モデルＢ内に、ＤＳＲブロック３１として存在する。そして、このデータ名称は、モデルＡの名称であるｍｏｄｅｌＡを含んでいる。したがって、ＤＳＷブロック２３の入出力データは、外部公開データであり、ＤＳＲブロック３１の入出力データは、外部参照データである。
【００７４】
また、モデルＢ内のＤＳＲブロック３２の入出力データの名称はｍｏｄｅｌＣ＿Ｃ１であり、このデータ名称を有するデータは、モデルＣ内に、ＤＳＷブロック４３として存在する。そして、このデータ名称は、モデルＣの名称であるｍｏｄｅｌＣを含んでいる。したがって、ＤＳＷブロック４３の入出力データは、外部公開データであり、ＤＳＲブロック３２の入出力データは、外部参照データである。
【００７５】
また、モデルＢ内のＤＳＷブロック３４の入出力データの名称はｍｏｄｅｌＢ＿Ｂ１であり、このデータ名称を有するデータは、モデルＣ内に、ＤＳＲブロック４１として存在する。そして、このデータ名称は、モデルＢの名称であるｍｏｄｅｌＢを含んでいる。したがって、ＤＳＷブロック３４の入出力データは、外部公開データであり、ＤＳＲブロック４１の入出力データは、外部参照データである。
【００７６】
このような記憶クラス判別サブルーチン２００を含む記憶クラス設定プログラム１００を実行することで、ＣＰＵ１６は、網羅的に逐次選択した選択ブロックの入出力データについての記憶クラスを、ＨＤＤ１５に記憶することができる。
【００７７】
続いて、Ｃコード生成プログラム１５０について説明する。ＣＰＵ１６は、記憶クラス設定プログラム１００の実行が終了したことに基づいて、Ｃコード生成プログラム１５０の実行を開始する。また、ＣＰＵ１６は、ＨＤＤ１５に記憶されている複数のモデル（例えばモデルＡ、Ｂ、Ｃ）を指定し、Ｃコード生成プログラム１５０の実行を開始する旨の、入力装置１２に対する操作を検出すると、このＣコード生成プログラム１５０の実行を開始するようになっていてもよい。
【００７８】
ＣＰＵ１６は、Ｃコード生成プログラム１５０の実行において、記憶クラス設定プログラム１００の実行によって記憶クラスが設定されたモデル、または指定されたモデルに含まれるブロックまたはブロック群を網羅的に逐次読み出す。そして、この読み出したブロックまたはブロック群に対応するコードパターンをＨＤＤ１５から読み出し、そのコードパターンの変数名等を、モデル内の情報に基づいて変更する。例えば、データ入出力ブロックの入出力データに対応するＣソースコード中の変数は、そのモデル中に記載された、その入出力データのデータ名称と同じものとする。そして、このようにして生成された各ブロックのコードを組み合わせることで、当該モデルの表す機能をコンピュータに実現させるためのソースコードを完成させ、その完成したＣソースコードをＨＤＤ１５に記憶させる。
【００７９】
特にＣＰＵ１６は、モデル中のデータ入出力ブロックについては、Ｃコード生成プログラム１５０の一部である記憶クラス別コード生成プログラム３００を実行することで、それらに対応するソースコードを生成する。
【００８０】
以下、この記憶クラス別コード生成プログラム３００について説明する。このプログラムのステップ３０１、３０２、３０４および３０５は、それぞれ図２におけるステップ１０１、１０２、１０５および１０６と実質的に同等である。
【００８１】
ステップ３０３では、コード生成サブルーチン４００を実行する。
【００８２】
このように、ＣＰＵ１６は、指定されたモデルを網羅的に逐次選択し（ステップ３０１，３０５参照）、その選択されたモデル中のデータ入出力ブロックを網羅的に逐次選択し（ステップ３０２、３０４参照）、その選択されたデータ入出力ブロックについて、コード生成サブルーチン４００を実行する（ステップ３０３参照）。
【００８３】
続いて、ステップ３０３で実行される、記憶クラス別コード生成プログラム３００の一部としてのコード生成サブルーチン４００について説明する。
【００８４】
ＣＰＵ１６は、このコード生成サブルーチン４００の実行を開始すると、まずステップ４０１で、選択されたデータ入出力ブロックの入出力データが外部公開であるか否かを、ＨＤＤ１５に記憶された記憶クラス設定データに基づいて判定する。そして当該入出力データの記憶クラスが外部公開である場合、続いてステップ４０２を実行し、外部公開でない場合、続いてステップ４０５を実行する。
【００８５】
ステップ４０２では、選択されたデータ入出力ブロックが出力ブロック（具体的にはＤＳＷブロック）であるか否かを判定する。当該データ入出力ブロックが出力ブロックの場合、続いてステップ４０３を実行し、出力ブロックでない場合、続いてステップ４０４を実行する。
【００８６】
ステップ４０３では、外部公開データ出力用コードを生成してＲＡＭ１３に保存する。このコードの内容については後述する。
【００８７】
ステップ４０４では、外部公開データ入力用コードを生成してＲＡＭ１３に保存する。このコードの内容については後述する。
【００８８】
ステップ４０３、４０４の後には、コード生成サブルーチン４００の処理を終了し、記憶クラス別コード生成プログラム３００のステップ３０４の実行に戻る。
【００８９】
ステップ４０５では、選択されたデータ入出力ブロックの入出力データが非公開であるか否かを、ＨＤＤ１５に記憶された記憶クラス設定データに基づいて判定する。そして当該入出力データの記憶クラスが非公開である場合、続いてステップ４０６を実行し、非公開でない場合、続いてステップ４０９を実行する。
【００９０】
ステップ４０６では、ステップ４０２と同様、選択されたデータ入出力ブロックが出力ブロックであるか否かを判定する。当該データ入出力ブロックが出力ブロックの場合、続いてステップ４０７を実行し、出力ブロックでない場合、続いてステップ４０８を実行する。
【００９１】
ステップ４０７では、非公開データ出力用コードを生成してＲＡＭ１３に保存する。このコードの内容については後述する。
【００９２】
ステップ４０８では、非公開データ入力用コードを生成してＲＡＭ１３に保存する。このコードの内容については後述する。
【００９３】
ステップ４０７、４０８の後には、コード生成サブルーチン４００の処理を終了し、記憶クラス別コード生成プログラム３００のステップ３０４の実行に戻る。
【００９４】
ステップ４０９では、選択されたデータ入出力ブロックが入力ブロック（具体的にはＤＳＲブロック）であるか否かを判定する。当該データ入出力ブロックが入力ブロックの場合、続いてステップ４１０を実行し、入力ブロックでない場合、続いてステップ４１１を実行する。
【００９５】
ステップ４１０では、外部参照データ入力用コードを生成してＲＡＭ１３に保存する。このコードの内容については後述する。その後、コード生成サブルーチン４００の処理を終了し、記憶クラス別コード生成プログラム３００のステップ３０４の実行に戻る。
【００９６】
ステップ４１１では、エラー処理を行う。エラー処理は、具体的には、外部参照データに対してＤＳＷブロックによってデータを書き込もうとしている旨のエラーメッセージを、ディスプレイ１１に表示させ、さらにこのエラーメッセージをＲＡＭ１３、ＨＤＤ１５に記憶させる。ステップ４１１の後、ＣＰＵ１６は、記憶クラス別コード生成プログラム３００のステップ３０４の実行に戻らず、直ちに記憶クラス別コード生成プログラム３００の実行を終了する。
【００９７】
以上のような記憶クラス別コード生成プログラム３００を実行することで、ＣＰＵ１６は、複数のモデル中のデータ入出力ブロックを網羅的に逐次読み出し、その入出力ブロックおよび入出力データ、ならびに記憶クラス設定データに基づいて、以下の（１）〜（６）のような処理を行う
（１）そのデータ入出力ブロックが出力ブロックで、その入出力データの記憶クラスが外部公開である場合、外部公開データ出力用コードを生成する。
（２）そのデータ入出力ブロックが入力ブロックで、その入出力データの記憶クラスが外部公開である場合、外部公開データ入力用コードを生成する。
（３）そのデータ入出力ブロックが出力ブロックで、その入出力データの記憶クラスが非公開である場合、非公開データ出力用コードを生成する。
（４）そのデータ入出力ブロックが入力ブロックで、その入出力データの記憶クラスが非公開である場合、非公開データ入力用コードを生成する。
（５）そのデータ入出力ブロックが出力ブロックで、その入出力データの記憶クラスが外部参照である場合、エラーメッセージを出力する。
（６）そのデータ入出力ブロックが入力ブロックで、その入出力データの記憶クラスが外部参照である場合、外部参照データ入力用コードを生成する。
【００９８】
以上のような記憶クラス別コード生成プログラム３００を含むＣコード生成プログラム１５０を実行することによってＣＰＵ１６が生成するＣソースコードの一例を図９〜図１１に示す。図９、図１０、図１１は、それぞれ図６のモデルＡ、図７のモデルＢ、図８のモデルＣの表す機能に対応したＣソースコードである。なお、これらＣソースコードの各行の左端には、説明の便宜のために、実際にはない行番号を付してある。
【００９９】
ここで、この図９〜図１１を用い、外部公開データ出力用コード、外部公開データ入力用コード、非公開データ出力用コード、非公開データ入力用コードおよび外部参照データ入力用コードについて説明する。
【０１００】
モデルＡに対応する図９のＣソースコードにおいては、非公開であると記憶クラス判別サブルーチン２００で判定された入出力データｍｏｄｅｌＡ＿Ａ２に対応する変数は、２行目で宣言されている。そして、ＤＳＲブロック２１に対応するＣソースコード部分は、１２行目の代入文である。また、ＤＳＷブロック２３に対応するＣソースコード部分は、１６行目の代入文である。このように、非公開データ入力用コードは、＜ローカル変数名＞＝＜入出力データ名＞という形式で記載され、非公開データ出力用コードは、＜入出力データ名＞＝＜ローカル変数名＞という形式で記載される。
【０１０１】
なお、非公開の入出力データの変数名を、外部のプログラムから非公開であることを示す変数名としてもよい。このようにすれば、開発者にとって、変数の記憶クラスがわかりやすいソースコードとなる。
【０１０２】
また、外部公開であると記憶クラス判別サブルーチン２００で判定された入出力データｍｏｄｅｌＡ＿Ａ１に対応する変数は、１行目で宣言されている。そして、ＤＳＷブロック２３に対応するＣソースコード部分は、３〜５行目のデータ公開用関数ｇ＿ｍｏｄｅｌＡ＿Ａ１＿ｇｅｔ（）の実体定義部、６〜８行目のデータ書き込み用関数ｇ＿ｍｏｄｅｌＡ＿Ａ１＿ｓｅｔ（）の実体定義部、および１５行目のデータ書き込み用関数呼び出し部である。このように、外部公開データ出力用コードは、外部公開であることを示すためのプレフィックス“ｇ＿”と、データ公開用または書き込み用であることを示すためのサフィックス“＿ｇｅｔ”または“＿ｓｅｔ”を、入出力データ名に付した名称を有するデータ公開用関数およびデータ書き込み用関数の実体定義、ならびに、そのデータ書き込み用関数を呼び出すことで、ローカル変数を入出力データに対応する変数として記憶媒体に書き込む文となる。
【０１０３】
なお、このように、外部公開の入出力データの関数名を、外部のプログラムから参照可能であることを示す関数名（アクセス手続き名に相当する）とすることで、開発者にとって、変数の記憶クラスがわかりやすいソースコードとなる。
【０１０４】
また、モデルＢに対応する図１０のＣソースコードにおいては、外部参照であると記憶クラス判別サブルーチン２００で判定された入出力データｍｏｄｅｌＡ＿Ａ１の入力を受けるＤＳＲブロック３１に対応するＣソースコード部分は、１２行目の外部公開用関数呼び出し文である。このように、外部参照データ入力用コードは、＜ローカル変数＞＝ｇ＿＜入出力データ名＞＿ｇｅｔ（）という文、すなわち、データ公開用関数を呼び出すことで、ローカル変数に入出力データに対応する変数を読み出す文となっている。
【０１０５】
なお、図１０の２〜７行目、および１５行目は、ＤＳＷブロック３４に対応する外部公開データ出力用コードであり、また、１３行目は、ＤＳＲブロック３２に対応する外部参照データ入力用コードである。
【０１０６】
また、図１１の２〜７行目、および１３行目は、ＤＳＷブロック４３に対応する外部公開データ出力用コードであり、また、１１行目は、ＤＳＲブロック４１に対応する外部参照データ入力用コードである。
【０１０７】
また、図９〜図１１のソースコードには記述されていないが、外部公開データ入力用コードは、データ公開用関数を呼び出すことで、ローカル変数に入出力データに対応する変数を読み出す文、例えば、＜ローカル変数＞＝ｇ＿＜入出力データ名＞＿ｇｅｔ（）となっていてもよい。
【０１０８】
なお、上で＜ローカル変数＞として記載したものは、必ずしもローカル変数である必要はない。
【０１０９】
以上に示したようなプログラムをＣＰＵ１６が実行することで、パーソナルコンピュータ１は組み合わせて１つのプログラムとするために指定された複数のモデル中のデータ入出力ブロックを逐次選択し、その選択された選択データ入出力ブロックと共通する名称を有する共通データ入出力ブロックが、その複数のモデルのうちの、そのデータ入出力ブロックを含むモデルでない外部モデルに含まれているか否かを判定する。さらに、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されているか否かを判定し、そしてこれら判定の結果、
（１）共通データ入出力ブロックが当該外部モデルに含まれ、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部公開である旨のデータをＨＤＤ１５に記憶させる。
【０１１０】
（２）また、共通データ入出力ブロックの入出力データが当該外部モデルに含まれ、かつ、選択データ入出力ブロックがその選択データ入出力ブロックを含むモデル内で定義されていない場合、その選択データ入出力ブロックの入出力データの記憶クラスが外部参照である旨のデータをＨＤＤ１５に記憶させる。
【０１１１】
（３）また、共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されている場合、その選択データ入出力ブロックの入出力データの記憶クラスが非公開である旨のデータをＨＤＤ１５に記憶させる。
【０１１２】
（４）共通データ入出力ブロックが当該複数のモデルのうち当該外部モデルのいずれにも含まれず、かつ、選択データ入出力ブロックの入出力データがその選択データ入出力ブロックを含むモデル内で定義されていない場合、エラーメッセージをＲＡＭ１３およびＨＤＤ１５に記憶させる。
【０１１３】
このようになっていることで、パーソナルコンピュータ１がモデルの記載内容に基づいて入出力データの記憶クラスを設定し、この設定された記憶クラスに基づいてソースコード生成をするので、設定の誤りが生じる恐れを低減することが可能となる。
【０１１４】
また、パーソナルコンピュータ１が検出するのは、複数のモデル内におけるデータ入出力ブロック間のデータの受け渡し関係の情報であると言えるので、複数のモデル内におけるデータ入出力ブロック間のデータの受け渡し関係の情報に基づいた記憶クラスの設定が可能となる。
【０１１５】
パーソナルコンピュータ１が、記憶クラス設定装置およびソースコード生成装置に相当する。
【０１１６】
また、記憶クラス設定プログラム１００およびＣコード生成プログラム１５０が、ソースコード生成プログラムに相当する。
【０１１７】
また、ＣＰＵ１６が、図２、図３のステップ１０１、１０２、１０５、１０６、２０１、２０２、２０３および２０６を実行することで、検出手段として機能する。
【０１１８】
また、ＣＰＵ１６が、ステップ１０４、２０４、２０５、２０７および２０８を実行することで、記憶制御手段として機能する。
【０１１９】
また、ＣＰＵ１６が、ステップ１０１、１０２、１０５、１０６を実行することで、選択手段として機能する。
【０１２０】
また、ＣＰＵ１６が、ステップ２０２を実行することで、第１判定手段として機能する。
【０１２１】
また、ＣＰＵ１６が、ステップ２０３、２０６を実行することで、第２判定手段として機能する。
【０１２２】
また、ＣＰＵ１６が、Ｃコード生成プログラム１５０を実行することで、生成手段として機能する。
【０１２３】
なお、上記実施形態においては、データ入出力ブロックとして、ＤＳＲブロック、ＤＳＷブロックが例示されているが、データ入出力ブロックは、必ずしもこれらに限られない。例えば、Ｓｉｍｕｌｉｎｋ（登録商標）における入出力ポート、Ｆｒｏｍブロック、Ｇｏｔｏブロックであってもよい。
【０１２４】
また、上記実施形態においては、選択データ入出力ブロックの選択データが、選択モデルで定義されているデータであるか否かについては、その選択データのデータ名称に、その選択モデルの名称があるか否かで判定しているが、必ずしもこのようになっておらずともよい。例えば、その選択データ入出力ブロックがＤＳＷブロック等のデータ出力ブロックであれば、当該ブロックの選択データが、選択モデルで定義されているデータであると判定し、また、その選択データ入出力ブロックがＤＳＲブロック等のデータ入力ブロックであれば、当該ブロックの選択データが、選択モデルで定義されていないデータであると判定するようになっていてもよい。すなわち、共通するデータのデータ入力ブロックとデータ出力ブロックとの関係に基づいて、選択データの選択モデル内での定義、非定義を判定してもよい。
【図面の簡単な説明】
【０１２５】
【図１】本発明の実施形態に係るパーソナルコンピュータ１のハードウェア構成を示す図である。
【図２】記憶クラス設定プログラム１００のフローチャートである。
【図３】記憶クラス判別サブルーチン２００のフローチャートである。
【図４】記憶クラス別コード生成プログラム３００のフローチャートである。
【図５】コード生成サブルーチン４００のフローチャートである。
【図６】モデルＡを示す図である。
【図７】モデルＢを示す図である。
【図８】モデルＣを示す図である。
【図９】モデルから生成されるソースコードの一例のリストを示す図である。
【図１０】モデルＢから生成されるソースコードの一例のリストを示す図である。
【図１１】モデルＣから生成されるソースコードの一例のリストを示す図である。
【符号の説明】
【０１２６】
１…パーソナルコンピュータ、１１…ディスプレイ、１２…入力装置、１３…ＲＡＭ、
１４…ＲＯＭ、１５…ＨＤＤ、１６…ＣＰＵ、
２１、３１、３２、４１…ＤＳＲブロック、２２、３３、４２…サブシステム、
２３、２４、３４、４３…ＤＳＷブロック、１００…記憶クラス設定プログラム、
１５０…Ｃコード生成プログラム、２００…記憶クラス判別サブルーチン、
２２１、３３１、４２１…入力ポート、２２２、４２２…増幅ブロック、
２２３、２２６、３３４、４２３…出力ポート、２２４…定数ブロック、
２２５、３６３…２項加算ブロック、３００…記憶クラス別コード生成プログラム、
４００…コード生成サブルーチン。
【図１】
2006039993.tif 000003
【図２】
2006039993.tif 000004
【図３】
2006039993.tif 000005
【図４】
2006039993.tif 000006
【図５】
2006039993.tif 000007
【図６】
2006039993.tif 000008
【図７】
2006039993.tif 000009
【図８】
2006039993.tif 000010
【図９】
2006039993.tif 000011
【図１０】
2006039993.tif 000012
【図１１】
2006039993.tif 000013