生成代码中的数据结构
代码生成器在数据结构中组织模型使用的数据。对于每个模型,代码生成器将数据(如信号和状态)存储在全局结构中,也称为标准数据结构。使用这些数据结构来访问生成代码中的数据。
实时模型(rtModel
)数据结构是一个顶级数据结构,它包含特定于实例的数据,模型将其用于可重用的函数。代码生成器仅将此数据结构用于多实例代码生成。
标准的数据结构
在模型中,根级的import和Outport块表示块算法的主要输入和输出。默认情况下,代码生成器将这些块聚合到存储输入和输出数据的标准结构中。
信号线、块参数、状态和其他模型数据作为标准结构的字段出现在生成的代码中。有关一般信息,请参见生成的代码如何存储内部信号,状态和参数数据.
下表显示了生成代码中的一些常见数据结构。从模型生成的代码中结构类型的名称和结构变量的名称(如果适用的话)取决于模型设置。无论设置如何,代码中结构类型的名称都包含结构类型简称列。
为模型生成的数据结构
结构类型简称 | 用结构表示的数据 |
---|---|
ExtU |
数据从根轮廓尺寸块 |
ExtY |
数据从根外港块 |
B |
块输出信号 |
ConstB |
块具有恒定值的输出 |
P |
块的参数 |
ConstP |
常数参数 |
DW |
离散块的州 |
XDis |
已启用子系统的状态 |
InstP |
参数的参数 |
SharedDSM |
共享本地数据存储 |
你可以使用以下方法来排除数据出现在这些结构中:
直接应用存储类。例如,可以使用存储类将信号、可调参数和状态表示为单独的全局变量。有关更多信息,请参见模型接口元素的C代码生成配置.
配置参数,例如优化“配置参数”对话框中的。您可以调整这些配置参数以控制数据的默认表示。有关更多信息,请参见模型配置参数:代码生成优化.
实时模型数据结构
访问s函数的模拟数据结构的字段(SimStruct
),仿真软件®软件提供一系列功能。代码生成器替换了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宏和函数.