本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

模型组件的功能

组件化

组件是您的设计的一部分、单元级项目或部件,您可以独立于更高级别的模型部件而直接处理它们。

组件化需要将您的模型划分为组件。组件化可为开发包含许多功能块的大型 Simulink® 模型的组织提供许多优势。优势包括:

  • 满足开发过程要求,例如:

    • 组件重用

    • 基于团队的开发

    • 保护知识产权

    • 单元测试

  • 改进性能:

    • 模型加载

    • 仿真速度

    • 内存使用量

组件化方法

您可用于 Simulink 的主要组件化方法包括:

  • 子系统

  • 模型引用

这些组件化方法支持大小和复杂度各不相同的模型的各种建模要求。大多数大型模型会综合使用多种组件化方法。例如,您可以在引用模型中包含子系统,并在子系统中包含引用模型。再如,大型模型可以在顶层组件分区中使用模型引用 Accelerator 模块,并在较低级别混合使用模型引用 Accelerator 和原子子系统库。

Simulink 提供了用于从子系统转换为模型引用的工具。由于子系统和引用模型之间的差异,从子系统切换到模型引用可能涉及多个步骤(请参阅将子系统转换为引用模型)。请考虑可扩展性和对未来预期的建模要求的支持,例如模型的大小和复杂度可能会如何增加以及可能的代码生成要求。设计可扩展体系结构可以避免以后更高的转换成本。

一般组件化方法规范

下表简要介绍了子系统、库和模型引用分别适用于哪些模型和建模目标的规范。

组件化方法方法适合的建模目的

子系统

  • 添加层次结构以组织和直观地简化模型。

  • 对上下文相关行为使用继承属性,最大限度提高设计重用率。

  • 提供常用且很少更改的建模实用工具。

  • 在一个或多个模型中反复重用组件。

模型引用

  • 独立于使用它的模型开发引用模型。

  • 遮盖引用模型的内容,允许您分发该模型而不会泄露它包含的知识产权。

  • 您可以多次引用一个模型,不必生成冗余副本。

  • 使用为顶层组件定义的接口,方便多个人进行更改。

  • 通过对大型模型(例如具有 10000 个模块的模型)使用增量模型加载、更新图、仿真和代码生成,改进整体性能。

  • 执行单元测试。

  • 简化大型模型的调试。

  • 生成反映模型结构的代码。

有关这些建模方法的更详细比较,请参阅组件化方法概述

组件化方法概述

本节比较子系统、库和模型引用。表中包含有关各种建模要求和功能的建议和说明。

建模要求或功能子系统模型引用

开发过程

组件重用

 不支持

 很适合

 很适合

基于团队的开发

 不支持

 支持,但存在限制

 很适合

保护知识产权

 不支持

 不支持

 很适合

单元测试

 支持,但存在限制

 支持,但存在限制

 很适合

性能

模型加载速度

 支持,但存在限制

 很适合

 很适合

大型模型的仿真速度

 支持,但存在限制

 支持,但存在限制

 很适合

Memory

 支持,但存在限制

 支持,但存在限制

 很适合

避免人为代数环

 很适合

 很适合

 支持,但存在限制

功能

信号属性继承

 很适合

 很适合

 支持,但存在限制

状态初始化

 很适合

 很适合

 支持,但存在限制

可调性

 很适合

 很适合

 支持,但存在限制

总线

 很适合

 很适合

 支持,但存在限制

S-Function

 很适合

 很适合

 支持,但存在限制

模型配置设置

 很适合

 很适合

 支持,但存在限制

工具

 很适合

 支持,但存在限制

 支持,但存在限制

代码生成

 支持,但存在限制

 支持,但存在限制

 很适合

您可以分别查看每个建模方法的概述表,其中包含上面的组件化方法概述表中链接内所含的详细信息:

子系统方法概述

本节针对组件化方法概述中重点介绍的每个建模要求和功能,提供了使用子系统的规范。

有关子系统的详细信息,请参阅:

建模要求或功能子系统方法规范

开发过程

组件重用

不支持

  • 复制一个子系统以便在模型中重用它。

  • 子系统副本相互独立。

  • 通过保存包含子系统的模型来保存子系统。

  • 管理子系统的配置非常困难。

基于团队的开发

不支持

  • 对于模型中的子系统,Simulink 不提供与源代码管理工具的直接接口。

  • 要创建或更改子系统,您需要打开父模型的文件。当多个用户要处理模型中的多个子系统时,这会导致文件争用。

保护知识产权

不支持

请改用受保护引用模型。

单元测试

支持,但存在限制

  • 对于覆盖率测试,请使用 Signal Builder 和源模块。

  • 子系统每次更改时,您都需要将子系统复制到框架模型中。

  • 由于存在虚拟边界,测试框架可能具有不同的 Simulink 排序顺序。

  • 测试框架文件需要配置管理开销。

性能

模型加载速度

支持,但存在限制

加载模型会同时加载所有子系统。不存在任何增量加载。

大型模型的仿真速度

支持,但存在限制

  • 要加快仿真速度,请使用 Accelerator 或 Rapid Accelerator 仿真模式。

  • 仿真模式将应用于整个模型。模型引用为仿真模式提供了更精细的控制。

Memory

支持,但存在限制

仿真和代码生成的内存使用量与子系统和库的内存使用量相当。对于包含 500 个以上模块的模型,模型引用 Accelerator 模式可以显著减少仿真和代码生成的内存使用量。

避免人为代数环

很适合

  • 虚拟子系统可避免人为代数环。

  • 对于非虚拟子系统,请考虑启用 Subsystem 模块参数 Minimize algebraic loop occurrences

功能

信号属性继承

很适合

  • 从子系统边界以外继承信号属性可避免您必须为每个信号指定属性。

  • 传播信号属性可能会导致 Simulink 使用您未预料到的信号属性。

状态初始化

很适合

您可以初始化子系统的状态。

可调性

很适合

  • 使用模块参数化或封装子系统调整子系统。

  • 使用 Configuration Parameters > Optimization > Default parameter behavior 控制生成的代码中的可调性。

总线

很适合

子系统不要求对虚拟总线使用总线对象。

S-Function

很适合

子系统支持内联或非内联 S-Function。

模型配置设置

很适合

子系统使用包含该子系统的模型的模型配置设置。

工具

很适合

子系统提供广泛的 Simulink 工具支持。

代码生成

支持,但存在限制

  • 要为子系统自身生成代码,请右键点击 Subsystem 模块,并选择代码生成选项。

  • 作为一种优化措施,Simulink 会尝试识别相同的子系统。对于检测到的相同子系统,生成的代码只包含适用于多个子系统的一个代码副本。

  • 对于虚拟子系统,您不能为代码生成指定文件或函数代码分区。

库方法概述

本节针对组件化方法概述中重点介绍的每个建模要求和功能,提供了使用库的规范。

有关库的详细信息,请参阅

建模要求或功能库方法规范

开发过程

组件重用

很适合

  • 访问明确定义的实用工具模块的集合。

  • 创建组件一次并在模型中重用它。

  • 多次链接到同一库模块而不创建多个副本。

  • 从多个模型链接到同一库模块。

  • 限制对库组件的写访问权限。

  • 保持唯一真实源:将所做更改从一个库模块传播到链接到该库的所有模块。

  • 禁用链接以允许对链接的模块进行独立更改。

  • 管理库链接会增加一些开销。

  • 将库保存在类似于 Simulink 模型的文件中,但您无法对文件内容进行仿真。

  • 通过在组件之外定义数据(例如,公共父级子系统中的数据存储)在实例之间共享数据。

基于团队的开发

支持,但存在限制

  • 将库文件置于源代码管理中以实现版本控制和配置管理。

  • 保持唯一真实源:将所做更改从一个库模块传播到链接到该库的所有模块。

  • 为了减少文件争用,请对每个库使用一个子系统。

  • 从多个模型链接到同一库模块。

  • 限制对库组件的写访问权限。

保护知识产权

不支持

请改用受保护引用模型。

单元测试

支持,但存在限制

  • 对于覆盖率测试,请使用 Signal Builder 和源模块。

  • 由于存在虚拟边界,测试框架可能具有不同的 Simulink 排序顺序。

  • 测试框架文件需要配置管理开销。

性能

模型加载速度

很适合

在编辑、更新图或对模型进行仿真的过程中,Simulink 会在所需时间点以增量方式加载库。

大型模型的仿真速度

支持,但存在限制

  • 要加快仿真速度,请使用 Accelerator 或 Rapid Accelerator 仿真模式。

  • 仿真模式将应用于整个模型。模型引用为仿真模式提供了更精细的控制。

Memory

支持,但存在限制

  • 在编辑、更新图或对模型进行仿真的过程中,Simulink 会在所需时间点以增量方式加载库。

  • Simulink 会在模块更新过程中复制库模块实例。

  • 仿真和代码生成的内存使用量与子系统和库的内存使用量相当。对于包含 500 个以上模块的模型,模型引用 Accelerator 模式可以显著减少仿真和代码生成的内存使用量。

避免人为代数环

很适合

  • 虚拟子系统可避免人为代数环。

  • 对于非虚拟子系统,请考虑启用 Subsystem 模块参数 Minimize algebraic loop occurrences

功能

信号属性继承

很适合

  • 从库模块边界以外继承信号属性可避免您必须为每个信号指定属性。

  • 传播信号属性可能会导致 Simulink 使用您未预料到的信号属性。

状态初始化

很适合

您可以初始化库模块的状态。

可调性

很适合

  • 使用模块参数化或封装子系统调整库模块。

  • 使用 Configuration Parameters > Optimization > Default parameter behavior 控制生成的代码中的可调性。

总线

很适合

库不要求对虚拟总线使用总线对象。

S-Function

很适合

库支持内联和非内联 S-Function。

模型配置设置

很适合

  • 库模型没有模型配置设置。

  • 引用的库模块使用包含该模块的模型的模型配置设置。

工具

支持,但存在限制

对库使用某些 Simulink 工具(例如 Model Advisor)时存在一些限制。

代码生成

支持,但存在限制

  • 作为一种优化措施,Simulink 会尝试识别相同的子系统。对于检测到的相同子系统,生成的代码只包含适用于多个子系统的一个代码副本。

  • 对于虚拟子系统,您不能为代码生成指定文件或函数代码分区。

模型引用概述

本节针对组件化方法概述中重点介绍的每个建模要求和功能,提供了使用模型引用的规范。

有关模型引用的其他信息,请参阅:

建模要求或功能模型引用方法规范

开发过程要求

组件重用

很适合

  • 创建独立组件一次并在多个模型中重用它。

  • 多次引用同一模型而不创建多个副本。请参阅模型重用

  • 从多个模型引用同一模型。

  • 模型引用使用指定的边界以保留组件的完整性。

  • 通过在模型中创建数据存储在实例(Model 模块)之间共享数据。请参阅在引用模型实例之间共享数据

基于团队的开发

很适合

  • 为了实现版本控制和配置管理,您可以将模型引用文件置于源代码管理系统中。

  • 独立于引用模型设计、创建、仿真和测试被引用模型。

  • 从多个模型链接到同一模型引用。

  • 对引用模型所做的更改将应用于该引用模型的所有实例。

  • Simulink 不限制为了更改模型引用而进行的访问。

  • 将引用模型保存在引用它的模型之外的单独文件中。使用单独的文件有助于避免文件争用。

保护知识产权

很适合

  • 使用受保护模型功能来遮盖分发模型中引用模型的内容。

  • 创建受保护模型功能需要 Simulink Coder 许可证。使用受保护模型需要 Simulink Coder 许可证。

单元测试

很适合

  • 通过单独对组件进行仿真,独立地测试组件以隔离行为。

  • 您不必对保持不变的组件重新进行单元测试。

  • 将数据定义的测试框架与 MATLAB 测试向量和直接覆盖率集合结合使用。

  • 对于覆盖率测试,使用根输入端口和输出端口。

性能

模型加载速度

很适合

  • 在编辑、更新图或对模型进行仿真的过程中,Simulink 会在所需时间点以增量方式加载引用模型。

  • 如果需要对仿真目标进行编译,则第一次加载会比较慢。

大型模型的仿真速度

很适合

  • 单独对引用模型进行仿真。

  • Model 模块具有用于指定仿真模式的选项。

  • 您可以通过为 Configuration Parameters > Model Referencing > Rebuild 参数选择适当的设置,来提高重编译性能。

  • 通过代码生成进行仿真的启动速度可能比较慢,这在原型构建过程中可能不可取。

  • 请参阅仿真要求和限制

Memory

很适合

  • 在编辑、更新图或对模型进行仿真的过程中,Simulink 会在导航需要模型的时间点加载引用模型。

  • 使用模型引用 Accelerator 模式以减少内存使用量,并以增量方式加载引用模型的编译版本。

避免人为代数环

支持,但存在限制

考虑启用 Configuration Parameters > Model Referencing > Minimize algebraic loop occurrences

功能

信号属性继承

支持,但存在限制

  • 当引用模型不要求明确指定采样时间时,继承采样时间。您不能将连续采样时间传播到不要求明确指定采样时间的 Model 模块。

  • Model 模块独立于上下文,因此它不能继承信号属性。显式设置输入和输出信号属性。

  • 使用总线对象定义传入引用模型的总线信号的信号数据类型。

  • Goto 和 From 模块线不能跨越模型引用边界。

  • 请参阅索引基础限制

状态初始化

支持,但存在限制

  • 您可以初始化顶层模型的状态。

  • 使用结构体格式或带时间的结构体格式来初始化顶层模型以及它引用的模型的状态。

  • 要将 SimState(仿真状态)功能与模型引用结合使用,请在 Normal 模式下对所有 Model 模块进行仿真。

  • 请参阅State Information for Referenced Models

可调性

支持,但存在限制

  • 要让引用模型的每个实例使用不同的值,请在 Model 模块中使用模型参数。

  • 要让引用模型的每个实例使用相同的值,请使用 Simulink.Parameter 对象。

  • 默认情况下,所有其他参数都内联在生成的代码中。

总线

支持,但存在限制

对于跨越模型引用边界的总线信号(例如全局数据存储、根输入端口、根输出端口),您必须使用总线对象。

S-Function

支持,但存在限制

模型引用通常支持内联或非内联 S-Function。请参阅引用模型中的 S-Function

模型配置设置

支持,但存在限制

  • 要将相同的模型配置设置应用于模型层次结构中的所有模型,请使用引用配置集。

  • 根模型和引用模型的配置设置必须一致。但是,并非整个模型层次结构中的所有配置设置都必须相同。

工具

支持,但存在限制

  • 对模型引用使用某些 Simulink 工具(例如 Simulink Debugger)时存在一些限制。

  • 有关详细信息,请参阅工具要求和限制

代码生成

很适合

  • 默认情况下,模型引用将以增量方式生成代码。

  • 您可以通过为 Configuration Parameters > Model Referencing > Rebuild 参数选择适当的设置,来提高重编译性能。

相关示例

详细信息