主要内容

代表生成代码中的子系统和变体模型

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

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

  • 从共享具有轻微变体的一组应用程序模型中重用生成的代码。

  • 与第三方共享生成的代码,以激活代码中的变体之一。

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

  • 为不存在活动变体时选择的默认变体生成代码。

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

此示例显示如何在Simulink模型中表示变体选项,然后准备模型,以便在生成的代码中表示这些变体选择。金宝app

第1步:表示变体选择金宝app

变体选项是模型中的两个或多个组件配置。此示例使用该模型RTWDEMO_PREPROCESSOR_SUBSYS.来说明如何表示内部的变量选择不同的子系统块。有关代表变体选择的其他方式,请参阅比较变量块

  1. 打开模型RTWDEMO_PREPROCESSOR_SUBSYS.

    Open_System('RTWDEMO_PREPROCESSOR_SUBSYS')

    该模型包含两个不同的子系统块:LeftControllerRightController

    笔记

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

  2. 打开LeftController块。

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

    子系统块具有与包含相同数量的Inports和Outports不同的子系统块。

    变体选择可以具有不同数量的Inports和Outports。看映射变体子系统中变体选择的导入和输出端口

  3. 打开非线性块。

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

    提示

    当您创建变量选择的原型时,您可以创建空的子系统块中没有输入或输出不同的子系统块。空子系统重新创建该子系统在不需要完全建模变体选择的情况下的情况。

第2步:指定控制变体选择选择的条件

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

变体控制是一个布尔表达式,它在评估时激活特定的变体选择真正的

有关更多信息,请参见变型控制简介

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

    健康)状况列显示布尔表达式真正的激活每个变量选择。在本例中,使用金宝app仿真软件。变体对象线性非线性

  2. 使用这些命令来指定一个变体控件金宝app仿真软件。变体目的。

    线性= Simul金宝appink.Variant;线性的。条件=“VSSMODE = = 0”;非线性= Simulin金宝appk.Variant;非线性。健康)状况= 'VSSMODE==1';

    这里,vssmode.称为可变控制变量,可按指定变型控制变量的方法

  3. 定义变量控制变量vssmode.

    您可以定义vssmode.作为标量变量或作为一个标量金宝appSimulink.Parameter.Parameter.目的。除了启用参数值的规范,金宝appSimulink.Parameter.Parameter.对象允许您指定生成代码所需的其他属性,如数据类型。

    VSSMODE = 金宝appSimulink.Parameter;VSSMODE。值= 1;VSSMODE。数据类型=“int32”;VSSMODE.CoderInfo.StorageClass =“定制”;VSSMODE.CoderInfo.CustomStorageClass =“ImportedDefine”;VSSMODE.CoderInfo.CustomAttributes.HeaderFile =“rtwdemo_importedmacros.h”;

    变体控制变量定义为金宝appSimulink.Parameter.Parameter.对象可以有这些存储类之一。

    • 定义ImportedDefine指定头文件

    • CompilerFlag

    • SystemConstant(Autosar)

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

    您还可以将标量变量控制变量转换为a金宝appSimulink.Parameter.Parameter.目的。看将变体控制变量转换为Simulink.Parameter对象金宝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线性#定义线性(VSSMODE = = 0) # endif ifndef非线性#定义非线性(VSSMODE = = 1) # endif

  4. 选择rtwdemo_preprocessor_subsys.c左侧文件。

    在此文件中,有条件地编译对每个变体的步骤和初始化功能的调用。

    / *原子子系统的输出:' / letcontroller'* / #if线性/ *原子系统的输出和更新:' / linear'* / ... #elif非线性/ *原子的输出和更新系统:' / nonlinear'* / ... #endif

限制

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

    • 大规模基质

    • 函数调用端口

    • 输出具有恒定的采样时间

    • Simscape™块

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

相关例子

更多关于