模型参考变体
此示例显示了如何使用模型参考变体。模型块用于从另一个Simulink模型引用一个Simulink®模型。金宝app模型块可以具有不同的变体。一个变体描述了模型块可以在其中运行的n可能模式之一。模型块的每个变体引用了具有可选模型特定参数的特定模型。只有一个变体可用于仿真。您可以通过更改基本工作空间中的变量值,或使用模型块对话框来切换模型块的活动变体。
示例要求
在此示例中,Simulink和Simuli金宝appnk®Coder™可以在当前工作目录中的代码生成文件夹中生成代码。如果您不想(或不能)在此目录中生成文件,则应将工作目录更改为合适的目录。
模型变体的概述
模型块用于引用一个Simulink模型(金宝app孩子模型)来自另一个simulink模金宝app型(父母模型)。模型块可以具有不同的变体。这些变体组成了一组模型,这些模型具有由模型块引用的潜力。在此示例中,有两个模型可能由名为Controller的模型块引用。
每个变体在模型块中与金宝appsimulink.variant
目的。金宝appsimulink.variant
对象是在MATLAB®基本工作区中创建的。例如:
v_linear_controller 金宝app= simulink.variant('ctrl == 1');
构造函数的论点('ctrl == 1')
定义变体活动时的条件。在这种情况下,定义:
ctrl = 1
在基本工作区将激活v_linear_controller
变体。条件参数可以是简单的表达由标量变量,枚举,平等,不等式,&&,和〜组成。括号()可用于优先组。
对于给定的模型块,一个变体在模拟过程中是活跃的。这积极的变体通过评估MATLAB基本工作区中的变体对象条件来确定。另外,您可以指示模型块通过选择特定变体来使用特定变体覆盖变体条件并使用以下变体复选框。
指定模型块的变体
此示例中使用的模型要求在MATLAB基本工作区中定义以下变量:
v_linear_controller 金宝app= simulink.variant('ctrl == 1');
v_nonlinear_controller 金宝app= simulink.variant('ctrl == 2');
ctrl = 2;
打开模型sldemo_mdlref_variants
将运行预载体定义文件 - > modelProperties->回调
。这将填充基本工作空间,并使用名为Controller的模型块的变量:
图1:顶部模型,sldemo_mdlref_variants
右键单击模型块控制器,然后选择菜单项块参数(模型Reference)至打开模型块对话框。
对话框指定了两个潜在变体。这两个变体又与两个变体相关联金宝appsimulink.variant
对象v_linear_controller
和v_nonlinear_controller
,基础工作区中存在。这些对象具有命名的属性健康)状况,一种评估布尔值的表达式,并确定哪种变体是活动的。这健康)状况也显示在模型块对话框中。在此示例中,健康)状况的v_linear_controller
和v_nonlinear_controller
是ctrl == 1
和ctrl == 2
, 分别。变量Ctrl
位于基本工作区中,可能是标准MATLAB变量或金宝appsimulink.parameter
。
切换活动变体
使用sldemo_mrv_linear_controller
, 定义:
ctrl = 1
在基本工作区中,然后模拟模型。
图2:使用sldemo_mrv_linear_controller
变体
使用sldemo_nonlinear_controller
, 定义
ctrl = 2
在基本工作区中,然后模拟模型。
图3:使用sldemo_mrv_nonlinear_controller
变体
枚举和重复使用
SLDEMO_MDLREF_VARIANTS_ENUM模型说明了金宝appsimulink.variant
功能:
1。枚举:MATLAB枚举类可用于改善变体对象条件的可读性。
2。重用:金宝appsimulink.variant
对象可以在不同的模型块中重复使用。
此示例需要在MATLAB基本工作区中定义以下变量:
ve_linear_controller 金宝app= simulink.variant('e_ctrl == sldemo_mrv_controller_type.linear')
ve_nonlinear_controller 金宝app= simulink.variant('e_ctrl == sldemo_mrv_controller_type.nonlineare')
e_ctrl = sldemo_mrv_controller_type.linear
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')
e_current_build = sldemo_mrv_build_type.production
在这些simuli金宝appnk.variant中,我们使用枚举类,sldemo_mrv_build_type.m, 和sldemo_mrv_controller_type.m在金宝appsimulink.variant
健康)状况提高可读性的属性。
这VE_Prototype
和VE_Production
金宝appsimulink.variant
对象在三个滤波器模型块(Filter1,Filter2和Filter3)上重复使用。
打开模型sldemo_mdlref_variants_enum
将运行预载体定义文件 - > modelProperties->回调
。这将填充基本工作空间,并带有用于模型块的变量,这些变量显示在MATLAB命令窗口中: