文档

在生成代码中表示子系统和变量模型

所需产品:下载188bet金宝搏金宝app®,嵌入式编码器®金宝app仿真软件编码器™

使用Simu金宝applink,您可以创建基于模块化设计平台的模型,该平台包含固定的公共结构和有限的可变组件集。可变性帮助您开发具有可变组件的单一、固定的主设计。有关更多信息,请参见什么是变量?什么时候使用(金宝app模型)。当你在生成的代码中实现变量时,你可以:

  • 重用从一组应用程序模型生成的代码,这些应用程序模型共享功能,但有微小的变化。

  • 将生成的代码与激活代码中的一个变体的第三方共享。

  • 验证模型支持的变量,然后为金宝app特定的应用程序选择激活一个变量,而不重新生成和重新验证代码。

  • 当一个活动的变量不存在时,为被选中的默认变量生成代码。

使用嵌入式编码器,您可以从包含一个或多个变量选择的Simulink模型生成代码。金宝app生成的代码包含控制每个变量选择的激活的预处理器条件。

这个例子展示了如何在Simulink模型中表示变量选择,然后准备模型,以便在生成的代码中表示这些变量选择。金宝app

步骤1:在金宝app

变量选择是模型中一个组件的两个或多个配置。本示例使用该模型rtwdemo_preprocessor_subsys说明如何在内部表示变量选择不同的子系统块。有关表示变量选择的其他方法,请参见在Simulink中表示变量的选项金宝app(金宝app模型)。

  1. 打开模型rtwdemo_preprocessor_subsys

    open_system(“rtwdemo_preprocessor_subsys”)

    该模型包含两个不同的子系统块:LeftController而且RightController

    请注意

    你只能添加轮廓尺寸外港子系统,模型块中的不同的子系统块。

  2. 打开LeftController块。

    LeftController块用作变量选择的容器。它包含两个用子系统非线性而且线性.非线性控制器子系统实现滞后,而线性控制器子系统作为简单的低通滤波器。

    子系统块的导入和输出数量与包含的相同不同的子系统块。

    不同的选择可以有不同数量的导入和输出。看到映射变量选择的导入和输出端口(金宝app模型)。

  3. 打开非线性块。

    非线性块表示在满足条件时Simulink激活的一个变量选择。金宝app的线性Block表示另一种变体选择。

    提示

    当您在原型化不同的选择时,您可以创建空的子系统对象中没有输入或输出的块不同的子系统块。空子系统重新创建了该子系统不活动的情况,而不需要对变量选择进行完全建模。

步骤2:指定控制变量选择的条件

中表示的每个变量选择,可以通过构造称为变量控件的条件表达式在变量选择之间切换不同的子系统块。变体控件确定哪个变体选择是活动的,更改变体控件的值将导致活动的变体选择切换。

变量控件是一个布尔表达式,当它计算为时激活特定的变量选择真正的

有关更多信息,请参见变量控制介绍(金宝app模型)。

  1. 右键单击LeftController阻止并选择块参数(子系统)

    条件列显示时的布尔表达式真正的激活每个变量的选择。在本例中,这些条件是使用金宝app仿真软件。变体对象线性而且非线性

  2. 使用这些命令指定一个变量控件金宝app仿真软件。变体对象。

    LINEAR = 金宝appSimulink.Variant;线性的。条件= 'VSSMODE==0';非线性= Simulin金宝appk.Variant;非线性。条件= 'VSSMODE==1';

    在这里,VSSMODE称为变量控制变量,可以用指定变量控件的方法(金宝app模型)。

  3. 定义变量控制变量VSSMODE

    你可以定义VSSMODE作为标量变量或作为金宝app仿真软件。参数对象。除了启用参数值的规范外,金宝app仿真软件。参数对象允许您指定生成代码所需的其他属性,例如数据类型。

    vsmode = S金宝appimulink.Parameter;VSSMODE。值= 1;VSSMODE。DataType = 'int32';vsmode . coderinfo . storageclass = '自定义';VSSMODE.CoderInfo.CustomStorageClass = ' importteddefine ';VSSMODE.CoderInfo.CustomAttributes.HeaderFile = ' rtwdemo_imported宏.h';

    变量控制变量定义为金宝app仿真软件。参数对象可以具有这些存储类中的一个。

    • 定义ImportedDefine指定头文件

    • CompilerFlag

    • SystemConstant (AUTOSAR)

    • 将数据定义为宏的自定义存储类

    还可以将标量变量控制变量转换为金宝app仿真软件。参数对象。看到转换变量控制变量到Simulink。金宝app参数对象(金宝app模型)。

步骤3:配置生成预处理条件的模型

为每个变量选择生成的代码都包含在C预处理器条件中#如果其他## elif,# endif.因此,在编译时选择活动变量,预处理器条件确定要执行代码的哪部分。

  1. 建模页签,单击金宝app模型设置

  2. 选择代码生成窗格,并设置系统目标文件ert.tlc

  3. 报告窗格中,选择创建代码生成报告

  4. 在“配置参数”对话框中,不勾选忽略自定义存储类并点击应用

  5. 在模型中,右键单击LeftController阻止并选择块参数(子系统)

  6. 选择选项在更新图表期间分析所有选择并生成预处理器条件

    当您选择此选项时,Simulink将在更新图或模拟期间分析金宝app所有的变量选择。该分析提供了所有变量选择的代码生成准备的早期验证。

  7. 构建模型。

步骤4:检查生成的代码

代码生成报告包含一个部分,专门用于具有由预处理器条件控制的变量的子系统。

  1. C代码选项卡,选择开放的报告

  2. 选择代码变体报告从左边开始。

    在此示例中,生成的代码包含对金宝app仿真软件。变体对象线性而且非线性.代码还包括与这些变量对应的宏的定义。的定义取决于的值VSSMODE,它在外部头文件中提供rtwdemo_importedmacros.h.主动变量通过使用预处理器条件来确定(#如果)在宏(#定义线性而且非线性

  3. 选择rtwdemo_preprocessor_subsys_types.h从左边排起。

    该文件包含宏的定义线性而且非线性

    #ifndef LINEAR #定义LINEAR (VSSMODE == 0) #endif #ifndef非线性#定义非线性(VSSMODE == 1) #endif

  4. 选择rtwdemo_preprocessor_subsys.c从左边排起。

    在这个文件中,对每个变量的步骤和初始化函数的调用是有条件编译的。

    /*原子子系统的输出:'/LeftController' */ #if LINEAR /*原子系统的输出和更新:'/ LINEAR ' */…#elif非线性/*原子系统的输出和更新:'/非线性' */…# endif

限制

  • 生成代码时不同的子系统块,块不能有:

    • 质量矩阵

    • 函数调用端口

    • 输出与恒定的采样时间

    • Simscape™块

  • 每个活动子子系统的端口号和名称必须属于父Variant子系统块的端口号和名称的一个子集。

相关的例子

更多关于