C API を使用したモデル パラメーターへのアクセス
この例は、モデルのパラメーターと相互作用するアプリケーション コードを書き始めるために役立ちます。モデルの信号や状態と相互作用するアプリケーション コードを書き始めるには、C API を使用したモデルの信号と状態へのアクセスを参照してください。
C API を使用すると、モデルの信号、状態、ルートレベル入力/出力、およびパラメーターと対話する独自のアプリケーション コードを柔軟に作成できます。ターゲット ベースのアプリケーション コードは生成コードを使用して実行可能プログラムにコンパイルされます。ターゲット ベースのアプリケーション コードは
(または model
_capi.c.cpp
) で C API 構造体配列にアクセスします。ターゲット ベースのアプリケーション コードと対話するホスト ベースのコードがあるとします。または、ターゲット ベースのアプリケーション コードと対話するその他のターゲット ベースのコードがあるとします。
(開く) に配置されているファイル matlabroot
/rtw/c/srcrtw_modelmap.h
および rtw_capi.h
はこれらの配列とメンバーの構造体にアクセスするためのマクロを提供します。
モデルの調整可能なパラメーターのパラメーター値を標準出力に表示する用途の例を次に示します。このコードはパラメーター アドレスにアクセスする開始点として次のコードを示します。パラメーター調整を実行するコードを拡張できます。用途は以下です。
rtmGetDataMapInfo
マクロを使用してリアルタイム モデル構造体のサブ構造体mmi
のマッピング情報にアクセスします。rtwCAPI_ModelMappingInfo* mmi = &(rtmGetDataMapInfo(rtM).mmi);
ここで、
rtM
は
(またはmodel
.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(rtwdemo_capi_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); } } }
表示ユーティリティ関数は
に配置されます。このファイルには C API 構造体にアクセスするためのユーティリティ関数が含まれます。matlabroot
/rtw/c/src/rtw_capi_examples.c
コード例をより理解するには、調整可能なブロック パラメーターと MATLAB® 変数を表示するモデルを作成します。rtwdemo_capi
(C API のモデル例) を使用できます。以下の手順は、特に指定がない限り、システム ターゲット ファイル grt.tlc
および ert.tlc
の両方に適用されます。
MATLAB コマンド ラインで
rtwdemo_capi
と入力してモデル例を開きます。最上位モデル
rtwdemo_capi
と参照モデルrtwdemo_capi_bot
を書き込み可能な同じ作業フォルダーに保存します。Embedded Coder® ソフトウェアのライセンスがあり、既定の
grt.tlc
ではなくシステム ターゲット ファイルert.tlc
を使用する場合は、モデル コンフィギュレーション パラメーター [システム ターゲット ファイル] を使用してシステム ターゲット ファイルert.tlc
を選択します。参照モデルrtwdemo_capi_bot
のert.tlc
も選択するようにしてください。以下のモデル コンフィギュレーション パラメーターの設定を確認します。
[C API の生成: パラメーター] を選択します。
システム ターゲット ファイル
ert.tlc
を使用している場合は、[サポート: 複素数] を選択します。[MAT ファイルのログ] を選択します。
[適用] をクリックします。
最上位モデルで行った変更と一致するように、参照モデル
rtwdemo_capi_bot
のコンフィギュレーション パラメーター設定を更新します。
[カスタム コード] ペインを使用して、生成されたコードにカスタム アプリケーション コードを組み込みます。[カスタム コード] ペインを選択します。[追加のソース コード] タブで、[初期化コード] をクリックします。[初期化コード] 入力フィールドが表示されます。
[初期化コード] 入力フィールドで手順 1 に示されたアプリケーション コード例を入力するか、コピーして貼り付けます。これにより関数
にアプリケーション コードが組み込まれます。model
_initializeメモ
最上位モデル
rtwdemo_capi
の名前を変更した場合、アプリケーション コード内の名前rtwdemo_capi_M
を更新し、新しいモデル名を反映させます。[コード情報] タブで、[インクルード ディレクトリ] をクリックし、「
」と入力します。ここで、matlabroot
/rtw/c/src
は MATLAB インストール フォルダーのルートを表します。(空白を含む Windows® パスを指定している場合、文字列を二重引用符で囲んでください)。matlabroot
同じタブで、[ソース ファイル] をクリックし、「
rtw_capi_examples.c
」と入力します。[適用] をクリックします。
モデル コンフィギュレーション パラメーター [コード生成のみ] をオフにします。
モデルをビルドし、実行可能ファイルを生成します。たとえば、Windows システムでは、ビルドは実行可能ファイル
rtwdemo_capi.exe
を現在の作業フォルダーに生成します。MATLAB コマンド ウィンドウで
!rtwdemo_capi
を入力して実行可能ファイルを実行します。プログラムを実行すると、コマンド ウィンドウにパラメーター情報が表示されます。>> !rtwdemo_capi ** 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