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)

  3. 点击确定

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

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

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

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

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

在工具条中,点击运行

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

打开模型 SecondOrderSystemTop。该模型包含 Ramp 模块,该模块为引用某二阶系统模型的 Model 模块提供输入信号。Model 模块输出信号连接到 Outport 模块。

topmdl = "SecondOrderSystemTop";
open_system(topmdl)

The model SecondOrderSystemTop.

要在引用模型中导航,请双击 Model 模块。或者,为 Model 模块创建一个 Simulink.BlockPath 对象,并使用 open 函数在模型层次结构的上下文中打开引用模型。

mdlblkpath = Simulink.BlockPath(topmdl + "/Model");
open(mdlblkpath)

The contents of the model reference.

引用模型使用 Transfer Fcn 模块实现二阶系统,并包含对系统变化或扰动建模的 Step 模块。

系统传递函数是在 Transfer Fcn 模块中使用两个模型工作区变量 wnz 指定的,这两个变量表示系统的固有频率(单位为弧度/秒)和系统阻尼系数。

通过在模型工作区中将变量 wn 的值指定为 100,使用 100 弧度/秒的固有频率对系统进行配置。

refmdl = "SecondOrderSystem";
mdlwksp = get_param(refmdl,"ModelWorkspace");
assignin(mdlwksp,"wn",100)

将引用模型配置为使用步长为 0.01 秒的局部求解器。您可以使用“属性检查器”或“模块参数”对话框从顶层模型中配置引用模型的设置。

  1. 打开属性检查器。在建模选项卡上,展开设计部分并选择属性检查器,或按 Ctrl+Shift+I

  2. 要打开引用模型的“配置参数”对话框,请选择 Model 模块。然后,在属性检查器中,展开求解器部分,并点击使用局部求解器参数旁边的超链接。

  3. 将模型配置为在模型层次结构中引用时使用局部求解器。在“配置参数”对话框的模型引用窗格中,选择引用模型时使用局部求解器

  4. 选择定步长 ode3 作为局部求解器。在求解器窗格上,从类型列表中选择 Fixed-step。然后,从求解器列表中,选择 ode3 (Bogacki-Shampine)

  5. 将局部求解器步长设置为 0.01 秒。在求解器窗格上,展开求解器详细信息。然后,在定步长(基础采样时间) 框中,输入 0.01

  6. 点击确定

或者,使用 set_param 函数来配置参数。

set_param(refmdl,UseModelRefSolver="on",...
    SolverType="Fixed-Step",Solver="ode3",FixedStep="0.01")

在顶层模型中,Model 模块指示您指定的局部求解器。

The solver name ode3 is on the bottom of the Model block icon.

为模型引用指定通信步长。通信步长指定父求解器和局部求解器交换数据的时间,并在顶层模型中注册为离散采样时间。

顶层模型中的 Ramp 模块的斜率为 0.2,顶层求解器使用的步长为 0.2 秒。由于与二阶系统的动态特性相比,来自顶层模型的输入信号变化缓慢,因此通信步长可以比局部求解器步长大得多,而不会对仿真结果的准确性产生显著影响。

将通信步长指定为 0.4 秒。选择 Model 模块。然后,在属性检查器的求解器下,在通信步长框中输入 0.4

或者,使用 set_param 函数设置 CommunicationStepSize 参数。

set_param(topmdl + "/Model",CommunicationStepSize="0.4")

对模型进行仿真,使用局部求解器计算二阶系统的响应。

out = sim(topmdl);

要查看仿真结果,请打开仿真数据检查器。在仿真选项卡的查看结果下,点击数据检查器。或者,调用 Simulink.sdi.view 函数。

Simulink.sdi.view

在单独的子图上绘制名为 System ResponseSystem Response - Top 的信号。或者,使用 Simulink.sdi.loadView 函数加载名为 FastSecondOrderSystem 的视图,该视图是为此示例创建的。

Simulink.sdi.loadView("FastSecondOrderSystem.mldatx");

Two subplots in the Simulation Data Inspector display the system response. The top plot shows the system response logged inside the referenced model, and the bottom plot shows the system response logged from the top model.

System ResponseSystem Response - Top 信号是同一信号,只是记录在不同的位置。System Response 信号以局部求解器步长确定的速率记录在引用模型中。System Response - Top 信号由顶层模型中的 Outport 模块以顶层求解器步长确定的速率记录。由于局部求解器步长比顶层求解器步长小得多,因此当 Step 模块输出值以更高的保真度变化时,System Response 信号会采集系统对输入信号变化的响应。

System Response 信号中,您可以看到局部求解器在每个通信步之间使用零阶保持对输入信号进行插值的效果。如果在时间轴上大约 5 秒处放大,可以看到系统对该通信步的振荡响应。

A subplot in the Simulation Data Inspector shows the signal named System Response between simulation times of approximately 3 seconds and 7 seconds.

打开模型 SecondOrderSystemTop。该模型包含 Ramp 模块,该模块为引用某二阶系统模型的 Model 模块提供输入信号。Model 模块输出信号连接到 Outport 模块。

topmdl = "SecondOrderSystemTop";
open_system(topmdl)

The model SecondOrderSystemTop.

要在引用模型中导航,请双击 Model 模块。或者,为 Model 模块创建一个 Simulink.BlockPath 对象,并使用 open 函数在模型层次结构的上下文中打开引用模型。

mdlblkpath = Simulink.BlockPath(topmdl + "/Model");
open(mdlblkpath)

The contents of the model reference.

引用模型使用 Transfer Fcn 模块实现二阶系统,并包含对系统变化或扰动建模的 Step 模块。

系统传递函数是在 Transfer Fcn 模块中使用两个模型工作区变量 wnz 指定的,这两个变量表示系统的固有频率(单位为弧度/秒)和系统阻尼系数。

通过在模型工作区中将变量 wn 的值指定为 1,使用 1 弧度/秒的固有频率对系统进行配置。

refmdl = "SecondOrderSystem";
mdlwksp = get_param(refmdl,"ModelWorkspace");
assignin(mdlwksp,"wn",1)

将引用模型配置为使用步长为 0.4 秒的局部求解器。您可以使用“属性检查器”或“模块参数”对话框从顶层模型中配置引用模型的设置。

  1. 打开属性检查器。在建模选项卡上,展开设计部分并选择属性检查器,或按 Ctrl+Shift+I

  2. 要打开引用模型的“配置参数”对话框,请选择 Model 模块。然后,在属性检查器中,展开求解器部分,并点击使用局部求解器参数旁边的超链接。

  3. 将模型配置为在模型层次结构中引用时使用局部求解器。在“配置参数”对话框的模型引用窗格中,选择引用模型时使用局部求解器

  4. 选择定步长 ode3 作为局部求解器。在求解器窗格上,从类型列表中选择 Fixed-step。然后,从求解器列表中,选择 ode3 (Bogacki-Shampine)

  5. 将局部求解器步长设置为 0.4 秒。在求解器窗格上,展开求解器详细信息。然后,在定步长(基础采样时间) 框中,输入 0.4

  6. 点击确定

或者,使用 set_param 函数来配置参数。

set_param(refmdl,UseModelRefSolver="on",...
    SolverType="Fixed-Step",Solver="ode3",FixedStep="0.4")

在顶层模型中,Model 模块指示您指定的局部求解器。

The solver name ode3 is on the bottom of the Model block icon.

当局部求解器步长大于父求解器步长时,通过将通信步长参数指定为 -1 来继承通信步长。通信步长指定父求解器和局部求解器交换数据的时间,并在父模型中注册为离散采样时间。

set_param(topmdl + "/Model",CommunicationStepSize="-1")

对模型进行仿真,使用局部求解器计算二阶系统的响应。

out = sim(topmdl,StopTime="20");

要查看仿真结果,请打开仿真数据检查器。在仿真选项卡的查看结果下,点击数据检查器。或者,调用 Simulink.sdi.view 函数。

Simulink.sdi.view

在单独的子图上绘制名为 System ResponseSystem Response - Top 的信号。或者,使用 Simulink.sdi.loadView 函数加载名为 SlowSecondOrderSystem 的视图,该视图是为此示例创建的。

Simulink.sdi.loadView("SlowSecondOrderSystem.mldatx");

Two subplots in the Simulation Data Inspector display the system response. The top plot shows the system response logged inside the referenced model, and the bottom plot shows the system response logged from the top model.

System ResponseSystem Response - Top 信号是同一信号,只是记录在不同的位置。System Response 信号以局部求解器步长确定的速率记录在引用模型中。System Response - Top 信号由顶层模型中的 Outport 模块以顶层求解器步长确定的速率记录。为 System Response 信号记录的数据点较少,因为局部求解器步长大于父求解器步长。

端口

输入

全部展开

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 仿真模式生成代码。要将生成的代码部署为使用引用模型的较大应用程序的一部分,请指定模型引用。要将生成的代码部署为独立应用程序,请指定顶层模型

  • 模型引用 - 代码是作为模型层次结构的一部分从引用模型生成的。代码生成使用类似于以下命令的命令,为名为 ModelName 的模型生成代码。

    slbuild("ModelName","ModelReferenceCoderTarget")

  • 顶层模型 - 代码是使用独立的代码接口从顶层模型生成的。代码生成使用类似于以下命令的命令,为名为 ModelName 的模型生成代码。

    slbuild("ModelName")

依存关系

要启用此参数,请将仿真模式设置为软件在环(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" (默认) | "Schedule Editor"

示例: set_param(gcb,ScheduleRatesWith="Schedule Editor")

实例参数

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

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

要指定特定于实例的值,请使用表中的列。要指定参数值可以被父模型覆盖,请选中参量复选框。有关在引用模型中配置实例参数以及在 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

依存关系

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

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

局部步长可以大于、小于或等于父求解器步长。但是,确定局部求解器和父求解器何时交换数据的通信步长会限制局部步长可能采用的值。

  • 局部步长必须小于或等于通信步长。

  • 当局部步长小于通信步长时,局部步长必须为通信步长的整数除数。

    例如,当通信步长为 0.1 秒时,局部求解器步长可以是 0.1 秒、0.05 秒、0.025 秒等整数除数。

在 R2024a 之前: 当父求解器是定步长求解器时,局部求解器步长必须为父求解器步长的整数倍。

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

依存关系

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

模型模块参数

通信步长指定局部求解器和父求解器交换数据的速率。通信步长注册为父模型中 Model 模块的离散采样时间。默认情况下,通信步长采用继承 (-1) 并由软件确定。

当您显式指定通信步长时,您指定的值必须满足以下所有约束:

  • 通信步长必须:

    • 大于或等于局部步长和父步长

    • 是局部步长和父步长的整数倍

    • 大于或等于引用模型中的最快离散速率

  • 引用模型中的每个离散速率必须能被通信步长整除。

当局部步长大于父步长时,将通信步长指定为继承 (-1) 或等于局部步长。例如,如果父步长为 1 秒,局部步长为 2 秒,则将通信步长指定为 -1(继承)或 2。将通信步长指定为较大的值(如 4)可能会降低准确性,但不会带来任何性能提升。

编程用法

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

参数: CommunicationStepSize
值: -1 (默认) | positive scalar double
数据类型: double

示例: set_param(gcb,CommunicationStepSize="0.5")

局部求解器通过外插来自父求解器的连续导数或输入信号值来计算连续状态值和模块输出值。此参数指定局部求解器用于将连续导数或输入信号值外插至局部仿真时间的方法。

  • 自动 - 软件根据所选求解器、模型结构以及局部步长与父求解器步长的比较结果来确定外插方法。

    在以下情况下,局部求解器使用零阶保持将输入信号值外插至局部仿真时间:

    • 选择了 ode1beode14x 等隐式求解器。

    • 引用模型没有输入端口。

    • 局部步长小于父步长。

    否则,局部求解器使用适用于所选求解器的外插算法将连续导数外插至局部仿真时间。外插算法通常会提高仿真结果的准确性,但计算量大于零阶保持外插。

    在 R2024a 之前: 软件仅根据所选求解器确定如何外插连续导数或输入信号值,并且局部步长始终大于或等于父求解器步长。

  • 零阶保持 - 局部求解器使用零阶保持将输入信号值外插至局部仿真时间。局部仿真时间的每个输入信号值等于父求解器在最近的通信步中为信号计算的值。

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

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

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

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

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

当父求解器对 Model 模块执行更新方法时,局部求解器在局部求解器推进阶段独立传播时间。因为在父求解器仿真循环中,更新方法在推进方法之前执行:

  • 局部求解器的推进发生在父求解器推进之前。

  • 在仿真时间内,局部求解器先于父求解器执行。

为了计算引用模型内的连续状态值和模块输出值,局部求解器将连续导数或输入信号值外插至局部仿真时间。有关详细信息,请参阅Use Local Solvers in Referenced Models

依存关系

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

编程用法

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

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

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

在父求解器仿真时间,局部求解器可能需要在模型引用接口上提供输出信号的值。为了提供输出信号值,局部求解器对影响输出信号值的连续状态值进行插值,或对输出信号值本身进行插值。此参数指定局部求解器如何对连续状态值或输出信号值进行插值。

  • 自动 - 软件根据局部步长与通信步长的比较结果确定插值方法。 (自 R2024a 起)

    • 当局部步长小于通信步长时,局部求解器使用零阶保持将输出信号值插值到父求解器仿真时间。

    • 当局部步长大于或等于通信步长时,局部求解器使用局部求解器插值将连续状态值插值到父求解器仿真时间。然后,局部求解器使用经过插值的连续状态值计算父求解器仿真时间的输出信号值。

  • 使用求解器插值 - 局部求解器使用局部求解器插值将连续状态值插值到父求解器仿真时间中。仅当局部步长大于或等于父求解器步长时,才支持此选项。

  • 零阶保持 - 局部求解器使用零阶保持将输出信号值插值到父求解器仿真时间。

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

当父求解器对 Model 模块执行更新方法时,局部求解器在局部求解器推进阶段独立传播时间。因为在父求解器的仿真循环中,更新方法先于推进方法执行:

  • 局部求解器的推进发生在父求解器推进之前。

  • 在仿真时间内,局部求解器先于父求解器执行。

为了计算输出信号值以提供给父求解器,局部求解器会对 Model 模块输出方法中使用的连续状态值或父求解器仿真时间的输出信号值进行插值。有关详细信息,请参阅Use Local Solvers in Referenced Models

依存关系

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

编程用法

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

参数: OutputSignalHandling
值: "Auto" (默认) | "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 之前推出

全部展开