文档

使用C API访问模型信号和状态

这个例子可以帮助你开始编写应用代码与模型信号和状态进行交互。开始编写应用程序代码与模型参数进行交互,看使用C API访问模型参数

C API为您提供了编写自己的应用程序代码来与模型信号、状态、根级输入/输出和参数交互的灵活性。控件编译基于目标的应用程序代码金宝app®编码器™生成的代码进入可执行文件。中基于目标的应用程序代码访问C API结构数组模型_capi.c(或. cpp).您可能有基于主机的代码与基于目标的应用程序代码交互。或者,您可能有其他基于目标的代码与基于目标的应用程序代码交互。的文件rtw_modelmap.hrtw_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.hrtwdemo_capi_datalog.c.这些文件位于matlabroot/工具箱/ rtw / rtwdemos开放).

    • capi_StartLogging初始化信号和状态记录。

    • capi_UpdateLogging记录在每个时间步的信号和状态值。

    • capi_TerminateLogging终止信号和状态日志记录,并将记录的值写入文本文件。

    你可以使用以下方法将这些自定义函数集成到生成的代码中:

    • 自定义代码的型号配置参数对话框。

    • 自定义代码库块

    • TLC自定义代码函数

    本教程使用自定义代码模型配置参数对话框,并从自定义代码库中的系统输出块插入调用的自定义函数成窗格模型.c(或. cpp), 如下:

    • capi_StartLogging被称为在模型_initialize函数。

    • capi_UpdateLogging被称为在模型_步函数。

    • capi_TerminateLogging被称为在模型_terminate函数。

生成的代码摘录如下模型.c(重新排列,以反映它们的执行顺序)显示功能的接口是如何使用的。

无效rtwdemo_capi_initialize(无效){... / *用户代码(初始化函数体)* / / * C API自定义日志记录功能:启动信号,并通过C API状态记录。*MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi); / /在rtwdemo_capi_data .h的函数原型printf("**通过C API开始的状态/信号记录**\n");capi_StartLogging (MMI MAX_DATA_POINTS);} ...} ... / *型号阶跃函数* /空rtwdemo_capi_step(无效){... / *用户代码(输出功能拖车)* / / *系统 '<根>' * / / * C API自定义记录功能:更新信号和状态信息的日志缓冲区。* capi_UpdateLogging:函数原型在rtwdemo_capi_datalog.h * / {rtwCAPI_ModelMappingInfo * MMI =(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);capi_UpdateLogging(MMI,rtmGetTPtr(rtwdemo_capi_M));} ...} ... / *型号终止功能* /无效rtwdemo_capi_terminate(无效){/ *用户代码(终止函数体)* / / * C API自定义日志记录功能:转储信号和三态缓冲器到一个文本文件中。* capi_TerminateLogging: rtwdemo_capi_datalog.h函数原型 printf("** Finished state/signal logging. Created rtwdemo_capi_ModelLog.txt **\n"); } }

下面的过程说明了如何使用C API宏和功能接口来记录全局信号,并在状态的模型到一个文本文件中。

  1. 在MATLAB®命令行输入rtwdemo_capi打开示例模型。

  2. 保存顶部模型rtwdemo_capi参考模型rtwdemo_capi_bot相同的写入工作文件夹中。

  3. 打开配置参数对话框。

  4. 如果您得到授权的嵌入式编码®软件要使用ert.tlc系统目标文件,而不是默认的grt.tlc,更改模型配置参数的设置系统目标文件.确保你也选择了ert.tlc为参考模型rtwdemo_capi_bot

  5. 对于顶级车型,证实了这些模型配置参数设置:

    1. 选择参数产生信号C API,为状态生成C API, 和生成参数C API

    2. 如果你正在使用ert.tlc系统目标文件,选择金宝app支持复数

    3. 选择MAT-file日志

    4. 点击应用

    5. 更新参考模型中的配置参数设置,rtwdemo_capi_bot,以配合您在顶级车型所做的更改。

  6. 使用自定义代码窗格以将自定义应用程序代码嵌入生成的代码中。选择自定义代码窗格,然后单击包括目录.的包括目录显示输入栏。

  7. 包括目录字段,类型matlabroot/工具箱/ rtw / rtwdemos, 在哪里matlabroot代表你的MATLAB安装文件夹的根目录。(如果您指定一个Windows®包含空格的路径,将双引号内的文本。)

  8. 额外的构建信息subpane,点击源文件和类型rtwdemo_capi_datalog.c

  9. 在生成的代码中包含定制的C代码subpane,点击源文件,然后键入或复制并粘贴以下包含语句:

    # include“rtwdemo_capi_datalog.h”
  10. 初始化函数字段中键入或复制和粘贴以下的应用程序代码:

    /* C API自定义日志功能:通过C API开始信号和状态日志。*MMI = &(rtmGetDataMapInfo(rtwdemo_capi_M).mmi); / /在rtwdemo_capi_data .h的函数原型printf("**通过C API开始的状态/信号记录**\n");capi_StartLogging (MMI MAX_DATA_POINTS);}

    请注意

    如果你重命名顶部模型rtwdemo_capi,更新名称rtwdemo_capi_M在应用程序代码,以反映新的型号名称。

  11. 终止函数字段中键入或复制和粘贴以下的应用程序代码:

    /* C API自定义日志功能:转储信号和状态缓冲区到一个文本文件。* capi_TerminateLogging: rtwdemo_capi_datalog.h函数原型的printf( “**成品状态/信号记录创建rtwdemo_capi_ModelLog.txt ** \ n”);}

    点击应用

  12. 在MATLAB命令窗口中,输入custcode打开金宝appSimulink的编码器自定义代码库。在最高级的rtwdemo_capi模型,添加一个System Outputs块。

  13. 双击“系统输出”块打开“系统输出函数自定义代码”对话框。在系统输出的函数退出代码字段中键入或复制和粘贴以下的应用程序代码:

    / * C API自定义日志记录功能:更新信号和状态信息的日志缓冲区。* capi_UpdateLogging:函数原型在rtwdemo_capi_datalog.h * / {rtwCAPI_ModelMappingInfo * MMI =(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);capi_UpdateLogging(MMI,rtmGetTPtr(rtwdemo_capi_M));}

    如果你重命名顶部模型rtwdemo_capi,更新名称的两个实例rtwdemo_capi_M在应用程序代码,以反映新的型号名称。

    点击好吧

  14. 清除模型配置参数只生成代码

    构建模型并生成可执行程序。例如,在Windows系统上,构建生成可执行文件rtwdemo_capi.exe在当前工作文件夹中。

  15. 在MATLAB命令窗口,输入命令rtwdemo_capi !运行可执行文件。在执行期间,使用C API记录信号和状态,然后写入文本文件rtwdemo_capi_ModelLog.txt在当前工作文件夹中。

    >>rtwdemo_capi !**启动模型** **启动状态/信号记录通过C API ** **记录2个信号(s)和1个状态(s)。在这个演示中,只有标量命名的信号/状态被记录** **完成的状态/信号日志。创建rtwdemo_capi_ModelLog.txt * *
  16. 在MATLAB编辑器或其他文本编辑器中检查文本文件。下面是信号和状态日志输出的摘录。

    * * * * * * * *信号日志文件  ******** 信号记录数:2点数量(时间步)记录:51次bot_sig1(参考模型)top_sig1 0 70 4 0.2 70 0.4 70 0.6 70 0.8 70 4 70 70 70 1.2 1.4 1.6 1.8 70 70 4 70…******** State Log File ******** Number of States Logged: 1 points (time steps) Logged: 51 time bot_state (Referenced Model) 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…

相关的话题