Main Content

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

使用总线对象指定总线属性

总线对象为总线提供可重用规范,软件可以用它来验证总线及其元素的属性。多个模块和模型组件可以指定同一总线对象。总线对象对于虚拟总线是可选的,但对于非虚拟总线是必需的。

Simulink.Bus 对象仅指定总线的架构属性,这与总线中包含的信号的值不同。例如,总线对象可以指定总线中的元素数量、元素的顺序、元素是否嵌套以及如何嵌套、组成信号的数据类型等,但不指定信号值。

总线对象类似于 C 语言中的结构体定义:它定义总线的成员,但不创建总线。总线对象也类似于电缆连接器。连接器定义引脚及其配置,并控制它们可以连接哪些类型的电线。类似地,总线对象定义关联的总线必须具有的信号配置和属性。

确定是否使用总线对象

您可以单独指定总线属性,也可以使用总线对象来指定。根据您的建模要求,您定义总线属性的方式可能会有所不同。

建模要求设定源
在子系统或模型接口上分配或验证输入总线的层次结构和属性。

使用 In Bus Element 模块或 Simulink.Bus 对象。

在子系统或模型接口上分配或验证输出总线的层次结构和属性。

使用 Out Bus Element 模块或 Simulink.Bus 对象。

分配或验证跨多个模块或模型组件的总线的层次结构和属性。

使用 Simulink.Bus 对象。

跟踪模型和为总线生成的代码之间的对应关系。

使用由 Simulink.Bus 对象定义的非虚拟总线。

为非虚拟总线生成的代码生成一个结构体。使用非虚拟总线可能会导致包含某些总线的多个副本。

为 Simscape™ 守恒连接设计严格的接口设定,并锁定连接名称和类型。

使用 Simulink.ConnectionBus 对象。

有关 Simulink.ConnectionBus 对象的信息,请参阅Design Rigid Interface Specifications for Conserving Connections (Simscape)

当模型组件的端口直接相互连接时,请为表示这些端口的模块指定相同或等效的总线对象。通过在接口的两端指定具有相同层次结构和属性的总线对象,您可以实现两个组件之间接口的一致性。有关接口设计的详细信息,请参阅Define Interfaces of Model Components

以下建模配置必须使用 Simulink.Bus 对象:

  • 非虚拟总线

  • 带总线输入或输出的 Stateflow®

  • 具有外部代码的 S-Function 或代码继承工具接口

  • 需要总线对象来定义总线输入或输出的模块。有关详细信息,请参阅 Bus-Capable Blocks

要在使用 Bus Creator 模块创建总线时强制实施强数据类型,请执行以下操作:

  • 输出数据类型模块参数设置为 Simulink.Bus 对象。

  • 清除使用来自输入的名称,而不是来自总线对象的名称模块参数。

  • 元素名称不匹配配置参数设置为错误。此配置参数检查输入元素名称是否与总线对象中的对应名称匹配。

将总线对象指定为模块或对象的数据类型时,总线对象指定的属性通常会覆盖模块或对象指定的属性。

例如,假设 Signal Specification 模块具有以下设置:

  • 单位设置为 ft/s

  • 数据类型设置为 Simulink.Bus 对象,其元素指定单位为 m/s

Signal Specification 模块使用 m/s 作为总线元素的单位。

总线对象仅在定义非虚拟总线时才会出现在生成的代码中。对于定义虚拟总线的总线对象,总线对象指定的属性出现在生成的代码中,而不是在总线对象中。

创建 Simulink 总线对象

要以交互方式创建或编辑 Simulink.Bus 对象,请使用类型编辑器模型资源管理器。类型编辑器显示总线层次结构,提供导入和导出等功能,而且通过它也可更新其他类型,如 Simulink.ValueType 对象。模型资源管理器允许您更新数据对象,如 Simulink.Parameter 对象。使用任一工具创建的总线对象最初存储在基础工作区或数据字典中。

有关使用类型编辑器创建总线对象的示例,请参阅Define Multilevel Bus Hierarchy Using Type Editor

要以编程方式创建或编辑总线对象,请参阅以编程方式创建 Simulink 总线对象。以编程方式创建的总线对象最初存储在基础工作区、数据字典或函数中。

指定 Simulink 总线对象

创建 Simulink.Bus 对象并指定总线属性后,可将总线对象与需要使用该对象提供的总线定义的任何模块相关联。

要将模块与总线相关联,请将输出数据类型数据类型模块参数设置为总线: <对象名称>,并将 <对象名称> 替换为 Simulink.Bus 对象名称。

您可以在定义总线对象之前或之后将总线对象指定为模块的数据类型。但是,在仿真模型之前,必须定义并加载 Simulink.Bus 对象。

在模型开发过程中,您可以修改总线以匹配总线对象,或修改总线对象以匹配总线。如果不想更改总线对象,您可以:

  • 创建与对总线的更改相匹配的总线对象,并将新总线对象用于更改后的总线连接到的模块。

  • 还原总线更改,使得总线仍旧匹配相关联的总线对象。

保存 Simulink 总线对象

您可以将 Simulink.Bus 对象保存到以下位置:

  • 数据字典

  • 函数

  • MAT 文件

  • 数据库或其他外部文件

如果不保存总线对象,则在重新打开使用总线对象的模型时,需要重新创建总线对象。

根据您的建模要求选择存储总线对象的位置。

建模要求位置
存储大型模型和模型层次结构的数据。

使用一个数据字典。

从基础工作区保存到数据字典时,您将获得模型使用的所有变量,而不仅仅是 Simulink.Bus 对象。

要保存对数据字典的更改,请使用类型编辑器模型资源管理器

要更新模型以使用数据字典,请参阅迁移模型以使用 Simulink 数据字典

使用 MATLAB® 实现可追溯性和了解模型差异。

使用脚本或函数。

要创建定义一个或多个 Simulink.Bus 对象的脚本或函数,请使用类型编辑器模型资源管理器Simulink.Bus.save 函数。

更快地保存和加载总线对象。

使用 MAT 文件。

要从基础工作区创建包含 Simulink.Bus 对象的 MAT 文件,请使用类型编辑器模型资源管理器save 函数。

将总线接口信息与在外部数据源中存储的设计文档进行比较

使用数据库或其他外部文件。

对 C 代码结构体 (struct) 定义使用 Simulink.importExternalCTypes 函数、脚本或 Database Toolbox™ 功能。在准备为仿真集成现有算法 C 代码(例如,通过使用代码继承工具)时,可以根据结构体类型在定义中打包信号或参数数据。

要保存存储在基础工作区中的总线对象,您可以使用任何保存基础工作区内容的 MATLAB 方法。但是,生成的文件包含基础工作区中的所有内容,而不仅仅是总线对象。

修改总线对象时,必须重新保存它们以保留更改。

Simulink 总线对象映射到模型

在对模型进行仿真之前,必须将它使用的所有 Simulink.Bus 对象加载到基础工作区或模型使用的数据字典中。为了实现跨模型的自动化和一致性,将总线对象映射到模型非常重要。

  • 通过确定模型所需的所有总线对象,可以确保在模型执行之前加载这些对象。

  • 通过确定使用一个总线对象的所有模型,可以确保对一个总线对象的更改不会导致使用该总线对象的任何模型发生意外更改。

要确保在模型执行之前加载必要的总线对象,请考虑使用以下方法:

  • 工程 - 通过将文件配置为在打开工程时运行,自动加载或运行定义总线对象的文件。有关详细信息,请参阅工程管理

  • 数据字典 - 为一个或多个模型存储具有变量的总线对象和其他对象。

    要在各模型之间共享一个总线对象,可以将每个模型链接到一个字典,并创建公共引用字典来存储该对象。有关示例,请参阅Partition Dictionary Data Using Referenced Dictionaries

  • 数据库 - 捕获外部数据源(如数据库)中的映射信息。

  • 模型回调 - 通过使用模型回调(例如 PreLoadFcn)加载或运行定义总线对象的文件。有关详细信息,请参阅模型回调

    如果模型仅使用少量总线对象,请考虑将总线目标代码直接复制到回调中,而不是加载文件。

要查找总线对象在打开模型中的使用位置,请参阅查找使用特定变量的模块

提示

使用严格和标准的命名约定对映射总线对象使用非常有帮助。以一个作动器控制函数要求的模型和数据为例,分别命名模型 Actuator 以及输入和输出端口 Actuator_bus_inActuator_bus_out,使总线对象和模型之间的连接更加清晰。

请注意,如果一个模型的输出直接馈送到另一个模型,这种方法可能会导致问题。在这种情况下,命名不匹配会导致错误。

另请参阅

工具

对象

相关主题