使用C API访问模型信号和状态
这个示例帮助您开始编写与模型信号和状态交互的应用程序代码。要开始编写与模型参数交互的应用程序代码,请参见使用C API访问模型参数.
C API为您提供了编写自己的应用程序代码以与模型信号、状态、根级输入/输出和参数交互的灵活性。方法编译基于目标的应用程序代码金宝app®编码器™将代码生成到可执行文件中。中的C API结构数组访问基于目标的应用程序代码
(或模型
_capi.c. cpp
).您可能拥有与基于目标的应用程序代码交互的基于主机的代码。或者,您可能有其他与您的基于目标的应用程序代码交互的基于目标的代码。的文件rtw_modelmap.h
而且rtw_capi.h
,位于
(开放),提供宏来访问这些数组及其成员中的结构。matlabroot
/ rtw / c / src
下面是一个示例应用程序,它将模型中的全局信号和状态记录到文本文件中。此代码旨在作为访问信号和状态地址的起点。您可以扩展代码来执行信号日志记录和监视、状态日志记录和监视,或者两者同时执行。
这个例子使用了以下宏和函数接口:
rtmGetDataMapInfo
宏访问实时模型结构的模型映射信息(MMI)子结构。在下面的宏调用中,
rtM
指向实时模型结构的指针是否在
(或模型
.c. cpp
):rtwCAPI_ModelMappingInfo* mmi = &(rtmGetDataMapInfo(rtM).mmi);
rtmGetTPtr
宏从实时模型结构的计时子结构中访问基本速率的绝对时间信息。在下面的宏调用中,
rtM
指向实时模型结构的指针是否在
(或模型
.c. cpp
):rtmGetTPtr (rtM)
自定义函数
capi_StartLogging
,capi_UpdateLogging
,capi_TerminateLogging
,通过文件提供rtwdemo_capi_datalog.h
而且rtwdemo_capi_datalog.c
.这些文件位于
(开放).matlabroot
/工具箱/ rtw / rtwdemoscapi_StartLogging
初始化信号和状态日志记录。capi_UpdateLogging
在每个时间步记录一个信号和状态值。capi_TerminateLogging
终止信号和状态日志记录,并将记录的值写入文本文件。
你可以通过以下方法将这些自定义函数集成到模型生成的代码中:
自定义代码的“模型配置参数”对话框。
自定义代码库块
TLC自定义代码函数
本教程使用自定义代码窗格中的模型配置参数对话框和自定义代码库中的系统输出块,以便将对自定义函数的调用插入其中
(或模型
.c. cpp
),如下:capi_StartLogging
被称为
函数。模型
_initializecapi_UpdateLogging
被称为
函数。模型
_stepcapi_TerminateLogging
被称为
函数。模型
_terminate
生成的代码的以下摘录
(重新排列以反映它们的执行顺序)显示了如何使用函数接口。模型
.c
Void rtwdemo_capi_initialize(Void){…/*用户代码(初始化函数体)*/ /* C API自定义日志功能:通过C API启动信号和状态日志。* capi_StartLogging: rtwdemo_capi_data .h中的函数原型*/ {rtwCAPI_ModelMappingInfo *MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);printf("**通过C API **\n启动状态/信号记录");capi_StartLogging (MMI MAX_DATA_POINTS);}……}……/*建模步长函数*/ void rtwdemo_capi_step(void){…/*用户代码(输出函数预告)*/ /*系统'<根>' */ /* C API自定义日志函数:更新信号和状态日志缓冲区。* capi_UpdateLogging:函数原型在rtwdemo_capi_data .h */ {rtwCAPI_ModelMappingInfo *MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi); capi_UpdateLogging(MMI, rtmGetTPtr(rtwdemo_capi_M)); } ... } ... /* Model terminate function */ void rtwdemo_capi_terminate(void) { /* user code (Terminate function Body) */ /* C API Custom Logging Function: Dump Signal and State buffers into a text file. * capi_TerminateLogging: Function prototype in rtwdemo_capi_datalog.h */ { capi_TerminateLogging("rtwdemo_capi_ModelLog.txt"); printf("** Finished state/signal logging. Created rtwdemo_capi_ModelLog.txt **\n"); } }
下面的过程说明如何使用C API宏和函数接口将模型中的全局信号和状态记录到文本文件中。
在MATLAB®命令行输入
rtwdemo_capi
打开示例模型。保存顶级模型
rtwdemo_capi
参考模型rtwdemo_capi_bot
到相同的可写工作文件夹。打开“配置参数”对话框。
如果您获得了嵌入式编码器的许可®软件和你想要使用的
ert.tlc
系统目标文件,而不是默认的grt.tlc
,更改模型配置参数设置系统目标文件.确保您也进行了选择ert.tlc
对于引用的模型rtwdemo_capi_bot
.对于顶级型号,请确认以下型号配置参数设置:
选择参数为信号生成C API,为状态生成C API,为参数生成C API.
如果您正在使用
ert.tlc
系统目标文件,选择金宝app支持复数选择MAT-file日志.
点击应用.
更新参考模型中的配置参数设置,
rtwdemo_capi_bot
,以匹配您在顶级模型中所做的更改。
使用自定义代码窗格将自定义应用程序代码嵌入到生成的代码中。选择自定义代码窗格,然后单击包括目录.的包括目录显示输入字段。
在包括目录字段,类型
,在那里matlabroot
/工具箱/ rtw / rtwdemos
表示MATLAB安装文件夹的根目录。(如果指定的是Windows®包含空格的路径,将文本放在双引号内。)matlabroot
在额外的构建信息subpane,点击源文件和类型
rtwdemo_capi_datalog.c
.在在生成中包含自定义C代码subpane,点击源文件,然后键入或复制并粘贴以下include语句:
# include“rtwdemo_capi_datalog.h”
在初始化函数字段,键入或复制并粘贴以下应用程序代码:
/* C API自定义日志功能:通过C API启动信号和状态日志。* capi_StartLogging: rtwdemo_capi_data .h中的函数原型*/ {rtwCAPI_ModelMappingInfo *MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);printf("**通过C API **\n启动状态/信号记录");capi_StartLogging (MMI MAX_DATA_POINTS);}
请注意
如果你重新命名顶级模特
rtwdemo_capi
,更新名称rtwdemo_capi_M
在应用程序代码中反映新的模型名称。在终止函数字段,键入或复制并粘贴以下应用程序代码:
/* C API自定义日志功能:转储信号和状态缓冲区到文本文件。* capi_TerminateLogging: rtwdemo_capi_data .h中的函数原型*/ {capi_TerminateLogging("rtwdemo_capi_ModelLog.txt");**已完成状态/信号记录。创建rtwdemo_capi_ModelLog.txt * * \ n”);}
点击应用.
在MATLAB命令窗口中,输入
custcode
打开金宝app仿真软件编码器自定义代码库。在顶层rtwdemo_capi
模型,添加一个系统输出块。双击“系统输出”块以打开“系统输出功能自定义代码”对话框。在系统输出函数退出码字段,键入或复制并粘贴以下应用程序代码:
/* C API自定义日志功能:更新信号和状态日志缓冲区。* capi_UpdateLogging:函数原型在rtwdemo_capi_data .h */ {rtwCAPI_ModelMappingInfo *MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);capi_UpdateLogging (MMI rtmGetTPtr (rtwdemo_capi_M));}
如果你重新命名顶级模特
rtwdemo_capi
,更新名称的两个实例rtwdemo_capi_M
在应用程序代码中反映新的模型名称。点击好吧.
明确模型配置参数只生成代码.
构建模型并生成可执行程序。例如,在Windows系统上,构建生成可执行文件
rtwdemo_capi.exe
在您当前的工作文件夹中。在MATLAB命令窗口中,输入命令
rtwdemo_capi !
运行可执行文件。在执行过程中,使用C API记录信号和状态,然后写入文本文件rtwdemo_capi_ModelLog.txt
在您当前的工作文件夹中。>>rtwdemo_capi !**启动模型** **通过C API启动状态/信号记录** **记录2个信号和1个状态。在这个演示中,只记录标量命名的信号/状态** **已完成的状态/信号日志。创建rtwdemo_capi_ModelLog.txt * *
在MATLAB编辑器或其他文本编辑器中检查文本文件。下面是信号和状态日志输出的摘录。
********信号日志文件********记录的信号数量:2记录的点数(时间步数):51时间bot_sig1(参考型号)top_sig1 0 70 4 0.2 70 4 0.4 70 4 0.6 70 4 0.8 70 4 1 70 4 1.2 70 4 1.4 70 4 1.6 70 4 1.8 70 4 2 70 4…********状态日志文件********记录的状态数:1记录的点数(时间步数):51时间bot_state(参考模型)0 0 0.2 70 0.4 35 0.6 52.5 0.8 43.75 1 48.13 1.2 45.94 1.4 47.03 1.6 46.48 1.8 46.76 2 46.62…