主要内容

变体控制简介

Simulink的的组件万博1manbetx®含有变异模式启动或关闭基于变种的选择,你选择。

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

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

变体控制是一个布尔表达式用于激活特定变体的选择,当计算结果为真正的

请注意

您可以在MATLAB中指定变体控件®全局工作空间,掩码工作区或数据字典。

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

变体控制模式

变体控制模式参数块参数对话框可让您选择表达式或者标签或者SIM代码生成切换用于建模Variant块的模式。

  • 表达式:基于对变体条件的评估指定活动变量。

    变体控制模式:表达式

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

    可变控制方式:标号

  • sim codegen切换:能够在变体块仿真和代码生成的工作流自动变体切换。此功能是方便的仿真和代码生成模式之间切换。

    当您模拟(正常,加速器,快速加速器)一个模型时,Simulink会自动选择万博1manbetxsim卡分支作为主动选择。类似地,当您进行软件在环(SIL)仿真、处理器在环(PIL)仿真或生成代码或使用外部模式时,Simulink自动选择万博1manbetxCodegen.分支。

    请注意

    如果一个变体块有变体控制模式设置为标签或者表达式,那么使用sim卡或者Codegen.因为它的选择条件不受支持。万博1manbetx

    变体控制模式:SIM代码生成开关

    请注意

    变体激活时间下拉列表中,您可以选择更新图或者更新图表,分析所有的选择.数据信号,更新图表,分析所有的选择确保两个选择之间的信号的属性(数据类型,尺寸等)是一致的。

    这里是一个样本屏幕,显示了切换到模拟选择的变体块。

    范例模型:模拟游戏选择

操作数

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

  • 变量名是决心万博1manbetxsimulink.variant.对象

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

运营商

  • 用于分组的括号

  • 算术,关系,逻辑的,或位运算符

有关更多信息,请参阅符和操作数在变条件表达式

当您编译模型时,如果它的变量控制计算为,Simulink万博1manbetx将确定一个变量选择是活动的真正的.在编译的早期阶段中发生有源变体的评估,并且编译模型一旦编译模型就无法更改。

已知限制

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

  • 万博1manbetx结构中Simulink的参数是不允许的。

  • 块中的所有变体控制变量必须源自同一源。

指定变型控件的方法

您可以使用多种方法进行变型的选择,从之间切换选项使用,而原型为从模型生成代码所需的选项。

规范 目的 例子
标量变量 快速原型 = = 1
万博1manbetxsimulink.variant.对象 重用条件变体 linearcontroller = 万博1manbetxsimulink.variant('fuel == 2 && emis == 1');
万博1manbetx仿真软件。参数对象或matlab变量 生成的代码生成预处理条件 mode == 1,在哪里模式可以万博1manbetx仿真软件。参数对象或matlab变量
枚举类型 改进代码的可读性,因为状态值表示为有意义的名称,而不是整数 级别==级别.Advanced.

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

用于快速成型的标量变量

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

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

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

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

通过定义标量变量,您可以激活一个变体选项V并且其值设置为1在MATLAB命令窗口。

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

类似地,如果你改变的值V到目前为止2,s万博1manbetximulink激活了非线性控制器变体的选择。

万博1manbetxsimulink.variant.对于变条件重用的对象

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

万博1manbetxsimulink.variant.对象使您可以重用跨模型和帮助常见变异条件您封装复杂变异条件表达式。

考虑一个示例,其中在全局工作空间中已经定义了变体控件。

V = 1;V = 2;

可以将这些控件转换为封装为的条件表达式万博1manbetxsimulink.variant.对象。

linearcontroller 万博1manbetx= simulink.variant('v == 1');nonlinearcontroller 万博1manbetx= simulink.variant('v == 2');

然后您可以指定这些万博1manbetxsimulink.variant.对象的块参数对话框中的变量控件不同的子系统块。

条件现场现在反映了封装的变体条件。使用此方法,您可以开发可重复使用的复活变量条件表达式。

万博1manbetx仿真软件。参数物体或者马铃薯代码生成变量

如果你打算生成含有变异选择一个型号代码,指定变形控制变量作为MATLAB变量或万博1manbetx仿真软件。参数对象。万博1manbetx仿真软件。参数对象允许您指定生成代码所需的其他属性(例如数据类型)。

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

  • 定义或者ImportedDefine.使用指定的标题文件

  • Compilerflag.

  • SystemConstant (AUTOSAR)

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

您还可以将标变种控制变量成万博1manbetx仿真软件。参数对象。看到转换变控制变量成Simulink.Parameter对象万博1manbetx

枚举类型用于改善代码的可读性

使用枚举类型给有意义的名称用作变形控制值的整数。

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

    Classdef.sldemo_mrv_CONTROLLER_TYPE <仿万博1manbetx真软件。IntEnumType枚举非线性(1)秒_ORDER(2)结束结束
  2. 定义万博1manbetxsimulink.variant.在全局工作空间中为这些类的对象。

    VE_NONLINEAR_CONTROLLER = 万博1manbetxSimulink.Variant ...( '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 = 万博1manbetxsimulink.variant ...('e_current_build == sldemo_mrv_build_type.production')

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

查看变异条件

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

请注意

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

默认情况下,变条件图例显示变种条件注释,模拟过程中的变异情况,以及变异条件变量的来源。以查看在所生成的代码中的变体的条件,选择显示生成的代码的条件选项。

在变型条件传奇中,块上的变体条件被注释为五:Ç,在哪里v是所述变体语义指示器和c表示变体条件索引。您可以单击通过超链接变量注释,观察模型的哪些部分该条件对应于。

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

在图例中,也显示在变体的条件变量的源。变量可以从掩模,模型,或基工作区起源。在一个块中使用的所有变量都必须来自同一来源。在模型中,从不同的面具工作区发起变量可以具有相同的名称,并具有不同的值。观察变量的来源,单击超链接的工作空间。

请注意

变体激活时间参数集更新图,用于非活动选择的变量源可能是不正确的,因为在传播信号属性之前被移除非活动选择,因此未评估。

查看变异状况传奇以编程方式,使用万博1manbetxSimulink.VariantManager.VariantLegendMATLAB命令窗口中的函数。

符和操作数在变条件表达式

万博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 !

A

A

A> B.

A> B.

a <= b

a <= b

> = B

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

BITAND(A,B)

A&B

bitor (A, B)

a |B

bitxor (A, B)

A ^ B.

Bitcmp(a)

〜A.

bitshift (A, x)

< < x

比特(A,-X)

一个> > x

净变体条件

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

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

当你模拟这个模型时变体Source1块和其他块在子系统块将有当地条件W = = 1传播的变体Source1块。祖条件V = = 1从中传播变体源块到子系统块。因此,净变条件上变体Source1块和其他块在子系统块将是V == 1 && w ^ == 1

相关的例子

更多关于