主要内容

使用模型参考管理数据介绍

这个例子展示了与使用模型引用管理数据相关的基本概念。

有关此主题的更详细讨论,请参见使用模型参考管理数据的详细工作流

注意:此示例使用与更详细示例相同的模型。因此,该模型使用了本介绍性示例没有描述的某些特性。

打开示例模型

打开示例模型sldemo_mdlref_datamngt

内容示例

这个例子使用了一个顶层模型sldemo_mdlref_datamngt其中包含三个Model块:Counter1、Counter2和Counter3。这些块引用相同的模型sldemo_mdlref_counter_datamngt

所引用的模型实现了一个有限的计数器算法:

  • 如果第一个触发器输入发生变化,则重置计数器

  • 如果第二个输入发生变化,则将计数器增加指定的数量

  • 使计数器在指定的上限和下限之间饱和

引用的模型输出一个总线信号,其中包含:

  • 数:计数器的值为8位整数

  • OverflowState:枚举值,指示计数器是在上限、下限还是在范围内

示例概述

本例中的步骤顺序如下:

1.准备参考模型(sldemo_mdlref_counter_datamngt)在其外部接口中使用信号和参数的结构。

2.准备顶部模型(sldemo_mdlref_datamngt)来调用引用的模型。

3.模拟顶部模型并检查结果。

参考模型:设置参数

引用的模型有两个模型参数(CounterParams, CounterICs),它们将模型中的块参数化。模型参数为引用模型的每个实例提供不同的参数值。在这个模型中,参数被定义为参数结构,以减少传递给引用模型的参数数量。

定义模型参数的过程如下:

1.打开引用的模型sldemo_mdlref_counter_datamngt

2.定义MATLAB结构以参数化参考模型。

CounterParams。增量= int8(1);CounterParams。LowerLimit = int8(-10);CounterParams。UpperLimit = int8(10);
CounterICs。Count = int8(0);CounterICs。OverflowState = sldemangcheck . inrange;

注意:本例使用8位整数作为计数器,因此数值字段也使用8位整数。

3.使用MATLAB结构作为模型参数。

模型参数被定义为引用模型的模型工作区中的变量。您可以从许多不同的数据源初始化模型工作区。此示例使用MATLAB脚本(sldemo_mdlref_counter_datamngt_wsdata)来创建模型参数的参数结构。使用MATLAB脚本可以很容易地在模型之外创建和修改参数结构。它还有助于增量更改、版本控制和数据差异。

在模型工作区的对话框中设置数据源。

您可以使用模型浏览器查看和编辑模型工作区的内容。

选择Argument复选框以将变量配置为模型参数。

参考模型:定义输出总线信号的形状

引用的模型产生两个结果,并将它们打包成一个总线信号:

  • 数:计数器的值为8位整数

  • OverflowState:枚举值,指示计数器是在上限、下限还是在范围内

为引用模型的根输出定义总线类型:

1.使用公共汽车编辑器来定义总线对象(OutputType)。

或者,您可以在MATLAB命令行创建总线对象:

OutputType = 金宝appSimulink.Bus;OutputType。Elements = 金宝appSimulink.BusElement;OutputType.Elements(1)。Name =“数”;OutputType.Elements(1)。数据类型=“int8”;OutputType.Elements(2) = 金宝appSimulink.BusElement;OutputType.Elements(2)。Name =“OverflowState”;OutputType.Elements(2)。数据类型=“枚举:SlDemoRangeCheck”

2.配置引用模型的根输出端口,以根据该总线对象(OutputType)输出非虚拟总线信号。

参考模型:设置总线输出的初始值

通常,总线信号和状态的初始值可以指定为“0”,在这种情况下,总线的所有元素都将初始化为零(或相关的接地值)。然而,在某些情况下,为总线信号和状态指定非零初始值是可取的。在本例中,计数器的初始条件是可调的,因此输出信号的初始值必须设置一致。

指定引用模型输出的初始值:

1.创建与要初始化的总线信号兼容的参数结构。其中一个模型参数(CounterICs)是一个匹配输出信号形状的参数结构。该结构定义如下:

CounterICs。Count = int8(0);CounterICs。OverflowState = sldemangcheck . inrange;

2.打开根输出端口的对话框,并将结构的名称(CounterICs)输入初始输出字段。

注意:通常,在初始化总线信号或状态时,参数结构不需要完全匹配总线类型,但其字段必须是总线对象中元素的子集,并且这些字段的属性必须与总线对象中的元素匹配。

参考模型:屏蔽参考模型

对引用的模型进行屏蔽以定制用户界面通常是有用的。您可以在模型上创建掩码,然后从model块中引用它。如需屏蔽模型,请单击创建模型蒙版在模型资源管理器的模型工作区部分。

顶层模型:参数化模型块

被引用的模型被配置为接受其模型参数的结构。这个例子用不同的参数值调用引用模型的每个实例。

1.打开顶层模型sldemo_mdlref_datamngt

2.创建与引用模型中定义的模型参数具有相同“形状”的参数结构。

清晰的Param1Param2IC1IC2;Param1。增量= int8(1);Param1。LowerLimit = int8(-20);Param1。UpperLimit = int8(20);
Param2 = Param1;Param2。增量= int8(2);
IC1。Count = int8(0);IC1。OverflowState = sldemangcheck . inrange;
Ic2 = ic1;IC2。Count = int8(-10);

3.设置掩码模型块上的掩码参数以使用这些参数。

例如,第一个Model块的参数“sldemo_mdlref_datamngt / Counter1”设置为:

  • Param1计数器参数

  • IC1初始条件

顶层模型:调度对引用模型的调用

如前所述,所引用的模型实现了具有两个触发器输入的有限计数器算法。该算法检测触发器输入中的“上升边”,并做出如下反应:

  • 如果第一个触发器输入发生变化,则重置计数器。

  • 如果第二个输入发生变化,则将计数器增加指定的数量。

在本例中,您使用相同的触发器输入驱动计数器算法的所有三个实例,这些触发器输入由刺激子系统生成。触发输入的周期和采样时间由为刺激子系统的掩码参数输入的值定义:

  • 每4秒重置一次计数器。

  • 每秒增加计数器5次(周期= 0.2秒)。

  • 采样时间为0.1秒。

注意:重置周期和增量周期必须至少为采样时间的2倍。

模拟顶模

1.保存或关闭引用的模型。

您需要在顶级模型使用引用模型之前保存它。或者,您可以关闭引用的模型,并使用此示例提供的模型的原始版本。

2.通过选择模拟顶模型模拟>运行

注意:模拟顶部模型会自动为引用模型生成一个仿真目标。

3.检查由Scope块显示的模拟结果。

另请参阅

|

相关的话题