Main Content

模型引用基础知识

您可以通过使用 Model 模块在一个模型中包含另一个模型。Model 模块的每个实例均为模型引用。对于仿真和代码生成,引用模型中的多个模块作为一个单元一起执行。包含引用模型的模型是父模型。父模型和引用模型的集合构成了模型层次结构

模型既可作为独立模型也可作为引用模型,无需更改模型本身或从其派生的任何实体。要将引用模型用作独立模型,引用模型不能依赖于只能从更高级别模型获得的数据。

模型引用的好处

和子系统一样,模型引用允许您按层次结构组织大型模型。和库一样,模型引用允许您一次定义一组模块并重用该模块组。模型引用具有子系统和库所不具备的多种优势。其中几个优势源于引用模型的编译与 Model 模块的上下文无关,包括:

  • 模块化开发

    您可以独立地开发引用模型,而不用考虑使用它的模型。

  • 模型保护

    如果具有 Simulink® Coder™ 许可证,您可以隐藏引用模型的内容,从而免于在分发该模型时泄露其中包含的知识产权。

    如果具有 Simulink 许可证,您可以引用第三方提供的受保护模型。根据授予的受保护模型权限,您可以查看、仿真和生成受保护模型的代码。

  • 通过引用包含

    您可以多次引用同一模型而不必生成冗余副本,而且多个模型可以引用同一模型。

  • 增量加载

    Simulink 软件在需要时才加载引用模型,这样可以加快模型的加载速度。

  • 加速仿真

    Simulink 软件可将引用模型转换为代码并通过运行代码来仿真该模型,这比交互式仿真更快。

  • 增量代码生成

    加速仿真仅在模型自上次生成代码以来发生了更改的情况下才生成代码。

  • 独立配置集

    引用模型使用的配置集可与父模型或其他引用模型使用的配置集不同。

要通过视频了解模型引用的优势,请参阅使用模型引用进行模块化设计(2 分 50 秒)

要比较模型引用、子系统和库,请参阅Choose Among Types of Model Components。您可以在同一模型中使用多个组件化方法。

模型层次结构

引用模型可以包含引用较低级别模型的 Model 模块。顶层模型是引用模型层次结构中的顶层模型。如果只存在一个级别的模型引用,则父模型和顶层模型是同一模型。为了防止循环继承,Model 模块不能直接或间接引用模型层次结构中高于它的模型。下图显示了循环继承。

A top model references model A, which references model B. The referenced models, model A and model B, cannot reference the top model. Model B also cannot reference model A, which is its parent model.

父模型中可以包含引用同一个模型的多个 Model 模块,只要引用模型没有定义全局数据即可。例如,sldemo_mdlref_basic 模型包含三个引用 sldemo_mdlref_counter 模型的 Model 模块。

Three Model blocks display the name of the referenced model (sldemo_mdlref_counter) on their block icons.

该引用模型还可以显示在其他父模型的任何级别中。

Model 模块和引用模型接口

Model 模块上显示的输入、输出和控制端口对应于它所引用的模型的根级输入、输出和控制端口。要将引用模型与父模型中的其他元素连接起来,请使用这些 Model 模块端口。将一个信号连接到 Model 模块端口会将该信号连接到引用模型中的对应端口。

在模型 sldemo_mdlref_basic 中,每个 Model 模块有三个输入:两个 Constant 模块和一个 Pulse Generator 模块。每个 Model 模块都有一个输出信号记录到示波器。由于每个 Pulse Generator 模块的输入信号使用不同的采样时间,因此对于每个模型实例,各个 Model 模块的输出信号也各不相同。

为了与父模型建立连接,引用模型 sldemo_mdlref_counter 也包括三个 Inport 模块(上限下限输入)和一个 Outport 模块(输出)。

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

引用模型中的信号属性独立于 Model 模块的上下文。例如,信号维度和数据类型不会跨 Model 模块边界传播。要在引用模型中定义信号属性,请为根级 InportIn Bus Element 模块定义模块参数。

有关详细信息,请参阅模型引用接口和边界

模型工作区和数据字典

每个模型都有自己的工作区,用于存储变量值。在模型层次结构中,每个模型工作区相当于一个唯一的命名空间。因此,您可以在多个模型工作区中使用同一个变量名称。要在各模型之间共享数据,您可以使用数据字典。

在以下情况下,模型引用层次结构中可能存在重复的数据定义:

  • 层次结构中的每个模型只能看到一个定义。

  • 定义在层次结构中的各模型之间必须相同。

有关变量和对象的存储位置的详细信息,请参阅确定在何处存储 Simulink 模型的变量和对象

引用模型的执行

要使用外部信号控制是否在仿真期间执行 Model 模块,请参阅Conditionally Execute Referenced Models

Variant Subsystem 模块可以包含 Model 模块作为变体系统。有关变体系统的信息,请参阅什么是变体以及何时使用变体

默认情况下,一个模块参数的值在可重用的引用模型的每个 Model 模块实例中是相同的。要为可重用的引用模型的每个实例指定不同的模块参数值,需创建模型实参。例如,如果将 Gain 模块添加到模型 sldemo_mdlref_counter,则模型实参允许此模型的三个实例中的每个实例使用不同增益值。请参阅参数化可重用引用模型的实例

通过模型封装,您可以控制 Model 模块的外观,并自定义模块显示模型参数的方式。有关模型封装的要求,请参阅模型封装

引用模型仿真和代码生成

您可以以解释方式(在普通模式下)或通过将引用模型编译为代码并执行该代码(在加速模式下),对引用模型进行仿真。有关详细信息,请参阅为模型层次结构选择仿真模式

Simulink 缓存文件包含可以加快仿真和代码生成的编译工件。有关详细信息和示例工作流,请参阅共享 Simulink 缓存文件以加快仿真速度

要了解如何为模型引用层次结构生成代码,请参阅Generate Code for Model Reference Hierarchy (Simulink Coder)

另请参阅

相关主题