C コード生成のパラメーターの構成
コード生成用にモデルを構成するときに、キャリブレーションなどの調整可能性のパラメーターを特定して構成できます。構成できるパラメーターのタイプを次の表に示します。
パラメーターのタイプ | 説明 |
---|---|
モデル パラメーター | モデル ワークスペース内のパラメーターなど、モデル内で定義されたパラメーター。 |
外部パラメーター | ベース ワークスペース内またはデータ ディクショナリ内でオブジェクトとして定義されたパラメーター。 |
コード生成用にパラメーターを構成するには、そのパラメーターをデータ オブジェクトと関連付けなければなりません。たとえば、コード生成用に MATLAB 変数を構成する前に、モデル エクスプローラーでその変数をパラメーター オブジェクトに変換します。
[Simulink Coder] アプリでモデルを開くと、データ オブジェクトに関連付けられているモデル パラメーターがコード マッピング エディターに表示されます。エディターで、コード生成用にパラメーターを構成できます。モデルが外部パラメーターを使用する場合、パラメーター名の右にある Refresh
リンクをクリックしてそれらをコード マッピング エディターに追加できます。このリンクにより、ブロック線図の更新が開始され、エディター ビューに、モデルによって使用される外部パラメーターが追加されます。
以下を実行するようにパラメーター データを構成します。
生成コードの実行中に操作するためにデータをアクセス可能にする。
メモリに格納されるデータの量を最小限に抑える。
パラメーター データをモデル インターフェイスにプロモートし、その他のコンポーネントおよびシステムがそのデータにアクセスできるようにする。
生成されたコードの可読性およびトレーサビリティを向上させる。
モデル全体のパラメーターが調整可能かどうかを制御するために、コード マッピング エディターの [Data Defaults] タブで 'Auto' will be tunable/inline
リンクを使用し、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] にアクセスできます。たとえば、以下のような場合、このリンクを使用してパラメーターを調整可能にすることができます。
ラピッド プロトタイピング時にパラメーター設定を調整する
パラメーターをキャリブレーションする
量産コード用にパラメーターを最適化する
コード生成用に、例はモデル rtwdemo_configrpinterface
のモデル パラメーターおよびモデル パラメーター引数の構成方法を説明します。コード マッピング エディター – C またはコード マッピング プログラミング インターフェイス (coder.mapping.api.CodeMapping
) を使用してコード マッピングを構成できます。
パラメーターのカスタマイズ オプションの選択
既定では、モデルのパラメーターは、生成されたコードでは
という名前のグローバル データ構造体のフィールドとして表示されます。コード インターフェイスの要件に基づいて、パラメーター データの生成をカスタマイズするかどうかを決定します。カスタマイズを構成しない場合、コード ジェネレーターは生成されたコード内のパラメーターの表現を最適化目的で削除するか変更するかを判断します。カスタマイズを構成する場合は、以下を決定します。model
_P
既定の構成を設定するかどうか
調整可能にしなければならないカテゴリのパラメーターがモデルに多数含まれる場合 (たとえば、10 個以上)、特殊なケースについてその設定をオーバーライドするより、既定の設定を使用してそのカテゴリのパラメーターを構成する方が効率的です。一意のソース、命名規則、または配置要件をもつ指定されたカテゴリのパラメーターがモデルに少数含まれる場合は、個々のパラメーターを構成することを検討してください。
生成されたコード内でモデル パラメーター データを宣言して処理する方法
個別のグローバル変数として
外部コードで定義されたグローバル変数からモデル パラメーター データを読み取るため
アクセス関数への呼び出しとして。Embedded Coder® が必要
これらのオプションの詳細については、生成コードでのデータと関数インターフェイスの制御を参照してください。
モデル パラメーターのその他の考慮事項には、次を実行するかどうかが含まれます。
生成されたコード内のパラメーターに、モデル内のパラメーター名または一意のコード識別子を使用して名前を付ける。
コンパイラ フラグまたはオプションで定義されるプリプロセッサの条件をサポートする。Embedded Coder が必要です。バリアント モデルを使用して C のプリプロセッサ条件を使用するコードを生成する (Embedded Coder)を参照してください。
グローバル変数定義と宣言に
static
型修飾子を含めて、たとえば、名前の衝突を防ぐ。Embedded Coder が必要です。Prevent Name Clashes by Configuring Data Item as static (Embedded Coder)を参照してください。グローバル変数定義と宣言に
const
、volatile
、const
およびvolatile
型修飾子を含める。Embedded Coder が必要です。型修飾子 const と volatile を使用したグローバル データの保護 (Embedded Coder)を参照してください。マクロ (
#define
) または外部ヘッダー ファイルに定義されたマクロを使用するコードを生成する。Embedded Coder が必要です。Macro Definitions (#define) (Embedded Coder)を参照してください。指定する名前をもつグローバル データ構造体を生成する。Embedded Coder が必要です。生成されたコードにおける構造体へのデータの整理 (Embedded Coder)を参照してください。
特定のメモリ領域にパラメーター データを配置する。Embedded Coder が必要です。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)を参照してください。
対応するストレージ クラスおよびストレージ クラスのプロパティをもつパラメーターに関連するインターフェイスの要件のリストについては、Choose Storage Class and Storage Class Properties for Data Storesを参照してください。
モデル例 rtwdemo_configrpinterface
のパラメーターの要件は次のとおりです。
既定の設定では、調整用に生成されたコードにモデル パラメーターを保持します。パラメーターをインライン化してコードを最適化しないでください。
接頭辞
mp_
をモデル パラメーターを表す変数の名前に適用します。
この例では、これらのコード生成要件を満たすように、rtwdemo_configrpinterface
でモデルパラメーターを構成します。
パラメーターに対する既定のコード生成設定の構成
パラメーターに対する既定のコード生成設定により、生成コードの実行中に操作しなければならないパラメーターが多数あるモデルの場合は特に、コード生成用にモデルを準備する作業を軽減できます。構成設定を 1 度選択すると、コード ジェネレーターによってこれらの設定がモデル全体のパラメーターに適用されます。Simulink® は既定の構成をモデルの一部として保存します。
一意の要件をもたない同じカテゴリに対して、モデルで複数のパラメーターを使用する場合、モデル パラメーターに対して既定のコード生成設定を構成することを検討してください。
この例では、コード マッピング エディター – C を使用して、モデル rtwdemo_configrpinterface
に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。
モデル
rtwdemo_configrpinterface
を開きます。書き込み可能な場所にモデルのコピーを保存します。Simulink Coder アプリを開きます。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
コード マッピング エディターの [パラメーター] で、カテゴリ [Model parameters] を選択します。リンク テキスト
'Auto' will be inlined
は、コード ジェネレーターが既定の設定でモデル パラメーターをインライン化するように構成されていることを示します。この例では、モデル パラメーターが調整可能であることが要件です。'Auto' will be inlined
をクリックします。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を
[調整可能]
に設定します。変更を保存し、ダイアログ ボックスを閉じます。コード マッピング エディターで、リンク テキストが'Auto' will be tunable
に変更されます。コード マッピングで、[Model parameters] カテゴリがまだ選択された状態で、ストレージ クラスを
[ExportedGlobal]
に設定します。モデルを保存します。
個々のパラメーターに対するコード生成の構成
コード生成に対する個々のパラメーターを構成できます。たとえば、一意のコード生成要件がある同じカテゴリのパラメーターがモデルに 2 つある場合、これらのパラメーターを個別に構成します。または、パラメーターのカテゴリに対して既定の設定を構成する場合、特定のパラメーターに対してこれらの設定をオーバーライドできます。
モデルが以下の条件のうち少なくとも 1 つを満たす場合、パラメーターに対して個別にコード生成設定を構成することを検討してください。
一意のソース、命名規則、または配置要件をもつカテゴリが同じ複数のパラメーターを使用する。
カテゴリが同じパラメーターを少数使用する。
複数のパラメーターのカテゴリに対する既定の構成があり、いくつかの特定のパラメーターに対してオーバーライドしなければならない。
この例では、コード マッピング エディターを使用して、モデル パラメーターの既定のストレージ クラス設定をモデル rtwdemo_configinterface
内のパラメーター K1
、Table1
および Table2
に適用する方法を示します。これらのパラメーターのコード識別子を構成します。コード生成識別子は、たとえば統合用に、モデル設計の変更を伴わずに指定できます。
まだ実行していない場合は、パラメーターに対する既定のコード生成設定の構成の手順を完了します。
[Model parameters] を展開します。既定では、各パラメーターのストレージ クラスは
Auto
に設定されます。ストレージ クラスをExportedGlobal
に指定するモデルの既定の構成を使用します。最適化を回避し、コード ジェネレーターで既定の構成が強制的に使われるようにするには、ストレージ クラスを
[Model default]
に設定します。既定の構成をオーバーライドするには、そのパラメーターのコード生成に関する要件を満たすストレージ クラスを指定します。
コード マッピング エディターの [Model parameters] で、パラメーター
K1
、Table1
、Table2
を選択します。ストレージ クラスを[Model default:ExportedGlobal]
に設定します。モデル パラメーターのコード識別子を接頭辞
mp_
を含む名前で構成します。コード マッピング エディターで、モデル パラメーターK1
を選択します。アイコンをクリックして、ストレージ クラス プロパティ [識別子] を
mp_K1
に設定します。パラメーターTable1
およびTable2
について、[Identifier] をmp_Table1
およびmp_Table2
に設定します。モデルを保存します。
コードを生成して表示します。たとえば、
rtwdemo_configrpinterface.c
でモデル パラメーターmp_K1
のデータ定義を見つけます。int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
パラメーターに対するコード生成設定のプログラムによる構成
コード生成用にパラメーターの構成を自動化するには、コード マッピングのプログラミング インターフェイスを使用します。たとえば、カスタム ブロック ライブラリまたはアプリケーション テスト環境の一部を作成する場合は、プログラミング インターフェイスを使用してデータの構成を自動化します。
この例では、モデル rtwdemo_configrpinterface に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1
、Table1
および Table2
に適用します。これらのパラメーターのコード識別子を構成します。
モデル例を開きます。
open_system('rtwdemo_configrpinterface')
モデル コンフィギュレーション パラメーター [既定のパラメーター動作] を
[調整可能]
に設定します。model='rtwdemo_configrpinterface';
set_param(model,'DefaultParameterBehavior','Tunable');
関数
coder.mapping.api.get
を呼び出してオブジェクトcm
を作成します。オブジェクトには、モデルrtwdemo_configrpdefaults
のデータ要素についてのコード生成の構成が格納されます。cm = coder.mapping.api.get('rtwdemo_configrpinterface');
関数
setDataDefault
を呼び出してモデル パラメーターの既定の設定を構成します。引数には、次の値を指定します。coder.mapping.api.get
で返されるオブジェクト既定のカテゴリの
ModelParameters
プロパティ値
ExportedGlobal
をもつプロパティ名StorageClass
setDataDefault(cm,'ModelParameters','StorageClass','ExportedGlobal');
モデル パラメーターの既定の構成を確認します。
coder.mapping.api.get
で返されるオブジェクト、カテゴリModelParameters
、およびStorageClass
を指定するgetDataDefault
への呼び出しを発行します。getDataDefault(cm,'ModelParameters','StorageClass') ans = 'ExportedGlobal'
モデル パラメーターの既定の構成をパラメーター
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_configrpinterface.c
でモデル パラメーターmp_K1
のデータ定義を見つけます。int8_T mp_K1 = 2;
ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
モデル パラメーターに対するストレージ クラスおよびストレージ クラスのプロパティの選択
コード生成の要件に応じて、モデル パラメーターに対してコード生成を構成するストレージ クラスを以下より選択します。定数の場合、[Default]
のみが適用されます。モデル パラメーター引数の場合、[Auto]
、[Default]
、および [Model default]
のみが適用されます。
要件 | ストレージ クラス |
---|---|
より効率的なコードを生成するように、最適化を有効にします。 | Auto (個別のマッピングのみ) |
最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表します。 | 既定値 (既定のマッピングのみ) |
最適化によってデータ要素のストレージが削除されるのを防ぎ、データ要素のカテゴリに対して既定のマッピングを使用します。 | Model Default (個別のマッピングのみ)、Dictionary Default (個別のマッピングのみ) |
グローバル変数の定義と宣言を生成します。 | ExportedGlobal |
外部コードで定義されたグローバル変数またはグローバル変数のポインターに対して読み取りと書き込みを実行するコードを生成します。 | ImportedExtern、ImportedExternPointer |
使用可能なストレージ クラスのリストには、Embedded Coder ディクショナリで定義された他のプロジェクト固有のストレージ クラスが含まれている可能性があります。リストされているストレージ クラスでは満たされない特別な要件がある場合、Embedded Coder ソフトウェアをお持ちであれば、ストレージ クラスを定義できます。Define Storage Classes, Memory Sections, and Function Templates for Software Architecture (Embedded Coder)を参照してください。
個々のモデル パラメーターに対して、[Identifier] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。
参考
コード マッピング エディター – C | coder.mapping.api.CodeMapping