Main Content

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

将模块组合为子系统

随着模型的大小和复杂度的增加,您可以通过将模块组合为子系统来简化它。Subsystem 模块是包含模型子集的模块。一个模型可以包含多个子系统,子系统内还可以嵌套其他子系统。

使用子系统,您可以:

  • 建立一个层次结构,其中一个 Subsystem 模块位于一个层中,而构成该子系统的模块位于另一个层中。每进入一个子系统都能更深入一层探索该层次结构。

  • 将功能相关的模块放在一起。

  • 帮助减少您的模型窗口中显示的模块数目。

  • 建立一个带输入和输出的界面。

当您创建子系统的副本时,该副本将独立于源子系统。要在一个模型范围内或跨多个模型重用子系统的内容,请考虑引用子系统、引用模型或链接到自定义库中某个模块的子系统。有关详细信息,请参阅 Explore Types of Model Components

要创建其执行依赖其他组件的子系统,请使用条件执行子系统。有关详细信息,请参阅Explore Types of Subsystems

创建子系统

您可以通过将现有模型的一部分转换为子系统,或通过添加 Subsystem 模块到模型并对其进行填充来创建子系统。

要将模块图的一部分转换为子系统,请执行以下操作:

  1. 在 Simulink® 画布中,拖动以绘制一个选择框来涵盖您要包含在子系统中的模型元素。选择框旁边会出现省略号。

    A Transfer Fcn block and a Gain block are selected in the model, and an ellipsis is next to the selection box

  2. 将鼠标在省略号上暂停。将展开一个操作栏。

    The action bar is expanded, with the Create Subsystem option selected

  3. 在该操作栏中,点击创建子系统或另一个子系统选项。

    In the block diagram, the Transfer Fcn block and a Gain block are replaced by a single Subsystem block. The signal line that connected to the input port of the Transfer Fcn block now connects to the input port of the Subsystem block, and the signal line that connected to the output port of the Gain block now connects to the output port of the Subsystem block.

当所选内容包含对应于输入和输出端口的模块时,新子系统包括这些模块的副本。新子系统不包含对应于控制端口的模块的副本。

要自下而上创建子系统,请执行以下操作:

  1. 决定要创建什么类型的子系统。有关子系统类型的信息,请参阅Explore Types of Subsystems

    提示

    对于控制器和其他独立组件,使用非虚拟子系统或引用模型在相关模块周围定义硬边界。当您要为组件生成代码时,预先定义硬边界可以避免代价高昂的重构。

  2. 双击 Simulink 画布以打开快速插入菜单。

  3. 在搜索框中,开始键入与要在模型中实现的子系统类型对应的模块的名称。

  4. 在出现的列表中,选择该模块名称。使用箭头键并按 Enter 键,或点击该模块。

要查看或编辑子系统的内容,请双击对应的模块。要退出子系统,请在 Simulink 工具栏的左端下方,点击 the Back button。有关如何在包含子系统的模型层次结构中导航的详细信息,请参阅Navigate Model Hierarchy

提示

Subsystem 模块的内容将随模型一起保存。如果要将内容保存在一个单独文件中,请将 Subsystem 模块转换为 Subsystem Reference 模块。有关详细信息,请参阅Create and Use Referenced Subsystems in Models

用子系统的内容替换子系统

要用 Subsystem 模块的内容替换该模块,请选择 Subsystem 模块。然后,在 Simulink 工具条的子系统模块选项卡上,点击展开

子系统的内容出现在标有被替换模块名称的区域中。

In the top image, a Sine Wave block connects to a Subsystem block that connects to a Scope block. In the bottom image, the Subsystem block is replaced by its contents. The contents are in an area labeled Subsystem.

有关详细信息,请参阅Expand Subsystem Contents

指定子系统是否为原子子系统

当您将 Subsystem 模块添加到模型时,该模块会创建一个虚拟子系统。虚拟子系统有助于直观地组织模块图。它们在仿真中不起主动作用,也不影响仿真结果。

相反,当父模型执行时,原子子系统作为单个模块或原子单元执行。原子子系统在系统的仿真中起主动作用。如果您添加或删除原子子系统,模型行为将发生改变。原子子系统也称为非虚拟子系统

注意

条件执行子系统本质上是原子子系统和非虚拟子系统。有关子系统类型的信息,请参阅Explore Types of Subsystems

如果您希望一个子系统能够增长,请将该子系统设为原子子系统,以便该子系统基于功能对模块进行组合。如果预先将子系统指定为原子子系统,就可以避免以后为组件生成代码时付出高昂代价来进行重构。原子行为是将子系统转换为模型引用所必需的。

要将子系统设为原子子系统,请在画布中选择 Subsystem 模块。然后,在 Simulink 工具条的子系统模块选项卡上,点击设为原子子系统

为了说明使子系统原子化的结果,此模块图显示其模块(包括两个 Subsystem 模块)的执行顺序。

Block diagram with block execution order displayed

对于名为 Discrete Cruise ControllerSubsystem 模块,模块图显示执行顺序为 4。此子系统是非虚拟子系统,具有原子行为。该子系统中的模块不是当前模块图执行顺序的一部分。相反,该子系统中的模块具有相对于彼此的执行顺序。

对于名为 Car DynamicsSubsystem 模块,模块图显示执行顺序为 {1,5,6,...}。此子系统是虚拟子系统,没有原子行为。所显示的执行顺序是针对子系统中的模块,这些模块具有相对于父模块图的执行顺序。

Subsystem block diagram with block execution order displayed

有关详细信息,请参阅控制和显示执行顺序

指定子系统读/写权限

您可以为子系统指定以下读/写权限:

  • ReadWrite - 允许打开和修改子系统内容。

  • ReadOnly - 允许打开但不允许修改子系统。

  • NotReadorWrite - 禁止打开和修改子系统。

要控制子系统允许的访问级别,请设置 Subsystem 模块的读/写权限参数。

注意

限制读取或写入访问并不阻止更改访问限制。要隐藏专有信息,请考虑使用受保护模型。有关详细信息,请参阅 了解受保护模型的功能

当子系统存储在自定义库中时,可以使用父库模块上的读取/写入权限参数来控制对该模块的链接实例的访问。只要库链接保持不变,通过受限访问可以防止查看或修改子系统的内容,同时仍允许在模型中使用子系统。有关详细信息,请参阅 链接模块

自定义子系统

您可以更改 Subsystem 模块的名称并修改该模块,就像您处理任何其他模块一样。

例如:

  • 应用模块封装来隐藏子系统内容,从而使用它自己的图标和参数对话框将内容以原子模块的形式显示。有关详细信息,请参阅 封装基础知识

  • 使用模块回调来执行操作,以响应子系统建模操作,例如处理错误、删除子系统中的模块或信号线或关闭子系统。有关模块属性(如回调)的详细信息,请参阅指定模块属性

另请参阅

模块

函数

相关主题