使用变量控制变量变异块
这一主题解释了如何使用控制变量变异块不同类型的变体。
考虑到slexVariantSubsystems
模型。
的控制器
子系统块对话框指定两个潜在变量线性控制器
和非线性控制器
。线性控制器
和非线性控制器
块与变异条件表达式V = = 1
和V = = 2
。在这里,V
变量控制变量,确定活动的选择。你可以改变V
根据你的要求这些类型。
标量变量控制变量快速原型的变体
标量MATLAB®版本控制变量允许您快速原型变体的选择当你还构建模型。标量MATLAB变异控制变量帮助你更加关注构建变体的选择比在发展中激活这些选择的表达式。
您可以定义标量控制变量存储位置中列出存储位置变异控制变量(操作数)的变体。
打开slexVariantSubsystems
模型。
open_system (“slexVariantSubsystems”)
VSS_MODE = 2
块的参数对话框控制器
块,指定变量控制在其最简单的形式作为标量变量,V = = 1
和V = = 2
。
在基本工作空间,定义一个变量控制变量,V
设置它的值1
,然后模拟模型。
V = 1;
在模拟过程中,线性控制器
块变得活跃。双击控制器
块的积极选择。
sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
同样的,如果你改变的价值V
来2
,非线性控制器
在模拟块变得活跃。
V = 2;sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
金宝appSimulink.Parameter
控制变量类型的变体块代码生成的变体
如果您打算为模型生成代码块包含变种,指定变量作为控制变量金宝appSimulink.Parameter
对象。金宝appSimulink.Parameter
对象允许您指定其他属性,比如数据类型和存储类,和控制变量控制的外观和位置变量生成的代码。
您可以定义一个变量控制变量的类型
金宝appSimulink.Parameter
只有在基本工作空间或在数据字典。定义金宝appSimulink.Parameter
面具或模型中的控制变量类型的变体工作区不支持。金宝app为控制变量存储位置变量的更多信息,见存储位置变异控制变量(操作数)的变体。金宝appSimulink.Parameter
以外的对象的内部结构和数据类型金宝appSimulink.Bus
不支持对象。金宝app
打开slexVariantSubsystems
模型。
open_system (“slexVariantSubsystems”)
VSS_MODE = 2
在MATLAB编辑器中,定义一个金宝appSimulink.Parameter
对象,V
。
V = 金宝appSimulink.Parameter;V。Value = 1; V.DataType =“int32”;V.CoderInfo。StorageClass =“自定义”;V.CoderInfo。CustomStorageClass =“ImportedDefine”;V.CoderInfo.CustomAttributes。HeaderFile =“rtwdemo_importedmacros.h”;
请注意:
变量定义为控制变量金宝appSimulink.Parameter
列出的对象可以有任何存储类存储类激活时间为不同的变体。
你也可以一个标量变量控制变量转换成一个金宝appSimulink.Parameter
对象。有关更多信息,请参见不同控制变量转换成仿真软件。金宝app参数对象。
指定金宝appSimulink.Parameter
对象作为块中的变量控制变量控制器的参数对话框。同时,改变变体激活时间来代码编译。
在模拟过程中,线性控制器
块变得活跃。双击控制器
块的积极选择。
sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
同样的,如果你改变的价值V
来2
,非线性控制器
在模拟块变得活跃。
V value = 2;sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
从模型中生成代码。关于如何生成代码的信息,请参阅使用嵌入式编码器生成代码(嵌入式编码)
生成的代码包含线性和非线性预处理条件的选择#如果
和# elif
因为代码编译
激活时间。变异的控制变量V
使用宏定义-#定义
指令-在头文件demos_macro.h。
你可以控制的外观和位置V
在生成的代码中,防止优化消除存储V
使用存储类属性。有关更多信息,请参见存储类激活时间为不同的变体。
% demos_macro.h% / *导出的数据定义* /%% / *定义自定义存储类:定义* /% # define V 1 / *引用:% * < S1 > /线性控制器的% * < S1 > /非线性控制器的% * /% # endif / * RTW_HEADER_demo_macros_h_ * /
枚举类型来改善代码的可读性变异控制变量的变异
使用枚举类型给整数有意义的名称作为变量值的控制。枚举类型数据的更多信息,参见使用枚举数据在仿真软件模型金宝app。
在MATLAB®编辑器中,定义类,枚举值映射到有意义的名称。
打开slexVariantSubsystems
模型。
open_system (“slexVariantSubsystems”)
VSS_MODE = 2
在基本工作空间中,定义的类枚举值映射到有意义的名称。
在这里,EngType
是一个基于整数枚举类,它来源于内置的数据类型,int32
。这个类有两个枚举值,线性
和非线性
。这些枚举值有潜在的整数值0
和1
。
类型EngType
classdef EngType <仿金宝app真软件。IntEnumType枚举小(1)大(2)结束
指定枚举名称变异控制变量的块参数对话框控制器
块。同时,改变变体激活时间来代码编译。
定义变量控制变量,V
在基本工作空间,指定它的价值EngType.Small
然后模拟模型。
V = EngType.Small;
在模拟过程中,线性控制器
块变得活跃。双击控制器
块的积极选择。
sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
生成的代码使用枚举类型包含的名称值而不是整数。在这里,值1
并表示为2EngType_Small
和EngType_Big。
% slexVariantSubsystems_types.h%的ifndef V% # define V EngType_Small% # endif%%的ifndef DEFINED_TYPEDEF_FOR_EngType_% # define DEFINED_TYPEDEF_FOR_EngType_%% typedef int32_T EngType;%% / * enum EngType * /% # define EngType_Small(1) / *默认值* /% # define EngType_Big (2)% # endif% slexVariantSubsystems.c%空白slexVariantSubsystems_step(空白)% {% #如果V = = EngType_Small%的逻辑线性控制器% # elif V = = EngType_Big%非线性控制器的逻辑% # endif%}
注意,变体街区启动激活时间,只有枚举定义使用这些技术支持:金宝app
通过子类化内置整数数据类型
int8,
int16,
int32,
uint8,
或uint16,
或者通过子类化金宝appSimulink.IntEnumType
这些枚举也支持当永久地存储在一个仿真软件®数据字典。金宝app金宝app看到枚举的数据字典。
金宝appSimulink.VariantObjects for Variant Condition Reuse of Variant Blocks
识别模型需要的变量值之后,您可以构建复杂的变异条件控制激活你的变异参数值通过定义变量条件金宝appSimulink.Variant
对象。金宝appSimulink.Variant
对象允许您跨模型和重用常见变异条件帮助你封装复杂的变异条件表达式。
您可以指定整个只变异条件表达式或变量控制变量在条件表达式的类型金宝appSimulink.Variant
。
请注意:
您可以定义一个变量控制变量的类型
金宝appSimulink.Variant
只有在基本工作空间或在数据字典。定义金宝appSimulink.Variant
面具或模型中的控制变量类型的变体工作区不支持。金宝app为控制变量存储位置变量的更多信息,见存储位置变异控制变量(操作数)的变体。金宝appSimulink.Variant
在不支持结构。金宝app
打开slexVariantSubsystems
模型。
open_system (“slexVariantSubsystems”);
VSS_MODE = 2
在MATLAB®编辑器中,封装变异控制表达式金宝appSimulink.Variant
对象。
V_LinearController 金宝app= Simulink.Variant (“V = = 1”);V_NonLinearController 金宝app= Simulink.Variant (“V = = 2”);
指定金宝appSimulink.Variant
对象作为块中的变量控制变量控制器的参数对话框。
定义变量控制变量,V
,它的值指定为1,然后模拟模型。
V = 1;
在模拟过程中,线性控制器
块变得活跃。双击控制器
块的积极选择。
sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
使用这种方法,您可以开发复杂的变异条件表达式是可重用的。
块将激活时间与控制变量的变体
金宝appSimulink.VariantControl
对象允许您将变体激活时间与控制变量的一个变体。
您可以定义金宝appSimulink.VariantControl
类型的控制变量存储位置中列出存储位置变异控制变量(操作数)的变体。
打开slexVariantParameters
模型。
open_system (“slexVariantSubsystems”)
VSS_MODE = 2
在控制器的块参数对话框,指定变量控制,V = = 1
和V = = 2
。
在定义一个基本工作空间金宝appSimulink.VariantControl
对象,V
设置它的值1
,然后模拟模型。
V = 金宝appSimulink.VariantControl (“价值”, 1“ActivationTime”,“更新图分析所有的选择”)
V = VariantControl属性:值:1 ActivationTime:“更新图分析所有选择”
请注意,变体激活时间您指定的块覆盖参数对话框ActivationTime
你指定的金宝appSimulink.VariantControl
对象。
在模拟过程中,线性控制器
块变得活跃。双击控制器
块的积极选择。
sim卡(“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):
同样的,如果你改变的价值V
来2
,非线性控制器
在模拟块变得活跃。你可以改变的价值V
使用这个命令或金宝appSimulink.VariantControl
对话框。
V。Value = 2; sim (“slexVariantSubsystems”)
ans =仿金宝app真软件。SimulationOutput:吹捧:x1双[1000]你:x1双[1000]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):