Simulink的的组件金宝app®包含变体的模型根据您选择的变体激活或停用。
模型中的每个变体选择都与称为变体控件的条件表达式相关联。变量控制决定哪个变量选择是活动的。通过更改变量控件的值,可以切换活动变量选择。
虽然每个变体选择都与一个变体控件相关联,但是只有一个变体控件的值为true。当一个变体控件的值为true时,Simulink激活对应于该变体控件的变体选择。金宝app
变式控件是一个布尔表达式,当它求值时激活特定的变式选择真正
.
您可以在MATLAB中指定不同的控件®全局工作区或数据字典。
可以将变量控件指定为金宝appSimulink.Variant
对象、MATLAB表达式(包括结构)或包含一个或多个操作数和运算符的表达式。
变异控制模式可在“块参数”对话框中选择参数表达式
要么标签
对不同块建模的模式。
表达式:
指定基于对变量条件的评估的活动变量。
变控制方式:表达式
标签:
指定基于名称的变体控件(标签模式活动选择)。在标签
模式时,不需要在全局工作区中创建变量控件。或者,您可以从命令行选择Label模式active choice。例如,set_param(块,“LabelModeActiveChoice”、“Choice_1”)
.
变式控制方式:标号
变量名解析为MATLAB变量或金宝appSimulink.Parameter
具有整数或枚举数据类型和标量文字值的对象
解析为的变量名金宝appSimulink.Variant
对象
表示整数或枚举值的标量文字值
括号分组
算术运算符、关系运算符、逻辑运算符或按位运算符
有关更多信息,请参见不同条件表达式中的运算符和操作数.
当您编译模型时,Simulink确定如果变量控件的计算结金宝app果为,则该变量选择是活动的真正
.活动变量的评估发生在编译的早期阶段,一旦模型被编译,活动变量就不能被更改。
金宝app不允许在结构中使用Simulink变量对象。
金宝app不允许在结构中使用Simulink参数。
您可以使用多种方法进行变型的选择,从之间切换选项使用,而原型为从模型生成代码所需的选项。
规范 | 目的 | 例子 |
---|---|---|
标量变量 | 快速原型 | = = 1 |
金宝appSimulink.Variant 对象 |
重用条件变体 | LinearController = 金宝appSimulink.Variant( 'FUEL == 2 && EMIS == 1'); |
金宝appSimulink.Parameter 对象或MATLAB变量 |
生成的代码生成预处理条件 | 模式== 1 ,在那里模式 可以金宝appSimulink.Parameter 对象或MATLAB变量 |
枚举类型 | 改善了代码的可读性,因为条件值被表示为有意义的名称,而不是整数 | 水平= = Level.Advanced |
您可以使用该函数找到控制变量金宝appSimulink.VariantManager.findVariantControlVars
.
标MATLAB变量让你可以快速原型的变体的选择,当你还在构建模型。它们可以帮助您更专注于构建变种的选择,要比在开发激活这些选择的表达。
考虑一个包含两个变体选择的模型,每个选择由a表示不同的子系统块。
方法的“块参数”对话框中,可以将最简单形式的变量指定为标量变量不同的子系统块。
的条件两个字段线性控制器
和非线性控制器
是N /一个
,因为该变种控制本身的条件。
您可以通过定义一个标量变量来激活其中一个变量选择V
并将其值设置为1
在MATLAB命令窗口。
V = 1;
线性控制器
变体的选择。变量控件将被忽略%
使用符号。类似地,如果变量控件为空,则选择将被忽略。
类似地,如果你改变的值V
来2
,S金宝appimulink的激活非线性控制器
变体的选择。
金宝appSimulink.Variant
用于不同条件重用的对象在确定了模型所需的变体选择之后,您可以构造复杂的变体条件来控制变体选择的激活。将变量条件定义为金宝appSimulink.Variant
对象。
金宝appSimulink.Variant
对象使您能够跨模型重用常见的变量条件,并帮助您封装复杂的变量条件表达式。
考虑一个已经在全局工作区中定义了变量控件的例子。
V = 1;V = 2;
您可以将这些控件转换为封装为的条件表达式金宝appSimulink.Variant
对象。
LinearController 金宝app= Simulink.Variant( 'V == 1');NonLinearController 金宝app= Simulink.Variant( 'V == 2');
然后可以指定这些金宝appSimulink.Variant
控件的块参数对话框中的变量控件不同的子系统块。
的条件字段现在反映封装的变量条件。使用这种方法,您可以开发可重用的复杂变量条件表达式。
金宝appSimulink.Parameter
对象或MATLAB代码生成变量如果您打算为包含变量选择的模型生成代码,请将变量控制变量指定为MATLAB变量或金宝appSimulink.Parameter
对象。金宝appSimulink.Parameter
对象允许您指定生成代码所需的其他属性(例如数据类型)。
VSSMODE = 金宝appSimulink.Parameter;VSSMODE。Value = 1; VSSMODE.DataType = 'int32'; VSSMODE.CoderInfo.StorageClass = 'Custom'; VSSMODE.CoderInfo.CustomStorageClass = 'ImportedDefine'; VSSMODE.CoderInfo.CustomAttributes.HeaderFile =... 'rtwdemo_importedmacros.h';
金宝appSimulink.Parameter
对象可以有这些存储类中的一个:
定义
要么ImportedDefine
与头文件中指定
CompilerFlag
SystemConstant (AUTOSAR)
数据定义为一个宏自己的存储类
还可以将标量变量控制变量转换为金宝appSimulink.Parameter
对象。看到将变量控制变量转换为Simulink。金宝app参数对象.
使用枚举类型为用作变量控制值的整数赋予有意义的名称。
在MATLAB编辑器,定义地图枚举值以有意义的名字的类。
classdefsldemo_mrv_CONTROLLER_TYPE < 金宝appSimulink.IntEnumType枚举非线性(1)二阶(2)结束结束
定义金宝appSimulink.Variant
全局工作区中这些类的对象。
VE_NONLINEAR_CONTROLLER = 金宝appSimulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.NONLINEAR”) VE_SECOND_ORDER_CONTROLLE金宝appR = Simulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER”) VE_PROTOTYP金宝appE = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PROTOTYPE”) VE_PRODUCTIO金宝appN = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PRODUCTION”)
使用枚举类型可以简化生成的代码,因为它包含值的名称,而不是整数。
该变种条件传说可以帮助您可视化与模型关联的变异情况。要查看变条件传说,在调试选项卡上,选择信息覆盖>变体的传说.
如果变体的传说不可用,在调试选项卡上,选择信息覆盖>变异的条件.
默认情况下,变量条件图例在模拟期间显示变量条件注释和变量条件。若要查看生成的代码中的变体条件,请选择显示生成的代码的条件变量条件传奇窗口中的选项。
在变条件传说,上块的变种条件注释为v: c
,在那里v
变量语义指示符和c
代表变种条件索引。您可以通过超链接的变种注释点击观察模型的条件对应的哪些部分。
当您将鼠标悬停在具有不同条件的块上时,工具提示将显示块的不同注释和相关的不同条件。若要查看变量条件注释工具提示,请使用变异条件必须选择选项。
查看变异状况传奇编程,使用金宝appSimulink.VariantManager.VariantLegend
功能的MATLAB命令窗口。
金宝appSimulink计算变量控件中的条件表达式,以确定活动的变量选择。可以在条件表达式中包含以下操作数:
标量变量
金宝appSimulink.Parameter
不是结构且数据类型不是金宝appSimulink.Bus
对象
枚举类型
括号分组
如果表达式的计算结果为布尔值,则变量条件表达式可以包含MATLAB操作符。在这些例子中,一个
和B
表达式的值是否为整数x
是常量整数文字。
MATLAB表达式预处理条件的支持代金宝app | 等价表达式在C预处理条件 |
---|---|
算术 | |
|
|
|
|
A * B |
A * B |
idivide (A, B) |
如果第二个操作数的值( |
快速眼动(A, B) |
如果第二个操作数的值( |
相关的 | |
|
A = = |
|
一个= B ! |
|
< B |
|
A > |
|
< = B |
|
A > = |
逻辑 | |
~一个 |
! ,在那里一个 不是整数 |
一个&&乙 |
一个&&乙 |
一个| | B |
一个| | B |
位(一个 和B 不能都是常量整数) |
|
|
A&B |
|
A | |
|
A ^ |
|
~一个 |
|
< < x |
|
> > x |
净变条件是局部条件及其祖先条件的总和。
考虑这个模型slex_netvariant
有两个单输入单输出(SISO)变异来源块,变异来源
和变异源1
与变种条件V = = 1
和W = = 1
,分别。
当你模拟这个模型时,变异源1
块和内的其它块子系统块将具有局部条件W = = 1
从传播的变异源1
块。祖先的条件V = = 1
是从?传播的变异来源
块到子系统块。因此,在净变种条件变异源1
块和内的其它块子系统块将V = = 1 & & W = = 1
.