比较模型组件的功能
在使用特定类型的模型组件实现系统的一部分之前,请考虑组件类型是否满足建模要求。要根据高级规范和用例确定要考虑的组件类型,请参阅Explore Types of Model Components。
常见的建模需求可以分为以下几个类别。
协作
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
单独的文件 | 不支持 您将子系统与其父级保存在同一文件中。 要创建或更改子系统,您必须编辑父文件,这可能导致文件争用和合并问题。 | 支持 将链接模块的父级库模块保存在一个单独的文件中。 使用单独的文件有助于避免文件争用。 | 支持 将引用子系统保存在一个单独的文件中。 使用单独的文件有助于避免文件争用。 | 支持 将引用模型保存在一个单独的文件中。 使用单独的文件有助于避免文件争用。 |
独立行为 | 不支持 子系统依赖模型来提供执行上下文。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 您可以独立地开发引用模型,而不用考虑使用它的模型。 要将引用模型作为独立模型进行仿真,请在新窗口中将引用模型作为顶层模型打开。引用模型必须具有在独立上下文中执行所需的数据。例如,引用模型必须具有定义参数和信号的变量和数据类型。 |
版本控制和配置管理 | 不支持 您不能直接将子系统放在源代码管理系统中。 要减少文件争用并对每个子系统使用单独的版本控制,请使用子系统引用。 | 支持 您可以将库文件放在源代码管理系统中。 要为每个库模块提供单独的版本控制,请在库中使用子系统引用和模型引用。当您将这些模块从库中拖到模型中时,它们会引用子系统文件或模型文件。 转换表允许您将旧库模块映射到模块的新版本。 | 支持 您可以将子系统文件放在源代码管理系统中。 | 支持 您可以将模型文件放在源代码管理系统中。 |
保护知识产权 | 不支持 请改用模型引用。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 受保护模型会隐藏模型内容,这在分发模型时非常有用。 创建受保护模型需要 Simulink® Coder™ 许可证。有关详细信息,请参阅保护模型以隐藏内容 (Simulink Coder)。 使用受保护模型不需要 Simulink Coder 许可证。有关详细信息,请参阅引用来自第三方的受保护模型。 |
重用
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
组件重用 | 不支持 虽然您可以复制子系统以在模型中重用它,但副本是相互独立的。 | 支持 您可以在多个模型中多次链接到同一父库模块,而无需创建副本。 管理库链接会增加一些开销,例如管理断开的、禁用的或参数化的链接。 | 支持 您可以在多个模型中多次引用同一个子系统,而无需创建副本。 | 支持 您可以在多个模型中多次引用同一模型,而无需创建副本。请参阅模型重用。 |
共享数据 | 支持 通过在组件外部定义数据,可以在各实例之间共享数据。例如,通过使用公共父级子系统中的数据存储。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 通过在引用模型内创建数据存储,可以在引用模型的各实例之间共享数据。请参阅在引用模型实例之间共享数据。 |
特定于实例的参数值 | 支持 子系统副本相互独立。 | 支持 编辑父库模块时,更改将应用于库文件,并传播到链接到该模块的所有模块。 要编辑模块的实例,可以禁用库链接。 当父库模块限制了写访问时,无法禁用库链接。 | 不支持 编辑引用子系统的一个实例时,更改将应用于子系统文件,并传播到引用子系统的所有其他实例。 | 支持 编辑引用模型的一个实例时,更改将应用于模型文件,并传播到引用模型的所有其他实例。 要为引用模型指定特定于实例的参数值,请参阅参数化可重用引用模型的实例。 |
变体 | 支持 将子系统变体添加到 Variant Subsystem 或 Variant Model 模块。 有关详细信息,请参阅Implement Variations in Separate Hierarchy Using Variant Subsystems。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 将模型变体添加到 Variant Subsystem 或 Variant Model 模块。 有关详细信息,请参阅Implement Variations in Separate Hierarchy Using Variant Subsystems。 |
性能
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
增量模型加载 | 不支持 加载模型会加载保存在模型中的所有子系统内容。 | 支持 在编辑、更新图或对模型进行仿真的过程中,软件会在所需时间点以增量方式加载库。 | 支持 在编辑、更新图或对模型进行仿真的过程中,软件会在所需时间点以增量方式加载引用子系统。 | 支持 在编辑、更新图或对模型进行仿真的过程中,软件会在所需时间点以增量方式加载引用模型。 |
增量模型编译 | 不支持 子系统作为其父模型的一部分进行编译。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 在加速模式下仿真的引用模型根据其重新编译配置参数的值进行编译。 模型是否编译不依赖于其他模型。 |
编译工件重用 | 不支持 编译工件,例如仿真目标,不是为子系统生成的。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 团队成员和持续集成 (CI) 系统可以为您使用的模型生成 Simulink 缓存文件。您可以利用这些文件重用编译工件,例如仿真目标,从而加速仿真和代码生成。有关详细信息,请参阅共享 Simulink 缓存文件以加快仿真速度。 |
降低大型模型的内存使用量 | 不支持 子系统不会减少仿真和代码生成的内存使用量。 | 不支持 链接子系统不会减少仿真和代码生成的内存使用量。 Simulink 会在模块更新过程中复制库模块实例。 | 不支持 子系统引用不会减少仿真和代码生成的内存使用量。 Simulink 在模块更新期间复制子系统引用实例。 | 支持 加速模式中引用的模型可减少仿真和代码生成的内存使用量,因为 Simulink 以增量方式加载其编译版本。 |
消除人为代数环 | 支持 非原子子系统可避免人为代数环。 如果子系统是原子子系统,您可以尝试通过启用 Subsystem 模块参数尽量减少出现代数环来消除人为代数环。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您可以尝试通过启用配置参数 > 模型引用 > 尽量减少出现代数环来消除人为代数环。 |
局部求解器 | 不支持 子系统继承其父模型的求解器。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 您可以在引用模型中使用局部求解器,以将模型引用作为一组单独的微分方程进行求解。局部求解器可以使用不同的、更大的步长。在选择求解器和求解器设置时,需要在仿真的速度和准确性之间进行权衡。有关详细信息,请参阅Use Local Solvers in Referenced Models。 |
并行编译 | 不支持 子系统是作为其父模型的一部分编译的。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 使用 Parallel Computing Toolbox™ 软件,您可以在 MATLAB® 并行工作进程池中以分布方式进行引用模型的代码生成和编译。 对于大型模型引用层次结构,您可以通过并行编译模型引用目标来提高图更新和代码生成的速度。有关详细信息,请参阅Reduce Update Time for Referenced Models by Using Parallel Builds和Reduce Build Time for Referenced Models by Using Parallel Builds (Simulink Coder)。 |
测试和认证
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
单元测试 | 支持 如果子系统的上下文发生变化,例如输入信号的数据类型,则必须更新相关测试框架。 对于非原子子系统,测试框架可能因虚拟边界而使用不同模块执行顺序。 有关支持编写、管理和执行基于仿真的系统性子系统测试的工具,请参阅创建或导入测试框架并选择属性 (Simulink Test)。 要衡量模型组件测试的彻底程度,请参阅模型覆盖率 (Simulink Coverage)。 | 支持 与子系统行为相同。 | 支持 引用子系统的测试框架与未存储在单独文件中的子系统的测试框架具有相同的行为。 虽然您可以为引用子系统创建测试框架,但不能为引用子系统中的模块创建测试框架。 | 支持 您可以独立测试引用模型,通过将其作为顶层模型进行仿真来隔离行为。 可以将数据定义的测试框架与 MATLAB 测试向量和直接覆盖率集合结合使用。 有关支持编写、管理和执行基于仿真的系统性子系统测试的工具,请参阅创建或导入测试框架并选择属性 (Simulink Test)。 要衡量模型组件测试的彻底程度,请参阅模型覆盖率 (Simulink Coverage)。 |
SIL/PIL 测试 | 不支持 虽然您可以对包含子系统的模型执行 SIL/PIL 测试,但您无法对某个子系统单独进行仿真。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 要对模型引用层次结构执行 SIL/PIL 测试,请参阅SIL 和 PIL 仿真 (Embedded Coder)。 |
单一来源代码 | 支持 默认情况下,子系统代码不可重用。要尽可能生成可重用子系统代码,请参阅Generate Subsystem Code as Separate Function and Files (Simulink Coder)。 | 支持 默认情况下,子系统代码不可重用。要尽可能生成可重用子系统代码,请参阅Generate Reusable Code from Library Subsystems Shared Across Models (Simulink Coder)。 | 支持 与子系统行为相同。 | 支持 每个引用模型都只有一组源代码,而不管模型层次结构包含该引用模型多少次。有单一来源的代码可以降低验证的成本。 |
生成代码的可追溯性 | 支持 虽然您可以跟踪为子系统生成的代码,但如果子系统上下文发生变化,生成的代码也会随之发生变化。例如,对输入信号数据类型的更改会影响子系统代码。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您可以独立于其他模型跟踪一个引用模型的生成代码,这可以降低验证成本。 使用 Simulink Code Inspector™ 许可证,您可以为每个引用模型创建一个可追溯性矩阵。可追溯性矩阵提供了模型对象、生成代码和模型需求之间的可追溯性。有关详细信息,请参阅Generate Traceability Matrices (Simulink Code Inspector)。 |
接口设计
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
接口上的信号属性设定 | 支持 您可以在子系统接口上指定信号属性。 对于未指定的信号属性,子系统从其上下文继承信号属性。传播信号属性可能会导致 Simulink 使用您未预料到的信号属性。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您必须在引用模型接口上指定大多数信号属性。 引用模型独立于上下文,它们具有定义的边界,因此不会继承大多数信号属性。 当引用模型不依赖于采样时间时,引用模型可以继承离散采样时间。 |
接口处的物理连接 | 支持 您可以指定子系统接口处的物理连接。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 不支持 物理连接必须完全包含在引用模型中。它们不能跨模型接口。 |
接口处的总线设定 | 支持 您可以使用 子系统不要求对虚拟总线使用总线对象。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您可以使用 当您使用 In Bus Element 和 Out Bus Element 模块时,模型引用不要求对虚拟总线使用总线对象。 |
自定义行为
建模要求 | 子系统 | 链接子系统 | 子系统引用 | 模型引用 |
---|---|---|---|---|
唯一的配置参数设置 | 不支持 子系统使用包含这些子系统的模型的配置参数设置。 | 不支持 与子系统行为相同。 | 不支持 与子系统行为相同。 | 支持 父模型及其引用模型的配置参数设置通常可能不同。有关兼容性信息,请参阅设置模型层次结构的配置参数。 |
状态初始化 | 支持 您可以初始化子系统的状态。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您可以使用结构体格式或带时间的结构体格式从顶层模型初始化状态。 |
条件执行 | 支持 子系统支持条件执行。有关详细信息,请参阅条件执行子系统概述。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 引用模型支持条件执行。有关详细信息,请参阅Conditionally Execute Referenced Models。 |
基于事件的行为 | 支持 子系统支持基于事件的行为。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 引用模型支持基于事件的行为。有关详细信息,请参阅使用初始化、重新初始化、重置和终止函数。 |
独立函数 | 支持 您可以在子系统中定义独立函数。有关详细信息,请参阅 Simulink Functions Overview。 | 支持 与子系统行为相同。 | 支持 与子系统行为相同。 | 支持 您可以在引用模型中定义独立函数。有关详细信息,请参阅导出函数模型概述。 |
相关主题
- 模型引用的要求和限制
- 为模型层次结构选择仿真模式
- 子系统 (Simulink Coder)
- Generate Code for Model Reference Hierarchy (Simulink Coder)
- Map System Architecture to Simulink Modeling Environment (Simulink Coder)
- Map Embedded System Architecture to Simulink Modeling Environment (Embedded Coder)