Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

C API を使用したモデル パラメーターへのアクセス

この例は、モデルのパラメーターと相互作用するアプリケーション コードを書き始めるために役立ちます。モデルの信号や状態と相互作用するアプリケーション コードを書き始めるには、C API を使用したモデルの信号と状態へのアクセスを参照してください。

C API を使用すると、モデルの信号、状態、ルートレベル入力/出力、およびパラメーターと対話する独自のアプリケーション コードを柔軟に作成できます。ターゲット ベースのアプリケーション コードは生成コードを使用して実行可能プログラムにコンパイルされます。ターゲット ベースのアプリケーション コードは model_capi.c (または .cpp) で C API 構造体配列にアクセスします。ターゲット ベースのアプリケーション コードと対話するホスト ベースのコードがあるとします。または、ターゲット ベースのアプリケーション コードと対話するその他のターゲット ベースのコードがあるとします。matlabroot/rtw/c/src に配置されているファイル rtw_modelmap.h および rtw_capi.h はこれらの配列とメンバーの構造体にアクセスするためのマクロを提供します。

モデルの調整可能なパラメーターのパラメーター値を標準出力に表示する用途の例を次に示します。このコードはパラメーター アドレスにアクセスする開始点として次のコードを示します。パラメーター調整を実行するコードを拡張できます。用途は以下です。

  • rtmGetDataMapInfo マクロを使用してリアルタイム モデル構造体のサブ構造体 mmi のマッピング情報にアクセスします。

    rtwCAPI_ModelMappingInfo* mmi = &(rtmGetDataMapInfo(rtM).mmi);

    ここで、rtMmodel.c (または .cpp) でリアルタイム モデル構造体へのポインターです。

  • rtwCAPI_GetNumModelParameters を使用してマッピングされた C API のモデル パラメーターの数を取得します。

    uint_T nModelParams = rtwCAPI_GetNumModelParameters(mmi);

  • rtwCAPI_GetModelParameters を使用して C API でマッピングされたモデル パラメーター構造体の配列にアクセスします。

    rtwCAPI_ModelParameters* capiModelParams = \
     rtwCAPI_GetModelParameters(mmi);
  • 配列 capiModelParams をループして個々のパラメーター構造体にアクセスします。関数 capi_PrintModelParameter の呼び出しによりパラメーターの値が表示されます。

アプリケーション コードの例を次に示します。

{
/* Get CAPI Mapping structure from Real-Time Model structure */
rtwCAPI_ModelMappingInfo* capiMap = \
&(rtmGetDataMapInfo(CAPIModel_M).mmi);

/* Get number of Model Parameters from capiMap */
uint_T nModelParams = rtwCAPI_GetNumModelParameters(capiMap);
printf("Number of Model Parameters: %d\n", nModelParams);

/* If the model has Model Parameters, print them using the
application capi_PrintModelParameter */
if (nModelParams == 0) {
   printf("No Tunable Model Parameters in the model \n");
}
else {
   unsigned int idx;

   for (idx=0; idx < nModelParams; idx++) {
      /* call print utility function */
      capi_PrintModelParameter(capiMap, idx);
   }
}
}

表示ユーティリティ関数は matlabroot/rtw/c/src/rtw_capi_examples.c に配置されます。このファイルには C API 構造体にアクセスするためのユーティリティ関数が含まれます。

コード例をより理解するには、調整可能なブロック パラメーターと MATLAB® 変数を表示するモデルを作成します。CAPIModel (C API のモデル例) を使用できます。以下の手順は、特に指定がない限り、システム ターゲット ファイル grt.tlc および ert.tlc の両方に適用されます。

  1. MATLAB コマンド ラインで「openExample('CAPIModel')」と入力してモデル例を開きます。

  2. Embedded Coder® ソフトウェアのライセンスがあり、既定の grt.tlc ではなくシステム ターゲット ファイル ert.tlc を使用する場合は、モデル コンフィギュレーション パラメーター [システム ターゲット ファイル] を使用してシステム ターゲット ファイル ert.tlc を選択します。参照モデル CAPIModelRefert.tlc も選択するようにしてください。

  3. 以下のモデル コンフィギュレーション パラメーターの設定を確認します。

    1. [C API の生成: パラメーター] を選択します。

    2. システム ターゲット ファイル ert.tlc を使用している場合は、[サポート: 複素数] を選択します。

    3. [MAT ファイルのログ] を選択します。

    4. [適用] をクリックします。

    5. 最上位モデルで行った変更と一致するように、参照モデル CAPIModelRef のコンフィギュレーション パラメーター設定を更新します。

  4. [カスタム コード] ペインを使用して、生成されたコードにカスタム アプリケーション コードを組み込みます。[カスタム コード] ペインを選択します。[追加のソース コード] タブで、[初期化コード] をクリックします。[初期化コード] 入力フィールドが表示されます。

  5. [初期化コード] 入力フィールドで手順 1 に示されたアプリケーション コード例を入力するか、コピーして貼り付けます。これにより関数 model_initialize にアプリケーション コードが組み込まれます。

    メモ

    最上位モデル CAPIModel の名前を変更した場合、アプリケーション コード内の名前 CAPIModel_M を更新し、新しいモデル名を反映させます。

  6. [コード情報] タブで、[インクルード ディレクトリ] をクリックし、「matlabroot/rtw/c/src」と入力します。ここで、matlabroot は MATLAB インストール フォルダーのルートを表します。(空白を含む Windows® パスを指定している場合、文字列を二重引用符で囲んでください)。

  7. 同じタブで、[ソース ファイル] をクリックし、「rtw_capi_examples.c」と入力します。

    [適用] をクリックします。

  8. モデル コンフィギュレーション パラメーター [コード生成のみ] をオフにします。

    モデルをビルドし、実行可能ファイルを生成します。たとえば、Windows システムでは、ビルドは実行可能ファイル CAPIModel.exe を現在の作業フォルダーに生成します。

  9. MATLAB コマンド ウィンドウで「!CAPIModel」と入力して実行可能ファイルを実行します。プログラムを実行すると、コマンド ウィンドウにパラメーター情報が表示されます。

    >> !CAPIModel
    
    ** starting the model **
    Number of Model Parameters: 5
    Ki =
        7
    Kp =
        4
    p1 =
        0.15
        0.36
        0.81
    p2 =
        0.09    0.75    0.57
        0.13    0.96    0.059
    p3 =
    ans(:,:,1) =
        0.23    0.82    0.04    0.64
        0.35    0.01    0.16    0.73
    
    ans(:,:,2) =
        0.64    0.54    0.74    0.68
        0.45    0.29    0.18    0.18

関連するトピック