生成代码中的数据结构
代码生成器在数据结构中组织模型使用的数据。对于每个模型,代码生成器以全局结构(也称为标准数据结构)存储数据,例如信号和状态。使用这些数据结构访问生成代码中的数据。
实时模型(rtModel
)数据结构是一个顶级数据结构,它包含特定于实例的数据,由模型用于可重用的函数。代码生成器仅将此数据结构用于多实例代码生成。
标准数据结构
在模型中,根级的import和Outport块表示块算法的主要输入和输出。默认情况下,代码生成器将这些块聚合到存储输入和输出数据的标准结构中。
信号线、块参数、状态和其他模型数据作为标准结构的字段出现在生成的代码中。有关一般信息,请参见生成的代码如何存储内部信号,状态和参数数据.
该表显示了生成代码中的一些常见数据结构。在从模型生成的代码中,结构类型的名称和结构变量(如果适用的话)取决于模型设置。类的短名称,无论设置如何,代码中结构类型的名称都包含结构类型的简称列。
为模型生成的数据结构
结构类型的简称 | 用结构表示的数据 |
---|---|
ExtU |
来自根的数据轮廓尺寸块 |
ExtY |
来自根的数据外港块 |
B |
块输出信号 |
ConstB |
块具有常量值的输出 |
P |
块的参数 |
ConstP |
常数参数 |
DW |
离散块状态 |
XDis |
已启用的子系统的状态 |
InstP |
参数的参数 |
SharedDSM |
共享本地数据存储 |
你可以使用以下方法来排除出现在这些结构中的数据:
直接应用存储类。例如,您可以使用存储类将信号、可调参数和状态表示为单独的全局变量。有关更多信息,请参见模型界面元素的C代码生成配置.
配置参数,如优化窗格中的配置参数。您可以调整这些配置参数来控制数据的默认表示形式。有关更多信息,请参见模型配置参数:代码生成优化.
实时模型数据结构
要访问s函数模拟数据结构的字段(SimStruct
)、Simul万博1manbetxink®软件提供了一组功能。代码生成器替换了SimStruct
通过优化的实时模型(rtModel
)数据结构。
代码生成使用GRT和ERT系统目标文件使用实时模型数据结构(rtModel)
.此结构以比仿真结构更紧凑的形式封装特定于模型的信息SimStruct
.根据模型的不同,特定于模型的信息包括数据,例如可重用函数的内部数据和错误状态。
当你设置代码接口打包来可重用的功能
,代码生成器将模型数据(如块I/O、Dwork和参数)打包到实时模型数据结构中。代码生成器通过引用生成的模型入口点函数来传递实时模型结构。如果你设置传递根级I/O为来部分模型数据结构
,代码生成器将根级模型输入和输出打包到实时模型数据结构中。
生成的代码的有效功能依赖于生成rtModel
而不是SimStruct
,包括:
整数绝对和流逝计时服务
用于异步任务的独立计时器
生成改进的C API代码,用于信号、状态和参数监控
修剪数据结构以最小化其大小(仅限ert派生的系统目标文件)
实时模型数据结构定义在c
或main.cpp
在构建模型时生成的文件。对于ERT模型,如果您清除模型配置参数生成一个示例主程序,rtmodel.h
生成文件。的rtmodel.h
文件包含# include
所要求的指令rt_main.c
或rt_cppclass_main.cpp
静态主程序模块。的rt_main.c
或rt_cppclass_main.cpp
包括rtmodel.h
访问特定于模型的数据结构和入口点,因为在代码生成时没有创建静态主程序模块。
代码生成器提供了一组宏,用于访问rtModel
数据结构。这些宏类似于ssSetxxx
而且ssGetxxx
s函数用来访问的宏SimStruct
数据,包括由代码生成器编译的非内联s函数。
使用宏集rtmGetxxx
而且rtmSetxxx
访问实时模型数据结构。这些宏用于生成的代码以及c
或main.cpp
模块的外部代码。如果您正在自定义c
或main.cpp
(静态文件或生成文件),使用rtmGetxxx
而且rtmSetxxx
而不是ssSetxxx
而且ssGetxxx
宏。
的使用rtmGetxxx
而且rtmSetxxx
宏与ssSetxxx
而且ssGetxxx
版本,除了要替换的版本SimStruct年代
采用实时模型数据结构rtM
.下表列出了rtmGetxxx
而且rtmSetxxx
中的宏rt_main.c
而且rt_main.cpp
.
访问实时模型数据结构的宏
rtm宏语法 |
描述 |
---|---|
|
求块连续状态的导数 |
|
返回指向向量的指针,该向量存储与rtM相关的模型的采样时间偏移量 |
|
获取一个块的采样次数 |
|
返回一个指向 |
|
返回模型的外部模式信息数据结构(代码生成器仅用于外部模式) |
|
返回代码生成器日志记录使用的数据结构(仅供代码生成器使用) |
|
返回实时模型方法信息的数据结构(仅供代码生成器使用) |
|
返回包含模型求解器信息的数据结构(仅供代码生成器使用) |
|
返回一个指向Sample Hit标志向量的指针 |
|
获取任务示例时间 |
|
获取指向任务示例时间的指针 |
|
获取指向任务ID的指针 |
|
返回模拟步骤类型ID ( |
|
返回模型的基本步长 |
|
获取当前模拟时间 |
|
设置下一次采样命中的时间 |
|
获取当前任务的当前时间 |
|
获取模拟停止时间 |
|
设置模拟停止时间 |
|
返回模型的计时引擎使用的数据结构(仅由代码生成器使用) |
|
返回一个指向当前时间的指针 |
|
获取模拟开始时间 |
|
确定任务是否连续 |
|
确定模拟是否处于主要步骤 |
|
判断采样时间是否命中 |
rtmGetErrorStatus (rtm) |
获取当前错误状态 |
val rtmSetErrorStatus (rtm) |
设置当前错误状态 |
rtmGetErrorStatusPointer (rtm) |
返回一个指向当前错误状态的指针 |
rtmGetStopRequested (rtm) |
返回是否请求停止 |
rtmGetBlockIO (rtm) |
获取块I/O数据结构 |
val rtmSetBlockIO (rtm) |
设置块I/O数据结构 |
rtmGetContStates (rtm) |
获得连续状态数据结构 |
val rtmSetContStates (rtm) |
设置连续状态数据结构 |
rtmGetDefaultParam (rtm) |
获取默认参数数据结构 |
val rtmSetDefaultParam (rtm) |
设置默认参数数据结构 |
rtmGetPrevZCSigState (rtm) |
获得先前过零信号状态数据结构 |
val rtmSetPrevZCSigState (rtm) |
设置前面过零信号状态数据结构 |
rtmGetRootDWork (rtm) |
获取DWork数据结构 |
val rtmSetRootDWork (rtm) |
设置DWork数据结构 |
rtmGetU (rtm) |
获取根输入数据结构(当根输入作为模型数据结构的一部分传递时) |
val rtmSetU (rtm) |
设置根输入数据结构(当根输入作为模型数据结构的一部分传递时) |
rtmGetY (rtm) |
获取根输出数据结构(当根输出作为模型数据结构的一部分传递时) |
val rtmSetY (rtm) |
设置根输出数据结构(当根输出作为模型数据结构的一部分传递时) |
有关更多信息,请参见SimStruct宏和函数按用法列出.