使用变量控制变量变异参数
这一主题解释了如何使用控制变量变异参数不同类型的变体。
考虑到slexVariantParameters
模型。
的获得参数的获得参数指定为块变体金宝appSimulink.VariantVariable
对象,K1
和K2
。K1
和K2
有多个值与变异条件表达式吗V = = 1
和V = = 2
。在这里,不同控制变量V
决定活动的价值K1
和K2
是一个金宝appSimulink.VariantControl
对象。你可以改变V
根据你的要求这些类型。
请注意
从这些例子之前,我们建议您完成创建一个简单的变异参数模型。
金宝appSimulink.ParameterType of Variant Control Variables for Code Generation of Variant Parameters
金宝appSimulink.VariantObjects for Variant Condition Reuse of Variant Parameters
数值变量控制参数值快速原型的变体
数值允许您快速原型变量值时仍然构建模型。数值帮助你更加关注建筑变异值比发展中激活这些选择的表达式。
您可以定义数字控制中列出的值位置存储位置变异控制变量参数(操作数)的变体。
打开slexVariantParameters
模型。
open_system (“slexVariantParameters”)
在MATLAB编辑器中,指定变体选择最简单的形式的数值金宝appSimulink.VariantVariable
对象K1
和K2
。
K1 = 金宝appSimulink.VariantVariable (“选择”,{“V = = 1”,3.5,“V = = 2”,8.5})
K1 = VariantVariable 2选择:条件价值_____ _____ V = = 1 3.5000 V = = 2 8.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
K2 = 金宝appSimulink.VariantVariable (“选择”,{“V = = 1”,4.5,“V = = 2”,9.5})
K2 = VariantVariable 2选择:条件价值_____ _____ V = = 1 4.5000 V = = 2 9.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
一旦你成功地创建金宝appSimulink.VariantVariable
对象,可以用描述的方法修改它们公共方法或从VariantVariable
对话框。
激活一个变量值通过定义一个控制变量,V
,并设置它的值1
在一个金宝appSimulink.VariantControl
对象。
V = 金宝appSimulink.VariantControl (“价值”,1“ActivationTime”,“更新图”)
V = VariantControl属性:值:1 ActivationTime:“更新图”
当你模拟模型,条件V = = 1
计算结果为真正的
。K1
分配一个值的3.5
和K2
分配一个值的8.5
。
sim卡(“slexVariantParameters”)
如果你改变的价值V
来2
,仿金宝app真软件®设置的值K1
和K2
来4.5
和9.5
在模拟。你可以改变的价值V
使用这个命令或金宝appSimulink.VariantControl
对话框。
V。Value = 2; sim (“slexVariantParameters”)
金宝appSimulink.ParameterType of Variant Control Variables for Code Generation of Variant Parameters
如果您打算为模型生成代码包含变异参数,指定变量作为控制变量金宝appSimulink.Parameter
对象。金宝appSimulink.Parameter
对象允许您指定其他属性,比如数据类型和存储类,和控制变量控制的外观和位置变量生成的代码。
您可以定义一个变量控制变量的类型
金宝appSimulink.Parameter
只有在基本工作空间或在数据字典。定义金宝appSimulink.Parameter
面具或模型中的控制变量类型的变体工作区不支持。金宝app为控制变量存储位置变量的更多信息,见存储位置变异控制变量参数(操作数)的变体。金宝appSimulink.Parameter
以外的对象的内部结构和数据类型金宝appSimulink.Bus
不支持对象。金宝app
打开slexVariantParameters
模型。
open_system (“slexVariantParameters”)
在MATLAB编辑器中,定义一个金宝appSimulink.Parameter
对象。
VSS_MODE = 金宝appSimulink.Parameter;VSS_MODE。Value = 1; VSS_MODE.DataType =“int32”;VSS_MODE.CoderInfo。StorageClass =“自定义”;VSS_MODE.CoderInfo。CustomStorageClass =“定义”;VSS_MODE.CoderInfo.CustomAttributes。HeaderFile =“demo_macros.h”;
变量定义为控制变量金宝appSimulink.Parameter
列出的对象可以有任何存储类存储类激活时间为不同的变体(嵌入式编码)。
你也可以一个标量变量控制变量转换成一个金宝appSimulink.Parameter
对象。有关更多信息,请参见不同控制变量转换成仿真软件。金宝app参数对象。
指定对象作为版本控制金宝appSimulink.VariantVariable
对象K1
和K2
。
K1 = 金宝appSimulink.VariantVariable (“选择”,{“V = = 1”,3.5,“V = = 2”,8.5})
K1 = VariantVariable 2选择:条件价值_____ _____ V = = 1 3.5000 V = = 2 8.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
K2 = 金宝appSimulink.VariantVariable (“选择”,{“V = = 1”,4.5,“V = = 2”,9.5})
K2 = VariantVariable 2选择:条件价值_____ _____ V = = 1 4.5000 V = = 2 9.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
一旦你成功地创建金宝appSimulink.VariantVariable
对象,可以用描述的方法修改它们公共方法或从VariantVariable
对话框。
激活一个变量值通过定义一个控制变量V
并将它的值设置为VSS_MODE
在一个金宝appSimulink.VariantControl
对象。
V = 金宝appSimulink.VariantControl (“价值”VSS_MODE,“ActivationTime”,代码编译的)
V = VariantControl属性:价值:[1 x1仿真软件。金宝app参数]ActivationTime:代码编译的
当你模拟模型,条件V = = 1
计算结果为真正的
。K1
分配一个值的3.5
,K2
分配一个值的8.5
。
sim卡(“slexVariantParameters”)
如果你改变的价值VSS_MODE
来2
,仿金宝app真软件®设置的值K1
和K2
来4.5
和9.5
在模拟。你可以改变的价值V
使用这个命令或金宝appSimulink.VariantControl
对话框。
VSS_MODE。值= 2;V。Value = VSS_MODE; sim (“slexVariantParameters”)
从模型中生成代码。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)
生成的代码包含两种线性
和非线性
选择预处理条件#如果
和# elif
因为代码编译
激活时间。变异的控制变量V
使用宏定义-#定义
指令-在头文件demo_macros.h
。你可以控制的外观和位置V
在生成的代码中,防止优化消除存储V
使用存储类属性。有关更多信息,请参见存储类激活时间为不同的变体(嵌入式编码)。
% demo_macros.h% / *导出的数据定义* /%% / *定义自定义存储类:定义* /% # define V 2 / *引用:% * < Root > /获得的% * < Root > / Gain1”% * /% # endif / * RTW_HEADER_demo_macros_h_ * /%% / *
枚举类型来改善代码的可读性变异控制变量的变量参数
使用枚举类型给整数有意义的名称作为变量值的控制。枚举类型数据的更多信息,参见使用枚举数据在仿真软件模型金宝app。
在MATLAB®编辑器中,定义类,枚举值映射到有意义的名称。
打开slexVariantParameters
模型。
open_system (“slexVariantParameters”)
指定变量条件表达式V = = EngType.Small
和V = = EngType.Big
在金宝appSimulink.VariantVariable
对象K1
和K2
。
K1 = 金宝appSimulink.VariantVariable (“选择”,{“V = = EngType.Small”,3.5,“V = = EngType.Big”,8.5})
K1 = VariantVariable 2选择:_____________ _____ V = = EngType条件值。大的8.5000 V = = EngType。小3.5000 Specification: '' Bank: '' Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or remove choices
K2 = 金宝appSimulink.VariantVariable (“选择”,{“V = = EngType.Small”,4.5,“V = = EngType.Big”,9.5})
K2 = VariantVariable 2选择:_____________ _____ V = = EngType条件值。大的9.5000 V = = EngType。小4.5000 Specification: '' Bank: '' Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or remove choices
在这里,EngType
是一个基于整数枚举类,它来源于内置的数据类型,int32
。这个类有两个枚举值,小
和大
。这些枚举值有潜在的整数值1
和2
。在这个例子中,工作空间中定义的枚举类基地。你可以选择在其他存储位置定义的类中列出存储位置变异控制变量(操作数)的变体。
类型EngType.m
classdef EngType <仿金宝app真软件。IntEnumType枚举小(1)大(2)方法(静态)函数结束retVal = addClassNameToEnumNames () % addClassNameToEnumNames指定是否要添加类名称%作为前缀,枚举成员名称生成的代码。%返回true或false。%如果您没有定义这个方法,没有添加前缀。retVal = true;结束结束结束
一旦你成功地创建金宝appSimulink.VariantVariable
对象,可以用描述的方法修改它们公共方法或从VariantVariable
对话框。
激活的一个变体通过定义控制变量值V
并将它的值设置为EngType.Small
在金宝appSimulink.VariantControl
对象V
。
V = 金宝appSimulink.VariantControl (“价值”EngType.Small,“ActivationTime”,代码编译的)
V = VariantControl属性:价值:小ActivationTime:代码编译的
当你模拟模型,条件V = = 1
计算结果为真正的
。K1
分配一个值的3.5
,K2
分配一个值的8.5
。
sim卡(“slexVariantParameters”)
如果你改变的价值V
来2
,仿金宝app真软件®设置的值K1
和K2
来4.5
和9.5
在模拟。你可以改变的价值V
使用这个命令或金宝appSimulink.VariantControl
对话框。
V。Value = 2
V = VariantControl属性:值:2 ActivationTime:代码编译的
sim卡(“slexVariantParameters”)
生成的代码使用枚举类型包含的名称值而不是整数。
% slexVariantParameters_private.h% #如果V = = EngType_Big | | V = = EngType_Small% / *变量:K1引用:< Root > /获得* /% #如果V = = EngType_Big% # define rtCP_Gain_K1 (8.5)% # elif V = = EngType_Small% # define rtCP_Gain_K1 (3.5)% # endif% # endif%% #如果V = = EngType_Big | | V = = EngType_Small% / *变量:引用的K2: < Root > / Gain1 * /% #如果V = = EngType_Big% # define rtCP_Gain1_K2 (9.5)% # elif V = = EngType_Small% # define rtCP_Gain1_K2 (4.5)% # endif% # endif% # endif / * RTW_HEADER_slexVariantParameters_private_h_ * /
注意,变体参数启动激活时间,只有枚举定义使用这些技术支持:金宝app
通过子类化内置整数数据类型
int8
,int16
,int32
,uint8
,或uint16
,或者通过子类化金宝appSimulink.IntEnumType
这些枚举也支持当永久地存储在一个仿真软件®数据字典。金宝app金宝app看到枚举的数据字典。
金宝appSimulink.VariantObjects for Variant Condition Reuse of Variant Parameters
识别模型需要的变量值之后,您可以构建复杂的变异条件控制激活你的变异参数值通过定义变量条件金宝appSimulink.Variant
对象。金宝appSimulink.Variant
对象允许您跨模型和重用常见变异条件帮助你封装复杂的变异条件表达式。
您可以定义一个变量控制变量的类型
金宝appSimulink.Variant
只有在基本工作空间或在数据字典。定义金宝appSimulink.Variant
面具或模型中的控制变量类型的变体工作区不支持。金宝app为控制变量存储位置变量的更多信息,见存储位置变异控制变量参数(操作数)的变体。金宝appSimulink.Variant
在不支持结构。金宝app
打开slexVariantParameters
模型。
open_system (“slexVariantParameters”)
在MATLAB®编辑器中,封装变异控制表达式金宝appSimulink.Variant
对象。
LinearController 金宝app= Simulink.Variant (“V = = 1”);NonLinearController 金宝app= Simulink.Variant (“V = = 2”);
指定金宝appSimulink.Variant
控制在一个对象的变体金宝appSimulink.VariantVariable
对象K1
和K2
。
K1 = 金宝appSimulink.VariantVariable (“选择”,{“LinearController”,3.5,“NonLinearController”,8.5})
K1 = VariantVariable 2选择:___________________ _____ LinearController条件值3.5000 NonLinearController 8.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
K2 = 金宝appSimulink.VariantVariable (“选择”,{“LinearController”,4.5,“NonLinearController”,9.5})
K2 = VariantVariable 2选择:___________________ _____ LinearController条件值4.5000 NonLinearController 9.5000规范:“银行:“使用getChoice, setChoice, addChoice, removeChoice访问,修改,添加或删除的选择
一旦你成功地创建金宝appSimulink.VariantVariable
对象,可以用描述的方法修改它们公共方法或从VariantVariable
对话框。
通过定义一个激活其中一个变量值金宝appSimulink.VariantControl
对象V
并将它的值设置为1
。
V = 金宝appSimulink.VariantControl (“价值”,1“ActivationTime”,“更新图”)
V = VariantControl属性:值:1 ActivationTime:“更新图”
当你模拟模型,条件V = = 1
计算结果为真正的
。K1
分配一个值的3.5
,K2
分配一个值的8.5
。
sim卡(“slexVariantParameters”)
如果你改变的价值V
来2
,仿金宝app真软件®设置的值K1
和K2
来4.5
和9.5
在模拟。你可以改变的价值V
使用这个命令或金宝appSimulink.VariantControl
对话框。
V。Value = 2; sim (“slexVariantParameters”)
使用这种方法,您可以开发复杂的变异条件表达式是可重用的。