文档

变型控制简介

Simulink的组件万博1manbetx®包含变量的模型将根据您选择的变量选择激活或停用。

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

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

变量控件是一个布尔表达式,它在计算为时激活特定的变量选择符合事实的.

笔记

可以在MATLAB中指定变量控件®基本工作区或数据字典。

可以将变量控件指定为万博1manbetxSimulink.变体对象、MatlabExpression(包括结构)或作为包含一个或多个操作数和运算符的表达式。

笔记

如果变量控件包含MATLABexpressions(包括结构),则在更新图表期间分析所有选择并生成预处理器条件不能选择“块”对话框中的选项。

操作数

  • 解析为MATLAB变量或万博1manbetxSimulink.参数具有整数或枚举数据类型和标量文字值的对象

  • 解析为的变量名万博1manbetxSimulink.变体物体

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

操作员

  • 分组用括号

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

有关详细信息,请参阅变量条件表达式中的运算符和操作数.

编译模型时,如果变量控件的计算结果为,Simulink将万博1manbetx确定变量选择处于活动状态符合事实的. 活动变体的评估发生在编译的早期阶段。

已知的限制

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

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

指定变量控件的方法

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

规格 意图 实例
标量变量 快速成型 A==1
万博1manbetxSimulink.变体对象 重用可变条件 LinearController =仿万博1manbetx真软件。variant('FUEL==2 && EMIS==1');
万博1manbetxSimulink.参数对象或MATLAB变量 为代码生成生成预处理条件 模式= = 1哪里模式可以是万博1manbetxSimulink.参数对象或MATLAB变量
枚举类型 改进了代码可读性,因为条件值表示为有意义的名称,而不是整数 LEVEL==LEVEL.Advanced

可以将变量控制表达式中的MATLAB变量转换为万博1manbetxSimulink.参数对象使用函数万博1manbetxSimulink.VariantManager.findVariantControlVars.

快速原型的标量变量

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

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

可以在的“块参数”对话框中将最简单形式的变量控件指定为标量变量变型子系统

这个条件两个字段的字段线性控制器非线性控制器不适用,因为变量控件本身就是条件。

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

V=1;
这种情况会激活线性控制器变体选择。

类似地,如果更改v2.,S万博1manbetximulink将激活非线性控制器变体选择。

万博1manbetxSimulink.变体用于可变条件重用的对象

确定模型所需的变量选择后,可以构造复杂的变量条件来控制变量选择的激活。将变量条件定义为万博1manbetxSimulink.变体物体。

万博1manbetxSimulink.变体对象使您能够跨模型重用常见的变量条件,并帮助您封装复杂的变量条件表达式。

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

V=1;V=2;

可以将这些控件转换为封装为的条件表达式万博1manbetxSimulink.变体物体。

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

然后可以指定这些万博1manbetxSimulink.变体对象作为“块参数”对话框中的变量控件变型子系统

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

万博1manbetxSimulink.参数对象或MATLAB用于代码生成的变量

如果要为包含变量选择的模型生成代码,请将变量控制变量指定为MATLAB变量或万博1manbetxSimulink.参数物体。万博1manbetxSimulink.参数对象允许您指定生成代码所需的其他属性(如数据类型)。

VSSMODE=Si万博1manbetxmulink.Parameter;VSSMODE.Value=1;VSSMODE.DataType='int32';VSSMODE.CoderInfo.StorageClass='Custom';VSSMODE.CoderInfo.CustomStorageClass='ImportedDefine';VSSMODE.CoderInfo.CustomAttributes.HeaderFile=…'rtwdemo_importedmacros.h';
变量控制变量定义为万博1manbetxSimulink.参数对象可以具有以下存储类之一:

  • 定义ImportedDefine指定头文件

  • CompilerFlag

  • 系统常数(AUTOSAR)

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

还可以将标量变量控制变量转换为万博1manbetxSimulink.参数对象看见将变量控制变量转换为Simulink.Parameter对象万博1manbetx.

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

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

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

    classdefsldemo\u mrv\u控制器\u类型列举非线性(1)二阶(2)终止终止
    classdef sldemo_mrv_BUILD_TYPE
                   
  2. 定义万博1manbetxSimulink.变体基本工作区中这些类的对象。

    VE_非线性控制器=Simulink.Variant万博1manbetx。。。('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.NONLINEAR')VE_SECOND_ORDER_CONTROLLER=Simulink.Variant。。。('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER')VE_PROTOTYPE=Simulink.Variant。。。('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE')VE_PRODUCTION=Simulink.Variant。。。('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PRODUCTION')

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

查看各种条件

这个变异条件传奇帮助您可视化与模型关联的各种条件。查看变异条件传奇点击陈列>阻碍>变异条件传奇.

笔记

这个变异条件传奇仅在以下情况下可用:陈列>阻碍>变异条件它是活动的。

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

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

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

查看变异条件传奇以编程方式,使用万博1manbetxSimulink.VariantManager.VariantGend函数。

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

万博1manbetxSimulink计算变量控件内的条件表达式,以确定活动变量选择。可以在条件表达式中包括以下操作数:

  • 标量变量

  • 万博1manbetxSimulink.参数不是结构且数据类型不是万博1manbetx模拟总线物体

  • 枚举类型

  • 分组用括号

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

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

  • +A

  • A+B

  • A.

  • A-B

  • -A

  • A-B

  • -A

A*B A*B
I提供(A,B)

A/B

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

雷姆(A,B)

A%B

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

关系

A==B

A==B

A~=B

A!=B

A

A

A>B

A>B

A<=B

A<=B

A>=B

A>=B
必然的
~A !A.哪里A.不是整数
& & B & & B
A | | B A | | B
按位(A.B不能同时为常量整数文字)

比特兰德(A,B)

A和B

比特(A,B)

A | B

位异或(A,B)

A^B

bitcmp(A)

~A

位移位(A,x)

A

bitshift (- x)

A>>x

相关实例

更多关于

这个话题有用吗?