主要内容

变量控制简介

Simulink的组件金宝app®包含变体的模型是根据您选择的变体选择激活或停用。

模型中的每个变体选择都与一个称为变体控制的条件表达式相关联。变体控件决定哪个变体选择是激活的。通过更改变体控件的值,您可以切换活动变体选项。

虽然每个变体选择都与一个变体控件相关联,但只有一个变体控件可以计算为true。当变体控件的计算结果为true时,Simulink将激活对应于该变体控件的变体选择。金宝app

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

请注意

您可以在MATLAB中指定变量控件®全局工作区、掩码工作区或数据字典。

您可以将变体控件指定为金宝app仿真软件。变体对象、MATLAB表达式(包括结构)或包含一个或多个操作数和操作符的表达式。

变量控制方式

变量控制方式块参数对话框中可用的参数允许您选择表达式或者标签或者SIM Codegen切换模式建模Variant块。

  • 表达式:根据Variant条件的计算指定活动的Variant。

    变体控制模式:表达式

  • 标签:指定基于名称的变量控件(标签模式活动选择)。在标签模式下,不需要在全局工作区中创建Variant控件。或者,您可以从命令行中选择Label模式活动选项。例如,set_param(块,“LabelModeActiveChoice”、“Choice_1”)

    不同的控制方式:标签

  • sim codegen切换:启用变量块中的模拟和代码生成工作流程的自动变体切换。此功能可方便地在仿真和代码生成模式之间切换。

    当您模拟(普通、加速、快速加速)一个模型时,Simulink会自动选择金宝appsim卡作为积极的支部选择。类似地,当你做一个软件在环(SIL)模拟,处理器在环(PIL)模拟或生成代码或使用外部模式,Simulink自动选择金宝appCodegen.分支。

    请注意

    如果一个变量块有变量控制方式设置为标签或者表达,那么使用sim卡或者Codegen.因为它的选择条件不被支持。金宝app

    变体控制模式:SIM Codegen切换

    请注意

    在里面变体激活时间下拉列表,您可以选择更新图或者更新图表,分析所有选项.数据信号,更新图表,分析所有选项确保两种选择之间的信号属性(数据类型,尺寸等)是一致的。

    以下是一个示例屏幕,显示了切换到模拟选择的变体块。

    示例模型:模拟选择

操作数

  • 可变名称解析为MATLAB变量或金宝app仿真软件。参数具有整数或枚举数据类型和标量文本值的对象

  • 可变名称解析为金宝app仿真软件。变体对象

  • 标量字面值表示整数或枚举值

运营商

  • 括号进行分组

  • 算术,关系,逻辑或按位运算符

有关更多信息,请参见变体条件表达式的运营商和操作数

在编译模型时,如果其变体控制计算为,则Simulink确金宝app定变体选择是活动的真的.活动变体的评估发生在编译的早期阶段,并且一旦模型被编译,就不能更改活动变体。

已知的限制

  • 金宝app不允许结构内的Simulink变体对象。

  • 金宝app不允许使用结构中的Simulink参数。

  • 一个块中的所有变量控制变量必须来自同一个源。

指定变量控制的方法

您可以使用许多方法来在变体选择之间切换 - 从选项之间使用,同时使用模型生成代码所需的选项。

规范 目的 例子
标量变量 快速原型 = = 1
金宝app仿真软件。变体对象 重用条件变体 LinearController =仿金宝app真软件。变体('FUEL==2 && EMIS==1');
金宝app仿真软件。参数对象或MATLAB变量 生成代码生成的预处理器条件 模式= = 1,在那里模式可以金宝app仿真软件。参数对象或MATLAB变量
枚举类型 改进的代码可读性,因为条件值表示为有意义的名称而不是整数 级别= =级别。先进的

您可以使用该函数找到控制变量金宝appSimulink.VariantManager.findVariantControlVars

快速原型的标量变量

标量MATLAB变量允许您在构建模型时快速原型化不同的选择。它们帮助你更多地专注于构建你的变体选择,而不是开发激活这些选择的表达。

考虑一个包含两个变量选择的模型,每个变量用不同的子系统块。

您可以在其最简单的表单中指定变体控件作为块参数对话框中的标量变量不同的子系统块。

条件字段线性控制器非线性控制器N / A.,因为变体控制本身是条件。

您可以通过定义标量变量来激活其中一个变体选项V并将其值设置为1在MATLAB命令窗口。

V = 1;
这种情况激活了线性控制器变体的选择。时忽略变量控制使用符号。类似地,如果变量控制为空,则忽略该选择。

类似地,如果你改变V2, 金宝appSimulink激活非线性控制器变体的选择。

金宝app仿真软件。变体变体条件重用的对象

在确定您的模型需要的变体选择之后,您可以构造复杂的变体条件来控制变体选择的激活。将变量条件定义为金宝app仿真软件。变体对象。

金宝app仿真软件。变体对象使您可以在模型中重用常见的变体条件,并帮助您封装复杂的变体条件表达式。

考虑一个已经在全局工作区中定义了变量控件的示例。

V = 1;V = 2;

您可以将这些控件转换为封装为的条件表达式金宝app仿真软件。变体对象。

LinearController 金宝app= Simulink.Variant(“V = = 1”);NonLinearController 金宝app= Simulink.Variant(“V = = 2”);

然后您可以指定这些金宝app仿真软件。变体控件的块参数对话框中的变量控件不同的子系统块。

条件字段现在反映封装的变量条件。使用这种方法,您可以开发可重用的复杂变量条件表达式。

金宝app仿真软件。参数对象或MATLAB代码生成的变量

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

vssmode = 金宝appsimulink.parameter;vssmode.value = 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.Parameter对象金宝app

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

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

  1. 在MATLAB编辑器中,定义将枚举值映射到有意义的名称的类。

    Classdef.sldemo_mrv_CONTROLLER_TYPE <仿金宝app真软件。IntEnumType枚举非线性(1)二阶(2)结束结束
  2. 定义金宝app仿真软件。变体对象,用于全局工作区中这些类。

    VE_NONLINEAR_CONTROLLER = 金宝appSimulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.NONLINEAR”)VE_SECOND_ORDER_CONTROLLER金宝app = Simulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER”)VE_PROTOTYPE金宝app = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PROTOTYPE”)VE_PRODUCTION金宝app = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PRODUCTION”)

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

查看变异条件

变量条件图例帮助您可视化与模型相关联的变量条件。若要查看变异条件图例,请在调试选项卡上,选择信息覆盖>变体传说

请注意

如果变体传说不可用,在调试选项卡上,选择信息覆盖>变异的条件

缺省情况下,变体条件图例显示了变体条件注释,仿真过程中的变体条件,以及变体条件变量的源。要查看生成的代码中的变体条件,请选择显示生成的代码条件选项在变种条件图例窗口。

在变量条件图例中,块上的变量条件被注释为V:C.,在那里v是变体语义指标和c表示变式条件索引。您可以通过单击超链接的变体注释来观察条件对应于模型的哪些部分。

当您将鼠标悬停在具有变量条件的块上时,工具提示将显示该块的变量注释和相关变量条件。要查看变量条件注释工具提示,请使用变异条件必须选择。

在图例中,还显示了变体条件变量的源。变量可以源自掩码,模型或基础工作空间。块中使用的所有变量必须源自同一源。在模型中,源自不同掩码工作区的变量可以具有相同的名称并具有不同的值。要观察变量的来源,请单击超链接工作空间。

请注意

变体激活时间参数设置为更新图,为非活动选项显示的变量源可能是不正确的,因为非活动选项在传播信号属性之前被删除,因此不会被计算。

查看变异条件传奇通过编程,使用金宝appsimulink.variantmanager.variantlegend.函数在MATLAB命令窗口。

变体条件表达式的运营商和操作数

金宝appSimulink计算变量控件中的条件表达式,以确定主动的变量选择。你可以在条件表达式中包含以下操作数:

  • 标量变量

  • 金宝app仿真软件。参数对象不是结构体,且数据类型不是金宝app仿真软件。公共汽车对象

  • 枚举类型

  • 括号进行分组

变量条件表达式可以包含MATLAB操作符,只要表达式计算为布尔值。在这些例子中,一个B是评估到整数的表达式,以及x是一个常量整数字面量。

MATLAB表达式支持生成预处理器条件金宝app 等价的表达式在C预处理器条件
算术
  • A + B.

  • +一个

  • A + B.

  • 一个

  • A - B

  • -一种

  • A - B

  • -一种

A * B. A * B.
识别(a,b)

A / B

如果第二个操作数的值(B)是0,行为是未定义的。

快速眼动(A, B)

% B

如果第二个操作数的值(B)是0,行为是未定义的。

关系

A = =

A = =

~ = B

一个= B !

< B

< B

A >

A >

< = B

< = B

> = B

> = B
逻辑
~一个 !,在那里一个不是整数
A && B. A && B.
一个| | B 一个| | B
位(一个B不能都是常量整数)

Bitand(A,B)

A&B.

bitor (A, B)

a |B

bitxor (A, B)

A ^

bitcmp (A)

~一个

bitshift (A, x)

< < x

bitshift (- x)

一个> > x

净变异条件

净变异条件是当地条件与其祖先条件的总和。

考虑这个模型slex_netvariant.具有两个单输入单输出(SISO)变异来源块,变异来源变体Source1不同的条件如下V = = 1W = = 1,分别。

当你模拟这个模型时变体Source1块内的其他块子系统Block会有一个局部条件W = = 1传播的变体Source1块。祖先的条件V = = 1是从变异来源块上子系统块。因此,净变体条件变体Source1块内的其他块子系统块将v == 1 && w == 1

相关的例子

更多关于