Main Content

Simulink.SubSystem.convertToModelReference

将子系统转换为模型引用

说明

示例

Simulink.SubSystem.convertToModelReference(gcb,'UseConversionAdvisor',true) 打开所选 Subsystem 模块的模型引用转换顾问

[tf,h] = Simulink.SubSystem.convertToModelReference(subsys,model) 将指定的子系统转换为引用模型。

在转换每个子系统时,函数会:

  • 创建一个模型。

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

  • 更新任何根级输入和输出模块以及模型的配置参数,以匹配原始子系统的已编译属性。

  • 将原始模型的模型工作区的内容复制到新模型。

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

示例

[tf,h] = Simulink.SubSystem.convertToModelReference(subsys,model,Name,Value) 使用一个或多个名称-值参量指定选项。

示例

全部折叠

打开并仿真名为 sldemo_mdlref_conversion 的模型。

model = "sldemo_mdlref_conversion";
open_system(model);
sim(model);

模型仿真时没有警告或错误。

点击名为 Bus Counter 的 Subsystem 模块。然后,使用 Simulink.SubSystem.convertToModelReference 函数打开该 Subsystem 模块的模型引用转换顾问。

Simulink.SubSystem.convertToModelReference(gcb,...
    '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 的示例模型。

model = "sldemo_mdlref_conversion";
open_system(model);
sim(model);

模型仿真时没有警告或错误。

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

  • 尽可能自动修复问题。

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

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

Simulink.SubSystem.convertToModelReference(...
   'sldemo_mdlref_conversion/Bus Counter', ...
   'bus_counter_ref_model', ...
   'AutoFix',true,...
   'ReplaceSubsystem',true,...
   'CheckSimulationResults',true);
### Successfully converted Subsystem block to Model block.

Subsystem 模块被名称为 Bus Counter 的 Model 模块替换,该 Model 模块引用名为 bus_counter_ref_model 的模型。

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

打开并仿真名为 f14 的模型。

model = "f14";
open_system(model);
sim(model);

模型仿真时没有警告或错误。

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

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

set_param(gcs,...
    'SaveOutput','on',...
    'SaveFormat','Dataset');

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

set_param(gcs,'SignalResolutionControl','UseLocalSettings');

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

  • 自动修复问题。

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

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

Simulink.SubSystem.convertToModelReference(...
    {'f14/Controller','f14/Aircraft Dynamics Model'},...
    {'controller_ref_model','aircraft_dynamics_ref_model'},...
    'AutoFix',true,...
    'ReplaceSubsystem',true,...
    'CheckSimulationResults',true)
### Successfully converted Subsystem block to Model block.

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

输入参数

全部折叠

子系统名称或句柄,指定为数值数组、字符向量、字符向量元胞数组或字符串数组。

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

数据类型: double | char | string

引用模型名称,指定为字符向量、字符向量元胞数组或字符串数组。每个模型名称不得超过 59 个字符。

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

数据类型: char | string

名称-值参数

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

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

示例: Simulink.SubSystem.convertToModelReference...(engineSubsys,engineModelRef,'ReplaceSubsystem',true)

转换

全部折叠

修复所有可自动修复的转换问题的选项,指定为 truefalse

如果将 AutoFix 设置为 true,则该函数会修复所有可以修复的转换问题。对于函数不能修复的问题,转换过程会生成错误消息,您可以通过修改模型来消除这些错误消息。

注意

如果将 Force 设置为 true,则函数不会自动修复转换问题。

数据类型: logical

即使有错误也会完成转换的选项,指定为 truefalse

如果设置为 true,该函数会以警告形式返回转换错误,并继续转换而不修复错误,即使您将 AutoFix 设置为 true 也是如此。Force 选项允许您使用该函数执行转换的初始步骤,然后自己完成转换过程。

数据类型: logical

用于存储转换数据的文件名,指定为字符向量。您可以指定绝对或相对路径。

您可以将转换数据保存在 MAT 文件(默认)或 MATLAB® 文件中。如果使用 .m 文件扩展名,则该函数会将所有变量串行化为一个 MATLAB 文件。

默认情况下,该函数使用由模型名称加上 _conversion_data.mat 组成的文件名。

数据类型: char

模型接口

全部折叠

插入包装子系统以保留模型布局的选项,指定为 truefalse

将子系统转换为引用模型时,可以让转换过程插入包装子系统以保留父模型的布局。子系统包装会包含转换时产生的 Model 模块。

如果转换通过添加端口修改 Model 模块接口,则转换会自动创建包装子系统。

数据类型: logical

为接口定义创建总线对象的选项,指定为 truefalse

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

  • In Bus ElementOut Bus Element 模块

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

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

当您将此参数设置为 true 时,转换会为连接到未指定 Bus 对象的 InportOutport 模块的所有虚拟总线创建 Bus 对象。转换将 InportOutport 模块保留在模型接口上,它们会指定新的 Bus 对象。

数据类型: logical

将代码映射从父模型复制到新模型的选项,指定为 truefalse

如果设置为 true,该函数会将现有代码映射配置从父模型复制到新的引用模型。

如果设置为 false,该函数不会将现有代码映射配置从父模型复制到新模型。

数据类型: logical

模型实现

全部折叠

Model 模块替换 Subsystem 模块的选项,指定为 truefalse

如果将值设置为 true,请在转换子系统之前考虑备份原始模型。如果要撤消转换,则使用备份可以更轻松地还原模型。

如果将 ReplaceSubsystem 设置为 true,则转换操作取决于您是否使用自动修复选项。

  • 如果您使用自动修复,则转换会将 Subsystem 模块替换为 Model 模块,除非自动修复更改了输入或输出端口。如果端口发生更改,则转换会将子系统的内容包含在插入到 Subsystem 模块的 Model 模块中。

  • 如果不使用自动修复,则转换将 Subsystem 模块替换为 Model 模块。

数据类型: logical

Model 模块的仿真模式,指定为 'Normal''Accelerator'。仿真模式设置应用于引用转换创建的模型的 Model 模块。

数据类型: char | string

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

  • 'Sim' - 模型引用的仿真目标

  • 'Coder' - 代码生成目标

数据类型: char

仿真结果比较

全部折叠

在转换前后检查仿真结果的选项,指定为 truefalse

在执行转换之前,请执行以下操作:

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

数据类型: logical

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

仅当您将 CheckSimulationResults 设置为 true 时,才使用此选项。

数据类型: double

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

仅当您将 CheckSimulationResults 设置为 true 时,才使用此选项。

数据类型: double

输出参量

全部折叠

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

1 表示转换成功。

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

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

数据类型: double

提示

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

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

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

  • 如果指定多个子系统,请考虑:

    • 在输入参量中,将 'Autofix''ReplaceSubsystem''CheckSimulationResults' 设置为 true

    • 在模型中,设置一个较短的仿真时间。

  • 当同时存在以下两种情况时,数据字典会保存它在转换处理过程中创建的总线对象:

    • 顶层模型使用数据字典。

    • 保存对顶层模型的所有更改。

  • 要保持封装子系统的行为,请执行以下附加任务:

    • 对于封装的回调、图标、端口和文档,在将其转换为引用模型之前,创建封装子系统的备份副本。转换后,将内容从备份封装子系统的封装编辑器复制到新 Model 模块的封装编辑器。

    • 用模型参量替换封装参数(请参阅参数化可重用引用模型的实例)。

    注意

    引用模型不支持可以通过使用封装初始化代码创建封装参数来实现的功能。

版本历史记录

在 R2006a 中推出

全部展开