主要内容

变量控制介绍

Simulink的组成部分金宝app®模型中包含基于您所选择的变量的激活或禁用的变量。

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

虽然每个变量选择都与一个变量控件相关联,但只有一个变量控件可以求值为true。当一个变量控件的值为true时,Simulink激活与该变量控件对应的变量选择。金宝app

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

请注意

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

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

变式控制方式

变式控制方式在块参数对话框中可选择的参数表达式标签Sim码原交换模式,用于建模变体块。

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

    变量控制方式:表达式

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

    变量控制方式:标签

  • Sim码原切换:支持变量块中的模拟和代码生成工作流的自动变量切换。该特性便于在模拟和代码生成模式之间切换。

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

    请注意

    如果一个变量块有变式控制方式设置为标签表达式,然后使用sim卡codgen因为它的选择条件不支持。金宝app

    变体控制方式:sim码原切换

    请注意

    变异激活时间下拉列表,可以选择更新图更新图表分析所有的选择.对于数据信号,更新图表分析所有的选择确保两个选择之间的信号属性(数据类型、维度等)一致。

    下面是一个示例屏幕,显示一个切换到sim选择的变量块。

    示例模型:sim选择

操作数

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

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

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

运营商

  • 括号表示分组

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

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

当您编译模型时,Simulink确定一个变量选择是活动的金宝app,如果它的变量控制求值为真正的.主动变量的评估发生在编译的早期阶段,一旦模型编译完成,就不能更改主动变量。

已知的限制

  • 金宝app结构中的Simulink变量对象是不允许的。

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

指定变量控件的方法

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

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

你可以用这个函数找到控制变量金宝appSimulink.VariantManager.findVariantControlVars

快速原型的标量变量

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

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

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

条件字段的线性控制器而且非线性控制器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仿真软件。参数对象允许您指定生成代码所需的其他属性(例如数据类型)。

vsmode = S金宝appimulink.Parameter;VSSMODE。Value = 1; VSSMODE.DataType = 'int32'; VSSMODE.CoderInfo.StorageClass = 'Custom'; VSSMODE.CoderInfo.CustomStorageClass = 'ImportedDefine'; VSSMODE.CoderInfo.CustomAttributes.HeaderFile =... 'rtwdemo_importedmacros.h';
变量控制变量定义为金宝app仿真软件。参数对象可以有以下存储类之一:

  • 定义ImportedDefine指定头文件

  • CompilerFlag

  • SystemConstant (AUTOSAR)

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

还可以将标量变量控制变量转换为金宝app仿真软件。参数对象。看到转换变量控制变量到Simulink。金宝app参数对象

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

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

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

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

    ve_非线性控制器= simulink . vari金宝appable…('E_CTRL== sldemo_mrv_controller_type .非线性')金宝app('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER') VE_PROTOTYPE =金宝app simulink . variable…('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE') VE_PRODUCTION =金宝appSimulink.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
idivide (A, B)

A / b

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

快速眼动(A, B)

A % b

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

关系

A == b

A == b

A ~= b

A != b

A < b

A < b

A > b

A > b

A <= b

A <= b

A >= b

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

bitand (A, B)

A & b

bitor (A, B)

A | b

bitxor (A, B)

A ^ b

bitcmp (A)

~一个

bitshift (A, x)

A << x

bitshift (- x)

一个>> x

净变异条件

净变异条件是本地条件及其祖先条件的总和。

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

当您模拟这个模型时,变体Source1类中的其他块子系统块将有一个局部条件W = = 1变体Source1块。祖先的状况V = = 1变异来源堵住子系统块。因此,网变条件就变了变体Source1类中的其他块子系统Block将会是V==1 && w ==1

相关的例子

更多关于