Main Content

C コード生成のパラメーターの構成

コード生成用にモデルを構成するときに、キャリブレーションなどの調整可能性のパラメーターを特定して構成できます。構成できるパラメーターのタイプを次の表に示します。

パラメーターのタイプ説明
モデル パラメーター引数モデル引数として構成するモデル ワークスペース内のブロック パラメーター。モデル パラメーター引数を含むモデルの各インスタンスは一意の値に設定される引数をもつことができます。
モデル パラメーターモデル ワークスペース内のパラメーターなど、モデル内で定義されたパラメーター。
外部パラメーターベース ワークスペース内またはデータ ディクショナリ内でオブジェクトとして定義されたパラメーター。
定数定数パラメーター。

コード生成用にパラメーターを構成するには、そのパラメーターをデータ オブジェクトと関連付けなければなりません。たとえば、コード生成用に MATLAB 変数を構成する前に、モデル エクスプローラーでその変数をパラメーター オブジェクトに変換します。

Embedded Coder アプリでモデルを開くと、データ オブジェクトに関連付けられているモデル パラメーター、モデル パラメーター引数、および定数がコード マッピング エディターに表示されます。エディターで、コード生成用にパラメーターを構成できます。モデルが外部パラメーターを使用する場合、パラメーター名の右にある Refresh リンクをクリックしてそれらをコード マッピング エディターに追加できます。このリンクにより、ブロック線図の更新が開始され、エディター ビューに、モデルによって使用される外部パラメーターが追加されます。

以下を実行するようにパラメーター データを構成します。

  • 生成コードの実行中に操作するためにデータをアクセス可能にする。

  • メモリに格納されるデータの量を最小限に抑える。

  • コード ジェネレーターがパラメーター データをメモリ内に配置する場所を制御する。

  • パラメーター データをモデル インターフェイスにプロモートし、その他のコンポーネントおよびシステムがそのデータにアクセスできるようにする。

  • 生成されたコードの可読性およびトレーサビリティを向上させる。

モデル全体のパラメーターが調整可能かどうかを制御するために、コード マッピング エディターの [Data Defaults] タブで 'Auto' will be tunable/inline リンクを使用し、モデル コンフィギュレーション パラメーター [既定のパラメーター動作] にアクセスできます。たとえば、以下のような場合、このリンクを使用してパラメーターを調整可能にすることができます。

  • ラピッド プロトタイピング時にパラメーター設定を調整する

  • パラメーターをキャリブレーションする

  • 量産コード用にパラメーターを最適化する

コード生成用に、例はモデル rtwdemo_configinterface のモデル パラメーターおよびモデル パラメーター引数の構成方法を説明します。コード マッピング エディター – C またはコード マッピング プログラミング インターフェイス (coder.mapping.api.CodeMapping) を使用してコード マッピングを構成できます。

パラメーターのカスタマイズ オプションの選択

既定の設定では、モデル内のパラメーターは以下の名前のグローバル データ構造体のフィールドとして生成されたコードに表示されます。

  • モデル パラメーターの model_P

  • モデル パラメーター引数の model_InstP

  • 定数パラメーターの model_ConstP

コード インターフェイスの要件に基づいて、パラメーター データの生成をカスタマイズするかどうかを決定します。カスタマイズを構成しない場合、コード ジェネレーターは生成されたコード内のパラメーターの表現を最適化目的で削除するか変更するかを判断します。カスタマイズを構成する場合は、以下を決定します。

  • 既定の構成を設定するかどうか

    調整可能にしなければならないカテゴリのパラメーターがモデルに多数含まれる場合 (たとえば、10 個以上)、特殊なケースについてその設定をオーバーライドするより、既定の設定を使用してそのカテゴリのパラメーターを構成する方が効率的です。一意のソース、命名規則、または配置要件をもつ指定されたカテゴリのパラメーターがモデルに少数含まれる場合は、個々のパラメーターを構成することを検討してください。

  • 生成されたコード内でモデル パラメーター データを宣言して処理する方法

    • 個別のグローバル変数として

    • 外部コードで定義されたグローバル変数からモデル パラメーター データを読み取るため

    • アクセス関数への呼び出しとして。Embedded Coder® が必要

    これらのオプションの詳細については、生成コードでのデータと関数インターフェイスの制御を参照してください。

モデル パラメーターのその他の考慮事項には、次を実行するかどうかが含まれます。

対応するストレージ クラスおよびストレージ クラスのプロパティをもつパラメーターに関連するインターフェイスの要件のリストについては、Choose Storage Class and Storage Class Properties for Data Storesを参照してください。

モデル例 rtwdemo_configinterface のパラメーターの要件は次のとおりです。

  • 既定の設定では、調整用に生成されたコードにモデル パラメーターを保持します。パラメーターをインライン化してコードを最適化しないでください。

  • const および volatile 型修飾子で定義および宣言された個別のグローバル変数としてモデル パラメーターを表します。

  • 接頭辞 mp_ をモデル パラメーターを表す変数の名前に適用します。

  • 定数パラメーター UPPER および LOWER がモデルの各インスタンスに対して異なる値を使用できるようにします。

  • モデル パラメーター引数の各インスタンスに対して、既定の設定で、エクスポートされた構造体内に一意に名前が付けられたフィールドとして表されるメモリ領域を割り当てます。

  • モデル パラメーター引数は生成されたコード内で個々のモデル関数引数として表示されます。コード ジェネレーターで、モデル内のブロックで使用されていないモデル パラメーター引数を最適化できるようにします。

この例では、これらのコード生成要件を満たすように、rtwdemo_configinterface でモデルパラメーターおよびモデル パラメーター引数を構成します。

パラメーターに対する既定のコード生成設定の構成

パラメーターに対する既定のコード生成設定により、生成コードの実行中に操作しなければならないパラメーターが多数あるモデルの場合は特に、コード生成用にモデルを準備する作業を軽減できます。構成設定を 1 度選択すると、コード ジェネレーターによってこれらの設定がモデル全体のパラメーターに適用されます。Simulink® は既定の構成をモデルの一部として保存します。

一意の要件をもたない同じカテゴリに対して、モデルで複数のパラメーターを使用する場合、または共有 Embedded Coder ディクショナリを使用する場合は、モデル パラメーターに対して既定のコード生成設定を構成することを検討してください。

この例では、コード マッピング エディター – C を使用して、モデル rtwdemo_configinterface に対するモデル パラメーターおよびモデル パラメーター引数に既定の設定を構成する方法を示します。調整可能であり、生成コードで型修飾子 const および volatile をもつ 個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。既定の設定を使用するモデル パラメーター引数を構成します。この設定では、コード ジェネレーターは、引数インスタンスごとにエクスポートされた構造体内で一意に名前が付けられるフィールドとして表されるメモリ領域を割り当てます。

  1. モデル rtwdemo_configinterface を開きます。書き込み可能な場所にモデルのコピーを保存します。

    Simulink model to use for learning how to configure model parameters for code generation.

  2. Embedded Coder アプリを開きます。

  3. [C コード] タブで、[コード インターフェイス][既定のコード マッピング] を選択します。

  4. コード マッピング エディターで、[Model parameter arguments] を選択します。ストレージ クラスを [Default] に設定したままにします。コード ジェネレーターは引数インスタンスごとに個別のメモリ領域を割り当てます。

  5. コード マッピング エディターの [パラメーター] で、カテゴリ [Model parameters] を選択します。リンク テキスト 'Auto' will be inlined は、コード ジェネレーターが既定の設定でモデル パラメーターをインライン化するように構成されていることを示します。この例では、モデル パラメーターが調整可能であることが要件です。'Auto' will be inlined をクリックします。

  6. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、モデル コンフィギュレーション パラメーター [既定のパラメーター動作][調整可能] に設定します。変更を保存し、ダイアログ ボックスを閉じます。コード マッピング エディターで、リンク テキストが 'Auto' will be tunable に変更されます。

  7. コード マッピングで、[Model parameters] カテゴリがまだ選択された状態で、ストレージ クラスを [ConstVolatile] に設定します。

    Code Mappings editor with Data Defaults tab selected, Parameters tree node expanded, and storage class for Model parameters set to ConstVolatile.

  8. モデルを保存します。

個々のパラメーターに対するコード生成の構成

コード生成に対する個々のパラメーターを構成できます。たとえば、一意のコード生成要件がある同じカテゴリのパラメーターがモデルに 2 つある場合、これらのパラメーターを個別に構成します。または、パラメーターのカテゴリに対して既定の設定を構成する場合、特定のパラメーターに対してこれらの設定をオーバーライドできます。

モデルが以下の条件のうち少なくとも 1 つを満たす場合、パラメーターに対して個別にコード生成設定を構成することを検討してください。

  • 一意のソース、命名規則、または配置要件をもつカテゴリが同じ複数のパラメーターを使用する。

  • カテゴリが同じパラメーターを少数使用する。

  • 複数のパラメーターのカテゴリに対する既定の構成があり、いくつかの特定のパラメーターに対してオーバーライドしなければならない。

この例では、コード マッピング エディターを使用して、モデル パラメーターの既定のストレージ クラス設定をモデル rtwdemo_configinterface 内のパラメーター K1Table1 および Table2 に適用する方法を示します。これらのパラメーターおよびモデル パラメーター引数 LOWER および UPPER に対してコード識別子を構成します。コード生成識別子は、たとえば統合用に、モデル設計の変更を伴わずに指定できます。

  1. まだ実行していない場合は、パラメーターに対する既定のコード生成設定の構成の手順を完了します。

  2. コード マッピング エディターで、[パラメーター] タブをクリックします。[Model Parameter Arguments] を展開します。既定の設定では、各モデル パラメーターのストレージ クラスは Auto に設定されます。つまり、コード ジェネレーターは最適化目的で関連するコードの表現を削除または変更する可能性があります。最適化が不可能な場合、コード ジェネレーターはモデルの既定の構成を適用します。この例では、ストレージ クラスを Auto に設定したままにします。

  3. [Model parameters] を展開します。既定では、各パラメーターのストレージ クラスは Auto に設定されます。ストレージ クラスを ConstVolatile に指定するモデルの既定の構成を使用します。

    • 最適化を回避し、コード ジェネレーターで既定の構成が強制的に使われるようにするには、ストレージ クラスを [Model default] に設定します。

    • 既定の構成をオーバーライドするには、そのパラメーターのコード生成に関する要件を満たすストレージ クラスを指定します。

  4. コード マッピング エディターの [Model parameters] で、パラメーター K1Table1Table2 を選択します。ストレージ クラスを [Model default: ConstVolatile] に設定します。

    Code Mappings editor with Parameters tab selected, parameters K1, Table1, and Table2 selected, and storage class being set to Model default: ConstVolatile.

  5. モデル パラメーターのコード識別子を接頭辞 mp_ を含む名前で構成します。コード マッピング エディターで、モデル パラメーター K1 を選択します。Icon to configure additional code mapping properties アイコンをクリックして、ストレージ クラス プロパティ [識別子]mp_K1 に設定します。パラメーター Table1 および Table2 について、[Identifier]mp_Table1 および mp_Table2 に設定します。

    Code Mappings editor with Parameters tab selected, Model parameters tree node expanded, and storage class for parameters K1, Table1, and Table2 set to Model default: ConstVolatile. Mapping Inspector shows Identifier property for parameter Table2 set to mp_Table2.

  6. モデルを保存します。

  7. コードを生成して表示します。たとえば、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 で対応する構造体を作成することを検討してください。生成されたコードにおける構造体へのデータの整理を参照してください。

モデル例の作成

このモデル例を 3 つの Constant ブロックと 3 つの Outport ブロックで作成します。モデルに ex_struct_param という名前を付けます。

定数パラメーターの設定

  1. モデル データ エディターを開きます。[モデル化] タブで [モデル データ エディター] をクリックします。

  2. モデル データ エディターで、[パラメーター] タブを選択します。

  3. モデルで上の Constant ブロックを選択します。

  4. モデル データ エディターで、[値] 列を使用して定数値を p1 に設定します。p1 の横にあるアクション ボタン をクリックし、[作成] を選択します。

  5. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Parameter(1.0) に設定して [作成] をクリックします。

    Simulink は p1 という名前の Simulink.Parameter オブジェクトをモデル ワークスペースに追加します。

  6. p1 のプロパティ ダイアログ ボックスで、[OK] をクリックします。

    その他のパラメーターを設定する必要がない場合は、[コード生成] タブをクリックできます。次に、[Coder アプリでの構成] ボタンをクリックすると、Embedded Coder アプリとコード マッピング エディターが開きます。

  7. モデル データ エディターを使用して、p2 (値 2.0) および p3 (値 3.0) という名前のパラメーター オブジェクトを使用してその他の定数値を設定します。

コード生成用の定数パラメーターの構成

  1. Embedded Coder アプリを開きます。

  2. [C コード] タブで、[コード インターフェイス][個々の要素コードのマッピング] を選択します。

  3. コード マッピング エディターで、[パラメーター] タブをクリックします。

  4. [Model parameters] を展開します。

  5. パラメーター p1p2p3 のストレージ クラスを Struct に設定します。

  6. パラメーター p1 を選択します。Icon to configure additional code mapping properties アイコンをクリックして、[StructName] プロパティを my_struct に設定します。パラメーター p2 および p3 の場合、[StructName]my_struct に設定します。

  7. モデルを保存します。

コードの生成と検査

コードを生成して検査します。

ファイル 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 をもつ 個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。既定の設定を使用するモデル パラメーター引数を構成します。この設定では、コード ジェネレーターは、引数インスタンスごとにエクスポートされた構造体内で一意に名前が付けられるフィールドとして表されるメモリ領域を割り当てます。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1Table1 および Table2 に適用します。これらのパラメーターのコード識別子を構成します。

  1. モデル例を開きます。

    open_system('rtwdemo_configinterface');
    
  2. モデル コンフィギュレーション パラメーター [既定のパラメーター動作][調整可能] に設定します。

    model='rtwdemo_configinterface';
    
    set_param(model,'DefaultParameterBehavior','Tunable');
    
  3. 関数 coder.mapping.api.get を呼び出してオブジェクト cm を作成します。オブジェクトはデータ要素および関数に対するコード生成の構成をモデル rtwdemo_configdefaults に保存します。

    cm = coder.mapping.api.get('rtwdemo_configinterface');
  4. 関数 setDataDefault を呼び出してモデル パラメーターの既定の設定を構成します。引数には、次の値を指定します。

    • coder.mapping.api.get で返されるオブジェクト

    • 既定のカテゴリの ModelParameters

    • プロパティ値 ConstVolatile をもつプロパティ名 StorageClass

    setDataDefault(cm,'ModelParameters','StorageClass','ConstVolatile');
  5. モデル パラメーター引数に対する既定の設定を構成します。setDataDefault への呼び出しで、以下の値を指定します。

    • coder.mapping.api.get で返されるオブジェクト。

    • 既定のカテゴリの ModelParameterArguments

    • プロパティ値 Default をもつプロパティ名 StorageClass

    setDataDefault(cm,'ModelParameterArguments','StorageClass','Default');
  6. モデル パラメーターおよびモデル パラメーター引数の既定の構成を確認します。coder.mapping.api.get で返されるオブジェクト、カテゴリ ModelParameters または ModelParameterArguments、および StorageClass を指定する getDataDefault への呼び出しを発行します。

    getDataDefault(cm, 'ModelParameters', 'StorageClass')
    
    ans =
    
        'ConstVolatile'
    
    getDataDefault(cm, 'ModelParameterArguments', 'StorageClass')
    
    ans =
    
        'Default'
    
  7. モデル パラメーターの既定の構成をパラメーター K1Table1 および Table2 に適用します。

    既定の設定では、Simulink は個々のパラメーターのストレージ クラスを Auto に設定します。ストレージ クラスが Auto の場合、コード ジェネレーターは次を行います。

    • 最適化目的で生成されたコードからデータを削除するかどうかを決定する。

    • データを保持する場合、既定の構成設定を考慮して、生成されたコード内でデータを効率的に表す方法を決定する。

    コード ジェネレーターを構成して、既定のモデル パラメーター設定をパラメーター K1Table1、および 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');
    
  8. 関数 getModelParameter への呼び出しを使用して、パラメーター K1Table1 および Table2 の構成の変更を確認します。

    getModelParameter(cm,'K1','StorageClass')
    
    ans =
    
        'Model default'
    
    getModelParameter(cm,'Table1','StorageClass')
    
    ans =
    
        'Model default'
    
    
    getModelParameter(cm,'Table2','StorageClass')
    
    ans =
    
        'Model default'
  9. モデル パラメーターのコード識別子を構成します。パラメーターごとに関数 setModelParameter を呼び出します。coder.mapping.api.get から返されるオブジェクト、パラメーター名、プロパティ名 Identifier、および次のいずれかのプロパティ値を指定します。

    モデル パラメーターコード識別子
    K1mp_K1
    Table1mp_Table1
    Table2mp_Table2
    setModelParameter(cm,'K1','Identifier','mp_K1');
    setModelParameter(cm,'Table1','Identifier','mp_Table1');
    setModelParameter(cm,'Table2','Identifier','mp_Table2');
    
  10. 関数 getModelParameter への呼び出しを使用して、モデル パラメーターの構成の変更を確認します。

    getModelParameter(cm,'K1','Identifier')
    
    ans =
    
        'mp_K1'
    
    getModelParameter(cm,'Table1','Identifier')
    
    ans =
    
        'mp_Table1'
    
    getModelParameter(cm, 'Table2', 'Identifier')
    
    ans =
    
        'mp_Table2'
    
  11. モデルを保存します。

  12. コードを生成して表示します。たとえば、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 (個別のマッピングのみ)
最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表します。既定値 (既定のマッピングのみ)
最適化によってデータ要素のストレージが削除されるのを防ぎ、データ要素のカテゴリに対して既定のマッピングを使用します。Model Default (個別のマッピングのみ)、Dictionary Default (個別のマッピングのみ)
boolean データを名前付きビット フィールドに保存する構造体を生成します。ビットフィールド (個別のマッピングのみ)
コンパイラ フラグまたはオプションを使用して定義されるプリプロセッサの条件をサポートします。CompilerFlag
constvolatile、または const および volatile 型修飾子をもつグローバル変数の定義と宣言を生成します。Const、Volatile、および ConstVolatile
マクロ (#define 命令) または外部コードのヘッダー ファイルで定義されるマクロを使用するコードを使用するコードを生成します。Define、ImportedDefine
グローバル変数の定義と宣言を生成します。ExportedGlobal
グローバル変数の定義と宣言を指定したファイルに生成します。ExportToFile
static 型修飾子をもつグローバル変数の定義と宣言を生成します。FileScope (ローカルおよび共有ローカル データ ストア マッピングのみ)
カスタムのアクセサー関数を呼び出して、データを処理するコードを生成します。GetSet
外部コードで定義されたグローバル変数またはグローバル変数のポインターに対して読み取りと書き込みを実行するコードを生成します。ImportedExtern、ImportedExternPointer
外部ヘッダー ファイルで定義されたグローバル変数に対して読み取りと書き込みを実行するコードを生成します。ImportFromFile
指定可能な名前をもつグローバル構造体を生成します。struct (個別のマッピングのみ)

使用可能なストレージ クラスのリストには、Embedded Coder ディクショナリで定義された他のプロジェクト固有のストレージ クラスが含まれている可能性があります。リストされているストレージ クラスでは満たされない特別な要件がある場合、Embedded Coder ソフトウェアをお持ちであれば、ストレージ クラスを定義できます。Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architectureを参照してください。

個々のモデル パラメーターに対して、[Identifier] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。Embedded Coder を使用して、選択するストレージ クラスに応じて以下のプロパティを構成することもできます。

プロパティ説明ストレージ クラス
DefinitionFileパラメーターおよび外部コードで読み取られるグローバル データの定義を含むソース定義ファイルExportToFile および Volatile
GetFunctionパラメーターは指定した関数 get への呼び出しとして生成されたコードに表示されます。GetSet
HeaderFileパラメーターおよび外部コードで読み取られるグローバル データの宣言を含むソース ヘッダー ファイルExportToFileGetSetImportFromFile、および 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を参照してください。ExportToFileFileScopeGetSetImportFromFileLocalizable、および Volatile
SetFunctionパラメーターは指定した関数 set への呼び出しとして生成されたコードに表示されます。GetSet
StructNameパラメーター用に生成されたコード内の構造体の名前。BitField および Struct

参考

|

関連するトピック