Main Content

定义模型引用接口

Model 模块上的端口对应于引用模型的顶层或根层的模块。端口可以是输入、输出或控制端口。

例如,在 sldemo_mdlref_basic 模型中,每个 Model 模块都引用 sldemo_mdlref_counter 模型并且具有:

  • 三个输入端口,分别命名为 upperinputlower

  • 一个输出端口,名为 output

Each Model block receives three input signals and returns one output signal.

sldemo_mdlref_counter 引用模型具有:

  • 三个 Inport 模块,分别命名为 upperlowerinput

  • 一个 Outport 模块,名为 output

Blocks that represent model input and output are part of the block diagram for the model.

当您将一个信号连接到一个 Model 模块端口时,您会将该信号连接到引用模型的对应端口。尽管引用模型相同,但 Model 模块的输出可能不同。

例如,在 sldemo_mdlref_basic 中,每个 Model 模块的输入端口从唯一的 Pulse Generator 模块接收信号。由于每个 Pulse Generator 模块的输入信号使用不同的采样时间,来自每个 Model 模块的输出信号也不同,尽管引用模型相同。

要查看每个 Model 模块的输出信号有何不同,您可以使用仿真数据检查器

Simulation Data Inspector plot of the output signal for each model instance

向模型引用接口添加端口

一个模型引用接口支持多种类型的端口和端口模块。

下表描述了模型引用接口支持的端口类型和对应的端口模块。

端口的类型对应的端口模块
信号端口、输入Inport 模块
信号端口、输出Outport 模块
总线元素端口、输入In Bus Element 模块
总线元素端口、输出Out Bus Element 模块
控制端口、使能Enable 模块
控制端口、触发Trigger 模块
控制端口、函数调用触发器类型设置为函数调用Trigger 模块
函数端口、客户端Function Element Call 模块
函数端口、服务器Function Element 模块

要将端口添加到模型引用接口,请执行以下任一操作:

  • 在引用模型的顶层,添加与端口对应的模块。

  • 在父模型中,将端口添加到引用该模型的 Model 模块中。

注意

如果模型中的最大端口号超出模型中的端口数,则无法向模型引用接口添加端口。例如,如果模型中有五个端口模块,您将其中一个端口模块的端口号参数更改为 10,则无法再向该模型引用接口添加端口。

要打开引用模型,请打开模型文件或双击 Model 模块。然后,将端口模块添加到引用模型中。

要将端口添加到 Model 模块,请使鼠标在模块的四条边中的任一条上暂停。当指针变为十字时,点击鼠标。以蓝色突出显示的新端口出现在您点击的边上。

将指针在新端口上暂停。在展开的操作菜单中,选择要创建的端口类型。例如,您可以创建信号端口和总线元素端口。

An input port is added to a Model block and then deleted.

您也可以将端口添加到 Model 模块,方法是从您要连接到 Model 模块边的模型元素拖动一条信号线。

An input port is added to a Model block by dragging a signal line from a Constant block to the edge of the Model block.

从端口模块拖动会创建一个相同类型的新端口。从表示端口模块的 SubsystemModel 模块端口拖动也会创建一个与端口模块类型相同的新端口。

Model 模块的输入信号必须对引用模型的对应输入模块有效。Model 模块的输出信号是连接到对应输出模块的信号。

要删除现有端口,请选择该端口并按 Delete 键。要删除多个端口,请按住 Shift 键选择各个端口,然后按 Delete 键。

有关具有控制端口的引用模型的详细信息,请参阅Conditionally Execute Referenced Models

提示

您可以使用相同的方法在链接到模型的 Reference Component (System Composer) 模块和 Component (AUTOSAR Blockset) 模块中添加和删除端口。

刷新 Model 模块

刷新 Model 模块会更新它以反映对引用模型的接口的更改。例如,当引用模型获得或丢失一个端口时,刷新 Model 模块会更新其端口。

默认情况下,在加载引用模型时,引用它的 Model 模块会自动刷新。如果未加载引用模型,则当您执行诸如以下的操作时,对应的 Model 模块会刷新:

  • 打开父模型

  • 选择 Model 模块

  • 仿真模型层次结构

  • 为模型层次结构生成代码

如果需要在 Simulink® 检测到 Model 模块可能与其引用模型不匹配时收到通知,请更改下列诊断配置参数的默认设置:

当模型的这些配置参数设置为错误时,该模型中的 Model 模块不会自动刷新。要在这些配置参数设置为错误时刷新 Model 模块,请执行以下操作中的任何一个:

当模型的这些配置参数设置为警告时,您可以手动刷新模型层次结构中的所有 Model 模块。为此,请执行以下任一操作:

定义信号属性

引用模型中的信号属性独立于 Model 模块的上下文。例如,信号维度和数据类型不会跨 Model 模块边界传播。

要定义引用模型的输入的属性,请使用根级 InportIn Bus Element 模块的参数。In Bus Element 模块可以完全指定输入总线的层次结构和属性,而无需 Simulink.Bus 对象。

InportOutport 模块不同,In Bus ElementOut Bus Element 模块支持多速率虚拟总线并且在模型接口处不需要 Simulink.Bus 对象。

对于连接到 Outport 模块以从引用模型传播到父模型的信号,信号名称必须显式出现在信号线上。

引用模型只能输入或输出用户定义的定点数据类型或者由 Simulink.DataTypeSimulink.Bus 对象定义的数据类型。

在模型接口处使用总线

Model 模块的总线输入必须与引用模型预期的总线一致。

如果您使用总线作为引用模型的输入或输出,则:

  • 只有一个非虚拟总线可以包含可变大小信号元素。

  • 对于代码生成,仅当使用非虚拟总线或使用 C++ 类接口的默认样式时,您可以为引用模型配置 C++ 类接口的 I/O 参量单步方法样式。

  • 对于代码生成,您只能在使用非虚拟总线时为引用模型配置函数原型控制。

要获得更干净的总线接口,请使用:

  • In Bus Element 模块,而不是将 Inport 模块连接到 Bus Selector 模块

  • Out Bus Element 模块,而不是将 Bus Creator 模块连接到 Outport 模块

有关详细信息,请参阅Simplify Subsystem and Model Interfaces with Bus Element Ports

有关将总线和 Inport 模块结合使用的模型层次结构的示例,请参阅Interface Specification Using Bus Objects

在引用模型中记录信号

在引用模型中,您可以对配置为信号记录的任何信号进行记录。使用信号记录选择器选择模型层次结构中配置为信号记录的部分或所有信号。有关详细信息,请参阅Override Signal Logging Settings

您可以使用仿真数据检查器来查看和分析在引用模型中记录的信号。您可以在多个绘图上查看信号、缩放和使用数据游标来理解和计算数据。此外,您可以比较来自多个仿真的信号数据。有关查看引用模型中信号的示例,请参阅Viewing Signals in Model Reference Instances

配置采样时间

连接到引用模型根级输入或输出模块的第一个非虚拟模块必须具有与相关端口相同的采样时间。如果采样时间不同,请使用 Rate Transition 模块来匹配输入和输出采样时间,如此模块图所示。

Simple block diagram with one Rate Transition block after the Inport block and another Rate Transition block before the Outport block

在引用模型实例之间共享数据

默认情况下,每个 Model 模块实例分别读写模型中不同的信号和模块状态副本。因此,实例之间不会通过共享信号或状态数据进行交互。

要在所有实例之间共享一段数据(例如,累加器或故障指示器),可将数据建模为数据存储。

  • 要限制数据访问,从而只允许引用模型中的模块读取和写入数据,请在模型中使用 Data Store Memory 模块并选择跨模型实例共享参数。有关示例,请参阅Share Data Among Multiple Instances of a Reusable Algorithm

  • 要允许对引用模型之外的数据进行访问,请使用全局数据存储,它是基础工作区或数据字典中的 Simulink.Signal 对象。引用模型之外的数据可以位于父模型或在其他引用模型之中。

有关数据存储的详细信息,请参阅通过创建数据存储对全局数据建模

另请参阅

| | | |

相关主题