このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
コード生成用にモデルを構成するときに、キャリブレーションなどの調整可能性のパラメーターを特定して構成できます。構成できるパラメーターのタイプを次の表に示します。
パラメーターのタイプ | 説明 |
---|---|
モデル パラメーター引数 | モデル引数として構成するモデル ワークスペース内のブロック パラメーター。モデル パラメーター引数を含むモデルの各インスタンスは一意の値に設定される引数をもつことができます。 |
モデル パラメーター | モデル ワークスペース内のパラメーターなど、モデル内で定義されたパラメーター。 |
外部パラメーター | ベース ワークスペース内またはデータ ディクショナリ内でオブジェクトとして定義されたパラメーター。 |
定数 | 定数パラメーター。 |
コード生成用にパラメーターを構成するには、そのパラメーターをデータ オブジェクトと関連付けなければなりません。たとえば、コード生成用に MATLAB 変数を構成する前に、モデル エクスプローラーでその変数をパラメーター オブジェクトに変換します。
Embedded Coder アプリでモデルを開くと、データ オブジェクトに関連付けられているモデル パラメーター、モデル パラメーター引数、および定数がコード マッピング エディターに表示されます。エディターで、コード生成用にパラメーターを構成できます。モデルが外部パラメーターを使用する場合、パラメーター名の右にある Refresh
リンクをクリックしてそれらをコード マッピング エディターに追加できます。このリンクにより、ブロック線図の更新が開始され、エディター ビューに、モデルによって使用される外部パラメーターが追加されます。
以下を実行するようにパラメーター データを構成します。
生成コードの実行中に操作するためにデータをアクセス可能にする。
メモリに格納されるデータの量を最小限に抑える。
コード ジェネレーターがパラメーター データをメモリ内に配置する場所を制御する。
パラメーター データをモデル インターフェイスにプロモートし、その他のコンポーネントおよびシステムがそのデータにアクセスできるようにする。
生成されたコードの可読性およびトレーサビリティを向上させる。
モデル全体のパラメーターが調整可能かどうかを制御するために、コード マッピング エディターの [Data Defaults] タブで 'Auto' will be tunable/inline
リンクを使用し、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] にアクセスできます。たとえば、以下のような場合、このリンクを使用してパラメーターを調整可能にすることができます。
ラピッド プロトタイピング時にパラメーター設定を調整する
パラメーターをキャリブレーションする
量産コード用にパラメーターを最適化する
コード生成用に、例はモデル rtwdemo_configinterface
のモデル パラメーターおよびモデル パラメーター引数の構成方法を説明します。コード マッピング エディターまたはコード マッピング API (コード マッピング エディター) を使用してコード マッピングを構成できます。
既定の設定では、モデル内のパラメーターは以下の名前のグローバル データ構造体のフィールドとして生成されたコードに表示されます。
モデル パラメーターの model
_P
モデル パラメーター引数の model
_InstP
定数パラメーターの model
_ConstP
コード インターフェイスの要件に基づいて、パラメーター データの生成をカスタマイズするかどうかを決定します。カスタマイズを構成しない場合、コード ジェネレーターは生成されたコード内のパラメーターの表現を最適化目的で削除するか変更するかを判断します。カスタマイズを構成する場合は、以下を決定します。
既定のコンフィギュレーションを設定するかどうか
調整可能にしなければならないカテゴリのパラメーターがモデルに多数含まれる場合 (たとえば、10 個以上)、特殊なケースについてその設定をオーバーライドするより、既定の設定を使用してそのカテゴリのパラメーターを構成する方が効率的です。一意のソース、命名規則、または配置要件をもつ指定されたカテゴリのパラメーターがモデルに少数含まれる場合は、個々のパラメーターを構成することを検討してください。
生成されたコード内でモデル パラメーター データを宣言して処理する方法
個別のグローバル変数として
外部コードで定義されたグローバル変数からモデル パラメーター データを読み取るため
アクセス関数への呼び出しとして。Embedded Coder® が必要
これらのオプションの詳細については、Control Data and Function Interface in Generated Codeを参照してください。
モデル パラメーターのその他の考慮事項には、次を実行するかどうかが含まれます。
生成されたコード内のパラメーターに、モデル内のパラメーター名または一意のコード識別子を使用して名前を付ける。
コンパイラ フラグまたはオプションで定義されるプリプロセッサの条件をサポートする。Embedded Coder が必要です。バリアント モデルを使用して C のプリプロセッサ条件を使用するコードを生成するを参照してください。
グローバル変数定義と宣言に static
型修飾子を含めて、たとえば、名前の衝突を防ぐ。Embedded Coder が必要です。Prevent Name Clashes by Configuring Data Item as staticを参照してください。
グローバル変数定義と宣言に const
、volatile
、const
および volatile
型修飾子を含める。Embedded Coder が必要です。Protect Global Data with const and volatile Type Qualifiersを参照してください。
マクロ (#define
) または外部ヘッダー ファイルに定義されたマクロを使用するコードを生成する。Embedded Coder が必要です。Macro Definitions (#define)を参照してください。
指定する名前をもつグローバル データ構造体を生成する。Embedded Coder が必要です。Organize Data into Structures in Generated Codeを参照してください。
特定のメモリ領域にパラメーター データを配置する。Embedded Coder が必要です。Control Data and Function Placement in Memory by Inserting Pragmasを参照してください。
対応するストレージ クラスおよびストレージ クラスのプロパティをもつパラメーターに関連するインターフェイスの要件のリストについては、Choose Storage Class and Storage Class Properties for Data Storesを参照してください。
モデル例 rtwdemo_configinterface
のパラメーターの要件は次のとおりです。
既定の設定では、調整用に生成されたコードにモデル パラメーターを保持します。パラメーターをインライン化してコードを最適化しないでください。
const
および volatile
型修飾子で定義および宣言された個別のグローバル変数としてモデル パラメーターを表します。
接頭辞 mp_
をモデル パラメーターを表す変数の名前に適用します。
定数パラメーター UPPER
および LOWER
がモデルの各インスタンスに対して異なる値を使用できるようにします。
モデル パラメーター引数の各インスタンスに対して、既定の設定で、エクスポートされた構造体内に一意に名前が付けられたフィールドとして表されるメモリ領域を割り当てます。
モデル パラメーター引数は生成されたコード内で個々のモデル関数引数として表示されます。コード ジェネレーターで、モデル内のブロックで使用されていないモデル パラメーター引数を最適化できるようにします。
この例では、これらのコード生成要件を満たすように、rtwdemo_configinterface
でモデルパラメーターおよびモデル パラメーター引数を構成します。
パラメーターに対する既定のコード生成設定により、生成コードの実行中に操作しなければならないパラメーターが多数あるモデルの場合は特に、コード生成用にモデルを準備する作業を軽減できます。構成設定を 1 度選択すると、コード ジェネレーターによってこれらの設定がモデル全体のパラメーターに適用されます。Simulink® は既定の構成をモデルの一部として保存します。
一意の要件をもたない同じカテゴリに対して、モデルで複数のパラメーターを使用する場合、または共有 Embedded Coder ディクショナリを使用する場合は、モデル パラメーターに対して既定のコード生成設定を構成することを検討してください。
この例では、コード マッピング エディターを使用して、モデル rtwdemo_configinterface に対するモデル パラメーターおよびモデル パラメーター引数に既定の設定を構成する方法を示します。調整可能であり、生成コードで型修飾子 const
および volatile
をもつ 個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。既定の設定を使用するモデル パラメーター引数を構成します。この設定では、コード ジェネレーターは、引数インスタンスごとにエクスポートされた構造体内で一意に名前が付けられるフィールドとして表されるメモリ領域を割り当てます。
モデル rtwdemo_configinterface を開きます。書き込み可能な場所にモデルのコピーを保存します。
Embedded Coder アプリを開きます。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
コード マッピング エディターで、[Model parameter arguments] を選択します。ストレージ クラスを [Default]
に設定したままにします。コード ジェネレーターは引数インスタンスごとに個別のメモリ領域を割り当てます。
コード マッピング エディターの [パラメーター] で、カテゴリ [Model parameters] を選択します。リンク テキスト 'Auto' will
be inlined
は、コード ジェネレーターが既定の設定でモデル パラメーターをインライン化するように構成されていることを示します。この例では、モデル パラメーターが調整可能であることが要件です。'Auto' will be inlined
をクリックします。
[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を [調整可能]
に設定します。変更を保存し、ダイアログ ボックスを閉じます。コード マッピング エディターで、リンク テキストが 'Auto' will
be tunable
に変更されます。
コード マッピングで、[Model parameters] カテゴリがまだ選択された状態で、ストレージ クラスを [ConstVolatile]
に設定します。
モデルを保存します。
コード生成に対する個々のパラメーターを構成できます。たとえば、一意のコード生成要件がある同じカテゴリのパラメーターがモデルに 2 つある場合、これらのパラメーターを個別に構成します。または、パラメーターのカテゴリに対して既定の設定を構成する場合、特定のパラメーターに対してこれらの設定をオーバーライドできます。
モデルが以下の条件のうち少なくとも 1 つを満たす場合、パラメーターに対して個別にコード生成設定を構成することを検討してください。
一意のソース、命名規則、または配置要件をもつカテゴリが同じ複数のパラメーターを使用する。
カテゴリが同じパラメーターを少数使用する。
複数のパラメーターのカテゴリに対する既定の構成があり、いくつかの特定のパラメーターに対してオーバーライドしなければならない。
この例では、コード マッピング エディターを使用して、モデル パラメーターの既定のストレージ クラス設定をモデル rtwdemo_configinterface
内のパラメーター K1
、Table1
および Table2
に適用する方法を示します。これらのパラメーターおよびモデル パラメーター引数 LOWER
および UPPER
に対してコード識別子を構成します。コード生成識別子は、たとえばモデル設計の変更を伴わない統合用に指定できます。
まだ実行していない場合は、パラメーターに対する既定のコード生成設定の構成の手順を完了します。
コード マッピング エディターで、[パラメーター] タブをクリックします。[Model Parameter Arguments] を展開します。既定の設定では、各モデル パラメーターのストレージ クラスは Auto
に設定されます。つまり、コード ジェネレーターは最適化目的で関連するコードの表現を削除または変更する可能性があります。最適化が不可能な場合、コード ジェネレーターはモデルの既定のコンフィギュレーションを適用します。この例では、ストレージ クラスを Auto
に設定したままにします。
[Model parameters] を展開します。既定では、各パラメーターのストレージ クラスは Auto
に設定されます。ストレージ クラスを ConstVolatile
に指定するモデルの既定のコンフィギュレーションを使用します。
最適化を回避し、コード ジェネレーターで既定のコンフィギュレーションが強制的に使われるようにするには、ストレージ クラスを [モデルの既定の設定]
に設定します。
既定のコンフィギュレーションをオーバーライドするには、そのパラメーターのコード生成に関する要件を満たすストレージ クラスを指定します。
コード マッピング エディターの [Model parameters] で、パラメーター K1
、Table1
、Table2
を選択します。ストレージ クラスを [Model default: ConstVolatile]
に設定します。
モデル パラメーターのコード識別子を接頭辞 mp_
を含む名前で構成します。コード マッピング エディターで、モデル パラメーター K1
を選択します。プロパティ インスペクターで、[コード] ノードを展開します。ストレージ クラス プロパティ [Identifier] を mp_K1
に設定します。パラメーター Table1
および Table2
について、[Identifier] を mp_Table1
および mp_Table2
に設定します。
モデルを保存します。
コードの生成と表示たとえば、rtwdemo_configinterface.c
でモデル パラメーター mp_K1
のデータ定義を見つけます。
const volatile int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
Struct
ストレージ クラスを使用してパラメーター データを構造体に整理するこの例では、Struct
ストレージ クラスを使用して、ブロック パラメーター値を生成コード内の構造体に整理する方法を示します。ストレージ クラスをモデル内の個々のデータ項目に直接適用します。
生成コード内にパラメーター データのカスタム構造体を作成する場合は、Simulink で対応する構造体を作成することを検討してください。Organize Data into Structures in Generated Codeを参照してください。
このモデル例を 3 つの Constant ブロックと 3 つの Outport ブロックで作成します。モデルに ex_struct_param
という名前を付けます。
モデル データ エディターを開きます。[モデル化] タブで [モデル データ エディター] をクリックします。
モデル データ エディターで、[パラメーター] タブを選択します。
モデルで上の Constant ブロックを選択します。
モデル データ エディターで、[値] 列を使用して定数値を p1
に設定します。p1
の横にあるアクション ボタン をクリックし、[作成] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] を Simulink.Parameter(1.0)
に設定して [作成] をクリックします。
Simulink は p1
という名前の Simulink.Parameter
オブジェクトをモデル ワークスペースに追加します。
p1
のプロパティ ダイアログ ボックスで、[OK] をクリックします。
その他のパラメーターを設定する必要がない場合は、[コード生成] タブをクリックできます。次に、[Coder アプリでの構成] ボタンをクリックすると、Embedded Coder アプリとコード マッピング エディターが開きます。
モデル データ エディターを使用して、p2
(値 2.0
) および p3
(値 3.0
) という名前のパラメーター オブジェクトを使用してその他の定数値を設定します。
Embedded Coder アプリを開きます。
[C コード] タブで、[コード インターフェイス] 、 [個々の要素コードのマッピング] を選択します。
コード マッピング エディターで、[パラメーター] タブをクリックします。
[Model parameters] を展開します。
パラメーター p1
、p2
、p3
のストレージ クラスを Struct
に設定します。
パラメーター p1
を選択します。プロパティ インスペクターの [コード] で、プロパティ [StructName] を my_struct
に設定します。パラメーター p2
および p3
の場合、[StructName] を my_struct
に設定します。
モデルを保存します。
コードを生成して検査します。
ファイル ex_struct_param.h
は構造体型 my_struct_type
を定義します。
/* Type definition for custom storage class: Struct */ typedef struct my_struct_tag { real_T p1; real_T p2; real_T p3; } my_struct_type;
ファイル ex_struct_param.c
はグローバル変数 my_struct
を定義します。
/* Definition for custom storage class: Struct */ my_struct_type my_struct = { /* p1 */ 1.0, /* p2 */ 2.0, /* p3 */ 3.0 };
コード生成用にパラメーターの構成を自動化するには、コード マッピングのプログラミング インターフェイスを使用します。たとえば、カスタム ブロック ライブラリまたはアプリケーション テスト環境の一部を作成する場合は、プログラミング インターフェイスを使用してデータの構成を自動化します。
この例では、モデル rtwdemo_configinterface に対するモデル パラメーターおよびモデル パラメーター引数に既定の設定を構成する方法を示します。調整可能であり、生成コードで型修飾子 const
および volatile
をもつ 個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。既定の設定を使用するモデル パラメーター引数を構成します。この設定では、コード ジェネレーターは、引数インスタンスごとにエクスポートされた構造体内で一意に名前が付けられるフィールドとして表されるメモリ領域を割り当てます。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1
、Table1
および Table2
に適用します。これらのパラメーターのコード識別子を構成します。
サンプル モデルを開きます。
open_system('rtwdemo_configinterface');
モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を [調整可能]
に設定します。
model='rtwdemo_configinterface';
set_param(model,'DefaultParameterBehavior','Tunable');
関数 coder.mapping.api.get
を呼び出してオブジェクト cm
を作成します。オブジェクトはデータ要素および関数に対するコード生成の構成をモデル rtwdemo_configdefaults
に保存します。
cm = coder.mapping.api.get('rtwdemo_configinterface');
関数 setDataDefault
を呼び出してモデル パラメーターの既定の設定を構成します。引数には、次の値を指定します。
coder.mapping.api.get
で返されるオブジェクト
既定のカテゴリの ModelParameters
プロパティ値 ConstVolatile
をもつプロパティ名 StorageClass
setDataDefault(cm,'ModelParameters','StorageClass','ConstVolatile');
モデル パラメーター引数に対する既定の設定を構成します。setDataDefault
への呼び出しで、以下の値を指定します。
coder.mapping.api.get
で返されるオブジェクト。
既定のカテゴリの ModelParameterArguments
。
プロパティ値 Default
をもつプロパティ名 StorageClass
。
setDataDefault(cm,'ModelParameterArguments','StorageClass','Default');
モデル パラメーターおよびモデル パラメーター引数の既定の構成を確認します。coder.mapping.api.get
で返されるオブジェクト、カテゴリ ModelParameters
または ModelParameterArguments
、および StorageClass
を指定する getDataDefault
への呼び出しを発行します。
getDataDefault(cm, 'ModelParameters', 'StorageClass') ans = 'ConstVolatile'
getDataDefault(cm, 'ModelParameterArguments', 'StorageClass') ans = 'Default'
モデル パラメーターの既定の構成をパラメーター K1
、Table1
および Table2
に適用します。
既定の設定では、Simulink は個々のパラメーターのストレージ クラスを Auto
に設定します。ストレージ クラスが Auto
の場合、コード ジェネレーターは次を行います。
最適化目的で生成されたコードからデータを削除するかどうかを決定する。
データを保持する場合、既定の構成設定を考慮して、生成されたコード内でデータを効率的に表す方法を決定する。
コード ジェネレーターを構成して、既定のモデル パラメーター設定をパラメーター K1
、Table1
、および Table2
に適用します。パラメーターごとに関数 setModelParameter
を呼び出します。coder.mapping.api.get
から返されるオブジェクト、パラメーター名、プロパティ名 StorageClass
、およびプロパティ値 Model
default
を指定します。
setModelParameter(cm,'K1','StorageClass','Model default'); setModelParameter(cm,'Table1','StorageClass','Model default'); setModelParameter(cm,'Table2','StorageClass','Model default');
関数 getModelParameter
への呼び出しを使用して、パラメーター K1
、Table1
および Table2
の構成の変更を確認します。
getModelParameter(cm,'K1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table2','StorageClass') ans = 'Model default'
モデル パラメーターのコード識別子を構成します。パラメーターごとに関数 setModelParameter
を呼び出します。coder.mapping.api.get
から返されるオブジェクト、パラメーター名、プロパティ名 Identifier
、および次のいずれかのプロパティ値を指定します。
モデル パラメーター | コード識別子 |
---|---|
K1 | mp_K1 |
Table1 | mp_Table1 |
Table2 | mp_Table2 |
setModelParameter(cm,'K1','Identifier','mp_K1'); setModelParameter(cm,'Table1','Identifier','mp_Table1'); setModelParameter(cm,'Table2','Identifier','mp_Table2');
関数 getModelParameter
への呼び出しを使用して、モデル パラメーターの構成の変更を確認します。
getModelParameter(cm,'K1','Identifier') ans = 'mp_K1' getModelParameter(cm,'Table1','Identifier') ans = 'mp_Table1' getModelParameter(cm, 'Table2', 'Identifier') ans = 'mp_Table2'
モデルを保存します。
コードの生成と表示たとえば、rtwdemo_configinterface.c
でモデル パラメーター mp_K1
のデータ定義を見つけます。
const volatile int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
コード生成の要件に応じて、モデル パラメーターに対してコード生成を構成するストレージ クラスを以下より選択します。定数の場合、[Default]
のみが適用されます。モデル パラメーター引数の場合、[Auto]
、[Default]
、および [Model default]
のみが適用されます。
要件 | ストレージ クラス |
---|---|
より効率的なコードを生成するように、最適化を有効にします。 | Auto (個別のマッピングのみ) |
最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表します。 | Default (既定のマッピングのみ) |
最適化によってデータ要素のストレージが削除されるのを防ぎ、データ要素のカテゴリに対して既定のマッピングを使用します。 | Model Default (個別のマッピングのみ)、Dictionary Default (個別のマッピングのみ) |
boolean データを名前付きビット フィールドに保存する構造体を生成します。 | Bitfield (個別のマッピングのみ) |
コンパイラ フラグまたはオプションを使用して定義されるプリプロセッサの条件をサポートします。 | CompilerFlag |
const 、volatile 、または const および volatile 型修飾子をもつグローバル変数の定義と宣言を生成します。 | Const, Volatile, and ConstVolatile |
マクロ (#define 命令) または外部コードのヘッダー ファイルで定義されるマクロを使用するコードを使用するコードを生成します。 | Define, ImportedDefine |
グローバル変数の定義と宣言を生成します。 | ExportedGlobal |
グローバル変数の定義と宣言を指定したファイルに生成します。 | ExportToFile |
static 型修飾子をもつグローバル変数の定義と宣言を生成します。 | FileScope (ローカルおよび共有ローカル データ ストア マッピングのみ) |
カスタムのアクセサー関数を呼び出して、データを処理するコードを生成します。 | GetSet |
外部コードで定義されたグローバル変数またはグローバル変数のポインターに対して読み取りと書き込みを実行するコードを生成します。 | ImportedExtern, ImportedExternPointer |
外部ヘッダー ファイルで定義されたグローバル変数に対して読み取りと書き込みを実行するコードを生成します。 | ImportFromFile |
指定可能な名前をもつグローバル構造体を生成します。 | Struct (個別のマッピングのみ) |
使用可能なストレージ クラスのリストには、Embedded Coder ディクショナリで定義された他のプロジェクト固有のストレージ クラスが含まれている可能性があります。リストされているストレージ クラスでは満たされない特別な要件がある場合、Embedded Coder ソフトウェアをお持ちであれば、ストレージ クラスを定義できます。Define Storage Classes, Memory Sections, and Function Templates for Software Architectureを参照してください。
個々のモデル パラメーターに対して、[Identifier] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。Embedded Coder を使用して、選択するストレージ クラスに応じて以下のプロパティを構成することもできます。
プロパティ | 説明 | ストレージ クラス |
---|---|---|
DefinitionFile | パラメーターおよび外部コードで読み取られるグローバル データの定義を含むソース定義ファイル | ExportToFile および Volatile |
GetFunction | パラメーターは指定した関数 get への呼び出しとして生成されたコードに表示されます。 | GetSet |
HeaderFile | パラメーターおよび外部コードで読み取られるグローバル データの宣言を含むソース ヘッダー ファイル | ExportToFile 、GetSet 、ImportFromFile 、および Volatile |
Memory Section (既定のパラメーター コンフィギュレーションのみ) | パラメーターで読み取られるデータを含むメモリ セクション | Default |
Owner | コード ジェネレーターは、定義を共有するモデルの階層構造内の複数のモデルのいずれか 1 つに生成されたコード内にパラメーターの定義を配置します。モデル コンフィギュレーション パラメーター [データ定義の配置にデータ オブジェクトからオーナーを使用する] を選択しなければなりません。Control Placement of Global Data Definitions and Declarations in Generated Filesを参照してください。 | ExportToFile および Volatile |
PreserveDimensions | コード ジェネレーターは生成されたコードで多次元配列として表されるパラメーター データの次元を保持します。モデル コンフィギュレーション パラメーター [配列のレイアウト] を [行優先] に設定しなければなりません。Preserve Dimensions of Multidimensional Arrays in Generated Codeを参照してください。 | ExportToFile 、FileScope 、ImportFromFile 、Localizable 、および Volatile |
SetFunction | パラメーターは指定した関数 set への呼び出しとして生成されたコードに表示されます。 | GetSet |
StructName | パラメーター用に生成されたコード内の構造体の名前。 | BitField および Struct |
コード マッピング エディター | コード マッピング エディター