主要内容

变量控制简介

Simulink的组件金宝app®包含变体的模型是根据您选择的变体选择激活或停用。

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

虽然每个变体选择与变体控制相关联,但只有一个变体控制可以评估为TRUE。当变型控制评估为TRUE时,Simulink激活对应于该变体控制的变体选择。金宝app

变体控制是一个布尔表达式,当它评估时激活特定的变体选择真的

笔记

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

您可以指定变体控制金宝app仿真软件。变体对象,matlab表达式(包括结构)或包含其中一个或多个操作数和运算符的表达式。

变量控制方式

变量控制方式块参数对话框中可用的参数允许您选择表达或者标签或者SIM Codegen切换建模变体块的模式。

  • 表达:根据Variant条件的计算指定活动的Variant。

    变体控制模式:表达式

  • 标签:指定基于名称的变量控件(标签模式活动选择)。在标签模式,无需在全局工作空间中创建变体控制。或者,您可以从命令行选择标签模式活动选项。例如,set_param(块,'labelmodeaconciveChoice','choice_1')

    变体控制模式:标签

  • SIM Codegen切换:启用变量块中的模拟和代码生成工作流程的自动变体切换。此功能可方便地在仿真和代码生成模式之间切换。

    当您模拟(普通、加速、快速加速)一个模型时,Simulink会自动选择金宝appSIM分支为主动选择。同样,当您执行软件循环(SIL)仿真时,处理器 - 循环(PIL)模拟或生成代码或使用外部模式,Simulink会自动选择金宝appCodegen.分支。

    笔记

    如果一个变量块有变量控制方式调成标签或者表达然后使用SIM或者Codegen.不支持选择条件。金宝app

    变体控制模式:SIM Codegen切换

    笔记

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

    这是一个示例屏幕,示出了切换到SIM选择的变体块。

    示例型号:SIM选择

操作数

  • 可变名称解析为MATLAB变量或金宝appSimulink.Parameter.具有整数或枚举数据类型和标量文本值的对象

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

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

运营商

  • 括号进行分组

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

有关更多信息,请参见变体条件表达式的运营商和操作数

当您编译模型时,Simulink在其变体控制评估为时,可金宝app以确定变体选择是活动的真的.活动变体的评估发生在编译的早期阶段,并且一旦模型被编译,就不能更改活动变体。

已知的限制

  • 金宝app不允许结构内的Simulink变体对象。

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

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

指定变型控制的方法

您可以使用许多方法来在变体选择之间切换 - 从选项之间使用,同时使用模型生成代码所需的选项。

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

您可以使用该功能找到控制变量金宝appsimulink.variantmanager.findvariantControlvars.

用于快速原型设计的标量变量

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

考虑一个包含两个变量选择的模型,每个变量用变体子系统堵塞。

您可以在其最简单的表单中指定变体控件作为块参数对话框中的标量变量变体子系统堵塞。

状况田野线性控制器非线性控制器N / A.,因为变体控制本身是条件。

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

V = 1;
这种情况激活了线性控制器变体选择。忽略变体控制使用符号。同样,如果变体控制为空,则忽略选择。

同样,如果您更改值V.2, 金宝appSimulink激活非线性控制器变体选择。

金宝app仿真软件。变体变体条件重用的对象

在识别模型所需的变体选项后,您可以构建复杂的变体条件以控制您的变体选择的激活。定义变体条件金宝app仿真软件。变体对象。

金宝app仿真软件。变体对象使您可以在模型中重用常见的变体条件,并帮助您封装复杂的变体条件表达式。

考虑一个已经在全局工作区中定义了变量控件的示例。

v = 1;v = 2;

您可以将这些控件转换为封装为的条件表达式金宝app仿真软件。变体对象。

LinearController 金宝app= Simulink.Variant(“V = = 1”);NonLinearController 金宝app= Simulink.Variant(“V = = 2”);

然后,您可以指定这些金宝app仿真软件。变体对象作为块参数中的变体控件在“块参数”对话框中变体子系统堵塞。

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

金宝appSimulink.Parameter.对象或MATLAB代码生成的变量

如果打算为包含变体选项的模型生成代码,则将变量控制变量指定为matlab变量或金宝appSimulink.Parameter.对象。金宝appSimulink.Parameter.对象允许您指定生成代码所需的其他属性(如数据类型)。

vssmode = 金宝appsimulink.parameter;vssmode.value = 1;vssmode.datatype ='int32';vssmode.coderinfo.storageClass ='自定义';vssmode.coderinfo.customstorageclass ='ImportedDefine';vssmode.coderinfo.customAttributes.HeaderFile = ...'RTWDemo_importedMacros.h';
变体控制变量定义为金宝appSimulink.Parameter.对象可以有以下存储类之一:

  • 定义或者ImportedDefine指定头文件

  • CompilerFlag

  • SystemConstant(Autosar)

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

您还可以将标量变量控制变量转换为a金宝appSimulink.Parameter.目的。看将变体控制变量转换为Simulink.Parameter对象金宝app

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

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

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

    Classdef.sldemo_mrv_controller_type 枚举非线性(1)二阶(2)结尾结尾
  2. 定义金宝app仿真软件。变体对象,用于全局工作区中这些类。

    VE_NONLINEAR_CONTROLLER = 金宝appSimulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.NONLINEAR”)VE_SECOND_ORDER_CONTROLLER金宝app = Simulink.Variant……(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER”)VE_PROTOTYPE金宝app = Simulink.Variant……(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PROTOTYPE”)VE_PRODUCTION金宝app = 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 pre处理器条件中的等效表达式
算术
  • A + B.

  • + A.

  • A + B.

  • 一种

  • A - B

  • -一种

  • A - B

  • -一种

A * B. A * B.
识别(a,b)

A / B

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

REM(A,B)

一个%b

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

关系

A == B.

A == B.

a〜= b

a!= b

< B

< B

A >

A >

< = B

< = B

a> = b

a> = b
逻辑
~一个 !一种,在那里一种不是整数
A && B. A && B.
A ||B. A ||B.
按位(一种B.不能两者都是恒定的整数文字)

Bitand(A,B)

A&B.

拜托(A,B)

a |B.

Bitxor(A,B)

A ^

bitcmp (A)

~一个

Bitshift(A,x)

a << x.

bitshift (- x)

A >> X.

净变异条件

净变异条件是当地条件与其祖先条件的总和。

考虑这个模型slex_netvariant.具有两个单输入单输出(SISO)变异来源块,变异来源变体源1具有变体条件v == 1w == 1, 分别。

当你模拟这个模型时,变体源1块和其他块子系统Block会有一个局部条件w == 1从繁殖中传播变体源1堵塞。祖先的条件v == 1是从变异来源块上子系统堵塞。因此,净变体条件变体源1块和其他块子系统块将v == 1 && w == 1

相关例子

更多关于