Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

使用 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 CreatorIn Bus Element 模块参数指定总线属性,则总线下游的所有模块都将继承相同的属性。

您可以使用 Bus Creator 模块参数来定义虚拟总线并执行有限的错误检查。要对总线执行彻底的错误检查,请将 Bus 对象与总线关联。当您要创建可重用且可共享的模型组件时,使用 Bus 对象来检查总线是否有误很重要。

要想更轻松地跟踪模型和总线生成代码之间的对应关系,请使用非虚拟总线。为非虚拟总线生成的代码生成一个结构体。使用非虚拟总线可能会导致包含某些总线的多个副本。

确定如何管理 Simulink.Bus 对象

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

  • 数据字典

  • 函数

  • MAT 文件

  • 数据库或其他外部文件

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

不同的 Bus 对象存储位置各有优势。

位置使用注意事项

数据字典

用于大型模型组件化。

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

在保存到数据字典之前,请阅读 迁移到数据字典之前的注意事项

函数

需要通过 MATLAB® 实现可追溯性和了解模型差异时使用。

MAT 文件

需要更快地保存和加载 Bus 对象时使用。

数据库或其他外部文件

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

创建并指定 Simulink.Bus 对象

要以交互方式创建或编辑 Bus 对象,请使用总线编辑器模型资源管理器。使用这些工具创建的 Bus 对象最初存储在基础工作区或数据字典中。要可视化总线层次结构并访问功能(如导入和导出),请使用总线编辑器。当您有许多 Bus 对象或 Bus 对象存储在多个位置时,请使用模型资源管理器。无论有多少 Bus 对象,模型资源管理器都能够快速启动,它还允许您在编辑 Bus 对象时在基础工作区和数据字典之间轻松切换。

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

创建 Bus 对象并指定总线属性后,可将总线对象与需要使用该对象提供的总线定义的任何模块相关联。要将模块与总线关联,请在 Block Parameters 对话框中,将 Data type 设置为 “Bus: <object name>”,并将 “<object name>” 替换为 Bus 对象名称。

您可以在定义 Bus 对象之前或之后将 Bus 对象指定为模块的数据类型。但是,在对模型进行仿真之前,Bus 对象和对应的总线必须具有相同数量的总线元素,而且顺序必须相同。此外,Bus 对象中的每个元素和对应的总线中的每个元素必须具有相同的数据类型和维度。

在模型开发过程中,您可以修改总线以匹配 Bus 对象,或修改 Bus 对象以匹配总线。

如果不想更改 Bus 对象,您可以:

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

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

保存 Simulink.Bus 对象

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

位置文件创建方法文件内容

数据字典

请参阅迁移模型以使用 Simulink 数据字典模型使用的 Bus 对象和其他基础工作区变量

函数

使用 总线编辑器Simulink.Bus.save 函数。Bus 对象

MAT 文件

使用 总线编辑器Bus 对象

数据库或其他外部文件

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

Bus 对象

您可以通过提供在 MATLAB 之外的位置进行写入操作的自定义函数来自定义 Bus 对象导出。例如,导出的 Bus 对象可以作为记录保存在数据库中。有关详细信息,请参阅Customize Bus Object Import and Export

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

将 Simulink.Bus 对象映射到模型

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

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

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

为了确保在模型执行之前加载必要的 Bus 对象,请考虑使用:

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

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

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

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

    您可以提供在 MATLAB 之外的位置进行读取操作的自定义函数,从而自定义 Bus 对象导入。有关详细信息,请参阅Customize Bus Object Import and Export

  • 模型回调 - 通过在模型回调中使用 load 函数,自动加载或运行定义 Bus 对象的文件。

    如果模型仅使用少量 Bus 对象,请考虑将 Bus 对象代码直接复制到回调中,而不是加载文件。模型 ex_bus_tutorial_nonvirtual 中的回调即是这样的一个示例。

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

提示

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

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

另请参阅

相关主题