主要内容

生成代码中的数据结构

代码生成器在数据结构中组织模型使用的数据。对于每个模型,代码生成器将数据(如信号和状态)存储在全局结构中,也称为标准数据结构。使用这些数据结构来访问生成代码中的数据。

实时模型(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派生的系统目标文件)

实时模型的数据结构定义在cmain.cpp当您构建模型时生成的文件。对于ERT模型,如果您清除模型配置参数生成一个示例主程序(嵌入式编码)rtmodel.h文件生成。的rtmodel.h文件包含# include的指令要求rt_main.crt_cppclass_main.cpp静态主程序模块。的rt_main.crt_cppclass_main.cpp包括rtmodel.h访问特定于模型的数据结构和入口点,因为在代码生成时没有创建静态主程序模块。

代码生成器提供了一组宏来访问rtModel数据结构。这些宏类似于ssSetxxx而且ssGetxxxs函数用来访问的宏SimStruct数据,包括由代码生成器编译的非内联s函数。

使用宏集rtmGetxxx而且rtmSetxxx访问实时模型数据结构。的代码中使用这些宏cmain.cpp模块的外部代码。如果您正在定制cmain.cpp(静态文件或生成文件),使用rtmGetxxx而且rtmSetxxx而不是ssSetxxx而且ssGetxxx宏。

的使用rtmGetxxx而且rtmSetxxx的宏是相同的ssSetxxx而且ssGetxxx版本,除了你替换SimStruct年代由实时模型数据结构rtM.此表列出了rtmGetxxx而且rtmSetxxx中的宏rt_main.c而且rt_main.cpp

用于访问实时模型数据结构的宏

rtm宏观语法

描述

rtmGetdX (rtm)

求块连续状态的导数

rtmGetOffsetTimePtr (RT_MDL rtM)

返回指向存储与rtM相关的模型的样本时间偏移量的向量的指针

rtmGetNumSampleTimes (RT_MDL rtM)

获取一个块的采样次数

rtmGetPerTaskSampleHitsPtr (RT_MDL)

返回一个指向NumSampleTime×NumSampleTime矩阵

rtmGetRTWExtModeInfo (RT_MDL rtM)

返回模型的外部模式信息数据结构(仅由代码生成器用于外部模式)

rtmGetRTWLogInfo (RT_MDL)

返回代码生成器日志记录使用的数据结构(仅由代码生成器使用)

rtmGetRTWRTModelMethodsInfo (RT_MDL)

返回实时模型方法信息的数据结构(仅供代码生成器使用)

rtmGetRTWSolverInfo (RT_MDL)

返回包含模型求解器信息的数据结构(仅由代码生成器使用)

rtmGetSampleHitPtr (RT_MDL)

返回一个指向Sample Hit标记向量的指针

rtmGetSampleTime(RT_MDL rtM, int TID)

获取任务样本时间

rtmGetSampleTimePtr (RT_MDL rtM)

获取指向任务采样时间的指针

rtmGetSampleTimeTaskIDPtr (RT_MDL rtM)

获取指向任务ID的指针

rtmGetSimTimeStep (RT_MDL)

返回模拟步骤类型ID (MINOR_TIME_STEPMAJOR_TIME_STEP

rtmGetStepSize (RT_MDL)

返回模型的基本步长

rtmGetT (RT_MDL t)

获取当前模拟时间

rtmSetT (RT_MDL t)

设置下一个样本命中的时间

rtmGetTaskTime (RT_MDL tid)

获取当前任务的当前时间

rtmGetTFinal (RT_MDL)

获取模拟停止时间

rtmSetTFinal (RT_MDL finalT)

设置仿真停止时间

rtmGetTimingData (RT_MDL)

返回模型的计时引擎使用的数据结构(仅由代码生成器使用)

rtmGetTPtr (RT_MDL)

返回指向当前时间的指针

rtmGetTStart (RT_MDL)

获取模拟开始时间

rtmIsContinuousTask (rtm)

确定任务是否是连续的

rtmIsMajorTimeStep (rtm)

确定模拟是否处于主要步骤中

rtmIsSampleHit (RT_MDL tid)

确定是否命中了采样时间

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宏和函数

相关的话题

Baidu
map