不同的子系统
这个模型说明了仿真软件子系统®变体。金宝app让你提供多个变体子系统的实现一个子系统仿真中只有一个实现是活跃的地方。您可以通过编程方式换出积极实施和把它换成另一个实现无需修改模型。
概述不同子系统
一块变体子系统子系统包含两个或两个以上的孩子,一个孩子是活跃在模型执行。活动被称为孩子子系统活跃的变体。您可以通过编程方式开关活跃变体子系统的变体块通过改变变量的值在全球工作空间,或通过手动覆盖变体选择使用不同的子系统块对话框。的活跃的变体是通过编程的方式连接到不同子系统的轮廓尺寸和外港块模型在模型编译。金宝app
以编程的方式控制变量的选择,金宝appSimulink.Variant
对象与每个孩子在不同子系统子系统块对话框。金宝appSimulink.Variant
在MATLAB®全球工作区中创建对象。这些对象有一个属性命名条件
,这是一个表达,评估一个布尔值,用于确定活性变异孩子子系统。
注意:您可以指定变量控制在MATLAB®全球工作区,模型空间,面具工作区,或数据字典。
例如,定义VSS_LINEAR_CONTROLLER 金宝app= Simulink.Variant (“VSS_MODE = = 1”);
在全球工作区创建一个金宝appSimulink.Variant
对象的构造函数参数(“VSS_MODE = = 1”)
定义变量时活跃。使用变体子系统对话框,然后关联VSS_LINEAR_CONTROLLER
用一个孩子的子系统子系统内的变体。定义
VSS_MODE = 1
在全球工作区,激活VSS_LINEAR_CONTROLLER
变体。参数可以是一个状况简单的表达式组成的标量变量、枚举、平等,不平等,& &,| |,~。括号()可以用于优先级分组。
使用不同的子系统
这个示例使用以下变量对象模型和变量控制变量,在MATLAB中定义全局工作空间:
VSS_LINEAR_CONTROLLER 金宝app= Simulink.Variant (“VSS_MODE = = 1”);
VSS_NONLINEAR_CONTROLLER 金宝app= Simulink.Variant (“VSS_MODE = = 2”);
VSS_MODE = 2;
打开示例模型sldemo_variant_subsystems
运行PreLoadFcn中定义的文件- > ModelProperties - >回调
。这种填充全球工作区与变体子系统块命名的变量控制器:
图1:模型的例子中,sldemo_variant_subsystems
指定金宝appSimulink.Variant
对象控制器子系统协会,右键单击并选择控制器子系统子系统参数
,这将打开控制器子系统块对话框。
控制器子系统块对话框指定两个潜在变量。相关的两个变体是反过来金宝appSimulink.Variant
对象VSS_LINEAR_CONTROLLER
和VSS_NONLINEAR_CONTROLLER
在全球存在的工作区。这些对象有一个属性命名条件,等于一个布尔表达式,确定哪些变量是活跃的。变体子系统所示的条件也是块对话框。在这个例子中,条件的属性VSS_LINEAR_CONTROLLER
和VSS_NONLINEAR_CONTROLLER
是VSS_MODE = = 1
和VSS_MODE = = 2
,分别。的变量VSS_MODE
驻留在全球工作空间,可以是一个标准或MATLAB变量金宝appSimulink.Parameter
。
如果没有相关的变量对象或一个‘%’(评论)字符前缀变量中的变量对象子系统参数对话框,然后孩子子系统是注释掉了,不是执行期间使用的模型。
图2:控制器子系统的内容块
变体子系统内块,可以将轮廓尺寸,外港,子系统模块。在这个例子中,线性控制器
子系统与变体相关块对象,VSS_LINEAR_CONTROLLER
,非线性控制器
子系统与变体相关块对象,VSS_NONLINEAR_CONTROLLER
。
信号连接是不允许的变体子系统。金宝app仿真软件编程电线尺寸和外港块时积极的变异模拟模型。
切换积极的变异
模拟使用线性控制器
变体,定义VSS_MODE = 1
在全球的工作空间,然后模拟模型。
模拟使用非线性控制器
,定义VSS_MODE = 2
在全球的工作空间,然后模拟模型。
枚举和重用
的sldemo_variant_subsystems_enum
模型说明了以下金宝appSimulink.Variant
功能:
1。枚举:MATLAB枚举类可以用来改善可读性的条件变体对象。
2。重用:金宝appSimulink.Variant
对象可以被重用在不同变体子系统模块。
这个示例使用MATLAB中定义以下变量全局工作空间:
VSSE_LINEAR_CONTROLLER 金宝app=仿真软件。变体(…“VSSE_MODE = = sldemo_vss_CONTROLLER_TYPE.LINEAR”)
VSSE_NONLINEAR_CONTROLLER 金宝app=仿真软件。变体(…“VSSE_MODE = = sldemo_vss_CONTROLLER_TYPE.NONLINEAR”)
VSSE_MODE = sldemo_vss_CONTROLLER_TYPE.LINEAR
VSSE_PROTOTYPE 金宝app=仿真软件。变体(…“VSSE_MODE_BUILD = = sldemo_vss_BUILD_TYPE.PROTOTYPE”)
VSSE_PRODUCTION 金宝app=仿真软件。变体(…“VSSE_MODE_BUILD = = sldemo_vss_BUILD_TYPE.PRODUCTION”)
VSSE_MODE_BUILD = sldemo_vss_BUILD_TYPE.PRODUCTION
在这些金宝appSimulink.Variant
对象,我们使用枚举类,sldemo_vss_BUILD_TYPE.m,sldemo_vss_CONTROLLER_TYPE.m定义金宝appSimulink.Variant
条件参数,提高了可读性。
这三个子系统模块,滤波器变体Filter1, Filter2, Filter3都使用VSSE_PROTOTYPE
和VSSE_PRODUCTION
金宝appSimulink.Variant
对象。
注意:枚举类的名称必须是唯一的数据类型名称和全局工作空间变量名称,和是区分大小写的。
打开示例模型sldemo_variant_subsystems_enum
运行PreLoadFcn中定义的文件- > ModelProperties - >回调
。这种填充全球工作区与变量变异子系统模块:
图3:模型的例子中,sldemo_variant_subsystems_enum
代码生成使用枚举类型变量控制变量
您可以使用枚举类型有意义的名字给整数作为控制变量值。
考虑到模型rtwdemo_preprocessor_subsys
。
在MATLAB编辑器中,定义的类枚举值映射到有意义的名称。
如果没有正确定义枚举类型,将会显示一个错误。这里有几个场景,导致错误。
无效的清晰度:在这种情况下,金宝appSimulink.IntEnumType
没有定义。
无效的definition2:在这种情况下,变量没有初始化。
输入变量控制表达式所示的下一个示例:
图4:块的参数
全球的工作区中定义的值V。例如,V = 2;的值可以是一个正常的MATLAB变量或一个金宝appSimulink.Parameter
对象。然而,无法枚举类型的值。
现在生成代码变体激活时间设置为代码编译
。示例代码如下所示。
图5:生成的代码
使用的信息金宝appSimulink.Variant
或金宝appSimulink.Parameter
对象或MATLAB变量作为控制变量变体,看到方法用于指定变量控制部分介绍了版本控制。
有关更多信息,请参见嵌入式编码文档变体的子系统的代码生成。