このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
モデル参照階層向けのコードの生成
モデルのインクリメンタルな読み込み処理、インクリメンタルなコード生成、参照モデルのモジュール開発、およびコードの再利用を達成するため、モデル参照階層向けのコードを生成できます。
Model ブロックを使用して、あるモデルを別のモデル内に含めることができます。Model ブロックの各インスタンスは "モデル参照" になります。シミュレーションとコード生成では、"参照モデル" 内のブロックが 1 つのユニットとして一緒に実行されます。参照モデルを含むモデルは "親モデル" になります。親モデルと参照モデルの集合は "モデルの階層構造" を形成します。
モデル参照のテクノロジー
参照モデルの階層構造向けのコードを生成する場合、コード ジェネレーターは、最上位モデルのスタンドアロン実行可能ファイルと、各参照モデルの "モデル参照ターゲット" と呼ばれるライブラリ モジュールを生成します。コードが実行されると、最上位のモデルの実行可能ファイルはモデル参照ターゲットを呼び出し、参照モデルの出力を計算します。モデル参照ターゲットはしばしば、"Simulink® Coder™ ターゲット" と呼ばれます。
モデル参照ターゲット (Simulink Coder ターゲット) を他のターゲットのタイプと混同しないでください。
ターゲット ハードウェア — Simulink Coder ソフトウェアがコードを生成する対象のプラットフォーム
システム ターゲット ファイル — 目的に応じたコード生成の方法を Simulink Coder ソフトウェアに指示するファイル
ラピッド シミュレーション ターゲット (RSim) — Simulink Coder 製品の一部であるシステム ターゲット ファイル
シミュレーション ターゲット — Simulink Accelerator™ ソフトウェアを使用して実行される、参照モデルを実装する MEX ファイル
コード ジェネレーターは、コード生成フォルダーに階層の最上位モデルのコードを置き、コード生成フォルダーの slprj
フォルダーに参照モデルのコードを置きます。slprj
のサブフォルダーは、異なるタイプのファイル用の別個の場所です。フォルダーの詳細については、ビルド プロセスのフォルダーの管理を参照してください。
既定の設定では、Simulink Coder は、"インクリメンタルなコード生成" を使用します。コードを生成する際に、ソフトウェアで参照モデルのファイルの構造的なチェックサムと生成コードのファイルとの比較が行われ、モデル参照ターゲットを再生成するかどうかを判定します。リビルドをいつ実行するかをコントロールするには、[コンフィギュレーション パラメーター] の [モデル参照] 、 [リビルド] を使用します。詳細については、リビルドを参照してください。
Simulink Coder ソフトウェアでは "インクリメンタルな読み込み処理" も使用します。参照モデルのコードは、親モデルのコードを実行して参照モデルの出力を必要とするまでは、メモリに読み込まれません。その後、Simulink Coder は参照モデル ターゲットを読み込んでコードを実行します。ターゲットは、一旦読み込まれると使用されなくなるまでメモリに保持されます。
Embedded Coder® を使用している場合、カスタム ターゲットは、Model ブロックをサポートしている場合、モデル参照に準拠していると宣言しなければなりません。詳細については、モデル参照のサポートを参照してください。
モデル参照階層向けのコードの生成
この例では、既存のモデルを参照してモデル参照階層向けのコードを生成する方法を説明します。
モデル参照階層の作成
1. 既存のモデル (たとえば ex_model_arg_ref
モデル) を開きます。このモデルは再利用可能なアルゴリズムを表します。これは GRT モデルです。Embedded Coder を使用している場合は、モデル コンフィギュレーション パラメーター [システム ターゲット ファイル] を ert.tlc
に変更します。
open_system('ex_model_arg_ref');
2. 参照モデルにはそれが参照可能であることが指定されていなければなりません。さらに、参照が 1 回だけ許可されるのか、複数回許可されるのかも指定しなければなりません。モデル コンフィギュレーション パラメーター最上位モデルごとに可能なインスタンスの総数 を One
または Multiple
として指定します。既定では、[最上位モデルごとに可能なインスタンスの総数] は Multiple
に設定されています。
3. モデル参照階層で最上位モデルにする新しいモデルを作成します。最上位モデルは、他のモデルを、参照モデル、または参照モデルの複数インスタンスとして参照します。
4. 必要に応じて最上位モデルに Inport と Outport を追加します。参照モデルを追加するには、Modelブロックを使用します。
5. 当初、新しいブロックは参照モデルを指定しないため、関連付けられていません。[ブロック パラメーター] ダイアログ ボックスを開くには、Model ブロックをダブルクリックするか、または Model ブロックのコンテキスト メニューを使用します。
6. [モデル名] フィールドに参照モデルの名前を入力します。この名前は、拡張子の .slx
を除き 60 文字を超えることはできません。
7. [OK] をクリックします。参照モデルにルートレベルの入力または出力を含めると、Model ブロックに対応する入力端子と出力端子が表示されます。
8. Model ブロックのインスタンスをもう 1 つ作成して、最上位モデルが次のモデルのようになるようにします。
open_system('ex_model_arg');
9. モデルに ex_model_arg
という名前を付け、モデルを保存します。
サブシステムを参照モデルに変換することもできます。詳細については、サブシステムから参照モデルへの変換を参照してください。
モデル参照階層向けのコードの生成
1. 最上位モデルおよび参照モデルについて、モデル コンフィギュレーション パラメーターの [ソルバーの選択] の [タイプ] が Fixed-step
に設定されていることを確認します。それぞれの [コンフィギュレーション パラメーター] ダイアログ ボックスを開くには、[モデル化] タブでそれぞれのモデルについて [モデル設定] を選択します。
複数の参照モデルをもつモデル参照階層について、開いている参照モデルと最上位モデルの [モデル設定] に、このメニューからアクセスできます。モデルの階層構造内の別のモデルの [モデル設定] にアクセスするには、参照モデルを開いてこのメニューにアクセスします。
2. 最上位モデルについて、Simulink Coder アプリまたは Embedded Coder アプリのいずれかを選択して [C コード] タブを開きます。モデル参照階層向けのコードを生成するには、[ビルド] ボタンをクリックします。
Simulink Coder ビルド プロセスによって、コードが生成され、コンパイルされます。現在のフォルダーに、次に示す新しいファイルと新しいフォルダーが作成されます。
ex_model_arg_grt_rtw
— 最上位モデル用の生成コードを含むビルド フォルダー
slprj > grt > ex_model_arg_ref
— 参照モデル向けの生成コードを含むフォルダー
ex_model_arg.exe
— ビルド プロセスによって作成された実行可能ファイル
ex_model_arg.slxc
— 最上位モデルの Simulink キャッシュ ファイル
ex_model_arg_ref.slxc
— 参照モデルの Simulink キャッシュ ファイル
コンフィギュレーション パラメーターの要件の詳細については、モデルの階層構造のコード生成のためのコンフィギュレーション パラメーターの設定を参照してください。
生成されたコードのコード生成レポートでの表示
生成されたコードを表示するには、[C コード] タブで [レポートを開く] を選択します。コード生成レポートにはモデル参照階層について生成されたすべてのファイルへのハイパーリンクが含まれています。
参照モデルのコード生成レポートを開くには、レポートの上部にある ex_model_arg
をクリックします。ドロップダウンで ex_model_arg_ref
をクリックします。参照モデルのソース ファイルが参照モデルの生成コードと共に表示されます。
最上位モデルに戻るには、コード生成レポート ウィンドウの左上隅にある [前に戻る] をクリックします。
コード生成フォルダーでの作業
モデル参照のコードはコード生成フォルダー内に生成されます。シミュレーション ターゲット コードはシミュレーション キャッシュ フォルダー内に生成されます。2 つの異なるフォルダーを使用するため、次の制約があります。
モデル参照ターゲットをビルドするタイミングと場所。
モデル参照ターゲットへのアクセス方法。
Model ブロックによって参照されるモデルは MATLAB® パス上の任意の場所に格納できます。最上位モデルには、別のファイル システムやフォルダーに格納されているモデルを含めることができます。シミュレーション ターゲットとこれらのモデルから派生した生成されたコードは、別のファイル システムや別のフォルダーに格納することはできません。コードの再利用を許可するためには、最上位モデルによって参照されるモデルが、1 つのコード生成フォルダー内でモデル参照ターゲット コードのシミュレーションと生成を行うように設定しなければなりません。
それぞれ別のフォルダーに格納されている複数の最上位モデルから同じモデルを参照する場合は、以下のいずれかの方法を選択しなければなりません。
同じコード生成フォルダーで作業し、モデルがパス上にあるようにする。
作業する各フォルダーで、別々のコード生成フォルダー、シミュレーション ターゲットおよび Simulink Coder ターゲットを生成できるようにする。
2 番目の方法では、モデル参照コードの複数のインスタンスをメンテナンスする必要があります。たとえば、参照モデルに変更を加える際に、生成コードが冗長になる可能性があります。参照モデルのコードの再生成を最小化するために、すべてのセッションに対応する 1 つの特定のコード生成フォルダーを選択します。
モデル参照ターゲットのビルド
コード ジェネレーターはモデル参照ターゲットを Simulink モデルから直接作成します。コード ジェネレーターは、たとえば更新が必要なときには、モデル参照ターゲットを生成または再生成します。
MATLAB コマンド ウィンドウで引数を使用して slbuild
コマンドを実行する際に、Simulink および Simulink Coder は、アクセラレータ モードの参照モデル向けのシミュレーション ターゲットと参照モデル向けのモデル参照ターゲットを生成できます。
コード ジェネレーターは、複数の参照モデルのインスタンスに対して、モデル参照ターゲットを 1 つのみ生成します。詳細については、サブシステムからの再呼び出し可能なコードの生成を参照してください。
変更チェック時間の短縮
以下のようにコンフィギュレーション パラメーター値を設定すると、Simulink と Simulink Coder が、モデル参照ターゲットをリビルドする必要があるかどうかを確認する時間を短縮できます。
これらのパラメーター値は、個々の Model ブロック内ではなく、参照モデル コンフィギュレーション セット内にあります。どちらの値も参照モデルの 1 つのインスタンスに設定すれば、そのモデルのインスタンスに設定されます。