主要内容

生成代码中的数据结构

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

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

实时模型数据结构定义在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标志向量的指针

(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宏和函数按用法列出

相关的话题