使用总线对象指定总线属性
每个总线对象都为总线提供可重用规范,软件可以用它来验证总线及其元素的属性。多个模块、对象和模型组件可以指定同一总线对象。
Simulink.Bus
对象仅指定总线的架构属性,这与总线中包含的信号的值不同。例如,总线对象可以指定总线中的元素数量、元素的顺序、元素是否嵌套以及如何嵌套、组成信号的数据类型等,但不指定信号值。
总线对象类似于 C 语言中的结构体定义:它定义总线的成员,但不创建总线。总线对象也类似于电缆连接器。连接器定义引脚及其配置,并控制它们可以连接哪些类型的电线。类似地,总线对象定义关联的总线必须具有的信号配置和属性。
总线对象对于虚拟总线是可选的,但对于非虚拟总线是必需的。有关虚拟和非虚拟总线的详细信息,请参阅合成接口规范。
确定是否使用总线对象
您可以单独指定总线属性,也可以使用总线对象来指定。根据您的建模要求,您定义总线属性的方式可能会有所不同。
建模要求 | 设定源 |
---|---|
在子系统或模型接口上分配或验证输入总线的层次结构和属性。 | 使用 In Bus Element 模块或 |
在子系统或模型接口上分配或验证输出总线的层次结构和属性。 | 使用 Out Bus Element 模块或 |
分配或验证跨多个模块或模型组件的总线的层次结构和属性。 | 使用 |
跟踪模型和为总线生成的代码之间的对应关系。 | 使用由 为非虚拟总线生成的代码生成一个结构体。使用非虚拟总线可能会导致包含某些总线的多个副本。 |
为 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.BusElement
对象的数据类型设置为 Simulink.Bus
对象时,Bus:
前缀是可选的。
您可以在定义总线对象之前或之后将总线对象指定为数据类型。但是,在仿真模型之前,您必须定义并加载 Simulink.Bus
对象。
在模型开发过程中,您可以修改总线以匹配总线对象,或修改总线对象以匹配总线。如果不想更改总线对象,您可以:
创建与对总线的更改相匹配的总线对象,并将新总线对象用于更改后的总线连接到的模块。
还原总线更改,使得总线仍旧匹配相关联的总线对象。
保存 Simulink 总线对象
您可以将 Simulink.Bus
对象保存到以下位置:
数据字典
函数
MAT 文件
数据库或其他外部文件
如果不保存总线对象,则在重新打开使用总线对象的模型时,需要重新创建总线对象。
根据您的建模要求选择存储总线对象的位置。
建模要求 | 位置 |
---|---|
存储大型模型和模型层次结构的数据。 | 使用一个数据字典。 从基础工作区保存到数据字典时,您将获得模型使用的所有变量,而不仅仅是 要更新模型以使用数据字典,请参阅迁移模型以使用 Simulink 数据字典。 |
使用 MATLAB® 实现可追溯性和了解模型差异。 | 使用脚本或函数。 要创建定义一个或多个 |
更快地保存和加载总线对象。 | 使用 MAT 文件。 要从基础工作区创建包含 |
将总线接口信息与在外部数据源中存储的设计文档进行比较 | 使用数据库或其他外部文件。 对 C 代码结构体 ( |
要保存存储在基础工作区中的总线对象,您可以使用任何保存基础工作区内容的 MATLAB 方法。但是,生成的文件包含基础工作区中的所有内容,而不仅仅是总线对象。
修改总线对象时,必须重新保存它们以保留更改。
将 Simulink 总线对象映射到模型
在对模型进行仿真之前,必须将它使用的所有 Simulink.Bus
对象加载到基础工作区或模型使用的数据字典中。为了实现跨模型的自动化和一致性,将总线对象映射到模型非常重要。
通过确定模型所需的所有总线对象,可以确保在模型执行之前加载这些对象。
通过确定使用一个总线对象的所有模型,可以确保对一个总线对象的更改不会导致使用该总线对象的任何模型发生意外更改。
要确保在模型执行之前加载必要的总线对象,请考虑使用以下方法:
工程 - 通过将文件配置为在打开工程时运行,自动加载或运行定义总线对象的文件。有关详细信息,请参阅工程管理。
数据字典 - 为一个或多个模型存储具有变量的总线对象和其他对象。
要在各模型之间共享一个总线对象,可以将每个模型链接到一个字典,并创建公共引用字典来存储该对象。有关示例,请参阅Partition Dictionary Data Using Referenced Dictionaries。
数据库 - 捕获外部数据源(如数据库)中的映射信息。
模型回调 - 通过使用模型回调(例如
PreLoadFcn
)加载或运行定义总线对象的文件。有关详细信息,请参阅模型回调。如果模型仅使用少量总线对象,请考虑将总线目标代码直接复制到回调中,而不是加载文件。
要查找总线对象在打开模型中的使用位置,请参阅查找使用特定变量的模块。
提示
使用严格和标准的命名约定对映射总线对象使用非常有帮助。以一个作动器控制函数要求的模型和数据为例,分别命名模型 Actuator
以及输入和输出端口 Actuator_bus_in
和 Actuator_bus_out
,使总线对象和模型之间的连接更加清晰。
请注意,如果一个模型的输出直接馈送到另一个模型,这种方法可能会导致问题。在这种情况下,命名不匹配会导致错误。