主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

信号,状態,パラメーターデータへの実行時のアクセス

モデルの反復的な開発においては、モデル実行で生成される出力信号や状態のデータを取得します。実行時にはパラメーターの値の調整も行い、出力での結果を確認します。そうすることで、設計を決定する際の判断をこのような出力の解析に基づいたものにできます。ラピッド プロトタイピング環境では、この信号、状態、パラメーターのデータにアクセスするために、データをアドレス可能なメモリに格納するように生成コードを設定できます。

既定では,生成コードの効率を高めるために,最適化設定によって,不要な信号ストレージを削除したり,ブロックパラメーターの数値をインライン化したりするように設定されています。その代わりに,このデータ用にアドレス可能なメモリを割り当てるコードを生成するには,最適化を無効にするか,個々のデータ項目に対してコード生成設定を指定します。

モデル例の確認

この例のためにモデルrtwdemo_configrpinterfaceを準備するスクリプトを実行します。

准备\u rtwdemo\u配置接口

以下のデータはコード生成のために構成されます。

  • パラメーター降低K1表1、および表2

  • 信号三机一体In2In3In4、およびOut1

  • 状態X(遅延)および模式(データストア メモリ書き込み)

モデル例rtwdemo_configrpinterfaceを開きます。

rtwdemo_configrpinterface

このモデルでは MATLABの数値変数をモデル ワークスペースに読み込みます。ワークスペース変数は、モデルにいくつかのブロック パラメーターを設定します。しかし、モデル内の 获得ブロックは、リテラル値 2.を使用します。

最適化の無効化

1.モデルで,モデルコンフィギュレーションパラメーターの(信号ストレージの再利用)をクリアします。この最適化のほか、[余分なローカル変数の削除 (式の畳み込み)]などの最適化をクリアすると,生成コードで信号線にメモリが割り当てられます。(信号ストレージの再利用)をクリアすると,他のほとんどの最適化が無効になります。

set_param (“rtwdemo_configrpinterface”“OptimizeBlockIOStorage”“关闭”

2.モデルコンフィギュレーションパラメーター(既定のパラメーター動作)を[可调]に設定します。このコンフィギュレーションパラメーターを[可调] に設定すると、生成コードでブロック パラメーターおよびワークスペース変数にメモリが割り当てられます。

set_param (“rtwdemo_configrpinterface”“DefaultParameterBehavior”可调的

3.コードを生成します。

slbuild(“rtwdemo_configrpinterface”
### Starting build procedure for: rtwdemo_configrpinterface ### #成功完成build procedure for: rtwdemo_configrpinterface模型重建行动的原因  ========================================================================================================== rtwdemo_configrpinterface代码生成和编译代码生成信息文件不存在。建造时间:0小时0米32.846秒

4.コード生成レポートで,ファイルrtwdemo_configrpinterface.hを表示します。このヘッダー ファイルは、信号のデータを格納する構造体型を定義しています。構造体にはモデル内の各信号線を表すフィールドが格納されます。たとえば、获得という名前の 获得ブロックの出力信号はフィールド获得として表されています。

文件= fullfile (“rtwdemo\u配置接口\u grt\u rtw”'rtwdemo_configrpinterface.h');rtwdemodbtype(文件,'/*块信号(默认存储)*/'...“B_rtwdemo_configrpinterface_T;”, 1, 1)
/*阻塞信号(默认存储)*/ typedef struct {real_T Delay;/* '/Delay' */ real_T表2;/* '/Table2' */ real_T Table1;/* '/Table1' */ real_T增益;/* '/获取' */ boolean_T RelOp1;/* '/RelOp1' */ boolean_T RelOp2;/* '/RelOp2' */ boolean LogOp;/* '/LogOp' */ boolean_T datastoreeread;/* '/Data Store Read' */} B_rtwdemo_configrpinterface_T;

このファイルは,ブロックパラメーターのデータを格納する構造体型を定義しています。たとえば,获得ブロックの[ゲイン]パラメーターはフィールド增益として表されています。構造体のその他のフィールドは,信号および状態の初期条件など,モデルの他のブロックパラメーターやワークスペース変数を表します。

rtwdemodbtype(文件,/*参数(默认存储)*/'...'/*实时模型数据结构*/', 1,0)
/*参数(默认存储)*/ struct P_rtwdemo_configrpinterface_T_ {Table1_Type Table1;/*变量:Table1 *引用:'/Table1' */ Table2_Type Table2;/*变量:Table2 *引用:'/Table2' */ real_T LOWER;/*变量:LOWER *引用:'/Constant2' */ real_T UPPER;/*变量:UPPER *引用:'/Constant1' */ real_T Gain_Gain;/*表达式:2 *引用:'/Gain' */ real_T Delay_InitialCondition;/* Expression: 0 * Referenced by: '/Delay' */ uint32_T Table2_maxIndex[2];/* Computed Parameter: Table2_maxIndex *引用by: '/Table2' */ boolean_T DataStoreMemory_InitialValue;/* Computed Parameter: DataStoreMemory_InitialValue *引用by: '/Data StoreMemory ' */};

5.ファイルrtwdemo_configrpinterface_data.cを表示します。このソース ファイルは、パラメーター構造体にグローバル メモリを割り当て、モデルのパラメーターの値に基づいてフィールドの値を初期化します。

6.ソース ファイルrtwdemo_configrpinterface.cを表示します。このコードは,信号のデータを格納する構造体変数にグローバルメモリを割り当てます。

文件= fullfile (“rtwdemo\u配置接口\u grt\u rtw”“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,'/*块信号(默认存储)*/'...“B_rtwdemo_configrpinterface_T rtwdemo_configrpinterface_B;”, 1, 1)
/*块信号(默认存储)*/B\u rtwdemo\u配置接口\u T rtwdemo\u配置接口\u B;

信号の値は,モデルの関数のコード アルゴリズムで計算されます。その後、それらの値が信号構造体のフィールドに代入されます。アルゴリズムによる計算には、パラメーター構造体のフィールドのパラメーター値が使用されます。

最適化からのデータ項目の除外

(信号ストレージの再利用)などのコード生成の最適化を選択する際、個々のデータ項目について、最適化しないで保持することができます。それらの項目に対しては、生成コードでアドレス可能メモリが割り当てられます。

前にクリアした最適化を選択します。

set_param (“rtwdemo_configrpinterface”“OptimizeBlockIOStorage”“上”) set_param (“rtwdemo_configrpinterface”“本地块输出”“上”) set_param (“rtwdemo_configrpinterface”“DefaultParameterBehavior”“内联”

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

2.コードマッピングエディターで[信号/状態]タブを検査します。

3.モデルで、获得ブロックの出力信号を選択します。

4.信号線の上または下に表示される省略記号上で一時停止してアクション バーを開きます。(信号の追加)ボタンをクリックします。コードマッピングエディターで[信号]ノードが展開され,追加した信号がリストされます。

cm=coder.mapping.api.get(“rtwdemo_configrpinterface”);gain_ports = get_param (“rtwdemo_配置接口/增益”“PortHandles”);增益输出端口=增益端口。输出端口;添加信号(cm,增益输出端口);

5.[ストレージクラス]模型默认值に設定して、外埠の既定のストレージ クラスを信号に適用します。

gain_outPort setSignal (cm,“StorageClass”“模型默认值”“标识符”“收益”);

6.モデルで获得ブロックを選択します。

7.プロパティ インスペクターで、ゲイン値をモデル ワークスペース パラメーター オブジェクトK1に設定します。

8.コード マッピング エディターの[パラメーター]タブで[模型参数]を展開します。

9.パラメーターK1を選択します。[ストレージクラス]を設定して,汽车以外のストレージクラスを適用します。たとえば,ストレージクラス模型默认值を使用します。模型默认值を使用して,K1はモデル パラメーター默认的に対して指定された既定のストレージ クラスを取得し、グローバルなパラメーター構造体のフィールドとして表示されます。

set_param (“rtwdemo_配置接口/增益”“收益”“K1”);设置模型参数(cm,“K1”“StorageClass”“模型默认值”);

10.コードを生成します。

slbuild(“rtwdemo_configrpinterface”
### Starting build procedure for: rtwdemo_configrpinterface ### #成功完成build procedure for: rtwdemo_configrpinterface模型重建行动的原因  ========================================================================================= rtwdemo_configrpinterface代码生成和编译生成的代码是过时了。建造时间:0小时0米13.731秒

11 .コード生成レポートで,ファイルrtwdemo_configrpinterface.hを表示します。信号のデータを格納する構造体は、Gain ブロックのテスト ポイント出力を表すフィールド获得のみを 1.つ定義しています。

文件= fullfile (“rtwdemo\u配置接口\u grt\u rtw”'rtwdemo_configrpinterface.h');rtwdemodbtype(文件,'/*块信号(默认存储)*/'...“B_rtwdemo_configrpinterface_T;”, 1, 1)
/*块信号(默认存储)*/typedef struct{real\u T Gain;/*'/Gain'*/}B\u rtwdemo\u configrpinterface\T;

ブロックパラメーターのデータを格納する構造体は,パラメーターオブジェクトK1を表すフィールドK1を1つ定義しています。

rtwdemodbtype(文件,/*参数(默认存储)*/'...'/*实时模型数据结构*/', 1,0)
/*参数(默认存储)*/struct P_rtwdemo_configrpinterface_T{int8_T K1;/*变量:K1*由以下引用:'/Gain'*/};

生成されたインターフェイスによるデータへのアクセス

標準化されたインターフェイスを介してモデルデータにアクセスするために,生成コードに追加のコードやファイルを含めるように設定できます。たとえば,信号のデータをログに記録したり実行時にパラメーターを調整したりするにはC APIを使用します。

次のカスタム ソース コードを現在のフォルダーのex_myHandCode.cという名前のファイルにコピーします。

#include "ex_myHandHdr.h" #define paramIdx 0 /*目标参数的索引,通过检查C API生成的结构数组确定。*/ #define sigIdx 0 /*目标信号的索引,通过检查C API生成的结构数组来确定。/*使用参数值只在模拟的开始和5秒标记处执行操作。*/ if (*tPtr == 0 || *tPtr == 5){/*局部变量存储从模型映射信息(mmi)提取的信息。* / void * * dataAddrMap;const rtwCAPI_DataTypeMap * dataTypeMap;const rtwCAPI_ModelParameters *参数;int_T addrIdx;uint16_T dTypeIdx;uint8_T slDataType; /* Use built-in C API macros to extract information. */ dataAddrMap = rtwCAPI_GetDataAddressMap(mmi); dataTypeMap = rtwCAPI_GetDataTypeMap(mmi); params = rtwCAPI_GetModelParameters(mmi); addrIdx = rtwCAPI_GetModelParameterAddrIdx(params,paramIdx); dTypeIdx = rtwCAPI_GetModelParameterDataTypeIdx(params,paramIdx); slDataType = rtwCAPI_GetDataTypeSLId(dataTypeMap, dTypeIdx); /* Handle data types 'double' and 'int8'. */ switch (slDataType) { case SS_DOUBLE: { real_T* dataAddress; dataAddress = dataAddrMap[addrIdx]; /* At the 5-second mark, increment the parameter value by 1. */ if (*tPtr == 5) { (*dataAddress)++; } printf("Parameter value is %f\n", *dataAddress); break; } case SS_INT8: { int8_T* dataAddress; dataAddress = dataAddrMap[addrIdx]; if (*tPtr == 5) { (*dataAddress)++; } printf("Parameter value is %i\n", *dataAddress); break; } } } } void logFcn(rtwCAPI_ModelMappingInfo *mmi, time_T *tPtr) { /* Take action with the signal value only when the simulation time is an integer value. */ if (*tPtr-(int_T)*tPtr == 0) { /* Local variables to store information extracted from the model mapping information (mmi). */ void** dataAddrMap; const rtwCAPI_DataTypeMap *dataTypeMap; const rtwCAPI_Signals *sigs; int_T addrIdx; uint16_T dTypeIdx; uint8_T slDataType; /* Use built-in C API macros to extract information. */ dataAddrMap = rtwCAPI_GetDataAddressMap(mmi); dataTypeMap = rtwCAPI_GetDataTypeMap(mmi); sigs = rtwCAPI_GetSignals(mmi); addrIdx = rtwCAPI_GetSignalAddrIdx(sigs,sigIdx); dTypeIdx = rtwCAPI_GetSignalDataTypeIdx(sigs,sigIdx); slDataType = rtwCAPI_GetDataTypeSLId(dataTypeMap, dTypeIdx); /* Handle data types 'double' and 'single'. */ switch (slDataType) { case SS_DOUBLE: { real_T* dataAddress; dataAddress = dataAddrMap[addrIdx]; printf("Signal value is %f\n", *dataAddress); break; } case SS_SINGLE: { real32_T* dataAddress; dataAddress = dataAddrMap[addrIdx]; printf("Signal value is %f\n", *dataAddress); break; } } } }

2.次のカスタムヘッダーコードを現在のフォルダーのex_myHandHdr.hという名前のファイルにコピーします。

#包括#包括#包括/*包括rtw_modelmap.h用于C API宏的定义。*/#包括“rtw_modelmap.h”#包括“内置类型ID_types.h”#包括“rtwtypes.h”void tuneFcn(rtwCAPI_ModelMappingInfo*mmi,time#T*tPtr);void logFcn(rtwCAPI#ModelMappingInfo*mmi,time#);

これらのファイルでは,モデル例から生成したコードの信号やパラメーターデータにアクセスするためにC APIを使用します。

3.モデル コンフィギュレーション パラメーター[ヘッダー ファイル]を[# include“ex_myHandHdr.h”]に,[ソースファイル]を[ex_myHandCode.c]に設定します。

set_param (“rtwdemo_configrpinterface”“CustomHeaderCode”“#包括“exu myHandHdr.h””) set_param (“rtwdemo_configrpinterface”“CustomSource”“ex_myHandCode.c”

4.モデルコンフィギュレーションパラメーター(垫ファイルのログ]を選択します。生成された実行可能ファイルは、シミュレーションの停止時間 (モデル コンフィギュレーション パラメーターで設定) までしか実行されません。

set_param (“rtwdemo_configrpinterface”“MatFileLogging”“上”

5.C APIモデルコンフィギュレーションパラメーター[パラメーター][信号][状態][ルートレベルI / O)を選択します。

set_param (“rtwdemo_configrpinterface”“RTWCAPIParams”“上”) set_param (“rtwdemo_configrpinterface”“RTWCAPISignals”“上”) set_param (“rtwdemo_configrpinterface”“RTWCAPIStates”“上”) set_param (“rtwdemo_configrpinterface”“RTWCAPIRootIO”“上”

6.自定义代码ブロックライブラリを読み込みます。

客户代码

7.モデルに 系统输出ブロックを追加します。

add_block (“客户代码/系统输出”“rtwdemo_configrpinterface /系统输出”

8.系统输出ブロックのダイアログボックスで,(系统输出函数実行コード]を次のコードに設定します。

{rtwdemo_configrpinterface_.input2++;rtwCAPI_ModelMappingInfo*MMI=&(rtmGetDataMapInfo(rtwdemo_configrpinterface_M).MMI);tuneFcn(MMI,rtmgettr(rtwdemo_configrpinterface_M));}

9.ブロックのダイアログボックスで,[系统输出功能]終了コード]を次のコードに設定します。

{rtwCAPI_ModelMappingInfo *MMI = &(rtmGetDataMapInfo(rtwdemo_configrpinterface_M).mmi);logFcn (MMI rtmGetTPtr (rtwdemo_configrpinterface_M));}

または、系统输出ブロックの設定のために,コマンドプロンプトで以下のコマンドを使用します。

temp.TLCFile =“custcode”;temp.Location =“系统输出功能”;中间温度=sprintf([“{\nrtwdemo_configrpinterface_.input2++;”...'\nrtwCAPI_ModelMappingInfo *MMI = '...’& (rtmGetDataMapInfo (rtwdemo_configrpinterface_M) .mmi);“...“\ntuneFcn(MMI,rtmGetTPtr(rtwdemo_configrpinterface_M));\n}”]);底部温度=sprintf(['{\nrtwCAPI_ModelMappingInfo *MMI = '...’& (rtmGetDataMapInfo (rtwdemo_configrpinterface_M) .mmi);“...' \ nlogFcn (MMI, rtmGetTPtr (rtwdemo_configrpinterface_M)); \ n}’]);set_param (“rtwdemo_configrpinterface /系统输出”“RTWdata”、临时)

10.コードを生成します。

slbuild(“rtwdemo_configrpinterface”
### Starting build procedure for: rtwdemo_configrpinterface ### #成功完成build procedure for: rtwdemo_configrpinterface模型重建行动的原因  ========================================================================================= rtwdemo_configrpinterface代码生成和编译生成的代码是过时了。1个模型建立(0个模型已经更新)建立时间:0小时0米16.455秒

11コード生成レポートで、インターフェイス ファイルrtwdemo\u配置接口\u capi.cを表示します。このファイルはC APIを介したデータ項目の処理に使用できる構造体の配列を初期化します。たとえば,構造体rtBlockSignalsの配列では,最初の構造体(インデックス0)は,モデルの获得ブロックのテストポイント出力信号を表します。

文件= fullfile (“rtwdemo\u配置接口\u grt\u rtw”“rtwdemo_configrpinterface_capi.c”);rtwdemodbtype(文件,/*块输出信号信息*/'.../*单个块调优, 1,0)
/ *块输出信号信息* /静态常量rtwCAPI_Signals rtBlockSignals [] = { /* * signalName addrMapIndex、sysNum blockPath, portNumber, dataTypeIndex, dimIndex, fxpIndex, sTimeIndex * / {0, 0, TARGET_STRING(“rtwdemo_configrpinterface /增益”),TARGET_STRING(" "), 0, 0, 0, 0, 0},{0 0(零),(零),0,0,0,0,0}};

addrMapIndexなどの構造体のフィールドは、信号の特性を表すrtDataAddrMapなど他の構造体の配列のインデックスを示します。これらの特性には,信号データのアドレス(データへのポインター),数値データ型および信号の次元が含まれます。

12 .ファイルrtwdemo_configrpinterface.cでは、モデルの関数のコードアルゴリズムを表示します。アルゴリズムでは,最初に系统输出ブロックで指定したコードが実行されます。

文件= fullfile (“rtwdemo\u配置接口\u grt\u rtw”“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,'/*用户代码(输出函数体)*/'...'/*逻辑:'/LogOp''包含:', 1,0)
/*用户代码(输出函数体)*/*系统“”*/{rtwdemo_configrpinterface_.input2++;rtwCAPI_ModelMappingInfo*MMI=&(rtmGetDataMapInfo(rtwdemo_configrpinterface_M).MMI);tuneFcn(MMI,rtmGetTPtr(rtwdemo_configrpinterface_M))}/*数据存储写入:“/Data Store Write”包含:*常量:“/Constant1”*常量:“/Constant2”*输入:“/In1”*逻辑:“/LogOp”*关系运算符:“/RelOp1”*关系运算符:“/RelOp2”*/模式=((rtwdemo\U配置接口U.In1>10.0);(rtwdemo\U配置接口U.In1<-10.0)/*增益:“/Gain”包含:*输入:“/In2”*查找n-D:“/Table1'*/rtwdemo\U configrpinterface\U B.Gain=(real\U T)rtwdemo\U configrpinterface\U P.K1*look1\U binlc(rtwdemo\U configrpinterface\U.input2,rtCP\U Table1\U bp01Data,rtCP\U Table1\U tableData,10U);/*开关:“/Switch”合并:*数据存储读取:“/Data Store Read”*/if(mode){/*输出端口:“/Out1'*/output=rtwdemo\u configrpinterface\u B.Gain;}其他{/*输出端口:“/Out1”合并:*UnitDelay:“/Delay”*/output=rtwdemo\u configrpinterface\u DW.X;}/*切换结束:'/Switch'*/*Lookup\U n-D:'/Table2'合并:*输入:'/In3'*输入:'/In4'*/rtwdemo\U configrpinterface\U DW.X=look2\U binlc(rtwdemo\U configrpinterface\U.In3,rtwdemo\U configrpinterface\U.In4,rtCP\U Table2\U bp01Data,rtCP\Table2\tableData,maxu)/*用户代码(输出函数尾部)*/*系统“”*/{rtwCAPI_ModelMappingInfo*MMI=&(rtmGetDataMapInfo(rtwdemo_configrpinterface_M).MMI);logFcn(MMI,rtmGetTPtr(rtwdemo_configrpinterface_M))}/*Matfile logging*/rt_updatexylogvars(rtwdemo_configrpinterface_M->rtwLogInfo,(&rtwdemo_configrpinterface_M->time0))/*停止模拟的主信号机*/{/*采样时间:[1.0s,0.0s]*/if((rtmGetTFinal(rtwdemo_configrpinterface_M)!=-1)和&((rtmGetTFinal(rtwdemo_configrpinterface_M)-rtwdemo_configrpinterface_M->Timing.taskTime0)>rtwdemo_configrpinterface_->Timing.taskTime0*(DBL_EPSILON)){,“Simulation finished”);}}/*更新基本速率的绝对时间*/*此“clockTick0”统计此任务的代码*已执行的次数。“clockTick0”的绝对时间是“clockTick0”和“Timing.stepSize0”的乘积。“clockTick0”的大小“确保计时器在选定的应用程序生命周期内不会*溢出。*此任务的计时器由两个32位无符号整数组成。*这两个整数表示低位Timing.clockTick0和高位*Timing.clockTickH0。当低位溢出到0时,高位递增。*/如果(!(++rtwdemo\u configrpinterface\u M->Timing.clockTick0)){++rtwdemo\u configrpinterface\u M->Timing.clockTickH0;}rtwdemo_configrpinterface_M->Timing.taskTime0=rtwdemo_configrpinterface_M->Timing.clockTick0*rtwdemo_configrpinterface_M->Timing.stepSize0+rtwdemo_configrpinterface_M->Timing.stepSize0*4294967296.0;}/*模型初始化函数*/void-rtwdemo\u-configrpinterface\u-initialize(void){/*注册码*/*初始化非限定项*/rt-initinfannan(sizeof(real\u T));/*初始化实时模型*/(void)memset((void*)rtwdemo\u-configrpinterface\u-M,0,sizeof(rt-Model\u-rtwdemo\u-configrpinterface\T));rtmSetTFinal(rtwdemo\u-configrpinterface,10.0);rtwdemo_configrpinterface_M->Timing.stepSize0=1.0;/*数据记录设置*/{static RTWLogInfo rt_dataloggininfo;rt_dataloggininfo.loggininterval=(NULL);rtwdemo_configrpinterface_M->RTWLogInfo=&rt_dataloggininfo}/*数据记录设置*/{rtliSetLogXSignalInfo(rtwdemo_configrpinterface_->M RTWLogInfo,(NULL))rtliSetLogXSignalPtrs(rtwdemo_configrpinterface_M->rtwLogInfo,(NULL));rtliSetLogT(rtwdemo_configrpinterface_M->rtwLogInfo“);rtliSetLogX(rtwdemo_configrpinterface_M->rtwLogInfo“);rtliSetLogXFinal(rtwdemo_configrpinterface_M->rtwLogInfo“);rtliSetLogVarNameModifier(rtwdemo_configrpinterface)+rtwLogInfo“)”;rtliSetLogFormat(rtwdemo_configrpinterface_M->rtwLogInfo,0);rtliSetLogMaxRows(rtwdemo_configrpinterface_M->rtwLogInfo,1000);rtliSetLogDecimation(rtwdemo_configrpinterface_M->rtwLogInfo,1);rtliSetLogY(rtwdemo_configrpinterface_M->rtwLogInfo,”);rtlisetlysignalinfo(rtwdemo->configrpinterface->rtwLogInfo,(NULL));rtliSetLogY(rtwdemo_configrpinterface_M->rtwLogInfo,(NULL));}/*块I/O*/(void)memset(((void*)和rtwdemo_configrpinterface_B),0,sizeof(B_rtwdemo_configrpinterface_T))/*存储类*/output=0.0;/*状态(dwork)*/(void)memset((void*)&rtwdemo_configrpinterface_DW,0,sizeof(DW rtwdemo_configrpu);/*导出的全局状态*/mode=false;/*外部输入*/(void)memset(&rtwdemo_configrpinterface_,0,sizeof(ExtU_rtwdemo_configrpinterface_T));/*初始化包含C API的ModelMap的DataMapInfo子结构*/rtwdemo_configrpinterface_InitializeDataMapInfo(); /* Matfile logging */ rt_StartDataLoggingWithStartTime(rtwdemo_configrpinterface_M->rtwLogInfo, 0.0, rtmGetTFinal(rtwdemo_configrpinterface_M), rtwdemo_configrpinterface_M->Timing.stepSize0, (&rtmGetErrorStatus (rtwdemo_configrpinterface_M))); /* Start for DataStoreMemory: '/Data Store Memory' */ mode = false; /* InitializeConditions for Lookup_n-D: '/Table2' incorporates: * UnitDelay: '/Delay' */ rtwdemo_configrpinterface_DW.X = 0.0; } /* Model terminate function */ void rtwdemo_configrpinterface_terminate(void) { /* (no terminate code required) */ }

このコードでは最初に、関数が実行されるたびに信号の値をインクリメントして入力信号input2に摂動を与えます。その後,コードは組み込みのマクロrtmGetDataMapInfoを使用して、モデル データ構造体rtwdemo\u配置接口\u Mからモデルマッピング情報を抽出します。ポインターMMIは抽出されたマッピング情報をポイントします。これにより,関数tuneFcnおよび関数logFcnはC APIファイルrtwdemo\u配置接口\u capi.cで定義されている構造体の配列に含まれる情報にアクセスできます。

13 .ファイルex_myHandCode.cの関数tuneFcnを表示します。この関数はC API(モデルマッピング情報mmiを介して) およびシミュレーション時間へのポインターを使用して、コード実行中の特定の時間にパラメーターK1の値を出力します。シミュレーション時間が 5.秒に達すると、関数はメモリ内のパラメーター値を変更します。开关情况ブロックを使用することで,関数はデータ型がint8または双重的のどちらでも、パラメーター データにアクセスできます。

14。モデルの関数のコードアルゴリズムをもう一度表示します。関数の終わりに近づくと、アルゴリズムは System Outputs ブロックで指定したコードを実行します。このコードは関数logFcnを呼び出します。

rtwdemodbtype(文件,'/*用户代码(输出函数)*/'...'/* Matfile日志记录*/', 1,0)
/*用户代码(输出函数尾部)*/*系统“”*/{rtwCAPI_ModelMappingInfo*MMI=&(rtmGetDataMapInfo(rtwdemo_configrpinterface_M).MMI);logFcn(MMI,rtmGetTPtr(rtwdemo_configrpinterface_M))}

15ファイルex_myHandCode.cの関数logFcnを表示します。この関数はC APIを使用してテストポイントされた信号の値を出力します。関数は,データ型が仅有一个的または双重的のどちらでも信号データにアクセスできます。

16コマンド プロンプトで、生成された実行可能ファイルrtwdemo_configrpinterface.exeを実行します。

系统(“rtwdemo_configrpinterface”

パラメーターと信号値がコマンドウィンドウの出力に表示されます。

C APIなどのデータ インターフェイスの詳細については、キャリブレーションおよび測定を参照してください。

参考

||

関連するトピック