文档

模型参考变异体

这个例子展示了如何使用模型引用变体。模型块用于从另一个Simulink模型引用一个Simulink®模型。万博1manbetx变体子系统块可以包含模型块作为变体。一个变体描述变体子系统块可以在N种可能的模式中操作的一种。每个变量引用一个特定模型及其相关的特定模型参数。只有一个变种是主动的模拟。您可以通过更改基本工作空间中变量的值来切换活动变量,或者通过使用variant Subsystem块对话框手动重写变量选择。

对于新模型,使用Variant Subsystem块而不是Model块来包含模型变体,除非您需要使用有条件执行的模型变体(具有控制端口的模型)。万博1manbetx在未来的版本中,将不再支持使用Model块来包含模型变体。

例子要求

在本例中,Simulink和Simulin万博1manbetxk®Coder™可能会在当前工作文件夹中的代码生成文件夹中生成代码。如果不想(或不能)在此文件夹中生成文件,则应更改工作文件夹。

模型变异概述

模型块用于引用一个Simulink模型(万博1manbetx孩子模型)从另一个Simulink模型万博1manbetx(模型).变体子系统块可以将模型块作为变体。变体由一组模型组成,这些模型有可能被变体子系统块引用。在这个示例中,有两个模型可能被名为Controller的变体子系统块引用。

每一个变体万博1manbetx仿真软件。变体对象。万博1manbetx仿真软件。变体对象是在MATLAB®基础工作空间中创建的。例如:

V_LINEAR_CONTROLLER 万博1manbetx= Simulink.Variant(“CTRL = = 1”);

其中构造函数参数(“CTRL = = 1”)定义变量处于活动状态时的条件。在本例中,定义:

CTRL = 1

在基本工作区中将激活V_LINEAR_CONTROLLER变体。条件参数可以是简单的表达式由标量变量、枚举、等式、不等式、&&、~组成。括号()可用于优先分组。

对于给定的变型子系统块,在仿真过程中有一个变型是主动的。的活跃的变体通过在MATLAB基础工作空间中评估变量对象条件来确定。或者,您可以通过选择重写变量条件并使用下面的变量复选框。

指定变量

本例中使用的模型需要在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的变量子系统块的变量填充基本工作区:

图1:前模型,sldemo_mdlref_variants

右键单击Variant子系统块Controller并选择菜单项块参数(子系统)打开区块对话框

对话框指定了两种可能的变体。这两个变体依次与这两个相关联万博1manbetx仿真软件。变体对象V_LINEAR_CONTROLLERV_NONLINEAR_CONTROLLER,它们存在于基本工作空间中。这些对象有一个名为条件,该表达式的计算结果为布尔值,并确定哪个变量是活动的。的条件也显示在变体子系统块对话框中。在这个例子中,条件V_LINEAR_CONTROLLERV_NONLINEAR_CONTROLLERCTRL = = 1CTRL = = 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仿真软件。变体对象可以在不同的变体子系统块中重用。

这个例子需要在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.msldemo_mrv_CONTROLLER_TYPE.m万博1manbetx仿真软件。变体条件属性以提高可读性。

VE_PROTOTYPEVE_PRODUCTION万博1manbetx仿真软件。变体对象在三个过滤器变体子系统块(Filter1、Filter2和Filter3)中重用。

打开模型sldemo_mdlref_variants_enum运行PreLoadFcn中定义的文件-> ModelProperties ->回调.这个回调函数用变量子系统块填充基本工作空间,这些变量在MATLAB命令窗口中显示:

这个话题有用吗?