Main Content

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

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

パラメーターのタイプ説明
モデル パラメーターモデル ワークスペース内のパラメーターなど、モデル内で定義されたパラメーター。
外部パラメーターベース ワークスペース内またはデータ ディクショナリ内でオブジェクトとして定義されたパラメーター。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

この例では、コード マッピング エディター – C を使用して、モデル rtwdemo_configrpinterface に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. モデル パラメーターのコード識別子を接頭辞 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_Table2D.

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

  6. コードを生成して表示します。たとえば、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 に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1Table1 および Table2 に適用します。これらのパラメーターのコード識別子を構成します。

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

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

    model='rtwdemo_configrpinterface';
    
    set_param(model,'DefaultParameterBehavior','Tunable');
    
  3. 関数 coder.mapping.api.get を呼び出してオブジェクト cm を作成します。オブジェクトには、モデル rtwdemo_configrpdefaults のデータ要素についてのコード生成の構成が格納されます。

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

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

    • 既定のカテゴリの ModelParameters

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

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

    getDataDefault(cm,'ModelParameters','StorageClass')
    
    ans =
    
        'ExportedGlobal'
    
  6. モデル パラメーターの既定の構成をパラメーター 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');
    
  7. 関数 getModelParameter への呼び出しを使用して、パラメーター K1Table1 および Table2 の構成の変更を確認します。

    getModelParameter(cm,'K1','StorageClass')
    
    ans =
    
        'Model default'
    
    getModelParameter(cm,'Table1','StorageClass')
    
    ans =
    
        'Model default'
    
    
    getModelParameter(cm,'Table2','StorageClass')
    
    ans =
    
        'Model default'
  8. モデル パラメーターのコード識別子を構成します。パラメーターごとに関数 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');
    
  9. 関数 getModelParameter への呼び出しを使用して、モデル パラメーターの構成の変更を確認します。

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

  11. コードを生成して表示します。たとえば、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] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。

参考

|

関連するトピック