Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Model

引用另一个模型来创建模型层次结构

  • Model block

库:
Simulink / Ports & Subsystems
HDL Coder / Ports & Subsystems

描述

Model 模块引用指定的模型。该模块显示与引用模型顶层输入和输出端口对应的输入和输出端口。这些端口可将引用模型连接到父模型中的其他模块。

要确定 Model 模块是否比另一个具有类似功能的模块更适合您的目标,请参阅Explore Types of Model Components比较模型组件的功能

有关如何引用包含 Model 模块的模型的说明,请参阅引用现有模型

默认情况下,Model 模块显示引用模型内容的表示。有关详细信息,请参阅预览模型组件的内容。要查看引用模型的内容,请双击 Model 模块。

如果您拥有 Simulink® Coder™ 许可证,您可以通过保护模型来隐藏引用模型的实现细节。要保护模型,请参阅保护模型以隐藏内容 (Simulink Coder)。要引用受保护模型,请参阅引用来自第三方的受保护模型

示例

全部展开

您可以通过使用 Model 模块在一个模型中包含另一个模型。每个 Model 模块都是一个模型引用,或引用另一个模型。您可以多次引用同一模型而不必生成冗余副本,而且多个模型可以引用同一模型。

打开示例,其中包含名为 sldemo_mdlref_counter 的模型。

在您引用模型(例如 sldemo_mdlref_counter)之前,请考虑其配置、接口和内容。

sldemo_mdlref_counter 使用一个定步长离散求解器,且包含三个 Inport 模块和一个 Outport 模块。

  • 名为 upper 的 Inport 模块为计数器提供上限。

  • 名为 input 的 Inport 模块为计数器提供在每个时间步递增的值。

  • 名为 lower 的 Inport 模块为计数器提供下限(即起始值)。

  • 名为 output 的 Outport 模块提供当前计数。

每个 Inport 模块表示一个模型输入,每个 Outport 模块表示一个模型输出。

在新模型中,添加一个 Model 模块。

在属性检查器中,将模型名称设置为 sldemo_mdlref_counter

要更好地显示模块图标上的信息,请拖动 Model 模块的一角,直到没有信息重叠。

Model 模块图标显示:

  • 引用模型的名称:sldemo_mdlref_counter

  • 名为 upperinputlower 的输入端口

  • 名为 output 的输出端口

配置顶层模型以进行固定步长离散仿真。

  1. 建模选项卡上,点击模型设置

  2. 在“配置参数”对话框的求解器窗格中,将类型设置为 Fixed-step,将求解器设置为 discrete (no continuous states)

将输入和输出连接到与引用模型的预期输入和输出匹配的 Model 模块。

  • 要表示计数器的上限,请添加常量值设置为 100 的 Constant 模块。然后,将其连接到上限端口。

  • 要表示计数器增量,请添加常量值设置为 1 的 Constant 模块。然后,将其连接到输入端口。

  • 要表示计数器的下限,请添加常量值设置为 0 的 Constant 模块。然后,将其连接到下限端口。

  • 要在绘图中显示计数器输出,请添加一个 Scope 模块。然后,将其连接到输出端口。

在工具条中,点击运行

顶层模型将进行仿真并执行引用模型。示波器窗口会显示仿真的输出计数。

端口

输入

全部展开

Model 模块针对它引用的模型的每个输入端口都有一个对应的输入端口。引用模型的输入端口由 InportIn Bus Element 模块定义。Model 模块端口的名称与引用模型中对应端口的名称相匹配。每个 Model 模块端口的输入信号、消息或函数调用必须对引用模型中的对应端口有效。有关详细信息,请参阅定义模型引用接口

提示

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

  • 连接到输入端口的函数调用会传入引用模型中。要根据函数调用有条件地执行引用模型,请参阅函数调用

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image
复数支持:

输出

全部展开

Model 模块针对它引用的模型的每个输出端口都有一个对应的输出端口。引用模型的输出端口由 OutportOut Bus Element 模块定义。Model 模块上端口的名称与引用模型中对应端口的名称相匹配。Model 模块的输出信号和消息是连接到引用模型中的 OutportOut Bus Element 模块的信号和消息。请参阅定义模型引用接口

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image
复数支持:

控制

全部展开

条件执行

使能端口显示在 Model 模块的顶部。端口标签是表示使能信号的图标。

Enable port on Model block

连接到端口的控制信号确定何时执行引用模型。有关详细信息,请参阅Conditionally Execute Referenced Models

依存关系

要使能此端口,请将 Enable 模块添加到引用模型的顶层。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

触发端口显示在 Model 模块的顶部。端口标签是表示触发信号的图标。

Trigger port on Model block

连接到端口的控制信号确定何时执行引用模型。有关详细信息,请参阅Conditionally Execute Referenced Models

依存关系

要启用此端口,请将 Trigger 模块添加到引用模型的顶层,并将其触发器类型设置为上升沿下降沿任一沿

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

函数调用端口显示在 Model 模块的顶部。端口标签将引用模型的名称显示为函数。

Function-call port on Model block

连接到端口的函数调用控制信号确定何时执行引用模型。有关详细信息,请参阅Conditionally Execute Referenced Models

依存关系

要启用此端口,请将 Trigger 模块添加到引用模型的顶层,并将其触发器类型设置为函数调用

模型事件仿真

初始化事件端口提供触发模型初始化事件的函数调用控制信号,该事件会初始化引用模型的状态。

引用模型可以包含一个对应于模型初始化事件的 Initialize Function 模块。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数

依存关系

要启用此端口,请选择显示模型初始化端口

重置事件端口提供触发模型重置事件的函数调用控制信号,该事件会重置引用模型的状态。

对于每个模型重置事件,引用模型必须包含一个对应的 Reset Function 模块。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数

要指定端口名称,请使用 Reset Function 模块中 Event Listener 模块的事件名称参数。

依存关系

要启用这种类型的端口,请选择显示模型重置端口

重新初始化事件端口提供触发模型重新初始化事件的函数调用控制信号,该事件会重新初始化引用模型的状态。

对于每个模型重新初始化事件,引用模型必须包含一个对应的 Reinitialize Function 模块。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数

要指定端口名称,请使用 Reinitialize Function 模块中 Event Listener 模块的事件名称参数。

依存关系

要启用这种类型的端口,请选择 显示模型重新初始化端口

终止事件端口提供触发模型终止事件的函数调用控制信号,该事件会读取并保存引用模型的状态。

引用模型可以包含一个对应于模型终止事件的 Terminate Function 模块。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数

依存关系

要启用此端口,请选择显示模型终止端口

周期性事件端口提供指定何时执行模型的函数调用控制信号。有关示例,请参阅Test Rate-Based Model Simulation Using Function-Call Generators

每个端口标签显示关于周期性事件的信息,例如对应的 Inport 模块的采样时间。例如,此图像中的 Model 模块显示周期性事件端口并引用一个具有以下两个离散速率的模型:0.01 和 0.1。

A Model block has ports labeled D1[0.01] and D2[0.1].

依存关系

要启用这种类型的端口,请将速率调度方式设置为端口

参数

全部展开

要以交互方式修改 Model 模块参数,请选择 Model 模块。然后,在 Simulink 工具条的模型模块选项卡上,点击模块参数

常设

指定 Model 模块的基本信息。

指定引用模型的文件名。文件名必须为模型的有效 MATLAB® 标识符,如Choose Valid Model File Names中所定义。文件扩展名是可选的。

要选择要引用的模型,请点击浏览。要查看指定的模型,请点击打开模型

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ModelNameDialog
值: '' (默认) | filename in quotes
数据类型: char | string

示例: set_param(gcb,'ModelNameDialog','mymodel.slx')

要以编程方式获取模块参数值,请使用 get_param 函数。

您可以用不同格式查询引用模型的名称:

  • ModelFile - 带文件扩展名的模型名称。如果不指定文件扩展名,则由软件在 MATLAB 路径中找到的第一个匹配项确定文件扩展名。

  • ModelNameDialog - 带或不带文件扩展名的模型名称,具体取决于您是否指定了文件扩展名。

  • ModelName - 不带文件扩展名的模型名称。如果为 ModelName 指定带文件扩展名的模型名称,则软件通过设置 ModelNameDialogModelFile 来保留文件扩展名。

指定 Model 模块的仿真模式。Model 模块的仿真模式可以不同于其引用模型和模型层次结构中的其他模型的仿真模式。

  • 普通 - 以解释方式执行引用模型,就像引用模型是在父模型中直接实现的原子子系统一样。

  • 加速 - 为引用模型创建一个 MEX 文件。然后,通过运行 S-Function 来执行引用模型。

  • 软件在环(SIL) - 此选项需要 Embedded Coder® 许可证。根据代码接口参数设置生成生产代码。代码针对主机平台编译并在主机平台上执行。

  • 处理器在环(PIL) - 此选项需要 Embedded Coder 许可证。根据代码接口参数设置生成生产代码。此代码针对目标平台编译并在目标平台上执行。对于主机与目标之间的数据交换,软件提供了目标连接 API 实现,支持在 PIL 仿真的每个时间步进行此类数据交换。

Model 模块的四个角指示 Model 模块的仿真模式。对于普通模式,四个角为空心三角形。对于加速模式,四个角为实心三角形。对于 SIL 和 PIL 模式,四个角为实心三角形,且模块图标上显示有 (SIL)(PIL) 字样。

虽然您可以为模型指定任何仿真模式,但当您引用该模型时,Model 模块会指定引用模型实例的仿真模式。父模型的仿真模式可以覆盖 Model 模块的仿真模式。

有关详细信息,请参阅为模型层次结构选择仿真模式

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: SimulationMode
值: 'Normal' (默认) | 'Accelerator' | 'Software-in-the-loop' | 'Processor-in-the-loop'

示例: set_param(gcb,'SimulationMode','Accelerator')

指定是从顶层模型还是从引用模型为 SIL 和 PIL 仿真模式生成代码。要将生成的代码部署为使用引用模型的较大应用程序的一部分,请指定模型引用。要将生成的代码部署为独立应用程序,请指定顶层模型

  • 模型引用 - 代码是作为模型层次结构的一部分从引用模型生成的。代码生成使用 slbuild('model', 'ModelReferenceCoderTarget') 命令。

  • 顶层模型 - 代码是使用独立的代码接口从顶层模型生成的。代码生成使用 slbuild('model') 命令。

依存关系

要启用此参数,请将仿真模式设置为软件在环(SIL)处理器在环(PIL)

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: CodeInterface
值: 'Model reference' (默认) | 'Top model'

示例: set_param(gcb,'CodeInterface','Top model')

模型事件仿真

控制引用模型何时执行并更改状态。

选中此参数可显示初始化事件端口。清除此参数可删除该端口。

依存关系

要启用此参数,请引用未配置为条件执行的模型。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ShowModelInitializePort
值: 'off' (默认) | 'on'

示例: set_param(gcb,'ShowModelInitializePort','on')

选中此参数可显示重新初始化事件端口。清除此参数可删除这些端口。

依存关系

要启用此参数,请引用未配置为条件执行且包含 Reinitialize Function 模块的模型。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ShowModelReinitializePorts
值: 'off' (默认) | 'on'

示例: set_param(gcb,'ShowModelReinitializePorts','on')

选中此参数可显示重置事件端口。清除此参数可删除这些端口。

依存关系

要启用此参数,请引用未配置为条件执行且包含 Reset Function 模块的模型。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ShowModelResetPorts
值: 'off' (默认) | 'on'

示例: set_param(gcb,'ShowModelResetPorts','on')

选中此参数可显示终止事件端口。清除此参数可删除该端口。

依存关系

要启用此参数,请引用未配置为条件执行的模型。然后,选择显示模型初始化端口

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ShowModelTerminatePort
值: 'off' (默认) | 'on'

示例: set_param(gcb,'ShowModelTerminatePort','on')

用周期性事件控制引用模型的执行。

根据速率调度方式参数的值,选择此参数将显示 Model 模块上的周期性事件端口,或创建分区以与调度编辑器结合使用。当速率调度方式参数不可见时,将应用其默认值(端口)。

清除此参数会隐藏周期性事件端口并且不会创建分区。

依存关系

要启用此参数,请引用一个具有离散采样时间的模型,该模型未配置为条件执行且不是导出函数模型。如果父模型是基于速率的模型,而引用模型是导出函数模型,则会自动选择调度速率

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ScheduleRates
值: 'off' (默认) | 'on'

示例: set_param(gcb,'ScheduleRates','on')

创建端口或分区。

  • 端口 - 显示引用模型中离散速率的周期性事件端口。

    要手动指定端口速率,请使用 set_param 函数将 Model 模块的 AutoFillPortDiscreteRates 参数设置为 'off'。然后,使用 PortDiscreteRates 参数指定端口速率。

  • 调度编辑器 - 为引用模型创建分区以便与调度编辑器结合使用。

依存关系

要启用此参数,请进行如下设置:

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ScheduleRatesWith
值: 'Ports' (默认) | 'ScheduleEditor'

示例: set_param(gcb,'ScheduleRatesWith','ScheduleEditor')

实例参数

为模型参数指定特定于实例的值。

显示实例参数并指定特定于实例的值。实例参数是已在引用模型中进行配置、用于对模型的每个实例使用不同值的模块参数。

要指定特定于实例的值,请使用表中的列。要指定参数值可以被父模型覆盖,请选中参数复选框。有关在引用模型中配置实例参数以及在 Model 模块中指定特定于实例的值的详细信息,请参阅 参数化可重用引用模型的实例

更改特定于实例的值时,可以使用非完全结构体,该结构体的字段仅对应于您希望更改其值的实例参数。不包含在此非完全结构体中的实例参数保持其值不变。在结构体中包含实例参数名称和值,指定为字符向量。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ParameterArgumentValues
值: structure with no fields (默认) | structure
数据类型: struct
参数: InstanceParameters
值: structure with fields Name, Value, Path, and Argument
数据类型: struct

求解器

使用引用模型的配置参数和引用该模型的每个 Model 模块的模块参数的组合来配置局部求解器参数。

引用模型配置参数

此参数提供超链接,该超链接可打开模块所引用的模型的“配置参数”对话框。在“配置参数”对话框中,选中或清除引用模型的引用模型时使用局部求解器配置参数。当您选中引用模型时使用局部求解器时,引用模型使用局部求解器。

当您将引用模型配置为使用局部求解器时,局部求解器会在仿真期间计算引用模型的状态值。使用局部求解器可以提高仿真性能,因为它允许您:

  • 与系统的其余部分相比,为动态特性较慢的组件指定较大的步长。

  • 选择更适合引用模型的不同求解器。

有关详细信息,请参阅Use Local Solvers in Referenced Models

此参数提供超链接,该超链接可打开模块所引用的模型的“配置参数”对话框。在“配置参数”对话框中,为求解器参数选择一个值,以指定用作引用模型的局部求解器的求解器。

局部求解器必须为定步长求解器。

依存关系

要启用此参数,请在此模块引用的模型的模型配置参数中选择引用模型时使用局部求解器

此参数提供超链接,该超链接可打开模块所引用的模型的“配置参数”对话框。在“配置参数”对话框中,指定引用模型的固定步长(基础采样时间) 参数值以指定局部求解器的步长。

局部求解器步长必须为父求解器步长的整数倍。

依存关系

要启用此参数,请在此模块引用的模型的模型配置参数中选择引用模型时使用局部求解器

模型模块参数

由于局部求解器的执行与父求解器的执行是分离的,因此局部求解器从模型引用外部进行外插,并将内插值提供给父求解器。有关详细信息,请参阅Use Local Solvers in Referenced Models

使用此参数指定局部求解器如何从模型引用外部进行外插值。

  • 自动 - 使用默认输入处理,包括数值补偿,可改进顶层求解器和局部求解器之间的数据交换。

  • 零阶保持 - 使用父求解器计算的最后一个值。

指定自动输入处理通常会提高仿真结果的准确度。自动输入处理比零阶保持输入处理的计算量更大。

在以下任一情况下,考虑使用零阶保持输入处理:

  • 当仿真结果可接受但零阶保持输入处理和性能令人担忧时

  • 当引用模型没有输入端口时

  • 当输入端口值不影响连续状态计算时

  • 当导数的重要部分基于状态本身时,例如,来自模型中的反馈回路

  • 需要提高在给定步长条件下的局部求解器稳定性

依存关系

要启用此参数,请在此模块引用的模型的模型配置参数中选择引用模型时使用局部求解器

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: InputSignalHandling
值: 'Auto' (默认) | 'Zero-order hold'

示例: set_param(gcb,'InputSignalHandling','Zero-order hold')

由于局部求解器的执行与父求解器的执行是分离的,因此局部求解器从模型引用外部进行外插,并将内插值提供给父求解器。有关详细信息,请参阅Use Local Solvers in Referenced Models

使用此参数指定局部求解器用于向父求解器提供值的插值方法。

  • 使用求解器插值 - 使用局部求解器的插值来计算插值状态和输出信号值。

  • 零阶保持 - 将局部求解器在当前时间之前计算的最后一个值用于顶层求解器。

通常,使用求解器插值进行输出处理可以提高准确性。零阶保持输出处理会降低计算复杂度,但也会降低准确性。

依存关系

要启用此参数,请在此模块引用的模型的模型配置参数中选择引用模型时使用局部求解器

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: OutputSignalHandling
值: 'Use solver interpolant' (默认) | 'Zero-order Hold'

示例: set_param(gcb,'OutputSignalHandling','Zero-order Hold')

模块特性

数据类型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

直接馈通

多维信号

a

可变大小信号

a

过零检测

a 实际支持的数据类型或功能取决于模块实施。

提示

要以编程方式确定 Model 模块是否引用受保护模型,请使用 get_param 函数查询 Model 模块的只读 ProtectedModel 参数。如果引用模型为受保护模型,函数将返回 'on'。如果引用模型不是受保护模型,函数将返回 'off'

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开