使用 Simulink.Bus 对象数据类型指定总线属性
总线可以与 Simulink.Bus
对象相关联,该对象指定 Simulink® 用于验证总线的属性。Bus
对象对于虚拟总线是可选的,但对于非虚拟总线是必需的。
Bus
对象仅指定总线的架构属性,这与总线中包含的信号的值不同。例如,Bus
对象可以指定总线中的元素数量、元素的顺序、元素是否嵌套以及如何嵌套、组成信号的数据类型等,但不指定信号值。
Bus
对象类似于 C 语言中的结构体定义:它定义总线的成员,但不创建总线。Bus
对象也类似于电缆连接器。连接器定义所有的引脚及其配置,并控制它们可以连接哪些类型的电线。类似地,Bus
对象定义关联的总线必须具有的信号配置和属性。
Simulink.Bus 对象工作流
在模型中使用 Bus
对象涉及到执行以下任务(很多情况下是迭代执行)。
确定是否使用 Simulink.Bus 对象
以下建模配置必须使用 Bus
对象:
非虚拟总线
带总线输入或输出的 Stateflow® 图
具有外部代码的 S-Function 或代码继承工具接口
您可以将一个 Bus
对象与多个模块相关联。如果模块具有总线输入或输出,则需要您指定 Bus
对象。有关详细信息,请参阅 Bus-Capable Blocks。
如果模块的信号输入或输出由 Bus
对象实现,则信号必须是具有总线对象指定属性的总线。任何偏差都会导致错误。
如果使用 Bus Creator 或 In Bus Element 模块参数指定总线属性,则总线下游的所有模块都将继承相同的属性。
您可以使用 Bus Creator 模块参数来定义虚拟总线并执行有限的错误检查。要对总线执行彻底的错误检查,请将 Bus
对象与总线关联。当您要创建可重用且可共享的模型组件时,使用 Bus
对象来检查总线是否有误很重要。
要想更轻松地跟踪模型和总线生成代码之间的对应关系,请使用非虚拟总线。为非虚拟总线生成的代码生成一个结构体。使用非虚拟总线可能会导致包含某些总线的多个副本。
确定如何管理 Simulink.Bus 对象
您可以将 Bus
对象保存到以下位置:
数据字典
函数
MAT 文件
数据库或其他外部文件
如果不保存 Bus
对象,则在重新打开使用 Bus
对象的模型时,需要重新创建 Bus
对象。
不同的 Bus
对象存储位置各有优势。
位置 | 使用注意事项 |
---|---|
数据字典 | 用于大型模型组件化。 从基础工作区保存到数据字典时,您将获得模型使用的所有变量,而不仅仅是 在保存到数据字典之前,请阅读 迁移到数据字典之前的注意事项。 |
函数 | 需要通过 MATLAB® 实现可追溯性和了解模型差异时使用。 |
MAT 文件 | 需要更快地保存和加载 |
数据库或其他外部文件 | 用于将总线接口信息与在外部数据源中存储的设计文档进行比较。 |
创建并指定 Simulink.Bus 对象
要以交互方式创建或编辑 Bus
对象,请使用类型编辑器或模型资源管理器。使用这些工具创建的 Bus
对象最初存储在基础工作区或数据字典中。要可视化总线层次结构并访问功能(如导入和导出),请使用类型编辑器。当您有多种类型的对象要更新时,请使用模型资源管理器。模型资源管理器允许您更新其他类型的对象,如 Simulink.Parameter
对象。
要以编程方式创建和编辑 Bus
对象,请参阅以编程方式创建 Simulink 总线对象。Bus
对象最初存储在基础工作区、数据字典或函数中。
创建 Bus
对象并指定总线属性后,可将总线对象与需要使用该对象提供的总线定义的任何模块相关联。要将模块与总线关联,请在“模块参数”对话框中,将输出数据类型或数据类型设置为 Bus: <object name>,并将 <object name> 替换为 Bus
对象名称。
您可以在定义 Bus
对象之前或之后将 Bus
对象指定为模块的数据类型。但是,在对模型进行仿真之前,Bus
对象和对应的总线必须具有相同数量的总线元素,而且顺序必须相同。此外,Bus
对象中的每个元素和对应的总线中的每个元素必须具有相同的数据类型和维度。
在模型开发过程中,您可以修改总线以匹配 Bus
对象,或修改 Bus
对象以匹配总线。
如果不想更改 Bus
对象,您可以:
创建与对总线的更改相匹配的
Bus
对象,并将新Bus
对象用于更改后的总线连接到的模块。还原总线更改,使得总线仍旧匹配相关联的
Bus
对象。
保存 Simulink.Bus 对象
要保存存储在基础工作区中的 Bus
对象,您可以使用任何保存基础工作区内容的 MATLAB 方法。但是,生成的文件包含基础工作区中的所有内容,而不仅仅是 Bus
对象。
您可以将 Bus
对象保存在不同位置。
位置 | 文件创建方法 | 文件内容 |
---|---|---|
数据字典 | 请参阅迁移模型以使用 Simulink 数据字典。 | 模型使用的 Bus 对象和其他基础工作区变量 |
函数 | 使用 Type Editor 或 Simulink.Bus.save 函数。 | Bus 对象 |
MAT 文件 | 使用 Type Editor。 | Bus 对象 |
数据库或其他外部文件 | 对 C 代码结构体 ( | Bus 对象 |
修改保存的 Bus
对象时,必须重新保存它们以保留更改。
将 Simulink.Bus 对象映射到模型
在对模型进行仿真之前,必须将它使用的所有 Bus
对象加载到基础工作区或模型使用的数据字典中。为了实现跨模型的自动化和一致性,将 Bus
对象映射到模型非常重要。
通过确定模型所需的所有
Bus
对象,可以确保在模型执行之前加载这些对象。通过确定使用一个
Bus
对象的所有模型,可以确保对一个Bus
对象的更改不会导致使用该Bus
对象的任何模型发生意外更改。
为了确保在模型执行之前加载必要的 Bus
对象,请考虑使用:
工程 - 通过将文件配置为在打开工程时运行,自动加载或运行定义
Bus
对象的文件。有关详细信息,请参阅工程管理。数据字典 - 为一个或多个模型存储具有变量的
Bus
对象和其他对象。要在各模型之间共享一个
Bus
对象,可以将每个模型链接到一个字典,并创建公共引用字典来存储该对象。有关示例,请参阅Partition Dictionary Data Using Referenced Dictionaries。数据库 - 捕获外部数据源(如数据库)中的映射信息。
模型回调 - 通过使用模型回调(例如
PreLoadFcn
)加载或运行定义Bus
对象的文件。有关详细信息,请参阅模型回调。如果模型仅使用少量
Bus
对象,请考虑将Bus
目标代码直接复制到回调中,而不是加载文件。
要查找 Bus
对象在打开模型中的使用位置,请参阅查找使用特定变量的模块。
提示
使用严格和标准的命名约定对映射 Bus
对象使用非常有帮助。以一个作动器控制函数要求的模型和数据为例,分别命名模型 Actuator
以及输入和输出端口 Actuator_bus_in
和 Actuator_bus_out
,使 Bus
对象和模型之间的连接更加清晰。
请注意,如果一个模型的输出直接馈送到另一个模型,这种方法可能会导致问题。在这种情况下,命名不匹配会导致错误。