主要内容

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

Simulink.SubSystem.convertToModelReference

将子系统转换为模型

说明

Simulink.SubSystem.convertToModelReference(blk,UseConversionAdvisor=true) 打开 blk 指定的子系统的模型引用转换顾问

在使用此函数之前,请加载包含子系统的模型。

示例

[tf,h] = Simulink.SubSystem.convertToModelReference(blks,mdls)blks 指定的一个或多个子系统转换为由 mdls 指定名称的模型。

对于该函数转换的每个子系统,该函数会:

  • 创建一个模型。

  • 将子系统的内容复制到新模型中。

  • 更新新模型的根级输入和输出模块,以使用来自原始子系统的已编译属性。

  • 将父模型的配置集复制到新模型,或引用与父模型相同的配置集。该转换可以更改新模型的一些配置设置,以支持将新模型用作引用模型。

适用时,该函数还:

  • 将子系统使用的模型工作区内容从父模型复制到新模型。

  • 将父模型使用的数据字典应用于新模型。

  • 创建新模型所需的 Simulink.Bus 对象、Simulink.Signal 对象和可调参数。

  • 基于原始 Subsystem 模块的模块封装为新模型创建系统封装。系统封装不支持模块封装的某些功能,例如封装初始化代码。有关详细信息,请参阅Introduction to System Mask

  • 将使用 Requirements Toolbox™ 软件创建的需求链接从原始的 Subsystem 模块复制到新 Model 模块。

示例

[tf,h] = Simulink.SubSystem.convertToModelReference(blks,mdls,Name=Value) 用于在上述语法中的输入参量之外另使用一个或多个名称-值参量指定选项。例如,要应用自动修复,请将 AutoFix 设置为 true

示例

示例

全部折叠

打开并编译名为 sldemo_mdlref_conversion 的模型。为了使转换成功,包含子系统的模型必须成功编译。

mdl = "sldemo_mdlref_conversion";
open_system(mdl);
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

模型编译时没有警告或错误。

打开名为 Bus Counter 的 Subsystem 模块的模型引用转换顾问。

blk = "sldemo_mdlref_conversion/Bus Counter";
Simulink.SubSystem.convertToModelReference(blk,...
    UseConversionAdvisor=true);
Updating Model Advisor cache...
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

Model Reference Conversion Advisor 将打开。

打开并编译名为 sldemo_mdlref_conversion 的模型。为了使转换成功,包含子系统的模型必须成功编译。

mdl = "sldemo_mdlref_conversion";
open_system(mdl);
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

模型编译时没有警告或错误。

打开名为 Bus Counter 的 Subsystem 模块的模型引用转换顾问。

blk = "sldemo_mdlref_conversion/Bus Counter";
newmdl = "BusCounter";
Simulink.SubSystem.convertToModelReference(blk,newmdl);
### Successfully converted Subsystem block to Model block.

默认情况下,该函数不会用 Model 模块替换 Subsystem 模块。相反,该函数会打开新窗口,其中包含引用新模型的 Model 模块。

untitled model with Model block named Bus Counter

打开并编译名为 sldemo_mdlref_conversion 的示例模型。为了使转换成功,包含子系统的模型必须成功编译。

mdl = "sldemo_mdlref_conversion";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

模型编译时没有警告或错误。

将名为 Bus Counter 的 Subsystem 模块的内容转换为名为 BusCounter 的引用模型,指定以下选项:

  • 尽可能自动修复问题。

  • 用引用新模型的 Model 模块替换 Subsystem 模块。

  • 检查转换前后的仿真结果。

subsys = "sldemo_mdlref_conversion/Bus Counter";
newmdl = "BusCounter";
Simulink.SubSystem.convertToModelReference(subsys,newmdl,...
   AutoFix=true,ReplaceSubsystem=true,CheckSimulationResults=true);
### Successfully converted Subsystem block to Model block.

sldemo_mdlref_conversion model with Model block named Bus Counter

Subsystem 模块被一个 Model 模块替换,该 Model 模块引用名为 BusCounter 的模型。

Simulink.SubSystem.convertToModelReference 函数的一次调用可以将多个子系统转换为引用模型。

打开并编译名为 f14 的模型。为了使转换成功,包含子系统的模型必须成功编译。

mdl = "f14";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

f14 model with Subsystem blocks named Controller and Aircraft Dynamics Model

模型编译时没有警告或错误。

为转换准备模型,以消除或减少转换过程中发现的问题数量。

为了能够检查转换前后的仿真结果是否相等,请使用 Dataset 格式记录模型的输出。

set_param(mdl,SaveOutput="on",SaveFormat="Dataset")

新引用模型将从父模型继承其配置参数设置。更新 f14 模型以使用建议的信号解析设置。此设置仅支持为 Simulink.Signal 对象显式指定的信号解析。

set_param(mdl,SignalResolutionControl="UseLocalSettings")

将名为 ControllerAircraft Dynamics Model 的 Subsystem 模块的内容转换为引用模型,指定以下选项:

  • 自动修复问题。

  • 用引用新模型的 Model 模块替换 Subsystem 模块。

  • 在转换前后检查仿真结果。

ss1 = "f14/Controller";
ss2 = "f14/Aircraft Dynamics Model";
mdl1 = "Controller";
mdl2 = "AircraftDynamics";
Simulink.SubSystem.convertToModelReference([ss1 ss2],[mdl1 mdl2],...
    AutoFix=true,ReplaceSubsystem=true,CheckSimulationResults=true)
### Successfully converted Subsystem block to Model block.

f14 model with Model blocks named Controller and Aircraft Dynamics Model

名为 ControllerAircraft Dynamics Model 的 Subsystem 模块被分别引用名为 ControllerAircraftDynamics 的模型的 Model 模块替换。

输入参数

全部折叠

子系统模块路径或句柄,指定为数值标量、字符向量或字符串标量。

有关可以转换的子系统的信息,请参阅Conditionally Execute Referenced Models

数据类型: double | char | string

子系统模块路径或句柄,指定为数值数组、字符向量、字符向量元胞数组或字符串数组。

有关可以转换的子系统的信息,请参阅Conditionally Execute Referenced Models

当指定要转换的多个子系统时,转换过程会尝试转换每个子系统。即使其他子系统的转换失败,成功转换的子系统也会生成引用模型。

您不能同时转换父级子系统及其子级。

提示

与单独转换每个子系统相比,指定使用一个命令转换多个子系统可以节省时间。多个子系统的转换过程只编译一次模型。

当您指定多个子系统时:

数据类型: double | char | string | cell

新模型的唯一名称,指定为字符向量、字符向量元胞数组或字符串数组。

每个模型名称不得超过 59 个字符。有关详细信息,请参阅选择有效的模型文件名

当指定要转换的多个子系统时,请指定相同数量的模型名称。每个模型名称对应于一个指定的子系统,而且顺序相同。

数据类型: char | string | cell

名称-值参数

全部展开

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: Simulink.SubSystem.convertToModelReference(blk,mdl,AutoFix=true,ReplaceSubsystem=true)

转换

全部展开

自动修复转换问题,指定为 falsetrue

当您将 AutoFix 设置为 true 时,顾问会自动修复一些转换问题。对于顾问无法修复的问题,您必须手动解决这些问题。

顾问可以修复转换问题,例如跨子系统边界的 GotoFrom 模块。基于自动修复,新模型可以比原始子系统有更多端口。

要减少转换过程中所需的修复次数,请参阅准备转换子系统

依存关系

当您将 Force 设置为 true 时,软件会忽略此选项。

数据类型: logical

降低错误的强制转换,指定为 falsetrue

当您将 Force 设置为 true 时,转换过程会将错误作为警告返回,并且不会修复错误,即使您将 AutoFix 设置为 true 也是如此。

Force 设置为 true 可让您使用该函数来执行转换的初始步骤。然后,您自己完成转换过程。

数据类型: logical

转换数据文件的唯一名称,指定为字符向量或字符串标量。

转换数据文件存储在转换期间创建的变量和对象。

默认情况下,文件名以父模型名称开头,以 _conversion_data.mat 结尾。例如,对于名为 mymodel 的模型中的子系统,默认转换文件名为 mymodel_conversion_data.mat

您可以将转换数据保存在 MAT 文件 (.mat) 或脚本 (.m) 中。当您指定 .m 文件扩展名时,文件会序列化变量。

要控制文件的目标,请用绝对或相对路径指定文件名。

依存关系

要使用此参量,父模型不能使用数据字典。

数据类型: char | string

模型接口

全部展开

保留父模型布局的包装子系统,指定为 falsetrue

当您将子系统转换为引用模型时,转换过程可以创建一个包装子系统。该包装子系统包含来自转换的 Model 模块。

如果转换向接口添加端口,则转换会自动创建一个包装子系统。例如,当 GotoFrom 模块跨子系统边界时,Model 模块可以比原始 Subsystem 模块有更多端口。该转换会创建一个包装子系统,其端口数量与原始子系统相同。该包装子系统包含引用新模型的 Model 模块。

数据类型: logical

用于接口定义的新总线对象,指定为 falsetrue

与子系统不同,模型需要定义的接口。要定义包含虚拟总线的接口,新模型必须使用以下选项之一:

  • In Bus ElementOut Bus Element 模块

  • 指定 Simulink.Bus 对象的 InportOutport 模块

默认情况下,转换不会创建总线对象。但是,转换使用 In Bus ElementOut Bus Element 模块来支持模型接口处的虚拟总线。

当您将 CreateBusObjectsForAllBuses 设置为 true 时,转换会为连接到子系统输入端口和输出端口的虚拟总线创建总线对象。

当父模型使用数据字典时,新总线对象位于该数据字典中。要保存总线对象,请保存父模型或数据字典。当父模型不使用数据字典时,总线对象保存在由 DataFileName 指定的文件中。

数据类型: logical

从父模型复制的代码映射,指定为 falsetrue

当您将 CopyCodeMappings 设置为 true 时,该函数会将现有代码映射配置从父模型复制到新模型中。

代码映射信息包括用于代码生成的模型数据元素的配置。此参量不影响仿真。

有关详细信息,请参阅Convert Subsystem to Referenced Model and Generate Code (Simulink Coder)

数据类型: logical

模型实现

全部展开

用引用模型替换子系统,指定为 falsetrue

默认情况下,转换不会更新原始模型。当原始模型处于打开状态时,转换会打开新窗口,其中包含引用新模型的 Model 模块。

当您将 ReplaceSubsystem 设置为 true 时,转换会尝试将您指定的每个 Subsystem 模块替换为引用对应新模型的 Model 模块。如果自动修复将端口添加到接口,则为了保留父模型布局,顾问会将原始 Subsystem 模块替换为包含新 Model 模块的 Subsystem 模块。

提示

在转换子系统之前考虑备份原始模型。如果要撤消转换,备份可以帮助您还原原始模型。使用备份,您还可以将新系统封装与原始 Subsystem 模块封装进行比较。新模型的系统封装可能不同于原始 Subsystem 模块的模块封装。例如,转换不会将封装初始化代码从模块封装复制到系统封装。有关详细信息,请参阅Introduction to System Mask

数据类型: logical

Model 模块的仿真模式,指定为 "Normal""Accelerator""Software-in-the-loop (SIL)"、字符向量元胞数组或字符串数组。

Model 模块仿真模式控制引用模型的对应实例的仿真模式。引用同一模型的另一个 Model 模块可以指定不同仿真模式。

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

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

  • "Software-in-the-loop (SIL)" - 此选项需要 Embedded Coder® 许可证。根据 Model 模块的代码接口参数设置生成生产代码。代码针对主机平台编译并在主机平台上执行。

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

父模型的仿真模式可以覆盖 Model 模块的仿真模式。有关详细信息,请参阅为模型层次结构选择仿真模式

当您指定一个要转换的子系统时,请将新 Model 模块的仿真模式指定为 "Normal""Accelerator""Software-in-the-loop (SIL)"

示例: Simulink.SubSystem.convertToModelReference(blk,mdl,ReplaceSubsystem=true,SimulationModes="Accelerator")

在 R2024b 之前的版本中: 在元胞数组或字符串数组中指定 SimulationModes 值。

当您指定多个要转换的子系统时,请在字符串数组或字符向量元胞数组中指定每个新 Model 模块的仿真模式。使用与指定新模型的子系统和名称相同的顺序来指定 Model 模块仿真模式。

示例: Simulink.SubSystem.convertToModelReference([blk1 blk2],[mdl1 mdl2],ReplaceSubsystem=true,SimulationModes=["Normal" "Accelerator"])

依存关系

要使用此参量,请将 ReplaceSubsystem 设置为 true

数据类型: char | string | cell

要生成的模型引用目标,指定为 "Sim""Coder"

  • "Sim" - 生成模型引用仿真目标。

  • "Coder" - 生成模型引用代码生成目标。

仿真结果比较

全部展开

转换前后顶层模型仿真结果的比较,指定为 falsetrue

如果仿真结果之间的差异超出容差级别,则该函数会显示一条错误消息。

提示

在执行转换之前:

依存关系

要使用此参量,请执行以下操作:

  • 为相关的子系统输出信号启用信号记录。

  • ReplaceSubsystem 设置为 true

数据类型: logical

仿真结果比较的停止时间,指定为数值标量。

停止时间必须为大于或等于父模型开始时间的有限标量。有关详细信息,请参阅开始时间

依存关系

要使用此参量,请将 CheckSimulationResults 设置为 true

数据类型: double

用于比较的绝对信号容差,指定为数值标量。

当测得信号的值接近于零时,绝对容差是可接受的最大求解器误差。转换前的仿真结果建立基线。转换后的仿真结果必须在容差范围内。

依存关系

要使用此参量,请将 CheckSimulationResults 设置为 true

数据类型: double

用于比较的相对信号容差,指定为数值标量。

相对容差是可接受的最大求解器误差(相对于每个时间步期间每个信号的大小)。转换前的仿真结果建立基线。转换后的仿真结果必须在容差范围内。

默认值 (0.001) 表示比较信号精确到基线信号的 0.1%。

依存关系

要使用此参量,请将 CheckSimulationResults 设置为 true

数据类型: double

输出参量

全部折叠

true 或 false 结果,以数据类型 logical10 形式返回。

1 表示转换成功。

如果将 Force 设置为 true,则转换完成后,该函数将返回值 1。但是,仿真结果可能与转换前模型的仿真结果不同。

创建的 Model 模块的句柄,以数值数组形式返回。

数据类型: double

版本历史记录

在 R2006a 中推出

全部展开