Main Content

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

将子系统转换为引用模型

模型引用提供了诸多优势,可用于大型复杂系统的建模和基于团队的开发。许多大型模型都使用了子系统和引用模型的组合。要决定是否将子系统转换为引用模型,请参阅Explore Types of Model Components

准备转换子系统

为转换准备子系统可以消除或减少转换过程中发现的问题数量。在转换之前解决这些问题的效率可能高于在诊断消息和 Simulink® 编辑器之间反复切换。

要准备子系统,请执行下列步骤:

  1. 信号解析配置参数设置为仅显式

    提示

    您可以在转换过程中自动修复此问题。

  2. 配置 Subsystem 模块接口。

    提示

    您可以在转换过程中自动修复这些接口问题。

    子系统接口要查找的内容模型修改

    GotoFrom 模块

    跨子系统边界的 GotoFrom 模块

    将具有跨越子系统边界的对应 Goto 模块的 From 模块替换为 Inport 模块。

    将具有跨越子系统边界的对应 From 模块的每个 Goto 模块替换为 Outport 模块。

    InportOutport 模块连接到对应的子系统端口。

    数据存储

    Data Store ReadData Store Write 模块从子系统外部访问的 Data Store Memory 模块

    Data Store Memory 模块替换为全局数据存储。使用 Simulink.Signal 对象定义全局数据存储。有关详细信息,请参阅包含信号对象的数据存储

    可调参数

    在使用配置参数 > 代码生成 > 优化 > 配置按钮打开的对话框中的全局可调参数

    要为每个可调参数创建一个 Simulink.Parameter 对象,请使用 tunablevars2parameterobjects

    Simulink.Parameter 对象必须具有 Auto 之外的存储类。

    有关详细信息,请参阅参数化可重用引用模型的实例Tunable Parameters

  3. 配置 Subsystem 模块内容。

    子系统配置要查找的内容模型修改
    模块执行顺序

    不强制包含的模块连续执行的虚拟子系统。

    选择 Subsystem 模块,然后在 Subsystem 模块选项卡上,选择设为原子子系统

    函数调用

    跨越虚拟子系统边界的函数调用信号。

    Function-Call Generator 模块移到您要转换的子系统中。

    注意

    如果您要转换导出函数子系统,则无需移动 Function-Call Generator 模块。

    函数调用输出。

    将函数调用输出更改为数据触发器。

    广泛的函数调用端口。

    消除函数调用子系统的宽信号。

    采样时间

    Inport 模块采样时间与驱动 Inport 模块的模块的采样时间不匹配

    在适当的位置插入 Rate Transition 模块。

    Inport 模块

    合并的 Inport 模块

    配置模型以避免合并的 Inport 模块。请参阅 Merge 模块文档。

    Constant 模块

    为子系统提供输入的 Constant 模块

    Constant 模块移至子系统中。

    总线

    进出子系统的总线

    与子系统内模块的信号名称和总线元素名称进行匹配。

    要查找与总线元素名称不匹配的信号名称,请使用信号标签不匹配诊断。

    总线中的重复信号名称。

    使总线元素的信号名称具有唯一性。

    不是有效的 MATLAB® 标识符的信号名称。有效标识符是一个满足以下条件的字符向量:

    • 名称中包含字母、数字或下划线。

    • 第一个字符应为字母。

    • 名称的长度小于等于 namelengthmax 函数返回的值。

    将任何无效信号名称更改为有效的 MATLAB 标识符。

  4. 确保包含您要转换的子系统的模型能成功编译。

将子系统转换为引用模型

要将子系统转换为引用模型,请执行以下操作:

  1. 选择要转换的 Subsystem 模块。

  2. 在 Simulink 工具条的子系统模块选项卡上,选择转换 > 模型模块

    模型引用转换顾问将打开并允许您以交互方式指定转换参数并修复该顾问发现的问题。

要加快转换过程,请执行以下操作:

  • 在模型引用转换顾问中,选择自动修复错误(如果可能)。此选项自动修复一些转换问题,但您不能控制修复。

  • 开始转换之前,请关闭所有打开的 Scope 模块窗口。

要保留原 Subsystem 模块并根据 Subsystem 模块的内容创建一个单独的模型,请清除用 Model 模块替换子系统的内容

要比较转换前后的顶层模型仿真结果,请执行以下操作:

  • 为关注的输出信号启用信号记录。

  • 选择转换后检查仿真结果用 Model 模块替换子系统的内容

  • 设置停止时间绝对容差相对容差

  • 在顾问中将 Model 模块仿真模式选项设置为与原始模型相同的仿真模式。

在设置转换设置后,点击转换并解决任何发现的问题。

或者,在 MATLAB 命令行窗口中,使用 Simulink.SubSystem.convertToModelReference 函数。您可以使用一个 Simulink.SubSystem.convertToModelReference 命令转换多个 Subsystem 模块。但是,您不能同时转换父级子系统和该子系统的子级。

转换结果

在所有转换检查都通过后,Simulink 将:

  • 从子系统创建引用模型。

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

  • 默认情况下,用引用新模型的 Model 模块替换 Subsystem 模块。

  • 如果自动修复将端口添加到了 Model 模块接口,则在 Subsystem 模块中插入 Model 模块。

  • slprj 文件夹中创建 HTML 转换摘要报告。此报告摘要显示了转换过程的结果,包括 Advisor 执行的修复的结果。此报告还说明它复制的元素。

  • (可选)检查转换前后仿真结果的一致性。

Simulink 会将以下元素从原始模型复制到新的引用模型中。

  • 配置集 - 如果父模型使用:

    • 非引用配置集,则 Advisor 会将整个配置集复制到引用模型中

    • 引用配置集,则父模型和引用模型将使用同一个引用配置集

  • 变量 - Advisor 仅将子系统在原始模型中使用的模型工作区变量复制到引用模型的模型工作区中。如果包含该子系统的模型使用数据字典,则引用模型也使用同一个数据字典。

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

比较转换之前和之后的仿真结果

在成功完成转换后,请使用点击此处查看比较结果链接。结果显示在仿真数据检查器中。绿色对勾表示包含新引用模型的模型和基线模型的仿真结果差异在容差范围内。

Simulation Data Inspector with four simulation results that are within tolerance

有关详细信息,请参阅 Compare Simulation Data

恢复转换

如果您对转换结果不满意,可以将模型恢复为其初始状态。使用以下方法之一:

  • 在转换过程中的任何时间点,选择文件 > 加载还原点

  • 在成功运行完全转换检查后,使用点击此处还原原始模型链接。

将引用模型集成到父模型中

转换完成后,如有必要,可更新模型以满足您的建模要求。例如,您可以使用引用所创建的引用模型的 Model 模块手动替换 Subsystem 模块。

如果您想利用外部数据对模型进行仿真,请确认新引用模型中的根级 Inport 模块具有适当的数据插值参数设置。请参阅 Inport 模块的数据插值参数的说明文档。

另请参阅

相关主题