变型控制简介

Simulink的组件万博1manbetx®模型中包含的变体将根据您选择的变体被激活或取消激活。

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

虽然每个变体选择都与一个变体控件相关联,但只有一个变体控件可以计算为真。当一个变量控制的值为true时,Simulink激活与该变量控制相对应的变量选择。万博1manbetx

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

请注意

你可以在MATLAB中指定变量控制®全局工作区或数据字典。

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

变量控制方式

变量控制方式在“块参数”对话框中可以选择的参数表达式标签用于建模Variant块的模式。

  • 表达式:根据对变量条件的评估指定活动变量。

    变体控制模式:表达式

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

    可变控制方式:标号

操作数

  • 解析为MATLAB变量或的变量名万博1manbetx仿真软件。参数具有整数或枚举数据类型和标量文本值的对象

  • 解析为的变量名万博1manbetx仿真软件。变体对象

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

运营商

  • 括号进行分组

  • 算术、关系、逻辑或位操作符

有关更多信息,请参见变量条件表达式中的操作符和操作数

当您编译模型时,如果它的变量控制计算为,Simulink万博1manbetx将确定一个变量选择是活动的真正的.活动变量的计算发生在编译的早期阶段,一旦模型被编译,活动变量就不能被更改。

已知的限制

  • 万博1manbetx不允许在结构中使用Simulink变量对象。

  • 万博1manbetx不允许在结构中使用Simulink参数。

指定变型控件的方法

您可以使用许多方法在不同选项之间进行切换——从原型时使用的选项到从模型生成代码所需的选项。

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

您可以使用该函数找到控制变量万博1manbetxSimulink.VariantManager.findVariantControlVars

用于快速成型的标量变量

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

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

控件的块参数对话框中,可以以最简单的形式指定变量控件作为标量变量不同的子系统块。

条件字段的值线性控制器非线性控制器N/A,因为变量控制本身就是条件。

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

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

类似地,如果你改变的值V2, 万博1manbetxSimulink激活非线性控制器变体的选择。

万博1manbetx仿真软件。变体变量条件重用的对象

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

万博1manbetx仿真软件。变体对象使您能够跨模型重用通用的变量条件,并帮助您封装复杂的变量条件表达式。

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

V = 1;V = 2;

可以将这些控件转换为封装为的条件表达式万博1manbetx仿真软件。变体对象。

LinearController 万博1manbetx= Simulink.Variant(“V = = 1”);NonLinearController 万博1manbetx= Simulink.Variant(“V = = 2”);

然后您可以指定这些万博1manbetx仿真软件。变体对象的块参数对话框中的变量控件不同的子系统块。

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

万博1manbetx仿真软件。参数对象或MATLAB用于代码生成的变量

如果您想为包含变量选择的模型生成代码,请指定变量控制变量为MATLAB变量或万博1manbetx仿真软件。参数对象。万博1manbetx仿真软件。参数对象允许您指定生成代码所需的其他属性(如数据类型)。

VSSMODE = 万博1manbetxSimulink.Parameter;VSSMODE。Value = 1; VSSMODE.DataType = 'int32'; VSSMODE.CoderInfo.StorageClass = 'Custom'; VSSMODE.CoderInfo.CustomStorageClass = 'ImportedDefine'; VSSMODE.CoderInfo.CustomAttributes.HeaderFile =... 'rtwdemo_importedmacros.h';
变量控制变量定义为万博1manbetx仿真软件。参数对象可以有以下其中一个存储类:

  • 定义ImportedDefine指定头文件

  • CompilerFlag

  • SystemConstant (AUTOSAR)

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

还可以将标量变量控制变量转换为万博1manbetx仿真软件。参数对象。看到在Simulink中转换变量控制变量。万博1manbetx参数对象

改进代码可读性的枚举类型

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

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

    classdefsldemo_mrv_CONTROLLER_TYPE <仿万博1manbetx真软件。IntEnumType枚举非线性二阶(1)结束结束
  2. 定义万博1manbetx仿真软件。变体全局工作空间中这些类的对象。

    VE_NONLINEAR_CONTROLLER = 万博1manbetxSimulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.NONLINEAR”)VE_SECOND_ORDER_CONTROLLER万博1manbetx = Simulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER”)VE_PROTOTYPE万博1manbetx = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PROTOTYPE”)VE_PRODUCTION万博1manbetx = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PRODUCTION”)

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

查看变异条件

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

请注意

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

默认情况下,变量条件图例显示变量条件注释和模拟期间的变量条件。要查看生成代码中的变体条件,请选择显示生成的代码条件选项。

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

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

查看变异条件传奇通过编程,使用万博1manbetxSimulink.VariantManager.VariantLegend函数。

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

万博1manbetxSimulink在变量控制中计算条件表达式,以确定主动变量选择。你可以在条件表达式中包含以下操作数:

  • 标量变量

  • 万博1manbetx仿真软件。参数非结构的对象,且具有非结构的数据类型万博1manbetx仿真软件。公共汽车对象

  • 枚举类型

  • 括号进行分组

变量条件表达式可以包含MATLAB操作符,前提是表达式的计算结果为布尔值。在这些例子中,一个B表达式的计算结果是一个整数,和x是常量整型字面值。

支持生成预处理条件的MATLAB表达式万博1manbetx C预处理器中的等价表达式
算术
  • A + B

  • +一个

  • A + B

  • 一个

  • A - B

  • ——一个

  • A - B

  • ——一个

A * B A * B
idivide (A, B)

A / B

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

快速眼动(A, B)

% B

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

关系

A = =

A = =

~ = B

一个= B !

< B

< B

A >

A >

< = B

< = B

> = B

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

bitand (A, B)

A和B

bitor (A, B)

A |

bitxor (A, B)

A ^

bitcmp (A)

~一个

bitshift (A, x)

< < x

bitshift (- x)

一个> > x

净变异条件

净变条件是局部条件和原始条件的总和。

考虑这个模型slex_netvariant单输入单输出(SISO)变异来源块,变异来源变体Source1变条件为V = = 1W = = 1,分别。

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

相关的例子

更多关于