メインコンテンツ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

対応するストレージ クラスおよびストレージ クラスのプロパティをもつパラメーターに関連するインターフェイスの要件のリストについては、データ ストアのストレージ クラスおよびストレージ クラス プロパティの選択を参照してください。

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

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

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

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

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

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

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

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

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

    openExample("ConfigurationRapidPrototypingInterface")
    

    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 つを満たす場合、パラメーターに対して個別にコード生成設定を構成することを検討してください。

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

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

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

この例では、コード マッピング エディターを使用して、モデル パラメーターの既定のストレージ クラス設定をモデル ConfigurationInterface 内のパラメーター 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. コードを生成して表示します。たとえば、ConfigurationRapidPrototypingInterface.c でモデル パラメーター mp_K1 のデータ定義を見つけます。

    int8_T mp_K1 = 2;                       
    

    ステップ エントリポイント関数内でパラメーターが使用されている場所を見つけます。

    if (mode) {
        output = (real_T)mp_K1 * dout_Table1;
      } else {
        output = dstate_X;
      }
    

パラメーターに対するコード生成設定のプログラムによる構成

コード生成用にパラメーターの構成を自動化するには、コード マッピングのプログラミング インターフェイスを使用します。たとえば、カスタム ブロック ライブラリまたはアプリケーション テスト環境の一部を作成する場合は、プログラミング インターフェイスを使用してデータの構成を自動化します。

この例では、モデル ConfigurationRapidPrototypingInterface に対するモデル パラメーターに既定の設定を構成する方法を示します。調整可能であり、生成コードで個別のグローバル変数として定義および宣言されるように、モデル パラメーターを構成します。モデル パラメーターの既定のストレージ クラス設定をパラメーター K1Table1 および Table2 に適用します。これらのパラメーターのコード識別子を構成します。

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

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

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

    cm = coder.mapping.api.get("ConfigurationRapidPrototypingInterface");
    
  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. コードを生成して表示します。たとえば、ConfigurationRapidPrototypingInterface.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] ストレージ クラスのみが適用されます。

  • 最上位モデルは、モデル パラメーター引数の個別のマッピングをサポートしません。最上位モデルのモデル パラメーター引数に [自動] ストレージ クラスを選択すると、コード ジェネレーターは引数をインライン化します。

要件既定のマッピングのストレージ クラス個別のマッピングのストレージ クラス
最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表します。Default 
より効率的なコードを生成するように、最適化を有効にします。 Auto
最適化によってデータ要素のストレージが削除されるのを防ぎ、データ要素のカテゴリに対して既定のマッピングを使用します。 Model Default
スタンドアロンのグローバル変数を生成します。生成されたコードには変数の宣言と定義が含まれます。ExportedGlobalExportedGlobal
スタンドアロンのグローバル変数またはグローバル変数ポインターを生成します。生成されたコードには、変数またはポインター宣言が含まれます。外部コードによって定義が提供されます。ImportedExtern, ImportedExternPointerImportedExtern, ImportedExternPointer

個々のモデル パラメーターに対して、[Identifier] ストレージ クラス プロパティを使用して生成されたコード内のパラメーターを表す変数の名前を構成します。

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

メモ

Embedded Coder ディクショナリで定義されたカスタム ストレージ クラスにパラメーターをマッピングする際に、以下の制限事項が適用されます。

  • モデル パラメーター引数とモデル パラメーターでは、[データの初期化] プロパティが AutoStatic、または None に設定されていなければならない。

  • モデル パラメーター引数の場合、[データ アクセス] プロパティが Direct[ストレージ タイプ]Structured に設定されていなければならない。

  • 外部パラメーターは、Embedded Coder ディクショナリのカスタム ストレージ クラスにマッピングできない (ただし、TLC ベースのカスタム ストレージ クラスにはマッピング可能。ストレージ クラスの TLC コードの記述によるデータ表現の詳細な制御 (Embedded Coder)を参照)。

  • 定数は、Embedded Coder ディクショナリのカスタム ストレージ クラスにマッピングできない。

参考

|

トピック