Main Content

Simulink.Variant 类

命名空间: Simulink

指定控制变体选择的条件

描述

在包含变体模块的模型中,您必须将每个变体选择项与一个变体控制项相关联。在仿真期间,Simulink® 会计算所有变体选择项的变体控制项,并激活与计算结果为 true 的变体控制项对应的选择项。

您可以使用布尔条件表达式形式指定变体控制项,例如 A == 1A==1 && B == 2。在这些表达式中,变体控制项变量 AB 可以是 MATLAB® 变量、Simulink.Parameter 对象或 Simulink.VariantControl 对象。有关详细信息,请参阅Switch Between Choices Using Condition Expressions in Variant Blocks

创建一个 Simulink.VariantExpression 类的对象来表示布尔变体条件表达式。您可以在基础工作区或数据字典中定义该对象,并将该对象用作变体模块中选择项的变体控制项。使用 Simulink.VariantExpression 对象可以让您跨模型重用常见的变体条件,并提高变体条件表达式的可读性。

在此示例中,Simulink.VariantExpression 对象用作 Variant Source 模块中的变体控制项。

v_EngType_Big = Simulink.VariantExpression('V == 1');
v_EngType_Small = Simulink.VariantExpression('V == 2');

Simulink.VariantExpression object in a Variant block

注意

创建对象

描述

示例

variantControl = Simulink.VariantExpression(conditionExpression) 会创建一个变体控制项,并将 Condition 属性设置为 conditionExpression

属性

全部展开

变体条件表达式,指定为字符向量或字符串。表达式的计算结果必须为布尔值,并且可以包含一个或多个以下操作数和运算符。

操作数

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

  • 解析为以下类型之一的变量名称:

    • MATLAB 变量

    • Simulink.VariantControl 对象

    • 具有整数、枚举数据类型或标量字面值的 Simulink.Parameter 对象

    • Simulink.VariantExpression 对象

运算符

  • 用于分组的括号

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

有关变体条件表达式中支持的运算符和操作数类型的信息,请参阅Types of Variant Control Variables (Operands) in Variant BlocksTypes of Operators in Variant Blocks for Different Activation Times

示例: '(Fuel==2 || Emission==1) && Ratio==2'

属性:

GetAccess
public
SetAccess
public

数据类型: char | string

示例

全部折叠

当您要对模型进行仿真但不考虑代码生成时,请使用 MATLAB 变量。

创建含有标量字面值的 MATLAB 变量。

Fuel = 3;
Emission = 2;
Ratio = 3;

使用变量定义条件表达式并创建变体控制项。

Variant1 = Simulink.VariantExpression('Fuel==3 && Emission==2');
Variant2 = Simulink.VariantExpression('(Fuel==2 || Emission==1) && Ratio==2');
Variant3 = Simulink.VariantExpression('Fuel==3 || Ratio==4');

对于代码生成,要生成预处理器条件句,请使用 Simulink.Parameter 对象。

创建含有标量字面值的变体 Simulink.Parameter 对象。

Fuel = Simulink.Parameter(3);
Emission = Simulink.Parameter(2);
Ratio = Simulink.Parameter(3);

将这些对象的自定义存储类指定为 ImportedDefine,以便通过外部头文件指定值。该自定义存储类的其他有效值为 DefineCompilerFlag

注意

如果您在变体激活时间设置为 startup 的情况下生成代码,请为对象指定受支持的自定义存储类。有关 startup 激活时间支持的内置和自定义存储类的详细信息,请参阅Storage Classes for Different Variant Activation Times

Fuel.CoderInfo.StorageClass = 'Custom';
Fuel.CoderInfo.CustomStorageClass = 'ImportedDefine';

Emission.CoderInfo.StorageClass = 'Custom';
Emission.CoderInfo.CustomStorageClass = 'ImportedDefine';

Ratio.CoderInfo.StorageClass = 'Custom';
Ratio.CoderInfo.CustomStorageClass = 'ImportedDefine';

使用变量定义条件表达式并创建变体控制项。

Variant1 = Simulink.VariantExpression('Fuel==3 && Emission==2');
Variant2 = Simulink.VariantExpression('(Fuel==2 || Emission==1) && Ratio==2');
Variant3 = Simulink.VariantExpression('Fuel==3 || Ratio==4');

您可以将类型为 Simulink.VariantControl 的变体控制项变量与变体激活时间相关联。有关示例,请参阅Simulink.VariantControl Variables for Coherent Switching of Choices in Variant Blocks

使用标量字面值创建 Simulink.VariantControl 对象。

Fuel = Simulink.VariantControl('Value',3,'ActivationTime','update diagram');
Emission = Simulink.VariantControl('Value',2,'ActivationTime','update diagram');
Ratio = Simulink.VariantControl('Value',3,'ActivationTime','update diagram');

使用变量定义条件表达式并创建变体控制项。

Variant1 = Simulink.VariantExpression('Fuel==3 && Emission==2');
Variant2 = Simulink.VariantExpression('(Fuel==2 || Emission==1) && Ratio==2');
Variant3 = Simulink.VariantExpression('Fuel==3 || Ratio==4');

在确定模型所需的变体值后,您可以通过将变体条件定义为 Simulink.VariantExpression 对象来构造复杂的变体条件,以控制变体模块的激活。Simulink.VariantExpression 对象使您能够跨多个模型重用常见的变体条件,并帮助您封装复杂的变体条件表达式。

您可以指定整个变体条件表达式,也可以只在 Simulink.VariantExpression 对象的 Condition 属性中指定变体控制项变量。

注意

  • 您只能在基础工作区或数据字典中定义 Simulink.VariantExpression 类型的变体控制项变量。不支持在封装工作区或模型工作区中使用 Simulink.VariantExpression 对象定义变体控制项。有关变体控制项变量的存储位置的详细信息,请参阅Storage Locations for Variant Control Variables (Operands) in Variant Blocks

  • 不支持在结构体中使用 Simulink.VariantExpression

打开 slexVariantSubsystems 模型。

open_system('slexVariantSubsystems');
VSS_LINEAR_CONTROLLER = 
  VariantExpression with properties:

    Condition: 'VSS_MODE==1'

VSS_NONLINEAR_CONTROLLER = 
  VariantExpression with properties:

    Condition: 'VSS_MODE==2'

VSS_MODE = 2

在 MATLAB® 命令行窗口中,在 Simulink.VariantExpression 对象中定义变体控制项表达式。

V_LinearController = Simulink.VariantExpression('V==1');
V_NonLinearController = Simulink.VariantExpression('V==2');

在 Controller 模块的模块参数对话框中,将 Simulink.VariantExpression 对象指定为变体控制项变量。

set_param('slexVariantSubsystems/Controller/Linear Controller', 'VariantControl', 'V_LinearController')
set_param('slexVariantSubsystems/Controller/Nonlinear Controller', 'VariantControl', 'V_NonLinearController')

打开模型中的 Controller 模块的模块参数对话框。变体选择项表的条件列自动显示 Simulink.VariantExpression 对象表示的布尔条件。

vss-simulinkvariant-dialog.png

将变体控制项变量 V 的值设置为 1 并对模型进行仿真。

V = 1;
sim('slexVariantSubsystems');

在仿真期间,Linear Controller 模块变为活动状态。双击 Controller 模块以查看活动选择项。使用此方法,您可以开发可重用的复杂变体条件表达式。

版本历史记录

在 R2006a 之前推出

全部展开