主要内容

生成代码中的数据结构

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

实时模型(rtModel)数据结构是一种顶级数据结构,它包含特定于实例的数据,模型将其用于可重用的功能。代码生成器仅使用此数据结构生成多实例代码。

标准的数据结构

在模型中,根级别的输入和输出块表示块算法的主要输入和输出。默认情况下,代码生成器将这些块聚合到存储输入和输出数据的标准结构中。

信号线、块参数、状态和其他模型数据作为标准结构的字段出现在生成的代码中。有关一般信息,请参见生成代码如何存储内部信号、状态和参数数据

该表显示了生成的代码中的一些常见数据结构。从模型生成的代码中的结构类型和结构变量(如果适用)的名称取决于模型设置。不论设置如何,代码中的结构类型的名称都包含来自结构类型的短名称列。

为模型生成的数据结构

结构类型的短名称 结构中表示的数据
埃克图

数据从根轮廓尺寸

极端的

数据从根外港

B

块输出信号

ConstB

具有常量值的块输出

P

块参数

ConstP

恒定参数

DW

离散块的州

XDis

启用子系统的状态

InstP

参数的参数

SharedDSM 共享本地数据存储

您可以使用以下方法排除这些结构中出现的数据:

  • 直接应用存储类。例如,您可以使用存储类将信号、可调参数和状态表示为单个全局变量。有关更多信息,请参阅模型接口元素的C代码生成配置

  • 配置参数,如优化“配置参数”对话框中的窗格。您可以调整这些配置参数以控制数据的默认表示形式。有关详细信息,请参阅模型配置参数:代码生成优化

实时模型数据结构

访问S函数模拟数据结构的字段(西姆斯特雷特),Simul金宝appink软件提供一组功能。代码生成器将替换西姆斯特雷特使用优化的实时模型(rtModel)数据结构。

使用GRT和ERT系统目标文件生成的代码使用实时模型数据结构(rtModel). 此结构以比仿真结构更紧凑的形式封装了特定于模型的信息西姆斯特雷特. 根据模型的不同,特定于模型的信息包括可重用函数的内部数据和错误状态等数据。

当您设置代码接口封装可重用的功能,代码生成器将模型数据(如块I/O、Dwork和参数)打包到实时模型数据结构中。代码生成器通过引用生成的模型入口点函数来传递实时模型结构。如果你设置将根级I/O传递为(嵌入式编码器)模型数据结构的一部分,代码生成器将根级模型输入和输出打包到实时模型数据结构中。

生成的代码的有效功能取决于rtModel而不是西姆斯特雷特,包括:

  • 整数绝对时间服务和经过时间服务

  • 异步任务的独立计时器

  • 生成用于信号、状态和参数监视的改进C API代码

  • 修剪数据结构以最小化其大小(仅限ert派生的系统目标文件)

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

代码生成器提供了一组用于访问rtModel数据结构。这些宏类似于ssSetxxxssGetxxxS函数用于访问的宏西姆斯特雷特数据,包括代码生成器编译的非线性s函数。

使用宏集rtmGetxxxrtmSetxxx访问实时模型数据结构。这些宏用于生成的代码以及cmain.cpp外部代码的模块。如果您正在定制cmain.cpp(无论是静态的还是生成的文件),使用rtmGetxxxrtmSetxxx而不是ssSetxxxssGetxxx宏。

使用rtmGetxxxrtmSetxxx宏与ssSetxxxssGetxxx版本,但替换的版本除外西姆斯特酒店采用实时模型数据结构rtM.此表列出了rtmGetxxxrtmSetxxx在中使用的宏rt_main.crt_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(RTU MDL)

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

rtmGetRTWSolverInfo(RTU MDL)

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

rtmGetSampleHitPtr(RT_MDL)

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

rtmGetSampleTime(RT_MDL rtM,int TID)

获取任务样本时间

rtmGetSampleTimePtr(RTU MDL rtM)

获取指向任务示例时间的指针

rtmGetSampleTimeTaskIDPtr(RTU MDL rtM)

获取任务ID的指针

rtmGetSimTimeStep (RT_MDL)

返回模拟步骤类型ID (MINOR_TIME_STEP,MAJOR_TIME_STEP)

rtmGetStepSize (RT_MDL)

返回模型的基本步长

rtmGetT (RT_MDL t)

获取当前模拟时间

rtmSetT(RT_MDL,t)

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

rtmGetTaskTime (RT_MDL tid)

获取当前任务的当前时间

RTMGETTFALL(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)

获取当前错误状态

rtm地动状态(rtm,val)

设置当前错误状态

rtmGetErrorStatusPointer (rtm)

返回一个指向当前错误状态的指针

rtmGetStopRequested (rtm)

返回是否请求停止

rtmGetBlockIO(rtm)

获取块I/O数据结构

rtmSetBlockIO(rtm,val)

设置块I/O数据结构

RTMGetContState(rtm)

获取连续状态数据结构

val rtmSetContStates (rtm)

设置连续状态数据结构

rtmGetDefaultParam (rtm)

获取默认参数数据结构

rtmSetDefaultParam(rtm,val)

设置默认参数数据结构

rtmGetPrevZCSigState (rtm)

获取前一个过零信号状态数据结构

val rtmSetPrevZCSigState (rtm)

设置前一个过零信号状态数据结构

rtmGetRootDWork (rtm)

获取DWork数据结构

RTMSTROOTDWORK(rtm,val)

设置DWork数据结构

rtmGetU(rtm)

获取根输入数据结构(当根输入作为模型数据结构的一部分传递时)

val rtmSetU (rtm)

设置根输入数据结构(当根输入作为模型数据结构的一部分传递时)

rtmGetY(rtm)

获取根输出数据结构(当根输出作为模型数据结构的一部分传递时)

rtmSetY(rtm,val)

设置根输出数据结构(当根输出作为模型数据结构的一部分传递时)

有关更多信息,请参见按用途列出的SimStruct宏和函数

相关的话题