将模块组合为子系统
随着模型的大小和复杂度的增加,您可以通过将模块组合为子系统来简化它。Subsystem 模块是包含模型子集的模块。一个模型可以包含多个子系统,子系统内还可以嵌套其他子系统。
使用子系统,您可以:
建立一个层次结构,其中一个 Subsystem 模块位于一个层中,而构成该子系统的模块位于另一个层中。每进入一个子系统都能更深入一层探索该层次结构。
将功能相关的模块放在一起。
帮助减少您的模型窗口中显示的模块数目。
建立一个带输入和输出的界面。
当您创建子系统的副本时,该副本将独立于源子系统。要在一个模型范围内或跨多个模型重用子系统的内容,请考虑引用子系统、引用模型或链接到自定义库中某个模块的子系统。有关详细信息,请参阅 探索模型组件的类型。
要创建其执行依赖其他组件的子系统,请使用条件执行子系统。有关详细信息,请参阅浏览子系统的类型。
创建子系统
您可以通过将现有模型的一部分转换为子系统,或通过添加 Subsystem 模块到模型并对其进行填充来创建子系统。
要将模块图的一部分转换为子系统,请执行以下操作:
在 Simulink® 画布中,拖动以绘制一个选择框来涵盖您要包含在子系统中的模型元素。选择框旁边会出现省略号。

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

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

当所选内容包含对应于输入和输出端口的模块时,新子系统包括这些模块的副本。新子系统不包含对应于控制端口的模块的副本。
要自下而上创建子系统,请执行以下操作:
决定要创建什么类型的子系统。有关子系统类型的信息,请参阅浏览子系统的类型。
提示
对于控制器和其他独立组件,使用非虚拟子系统或引用模型在相关模块周围定义硬边界。当您要为组件生成代码时,预先定义硬边界可以避免代价高昂的重构。
双击 Simulink 画布以打开快速插入菜单。
在搜索框中,开始键入与要在模型中实现的子系统类型对应的模块的名称。
在出现的列表中,选择该模块名称。使用箭头键并按 Enter 键,或点击该模块。
要查看或编辑子系统的内容,请双击对应的模块。要退出子系统,请在 Simulink 工具栏的左端下方,点击
。有关如何在包含子系统的模型层次结构中导航的详细信息,请参阅Navigate Model Hierarchy。
Subsystem 模块的内容将随模型一起保存。如果要将内容保存在一个单独文件中,请将 Subsystem 模块转换为 Subsystem Reference 模块。有关详细信息,请参阅Create and Use Referenced Subsystems in Models。如果您将一个子系统的内容保存在一个单独的文件中,则您可以通过将该文件拖到模型画布中来将该子系统添加到模型中。有关详细信息,请参阅通过将文件拖到画布来添加组件。
用子系统的内容替换子系统
要用 Subsystem 模块的内容替换该模块,请选择 Subsystem 模块。然后,在 Simulink 工具条的子系统模块选项卡上,点击展开。
子系统的内容出现在标有被替换模块名称的区域中。

有关详细信息,请参阅Expand Subsystem Contents。
指定子系统是否为原子子系统
当您将 Subsystem 模块添加到模型时,该模块会创建一个虚拟子系统。虚拟子系统有助于直观地组织模块图。当您对虚拟子系统中的模块进行组合或扩展虚拟子系统时,因为模块路径的更改,您可能会影响模块的执行顺序。
相反,原子子系统有助于按功能组织模块图。在原子子系统中对模块进行组合或展开原子子系统时,会更改模型行为。当父模型执行时,每个原子子系统作为单个模块或原子单元执行。原子子系统中的模块会连续执行。原子子系统也称为非虚拟子系统。
注意
条件执行子系统本质上是原子子系统和非虚拟子系统。有关子系统类型的信息,请参阅浏览子系统的类型。
如果您希望一个子系统能够增长,请将该子系统设为原子子系统,以便该子系统基于功能对模块进行组合。如果预先将子系统指定为原子子系统,就可以避免以后为组件生成代码时付出高昂代价来进行重构。原子行为是将子系统转换为模型引用所必需的。
要将子系统设为原子子系统,请在画布中选择 Subsystem 模块。然后,在 Simulink 工具条的子系统模块选项卡上,点击设为原子子系统。
为了说明使子系统原子化的结果,此模块图显示其模块(包括两个 Subsystem 模块)的执行顺序。

对于名为 Discrete Cruise Controller 的 Subsystem 模块,模块图显示执行顺序为 4。此子系统是非虚拟子系统,具有原子行为。该子系统中的模块不是当前模块图执行顺序的一部分。相反,该子系统中的模块具有相对于彼此的执行顺序。
对于名为 Car Dynamics 的 Subsystem 模块,模块图显示执行顺序为 {1,5,6,...}。此子系统是虚拟子系统,没有原子行为。所显示的执行顺序是针对子系统中的模块,这些模块具有相对于父模块图的执行顺序。

有关详细信息,请参阅控制和显示执行顺序。
指定子系统读/写权限
您可以为子系统指定以下读/写权限:
ReadWrite - 允许打开和修改子系统内容。
ReadOnly - 允许打开但不允许修改子系统。
NotReadorWrite - 禁止打开和修改子系统。
要控制子系统允许的访问级别,请设置 Subsystem 模块的读/写权限参数。
注意
限制读取或写入访问并不阻止更改访问限制。要隐藏专有信息,请考虑使用受保护模型。有关详细信息,请参阅 受保护模型的功能。
当子系统存储在自定义库中时,可以使用父库模块上的读取/写入权限参数来控制对该模块的链接实例的访问。只要库链接保持不变,通过受限访问可以防止查看或修改子系统的内容,同时仍允许在模型中使用子系统。有关详细信息,请参阅 链接模块。
自定义子系统
您可以更改 Subsystem 模块的名称并修改该模块,就像您处理任何其他模块一样。
例如: