文档

模型参考变异体

这个例子展示了如何使用模型引用变量。模型块用于从另一个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_CONTROLLERCTRL = = 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命令窗口中:

这个话题有帮助吗?