主要内容

变型控制简介

Simulink的组件金宝app®包含变体的模型将根据您所选择的变体被激活或取消激活。

模型中的每个变量选择都与版本控制.变体控制决定哪个变体选择是主动的。通过更改变量控件的值,可以切换活动变量选择。

虽然每个变体选择与变体控制相关联,但只有一个变体控制可以评估为真的.当变量控制计算为真的,S金宝appimulink激活与该变体控制相对应的变体选择。

您可以指定类型的变体控件表达式标签或者sim codegen切换用于建模变体块和变体参数。

变量控制方式

您可以指定变量控制方式参数为:

  • 表达式——在表达式模式,Sim金宝appulink根据变体条件的评估选择主动变体。当条件表达式的计算结果为真的时,相应的变量选择变得活跃。当条件表达式的计算结果为时,相应的变量选择变为非活动的。看到在变量块和变量参数中使用条件表达式切换选择

  • 标签——在标签模式下,Si金宝appmulink根据变量的名称选择活动变量。变体控件是一个字符串,不需要您在任何工作区中创建变量。看到使用变量块中的标签在选择之间进行切换

  • sim codegen切换-在不创建任何工作区变量的情况下,在模拟和代码生成工作流的变量之间自动切换,请使用sim codegen切换模式。当您模拟模型时,Simulink会自动选择金宝appsim卡分支作为主动选择。类似地,当您进行软件在环(SIL)或处理器在环(PIL)模拟、生成代码或使用外部模式时,Simulink自动选择金宝appcodegen分支。看到在变体块中的仿真和代码生成工作流的选择之间切换

在变量块和变量参数中使用条件表达式切换选择

表达式模式,Sim金宝appulink根据变体条件的评估选择主动变体。当条件表达式的计算结果为真的时,相应的变量选择变得活跃。当条件表达式的计算结果为时,相应的变量选择变为非活动的。

你可以使用表达式变量块和变量参数中的变量控件的类型。

  • 在变量块中指定变量条件表达式:

    • 右键单击变体块上的徽章,选择块参数,然后在。中指定变量条件表达式变异控制表达式块参数对话框的参数。

      变体控制模式:表达式

    • 以编程方式,通过使用以下命令:

      set_param('set_param('choiceName','VariantControl','= = 1')
      在哪里choiceName是完全路径的变体选择,和= = 1是与变体选择相关的表达式。

  • 要在变型参数中指定变体条件表达式,请使用金宝appsimulink.variantvariable.对象。更多信息请参见创建一个简单的变体参数模型

变体控制可以是:

在这里,一个B操作数被称为变体控制变量+==, 和& &是条件表达式中的操作符。条件表达式可以包含一个或多个这样的变量控制变量和操作符。有关变体控制变量支持的类型和存储位置的金宝app信息,请参见变量条件表达式中的变量控制变量(操作数)的类型变量条件表达式中的变量控制变量(操作数)的存储位置.有关操作符的信息,请参见变量条件表达式中的操作符

请注意

您可以从包含Variant Bolt的模型模拟和生成代码变量控制方式设置为表达式模式。

变量条件表达式中的变量控制变量(操作数)的类型

表达式模式下,您可以将变体控制变量指定为这些类型中的任何一种—从创建原型时使用的选项到从模型生成代码所需的选项。

规范 目的 例子
金宝appsimulink.variantControl. 关联一个不同的激活时间 = = 1, 在哪里一个是A.金宝appsimulink.variantControl.对象。看到变量控制变量在变量块中关联激活时间的对象变参数快速成型的标量值
标量变量 快速原型

= = 1, 在哪里一个是一个标量变量。看到变量块中快速原型的标量变量

请注意

变量参数中不支持标量变量作为变量控制变量。金宝app

金宝app仿真软件。参数对象 为代码生成生成预处理器条件 Vssmode = = 1, 在哪里Vssmode是A.金宝app仿真软件。参数对象。看到的,金宝app仿真软件。参数变量块中用于代码生成的整数对象金宝appSimulink.Parameter对象用于代码生成变体参数
金宝app仿真软件枚举 提高代码可读性,因为条件值表示为有意义的名称而不是整数 级别==级别.Advanced., 在哪里等级是基于整数的枚举类和先进的是枚举值。看到的,枚举类型提高变体块的代码可读性枚举类型以提高变体参数的代码可读性
金宝appsimulink.variant.对象 重用条件变体 LinearController = = 1, 在哪里LinearController是A.金宝appsimulink.variant.封装条件表达式的对象Fuel == 2 && EMIS == 1.看到的,金宝appsimulink.variant.变体块中的变体条件重用对象金宝appsimulink.variant.Objects for Variant Condition Reuse of Variant Parameters

变量条件表达式中的变量控制变量(操作数)的存储位置

您可以根据您的要求定义不同存储位置中的变体控制变量。

请注意

变量块或变量参数中的所有变量控制变量必须来自相同的存储位置。

定义变量控制变量:

金宝app支持的变量控制变量类型(参见变量条件表达式中的变量控制变量(操作数)的类型 的更多信息
基础工作区 在试验临时模型时存储变量 标量变量,金宝appsimulink.variantControl.金宝appsimulink.variant.金宝app仿真软件。参数,并枚举类型 临时数据:基础工作区
面具的工作区 永久存储块掩码的本地数据。 标量变量,金宝appsimulink.variantControl.,并枚举类型 使用掩码或模型工作空间控制Variant块的主动变体选择的方法
模型工作区 永久存储模型本地的数据 标量变量,金宝appsimulink.variantControl.,并枚举类型 使用掩码或模型工作空间控制Variant块的主动变体选择的方法
数据词典 永久存储全局数据,在模型之间共享数据,并跟踪对数据的更改。 标量变量,金宝appsimulink.variantControl.金宝appsimulink.variant.金宝app仿真软件。参数,并枚举类型 什么是数据字典?

有关每个存储位置的功能和优势,请参见确定用于存储Simulink模型的变量和对象的位置金宝app

变量条件表达式中的操作符

变量条件表达式可以包含MATLAB®操作员,提供了表达式对布尔值的评估。

金宝app变体块中支持的操作符

金宝app变体形参中支持的操作符

评估不同变体激活时间的变体条件表达

表达式模式支持金宝app更新图更新图表,分析所有的选择代码编译, 和启动激活时间。有关变异激活时间的更多信息,请参见在模拟和代码生成工作流程的不同阶段激活变体

使用变异条件传播自动识别变异区域

金宝appSimulink通过过程来确定在仿真过程中活跃的模型组件变异条件下传播.该过程评估变体块上指定的变体控制,并自动将变体条件传播到连接块。变体条件可以通过信号线,总线和函数调用传播,以在模型中到达其他块。该过程取消激活与非活动选择相关的模型组件,它们不参与模拟。您可以停止条件传播以定义模型中的变体区域。

您可以使用变体条件图例来可视化传播的激活每个变体选择的变体条件。金宝app如果模型组件上有变量条件,Simulink会对它们进行注释,并且变量条件图例会显示与每个注释相对应的条件。

有关更多信息,请参见变条件传播概述

使用变量块中的标签在选择之间进行切换

标签模式下,Si金宝appmulink根据变量的名称选择活动变量。变型控制是字符串并且不需要您在任何工作空间中创建变量。

要指定变量块中的选项的标签,右键单击变量块上的徽章,选择块参数,然后指定标签变体控制标签块参数对话框的参数。

可变控制方式:标签

请注意

你不能将标签带有变量参数的变量控制类型。

标签模式下,变量块的激活时间被设置为更新图默认情况下。换句话说,当您模拟一个模型时,Simulink在模型编译阶段确定活动选择,并仅为选择生金宝app成代码。看到的,在模拟和代码生成工作流程的不同阶段激活变体

您只能模拟包含Variant Bolt的模型变量控制方式设置为标签模式。不支持代码生成。金宝app

使用变体控制标签设置活动选择的方法

您可以遵循这些方法中的任何一种来设置活动选择标签模式:

  • 属性中为每个变量选择指定名称变体控制标签变量块对话框的参数。中列出了您指定的所有名称标签模式有效选择落下。您从列表中选择的标签将成为活动选择。

  • 右键单击变量块上的徽章并选择标签模式主动选择

  • 从使用初始化代码的Variant块的掩码工作空间。您在蒙版初始化代码中指定的活动选择覆盖了使用使用的活动选择标签模式有效选择下拉或标签模式主动选择菜单项。有关更多信息,请参见掩盖变体子系统

  • 以编程方式,通过使用以下命令:

    set_param (blockname.,“LabelModeActiveChoice”、“variantChoiceLabel')
    在哪里blockname.是变体块的名称和variantChoiceLabel是与变量选择关联的标签。

在变体块中的仿真和代码生成工作流的选择之间切换

要在不创建任何工作区变量的情况下,在模拟和代码生成工作流的选择之间自动切换,请使用sim codegen切换变量控制方式。

要为变量选择指定模拟和代码生成分支,右键单击变量块上的标记,选择块参数,然后指定(sim)(codegen)关键词在变异控制开关块参数对话框的参数。

当您模拟(正常,加速器,快速加速器)模型时,Simulink会自动选择金宝app(sim)分支作为主动选择。类似地,当您进行软件在环(SIL)、处理器在环(PIL)仿真或生成代码或使用外部模式时,Simulink自动选择金宝app(codegen)分支。代码仅为活动选择生成。生成的代码中不包含非活动选择。在此模式下,您最多可以在Variant块中只有两种选择。

变型控制方式:sim码元切换

请注意

你不能将sim codegen切换带有变量参数的变量控制类型。

sim codegen切换模式,只有更新图更新图表,分析所有的选择支持激活时间。金宝app换句话说,当您从模型中模拟或生成代码时,Simulink在模型编译阶段确定主动选择,并仅为选择生成代码。金宝app看到的,在模拟和代码生成工作流程的不同阶段激活变体

比较不同类型的变体控制模式

该表解释了不同变体控制模式的功能,以帮助您选择一种满足您的需求。

变量控制方式 能力

表达式- 金宝app Simulink根据对变体条件的评估选择主动变体。当条件表达式的计算结果为真的时,相应的变量选择变得活跃。当条件表达式的计算结果为时,相应的变量选择变为非活动的。

使用表达式模式:

标签—S金宝appimulink根据变量的名称选择活动变量。变量控件是一个字符串,不需要您在任何工作区中创建变量。

使用标签模式:

  • 只模拟一个模型。不需要从模型生成代码。

  • 控制活动选项而不创建任何工作区变量。

sim codegen切换-当你模拟(普通,加速器,快速加速器)一个模型,然后Simulink自动选择金宝appsim卡分支作为主动选择。类似地,当您进行软件在环(SIL)、处理器在环(PIL)仿真或生成代码或使用外部模式时,Simulink自动选择金宝appcodegen分支。

使用sim codegen切换切换模式:

  • 在不创建任何工作空间变量的情况下,在模拟和代码生成工作流的选择之间自动切换。

  • 仅为模型中的主动选择生成代码。

不同变型控制模式的变型激活时间

不同类型激活时间的可用性取决于类型变量控制方式你指定。不同的激活时间决定了Simulink设置激活选择的时间。金宝app变体激活时间还决定在生成的代码中包含哪些可变性。有关变异激活时间的更多信息,请参见在模拟和代码生成工作流程的不同阶段激活变体

该表解释了每种变体控制模式支持的变体激活时间。金宝app

变体激活时间
变量控制方式 更新图 更新图表,分析所有的选择 代码编译 启动
表达式
标签 x x x
sim codegen切换 x x

指定变量控制变量的方法

本节解释如何在变量条件表达式中使用不同类型的变量控制变量。

变量控制变量在变量块中关联激活时间的对象

金宝appsimulink.variantControl.对象使您可以将变体激活时间与变体控制变量相关联。你可以定义金宝appsimulink.variantControl.中列出的存储位置中的控制变量的类型变量条件表达式中的变量控制变量(操作数)的存储位置

考虑一个包含不同的子系统块有两个变体选择,线性控制器非线性控制器子系统。

  1. 的块参数对话框中不同的子系统块,指定可变控件,V = = 1V = = 2

  2. 在基础工作空间中,定义变体控制变量对象,V, 使用金宝appsimulink.variantControl.,将其值设置为1,然后模拟模型。在模拟过程中,线性控制器变体选择变为活动状态。

    v = 金宝appsimulink.variantControl(“价值”,1,激活时间,“更新图表分析所有选择”

    请注意

    变体激活时间块参数对话框中指定的ActivationTime你在金宝appsimulink.variantControl.对象。

    类似地,如果你改变的值V2,非线性控制器变体选择变为活动状态。

    V.Value = 2;

变量块中快速原型的标量变量

标量MATLAB变体控制变量允许您在仍在构建模型时快速原型变体选择。它们帮助您更多地关注建立您的变体选择,而不是开发激活这些选择的表达式。您可以在列出的存储位置中定义标量控制变量变量条件表达式中的变量控制变量(操作数)的存储位置

考虑一个包含不同的子系统块有两个变体选择,线性控制器非线性控制器子系统。

  1. 的块参数对话框中不同的子系统阻止,以最简单的形式指定变体控制作为标量变量,V = = 1V = = 2

  2. 在基本工作区中,定义一个变量控制变量,V,将其值设置为1,然后模拟模型。在模拟过程中,线性控制器变体选择变为活动状态。

    v = 1;

    类似地,如果你改变的值V2,非线性控制器变体选择变为活动状态。

    v = 2;

金宝app仿真软件。参数变量块中用于代码生成的整数对象

如果打算为包含变体选项的模型生成代码,则指定变量控制变量为金宝app仿真软件。参数对象。金宝app仿真软件。参数对象允许您指定生成代码所需的其他属性(例如数据类型)。

请注意

您可以定义类型的变体控制变量金宝app仿真软件。参数仅在基本工作空间或数据字典中。定义类型的变体控制变量金宝app仿真软件。参数在掩码或模型工作区中不受支持。金宝app有关变体控制变量的存储位置的更多信息,请参见变量条件表达式中的变量控制变量(操作数)的存储位置

金宝app仿真软件。参数结构中的对象,并且具有除金宝app仿真软件。公共汽车对象不受支持。金宝app

考虑一个包含不同的子系统块有两个变体选择,线性控制器非线性控制器子系统。

  1. 在基础工作区中,定义a金宝app仿真软件。参数目的,VssMode

    VssMode = 金宝appSimulink.Parameter;VssMode。V一个lue = 1; VssMode.DataType =“int32”;VssMode.CoderInfo.StorageClass =“自定义”;VssMode.CoderInfo.CustomStorageClass =“ImportedDefine”;VssMode.CoderInfo.CustomAttributes.HeaderFile ='rtwdemo_importedmacros.h'

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

    • 定义或者ImportedDefine指定头文件

    • CompilerFlag

    • SystemConstant (AUTOSAR)

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

    有关这些存储类的更多信息,请参阅选择存储类,用于控制生成的代码中的数据表示(金宝app仿真软件编码器)

    您还可以将标量变量控制变量转换为a金宝app仿真软件。参数对象。有关更多信息,请参见在Simulink中转换变量控制变量。金宝app参数对象

  2. 指定金宝app仿真软件。参数对象的块参数对话框中的变量控制变量不同的子系统块,然后模拟模型。在模拟过程中,线性控制器变体选择变为活动状态。

枚举类型提高变体块的代码可读性

使用枚举类型为用作变量控制值的整数提供有意义的名称。可以在存储位置中定义枚举类型的变量控制变量,如变量条件表达式中的变量控制变量(操作数)的存储位置

考虑一个包含不同的子系统块有两个变体选择,线性控制器非线性控制器子系统。

  1. 在基本工作空间中,定义将枚举值映射到有意义名称的类。

    在这里,sldemo_mrv_CONTROLLER_TYPE是从内置数据类型派生的基于整数的枚举类,int32.该类有两个枚举值,线性非线性.这些枚举值具有底层整数值01

    classdefsldemo_mrv_CONTROLLER_TYPE <仿金宝app真软件。IntEnumType枚举线性(1)非线性(2)结束结束
  2. 将名称指定为“块参数”对话框中的变体控制变量不同的子系统块。

  3. 定义金宝appsimulink.variantControl.目的,E_Ctrl在基本工作区中,将其值指定为1然后模拟模型。在模拟过程中,线性控制器变体选择变为活动状态。

    E_Ctrl。值= 1

金宝appsimulink.variant.变体块中的变体条件重用对象

在识别模型所需的变体选择后,您可以通过定义变体条件来构建复杂的变体条件以控制变体选择的激活金宝appsimulink.variant.对象。金宝appsimulink.variant.对象使您能够跨模型重用通用的变量条件,并帮助您封装复杂的变量条件表达式。

您可以在类型表达式表达式中指定整个变体条件表达式或仅变体控制变量金宝appsimulink.variant.

请注意

您可以定义类型的变体控制变量金宝appsimulink.variant.仅在基本工作空间或数据字典中。定义类型的变体控制变量金宝appsimulink.variant.在掩码或模型工作区中不受支持。金宝app有关变体控制变量的存储位置的更多信息,请参见变量条件表达式中的变量控制变量(操作数)的存储位置

金宝appsimulink.variant.不支持结构内。金宝app

考虑一个包含不同的子系统块有两个变体选择,线性控制器非线性控制器子系统。

  1. 在基础工作区中,将变体控制表达式封装为金宝appsimulink.variant.对象。

    线性模型。金宝app变体(“V = = 1”);非线性模型。金宝app变体(“V = = 2”);
  2. 指定金宝appsimulink.variant.的块参数对话框中的变量控制变量不同的子系统块。

    条件(只读)参数显示封装的变量条件。

  3. 定义金宝appsimulink.variantControl.目的,V在基本工作区中,将其值指定为1然后模拟模型。在模拟过程中,线性控制器变体选择变为活动状态。

    V.Value = 1;

使用此方法,您可以开发可重复使用的复活变量条件表达式。

变参数快速成型的标量值

标量MATLAB®变量允许您快速原型变量值时,您仍在构建您的模型。它们帮助你更专注于建立你的不同价值观,而不是开发激活那些选择的表达方式。

您可以在列出的位置定义标量控制变量变量条件表达式中的变量控制变量(操作数)的存储位置

在MATLAB编辑器中,以最简单的形式指定变体选择作为标量变量金宝appsimulink.variantvariable.对象。

vpobj = 金宝appsimulink.variantVariable(“选择”,{“VCtrl = = 1”, 1000,《VCtrl = = 2》2000})
vpObj = VariantVariable with 2 choices: Condition Value __________ _____ VCtrl == 1 1000 VCtrl == 2 2000规格:使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除选项

通过定义一个控制变量来激活其中一个变量值,vctrl.,并将其值设置为1在一个金宝appsimulink.variantControl.对象。此条件激活该值1000并把这个值赋给vpObj

VCtrl =仿金宝app真软件。VariantControl (“价值”, 1'激活时间'“更新图”
VCtrl = VariantControl with properties: Value: 1 ActivationTime: 'update diagram'

如果更改值vctrl.2, 金宝appSimulink®设置的值vpObj2000

vctrl.value = 2;

金宝appSimulink.Parameter对象用于代码生成变体参数

如果您想为包含变量参数值的模型生成代码,请指定变量控制变量为MATLAB®变量或金宝app仿真软件。参数对象。金宝app仿真软件。参数对象允许您指定生成代码所需的其他属性(例如数据类型)。

请注意

  • 您可以定义类型的变体控制变量金宝app仿真软件。参数仅在基本工作空间或数据字典中。定义金宝app仿真软件。参数不支持掩码或模型工作区中的变体控制变量类型。金宝app有关变体控制变量的存储位置的更多信息,请参见变量条件表达式中的变量控制变量(操作数)的存储位置

  • 金宝app仿真软件。参数结构中的对象,并且具有除金宝app仿真软件。公共汽车对象不受支持。金宝app

在Matlab编辑器中,定义a金宝app仿真软件。参数对象。

VSSMODE = 金宝appSimulink.Parameter;VSSMODE。V一个lue = 1; VSSMODE.DataType =“int32”;VSSMODE.CoderInfo.StorageClass =“自定义”;vssmode.coderinfo.customstorageclass =“ImportedDefine”;VSSMODE.CoderInfo.CustomAttributes.HeaderFile ='rtwdemo_importedmacros.h'

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

  • 定义或ImportedDefine指定头文件

  • CompilerFlag

  • SystemConstant(AUTOSAR)

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

您还可以将标量变量控制变量转换为a金宝app仿真软件。参数对象。有关更多信息,请参见在Simulink中转换变量控制变量。金宝app参数对象

使用a指定作为变体控制的对象金宝appsimulink.variantvariable.对象。

vpobj = 金宝appsimulink.variantVariable(“选择”,{“VCtrl = = 1”,1000,《VCtrl = = 2》,2000});

通过定义控制变量来激活其中一个变量值vctrl.并将其值设置为VSSMODE在一个金宝appsimulink.variantControl.对象。此条件激活该值1000并把这个值赋给vpObj

VCtrl =仿金宝app真软件。VariantControl (“价值”,vssmode,'激活时间''代码编译'
VCtrl = VariantControl with properties: Value: [1x1金宝appActivationTime: 'code compile'

枚举类型以提高变体参数的代码可读性

使用枚举类型为用作变量控制值的整数提供有意义的名称。

可以在存储位置中定义枚举类型的变量控制变量,如变量条件表达式中的变量控制变量(操作数)的存储位置

在MATLAB®Editor中,定义将枚举值映射到有意义名称的类。

在这里,EngType是从内置数据类型派生的基于整数的枚举类,int32.该类有两个枚举值,.这些枚举值具有底层整数值12

类型EngType.m
classdef engtype 
               

将名称指定为变量选项金宝appsimulink.variantvariable.对象。

vpobj = 金宝appsimulink.variantVariable(“选择”,{'vctrl == engtype.small',3.5,'vctrl == engtype.big', 8.5})
VPOBJ =有2个选择的变体等:条件值____________________________ vctrl == engtype.big 8.5000 vcig 8.5000 vcigll == engtype.small 3.5000规格:'使用getChoice,setchoice,addchoice,removechoice来访问,修改,添加或删除选择

通过定义控制变量来激活其中一个变量值vctrl.并将其值设置为EngType。小在一个金宝appsimulink.variantControl.对象。此条件激活该值3.5并把这个值赋给vpObj

注意:对于具有'的变体控制变量对象启动'激活时间,指定枚举类型的值不受支持。金宝app

VCtrl =仿金宝app真软件。VariantControl (“价值”,engtype.small,'激活时间''代码编译'
VCtrl = VariantControl with properties:值:Small ActivationTime: 'code compile'

使用枚举类型简化了生成的代码,因为它包含值的名称而不是整数。

金宝appsimulink.variant.Objects for Variant Condition Reuse of Variant Parameters

在确定模型所需的变量值之后,可以通过将变量条件定义为,构建复杂的变量条件来控制变量参数值的激活金宝appsimulink.variant.对象。金宝appsimulink.variant.对象使您能够跨模型重用通用的变量条件,并帮助您封装复杂的变量条件表达式。

请注意

  • 您可以定义类型的变体控制变量金宝appsimulink.variant.仅在基本工作空间或数据字典中。定义金宝appsimulink.variant.不支持掩码或模型工作区中的变体控制变量类型。金宝app有关变体控制变量的存储位置的更多信息,请参见变量条件表达式中的变量控制变量(操作数)的存储位置

  • 金宝appsimulink.variant.不支持结构内。金宝app

在MATLAB®Editor中,将变量控制表达式封装为金宝appsimulink.variant.对象。

LinearController 金宝app=仿真软件。变体(“VCtrl = = 1”);NonLinearController 金宝app=仿真软件。变体(《VCtrl = = 2》);

指定金宝appsimulink.variant.对象中的变量控件金宝appsimulink.variantvariable.对象。

vpobj = 金宝appsimulink.variantVariable(“选择”,{'linearcontroller',1000,'nonlinearcontroller'2000})
VPOBJ = 5个选择变体等:条件值____________________ _____ linearcontroller 1000 nonlinearcontroller 2000规范:''使用getChoice,setchoice,addchoice,removechoice来访问,修改,添加或删除选择

通过定义一个控制变量来激活其中一个变量值,vctrl.,并将其值设置为LinearController在一个金宝appsimulink.variantControl.对象。此条件激活该值1000并把这个值赋给vpObj

VCtrl =仿金宝app真软件。VariantControl (“价值”,1,'激活时间'“更新图”
VCtrl = VariantControl with properties: Value: 1 ActivationTime: 'update diagram'

使用此方法,您可以开发可重复使用的复活变量条件表达式。

相关的例子

更多关于