这个示例展示了与使用模型引用管理数据相关的基本概念。
有关此主题的更详细讨论,请参阅:使用模型参考管理数据的详细工作流。
注意:此示例使用与更详细示例相同的模型。因此,该模型使用了本介绍性示例未描述的某些特性。
在此示例中,Simulink®在当前目录中金宝app创建的代码生成文件夹中生成代码。如果您不想(或无法)在此目录中生成文件,则应更改工作目录。
如果您计划更改示例模型:
1.通过将以下文件从MATLAB®安装目录复制到其他目录(不更改其名称),将示例保留在其原始状态:
工具箱/模型/ 金宝appsimdemos / simfeatures / modelreference / sldemo_mdlref_datamngt。基金工具箱/模型/ si金宝appmdemos / simfeatures / modelreference / sldemo_mdlref_datamngt_wsdata。m工具箱/模型/ s金宝appimdemos / simfeatures / modelreference / sldemo_mdlref_counter_datamngt。基金工具箱/模型/ si金宝appmdemos / simfeatures / modelreference / sldemo_mdlref_counter_datamngt_types。m工具箱/模型/ s金宝appimdemos / simfeatures / modelreference / sldemo_mdlref_counter_datamngt_wsdata.m
2.将当前目录更改为复制文件到的目录。
3.继续这个例子。
开放式系统(“sldemo\U mdlref\U datamngt”)
这个例子使用了一个顶级模型(sldemo\U mdlref\U datamngt
),包含三个模型块:Counter1、Counter2和Counter3。这些块引用相同的模型(sldemo\u mdlref\u计数器\u数据MNGT
).
参考模型实现了一个有限计数器算法,该算法:
重置计数器,如果第一个触发器输入改变
如果第二个输入发生变化,则按指定的量递增计数器
使计数器在指定的上限和下限之间饱和
参考模型输出的总线信号包含:
计数:计数器的值为8位整数
OverflowState:一种枚举值,指示计数器是在上限、下限还是在范围内
示例中的步骤顺序如下:
1.准备参考模型(sldemo\u mdlref\u计数器\u数据MNGT
)来在其外部接口中使用信号和参数的结构。
2.准备顶部模型(sldemo\U mdlref\U datamngt
)调用引用的模型。
3.模拟顶部模型并检查结果。
参考模型有两个模型参数(反参数、反参数),用于参数化模型中的块。模型参数为引用模型的每个实例提供不同的参数值。在该模型中,参数被定义为参数结构,以减少传递给引用模型的参数数量。
定义模型参数的过程如下:
1.打开参考模型(sldemo\u mdlref\u计数器\u数据MNGT
).
2.定义MATLAB结构参数化参考模型。
CounterParams。增量= int8 (1);CounterParams。LowerLimit = int8 (-10);CounterParams。UpperLimit = int8 (10);
CounterICs。数= int8 (0);CounterICs。OverflowState = SlDemoRangeCheck.InRange;
注意:本例使用8位整数作为计数器,因此数字字段也使用8位整数。
3.使用MATLAB结构作为模型参数。
模型参数被定义为引用模型的模型工作空间中的变量。您可以从许多不同的数据源初始化模型工作区。这个例子使用MATLAB脚本(sldemo_mdlref_counter_datamngt_wsdata
)来创建模型参数的参数结构。使用MATLAB脚本可以方便地创建和修改模型外部的参数结构。它还有助于增量更改、版本控制和数据差异。
在模型工作区的对话框中设置数据源。
你可以使用模型资源管理器查看和编辑模型工作区的内容。
选择Argument复选框将变量配置为模型参数。
被引用的模型产生两个结果并将它们打包成总线信号:
计数:计数器的值为8位整数
OverflowState:一种枚举值,指示计数器是在上限、下限还是在范围内
要定义引用模型的根输出的总线类型,请执行以下操作:
1.使用公共汽车编辑器来定义总线对象(OutputType)。
或者,你可以在MATLAB命令行中创建总线对象:
OutputType=Si金宝appmulink.Bus;OutputType.Elements=Simulink.BusElement;OutputType.Elements(1).Name=“数”; OutputType.Elements(1).DataType=“int8”;OutputType.Elements (2) =金宝app Simulink.BusElement;OutputType.Elements(2)。Name =“飞越州”; OutputType.Elements(2).数据类型=“枚举:SlDemoRangeCheck”;
2.配置参考模型的根输出端口,以基于此总线对象(OutputType)输出非虚拟总线信号。
通常,总线信号和状态的初始值可以指定为“0”,在这种情况下,总线的所有元素将被初始化为零(或相关的接地值)。然而,在某些情况下,最好为总线信号和状态指定非零的初始值。在本例中,计数器的初始条件是可调的,因此输出信号的初始值必须设置一致。
要指定参考模型输出的初始值,请执行以下操作:
1.创建一个与要初始化的总线信号兼容的参数结构。其中一个模型参数(CounterICs)是一个与输出信号形状匹配的参数结构。该结构的定义如下:
CounterICs。数= int8 (0);CounterICs。OverflowState = SlDemoRangeCheck.InRange;
2.打开根输出对话框,并将结构的名称(CounterICs)输入初始输出字段。
注意:通常,初始化总线信号或状态时,参数结构不需要精确匹配总线类型,但其字段必须是总线对象中元素的子集,并且这些字段的属性必须匹配总线对象中的元素。
屏蔽引用模型以自定义用户界面通常很有用。可以在模型上创建遮罩,然后从模型块参照它。要遮罩模型,请单击创建模型面具在模型资源管理器的“模型工作区”部分中。
当您从模型块引用屏蔽模型时,会在模型块上自动生成一个屏蔽。有关更多信息,请参阅主题创建并引用蒙面模型。
引用的模型配置为接受其模型参数的结构。此示例使用不同的参数值调用引用模型的每个实例。
1.打开顶部模型(sldemo\U mdlref\U datamngt
).
2.创建具有与引用模型中定义的模型参数相同“shape”的参数结构。
参数1.增量=int8(1);Param1.LowerLimit=int8(-20);Param1.UpperLimit=int8(20);
Param2 = Param1;Param2。增量= int8 (2);
IC1.Count=int8(0);IC1.OverflowState=SlDemoRangeCheck.InRange;
IC2 = IC1;IC2。数= int8 (-10);
3.在被屏蔽的Model块上设置掩码参数以使用这些参数。
例如,第一个模型块的参数(“sldemo\U mdlref\U datamngt/Counter1”
)设置为:
参数1为计数器参数
IC1为初始条件
如前所述,参考模型使用两个触发器输入实现有限计数器算法。该算法检测触发器输入中的“上升沿”,并作出如下反应:
如果第一个触发器输入发生变化,则重置计数器。
如果第二个输入发生变化,则按指定的量递增计数器。
在本例中,您使用由Stimulus子系统生成的相同触发器输入驱动计数器算法的所有三个实例。触发器输入的周期和采样时间由为Stimulus子系统的掩码参数输入的值定义:
每4秒重置计数器。
每秒增加计数器5次(周期= 0.2秒)。
采样时间为0.1秒。
注意:重置和增量周期必须至少为采样时间的2倍。
1.保存或关闭引用的模型。
您需要先保存引用的模型,然后顶部模型才能使用它。或者,您可以关闭引用的模型,并使用本示例提供的模型的原始版本。
2.通过选择模拟顶部模型模拟>运行。
注意:模拟顶部模型自动生成参考模型的仿真目标。
3.查看范围块显示的模拟结果。