这个例子展示了如何使用模型引用变量。模型块用于从另一个Simulink模型引用一个Simulink®模型。万博1manbetx一个变体子系统块可以包含模型块作为变体。一个变体描述了一个变体子系统块可以运行的N种可能模式中的一种。每个变体引用一个特定的模型及其相关的特定于模型的参数。只有一个变量被激活用于模拟。您可以通过更改基本工作区中的变量值来切换活动变量,或者通过使用variant子系统块对话框手动覆盖变量选择。
对于新的模型,使用Variant子系统块而不是Model块来包含模型变量,除非您需要使用有条件执行的模型(带有控制端口的模型)的变量。万博1manbetx对使用Model块来包含模型变量的支持将在未来的版本中删除。
在本例中,Simulink和Simulin万博1manbetxk®Coder™可能会在当前工作文件夹中的代码生成文件夹中生成代码。如果不想(或不能)在此文件夹中生成文件,则应该更改工作文件夹。
一个Model块用来引用一个Simulink模型万博1manbetx孩子模型)从另一个Simulink模型万博1manbetx(the父模型).一个变体子系统块可以有模型块作为变体。变量包含一组模型,这些模型有可能被变量子系统块引用。在本例中,有两个模型可能被名为Controller的Variant子系统块引用。
每一个变体与万博1manbetx仿真软件。变体
对象。万博1manbetx仿真软件。变体
对象是在MATLAB®基础工作区中创建的。例如:
V_LINEAR_CONTROLLER 万博1manbetx= Simulink.Variant(“CTRL = = 1”);
其中构造函数参数(“CTRL = = 1”)
定义变量处于活动状态时的条件。在本例中,定义为:
CTRL = 1
将在基本工作区中激活V_LINEAR_CONTROLLER
变体。条件参数可以是a简单的表达式由标量变量、枚举、相等、不相等、&&、和~组成。括号()可用于优先级分组。
对于给定的变体子系统块,在模拟过程中有一个变体是活动的。的活跃的变体是通过在MATLAB基础工作空间中评估不同的对象条件来确定的。或者,您可以通过选择变量来指示Variant子系统块使用特定的变量重写变量条件并使用以下变量复选框。
本例中使用的模型要求在MATLAB基本工作区中定义以下变量:
V_LINEAR_CONTROLLER 万博1manbetx= Simulink.Variant(“CTRL = = 1”);
V_NONLINEAR_CONTROLLER 万博1manbetx= Simulink.Variant (CTRL = = 2);
CTRL = 2;
打开模型sldemo_mdlref_variants
运行PreLoadFcn中定义的文件-> ModelProperties ->回调
.这个回调用名为Controller的Variant子系统块的变量填充基本工作区:
图1:前模型,sldemo_mdlref_variants
右键单击Variant子系统块控制器并选择菜单项块参数(子系统)来打开块对话框.
对话框指定了两个可能的变量。这两个变体依次与两个相关联万博1manbetx仿真软件。变体
对象V_LINEAR_CONTROLLER
而且V_NONLINEAR_CONTROLLER
,它们存在于基本工作区中。这些对象有一个名为条件一个表达式,计算结果为一个布尔值,并确定哪个变量是活动的。的条件也显示在变量子系统块对话框中。在本例中,条件为V_LINEAR_CONTROLLER
而且V_NONLINEAR_CONTROLLER
是CTRL = = 1
而且CTRL = = 2
,分别。的变量CTRL
驻留在基本工作区中,可以是一个标准的MATLAB变量或一个万博1manbetx仿真软件。参数
.
来模拟使用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模型说明了这一点万博1manbetx仿真软件。变体
功能:
1.枚举:MATLAB枚举类可用于提高变量对象条件下的可读性。
2.重用:万博1manbetx仿真软件。变体
对象可以在不同的Variant子系统块中重用。
本例要求在MATLAB基本工作区中定义以下变量:
VE_LINEAR_CONTROLLER 万博1manbetx= Simulink.Variant(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.LINEAR”)
VE_NONLINEAR_CONTROLLER 万博1manbetx= Simulink.Variant(“E_CTRL = = sldemo_mrv_CONTROLLER_TYPE.NONLINEAR”)
E_CTRL = sldemo_mrv_CONTROLLER_TYPE。线性
VE_PROTOTYPE 万博1manbetx= Simulink.Variant(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PROTOTYPE”)
VE_PRODUCTION 万博1manbetx= Simulink.Variant(“E_CURRENT_BUILD = = sldemo_mrv_BUILD_TYPE.PRODUCTION”)
E_CURRENT_BUILD = sldemo_mrv_BUILD_TYPE。生产
在这些模型。万博1manbetx变体对象we use the enumeration classessldemo_mrv_BUILD_TYPE.m而且sldemo_mrv_CONTROLLER_TYPE.m在万博1manbetx仿真软件。变体
条件属性以提高可读性。
的VE_PROTOTYPE
而且VE_PRODUCTION
万博1manbetx仿真软件。变体
对象在三个过滤器变量子系统块(Filter1、Filter2和Filter3)中重用。
打开模型sldemo_mdlref_variants_enum
运行PreLoadFcn中定义的文件-> ModelProperties ->回调
.这个回调用Variant子系统块的变量填充基本工作区,这些变量显示在MATLAB命令窗口中: