Simulink.SubSystem.convertToModelReference
将子系统转换为模型
语法
说明
[ 将 tf,h] = Simulink.SubSystem.convertToModelReference(blks,mdls)blks 指定的一个或多个子系统转换为由 mdls 指定名称的模型。
对于该函数转换的每个子系统,该函数会:
创建一个模型。
将子系统的内容复制到新模型中。
更新新模型的根级输入和输出模块,以使用来自原始子系统的已编译属性。
将父模型的配置集复制到新模型,或引用与父模型相同的配置集。该转换可以更改新模型的一些配置设置,以支持将新模型用作引用模型。
适用时,该函数还:
将子系统使用的模型工作区内容从父模型复制到新模型。
将父模型使用的数据字典应用于新模型。
创建新模型所需的
Simulink.Bus对象、Simulink.Signal对象和可调参数。基于原始 Subsystem 模块的模块封装为新模型创建系统封装。系统封装不支持模块封装的某些功能,例如封装初始化代码。有关详细信息,请参阅Introduction to System Mask。
将使用 Requirements Toolbox™ 软件创建的需求链接从原始的 Subsystem 模块复制到新 Model 模块。
示例
打开并编译名为 sldemo_mdlref_conversion 的模型。为了使转换成功,包含子系统的模型必须成功编译。
mdl = "sldemo_mdlref_conversion"; open_system(mdl); set_param(mdl,SimulationCommand="Update")

模型编译时没有警告或错误。
打开名为 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.
打开并编译名为 sldemo_mdlref_conversion 的模型。为了使转换成功,包含子系统的模型必须成功编译。
mdl = "sldemo_mdlref_conversion"; open_system(mdl); set_param(mdl,SimulationCommand="Update")

模型编译时没有警告或错误。
打开名为 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 模块。

打开并编译名为 sldemo_mdlref_conversion 的示例模型。为了使转换成功,包含子系统的模型必须成功编译。
mdl = "sldemo_mdlref_conversion"; open_system(mdl) set_param(mdl,SimulationCommand="Update")

模型编译时没有警告或错误。
将名为 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.

Subsystem 模块被一个 Model 模块替换,该 Model 模块引用名为 BusCounter 的模型。
对 Simulink.SubSystem.convertToModelReference 函数的一次调用可以将多个子系统转换为引用模型。
打开并编译名为 f14 的模型。为了使转换成功,包含子系统的模型必须成功编译。
mdl = "f14"; open_system(mdl) set_param(mdl,SimulationCommand="Update")

模型编译时没有警告或错误。
为转换准备模型,以消除或减少转换过程中发现的问题数量。
为了能够检查转换前后的仿真结果是否相等,请使用 Dataset 格式记录模型的输出。
set_param(mdl,SaveOutput="on",SaveFormat="Dataset")
新引用模型将从父模型继承其配置参数设置。更新 f14 模型以使用建议的信号解析设置。此设置仅支持为 Simulink.Signal 对象显式指定的信号解析。
set_param(mdl,SignalResolutionControl="UseLocalSettings")将名为 Controller 和 Aircraft 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.

名为 Controller 和 Aircraft Dynamics Model 的 Subsystem 模块被分别引用名为 Controller 和 AircraftDynamics 的模型的 Model 模块替换。
输入参数
子系统模块路径或句柄,指定为数值标量、字符向量或字符串标量。
有关可以转换的子系统的信息,请参阅Conditionally Execute Referenced Models。
数据类型: double | char | string
子系统模块路径或句柄,指定为数值数组、字符向量、字符向量元胞数组或字符串数组。
有关可以转换的子系统的信息,请参阅Conditionally Execute Referenced Models。
当指定要转换的多个子系统时,转换过程会尝试转换每个子系统。即使其他子系统的转换失败,成功转换的子系统也会生成引用模型。
您不能同时转换父级子系统及其子级。
提示
与单独转换每个子系统相比,指定使用一个命令转换多个子系统可以节省时间。多个子系统的转换过程只编译一次模型。
当您指定多个子系统时:
在模型中,考虑设置一个较短的仿真时间。
在函数中,考虑将
AutoFix、ReplaceSubsystem和CheckSimulationResults设置为true。
数据类型: 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)
转换
降低错误的强制转换,指定为 false 或 true。
当您将 Force 设置为 true 时,转换过程会将错误作为警告返回,并且不会修复错误,即使您将 AutoFix 设置为 true 也是如此。
将 Force 设置为 true 可让您使用该函数来执行转换的初始步骤。然后,您自己完成转换过程。
数据类型: logical
转换数据文件的唯一名称,指定为字符向量或字符串标量。
转换数据文件存储在转换期间创建的变量和对象。
默认情况下,文件名以父模型名称开头,以 _conversion_data.mat 结尾。例如,对于名为 mymodel 的模型中的子系统,默认转换文件名为 mymodel_conversion_data.mat。
您可以将转换数据保存在 MAT 文件 (.mat) 或脚本 (.m) 中。当您指定 .m 文件扩展名时,文件会序列化变量。
要控制文件的目标,请用绝对或相对路径指定文件名。
依存关系
要使用此参量,父模型不能使用数据字典。
数据类型: char | string
模型接口
保留父模型布局的包装子系统,指定为 false 或 true。
当您将子系统转换为引用模型时,转换过程可以创建一个包装子系统。该包装子系统包含来自转换的 Model 模块。
如果转换向接口添加端口,则转换会自动创建一个包装子系统。例如,当 Goto 和 From 模块跨子系统边界时,Model 模块可以比原始 Subsystem 模块有更多端口。该转换会创建一个包装子系统,其端口数量与原始子系统相同。该包装子系统包含引用新模型的 Model 模块。
数据类型: logical
用于接口定义的新总线对象,指定为 false 或 true。
与子系统不同,模型需要定义的接口。要定义包含虚拟总线的接口,新模型必须使用以下选项之一:
In Bus Element 和 Out Bus Element 模块
指定
Simulink.Bus对象的 Inport 和 Outport 模块
默认情况下,转换不会创建总线对象。但是,转换使用 In Bus Element 和 Out Bus Element 模块来支持模型接口处的虚拟总线。
当您将 CreateBusObjectsForAllBuses 设置为 true 时,转换会为连接到子系统输入端口和输出端口的虚拟总线创建总线对象。
当父模型使用数据字典时,新总线对象位于该数据字典中。要保存总线对象,请保存父模型或数据字典。当父模型不使用数据字典时,总线对象保存在由 DataFileName 指定的文件中。
数据类型: logical
从父模型复制的代码映射,指定为 false 或 true。
当您将 CopyCodeMappings 设置为 true 时,该函数会将现有代码映射配置从父模型复制到新模型中。
代码映射信息包括用于代码生成的模型数据元素的配置。此参量不影响仿真。
有关详细信息,请参阅Convert Subsystem to Referenced Model and Generate Code (Simulink Coder)。
数据类型: logical
模型实现
用引用模型替换子系统,指定为 false 或 true。
默认情况下,转换不会更新原始模型。当原始模型处于打开状态时,转换会打开新窗口,其中包含引用新模型的 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"- 生成模型引用代码生成目标。
仿真结果比较
转换前后顶层模型仿真结果的比较,指定为 false 或 true。
如果仿真结果之间的差异超出容差级别,则该函数会显示一条错误消息。
提示
在执行转换之前:
将
SimulationModes设置为原始模型使用的仿真模式。为您创建的每个 Model 模块指定此仿真模式。
依存关系
要使用此参量,请执行以下操作:
为相关的子系统输出信号启用信号记录。
将
ReplaceSubsystem设置为true。
数据类型: logical
仿真结果比较的停止时间,指定为数值标量。
停止时间必须为大于或等于父模型开始时间的有限标量。有关详细信息,请参阅开始时间。
依存关系
要使用此参量,请将 CheckSimulationResults 设置为 true。
数据类型: double
用于比较的绝对信号容差,指定为数值标量。
当测得信号的值接近于零时,绝对容差是可接受的最大求解器误差。转换前的仿真结果建立基线。转换后的仿真结果必须在容差范围内。
依存关系
要使用此参量,请将 CheckSimulationResults 设置为 true。
数据类型: double
用于比较的相对信号容差,指定为数值标量。
相对容差是可接受的最大求解器误差(相对于每个时间步期间每个信号的大小)。转换前的仿真结果建立基线。转换后的仿真结果必须在容差范围内。
默认值 (0.001) 表示比较信号精确到基线信号的 0.1%。
依存关系
要使用此参量,请将 CheckSimulationResults 设置为 true。
数据类型: double
输出参量
版本历史记录
在 R2006a 中推出要转换具有封装初始化代码的封装子系统,您不再需要将 Force 设置为 true。转换不再受到封装初始化代码的阻碍。新模型的系统封装不使用封装初始化代码,因为模型的系统封装不支持封装初始化代码。有关详细信息,请参阅Introduction to System Mask。
现在,当您将封装子系统转换为模型时,转换会将适用的参数和交叉参数约束从 Subsystem 模块封装复制到新模型的系统封装。对于要应用于系统封装的约束,相关封装参数必须在系统封装上可用。有关这些约束的详细信息,请参阅Validating Mask Parameters Using Constraints。
当您将子系统转换为模型并且子系统接口使用虚拟总线时,新模型的模块图会更好地模拟子系统的模块图。
为了在不创建 Simulink.Bus 对象或添加模块的情况下指定总线层次结构,新模型使用 In Bus Element 和 Out Bus Element 模块。对应的总线元素端口指定具有和不具有模块的总线层次结构的元素。有关详细信息,请参阅指定一个端口的多个元素。
R2022b 中引入了服务接口代码映射。从 R2023a 开始,您可以将服务接口代码映射从父模型复制到新创建的引用模型。要复制映射,请使用 Simulink.SubSystem.convertToModelReference 函数,并将 CopyCodeMappings 参量指定为 true。
要了解有关服务接口映射的更多信息,请参阅C 服务接口 (Embedded Coder)。要了解有关代码映射配置的更多信息,请参阅Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architecture (Embedded Coder)。
您可以将代码映射从父模型复制到新创建的引用模型。要复制代码映射,请使用 Simulink.SubSystem.convertToModelReference 函数,并将 CopyCodeMappings 参量指定为 true。
要编译模型引用代码生成目标,请将 BuildTarget 设置为 'Coder',而不是 'RTW'。新名称有更清晰的含义。
目前没有停止支持 'RTW' 的计划。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)