Main Content

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

将信号或消息组合到虚拟总线中

为了减少模块图中信号线的复杂度和杂乱无章,并使接口的增量更改更容易,可以使用虚拟总线。虚拟总线信号类似于用束线带绑在一起的一捆电线。同样,非虚拟总线类似于 C 代码中的结构体。您可以将总线作为一个整体来访问,也可以从总线中选择特定元素。

当您创建虚拟总线时,可以根据信号线的功能对其进行分组。通过将信号或消息组织到逻辑分组中,可以降低进行重大重构的可能性。

不是所有模块都可以接受总线,一些模块会将总线隐式转换为向量。要了解哪些模块支持哪种类型的总线,请参阅Bus-Capable Blocks。要标识总线转换,请参阅Identify Automatic Bus Conversions

创建虚拟总线的方式因要组合的信号或消息的位置而异。

  • 在组件内 - 使用 Bus Creator 模块。

  • 在组件的输出接口处 - 使用 Out Bus Element 模块。

  • 在组件的输入接口处 - 使用 In Bus Element 模块。

为了重点讲述基本步骤,这些示例很简单。不过,如果您有许多信号或消息要组合,总线将非常有用。

提示

当您打开模型或创建总线时,Simulink® 编辑器不会显示总线线型。要更新线型,请编译模型。在 Simulink 工具条的建模选项卡上,点击更新模型运行

将组件内的信号线组合起来

您可以使用 Bus Creator 模块将信号组合到一个组件内的一个虚拟总线中。

打开包含三个模块的示例模型。

要创建一个包含来自多个模块的输出的总线,请点击并拖动以选择这些模块。对于此示例,请选择 Chirp Signal 和 Sine Wave 模块。在出现的操作栏中,点击创建总线

软件会添加 Bus Creator 模块,并将输入连接到该模块。Bus Creator 模块的输出是虚拟总线。

为了更容易识别总线的元素,请对 Bus Creator 模块的输入加标签。双击 Chirp Signal 模块和 Bus Creator 模块之间的信号线。然后,输入 Chirp。双击 Sine Wave 模块和 Bus Creator 模块之间的信号线。然后,输入 Sine

要创建包含第一条总线和 Step 模块输出的第二条总线,请点击并拖动以选择 Bus Creator 和 Step 模块。在出现的操作栏中,点击创建总线。由于 SineChirp 信号是输入总线的元素,因此无论您的选择是否包括 Sine Wave 和 Chirp Signal 模块,软件都会创建相同的总线。

软件会添加另一个 Bus Creator 模块,并将输入连接到该模块。Bus Creator 模块的输出是包含嵌套总线的虚拟总线。

您可以将总线嵌套至任意深度。如果 Bus Creator 模块的输入之一是总线,则其输出是包含至少一个嵌套总线的总线层次结构。

标记新 Bus Creator 模块的输入。双击 Step 模块和 Bus Creator 模块之间的信号线。然后,输入 Step。双击 Bus Creator 模块之间的信号线。然后,输入 NestedBus。或者,排列模块以提高模型的可读性。

将第二个 Bus Creator 模块的输出连接到 Scope 模块,并对输出加标签 TopBus。要直观地识别总线,请通过点击 Simulink 工具条的建模选项卡上的更新模型运行来编译模型。编译模型会更新线型。

将多个输出信号连接到一个端口

此示例说明如何使用 Out Bus Element 模块将子系统或模型的输出信号组合到一个虚拟总线中。

打开包含三个源模块的示例模型。

向模型中添加一个 Out Bus Element 模块。然后,将 Chirp Signal 模块连接到 Out Bus Element 模块。

要复制两个模块,请按住 Ctrl 并拖动 Out Bus Element 模块两次。以这种方式复制模块时,请指定是创建新端口还是使用现有端口。要创建一条包含所有信号的输出总线,请在每次复制模块时选择使用现有端口

将 Sine Wave 和 Step 模块连接到 Out Bus Element 模块。

每个 Out Bus Element 模块旁边的标签有两个部分。标签的第一部分描述端口并使用默认名称 OutBus。标签的第二部分描述总线元素并使用默认名称 signal1

为了更容易识别端口的元素,请对它们进行重命名。(可选)通过在其他总线中嵌套总线元素来创建层次结构。请在每个总线名称后添加点。例如:

  • 双击 signal1。然后,输入 NestedBus.Chirp

  • 双击 signal2。然后,输入 NestedBus.Sine

  • 双击 signal3。然后,输入 Step

要检查端口的总线层次结构,双击任一 Out Bus Element 模块。对话框显示一个名为 OutBus 的顶层总线,其中包含名为 NestedBusStep 的元素。NestedBus 是嵌套总线,包含名为 ChirpSine 的元素。

虽然此示例将一个信号连接到每个 Out Bus Element 模块,但您也可以将一个总线连接到一个 Out Bus Element 模块。

三个 Out Bus Element 模块在模型的输出端口创建一个虚拟总线。要查看该虚拟总线,请在另一个模型中引用该模型,或将这些 Out Bus Element 模块移至一个子系统中。当您编译模型时,线型会更新。要编译模型,请在 Simulink 工具条的建模选项卡上,点击更新模型运行

在输入端口指定多个元素

当模型或子系统文件在输入端口需要总线时,请使用 In Bus Element 模块定义该端口。

要在一个接口上指定输入总线元素端口的元素,您可以:

  • 向该接口添加元素,向模块图添加或不添加模块。

  • 使用 Simulink.Bus 对象定义总线层次结构。

注意

要将总线元素端口上输入总线的数据类型指定为 Simulink.Bus 对象,必须通过 In Bus Element 模块选择总线或总线元素。

此示例说明如何在没有 Simulink.Bus 对象的接口上定义一个输入总线元素端口。

假设模型组件需要一条输入总线包含名为 NestedBus 的嵌套总线和名为 Step 的信号。嵌套总线包含名为 ChirpSine 的信号。

在空白模型或子系统中,添加一个 In Bus Element 模块。此模块为模型或子系统创建一个输入端口。

Default In Bus Element block with block label that says InBus.signal1

要重命名该元素,请在模块标签中双击 signal1。然后,将 signal1 替换为 Step

In Bus Element block with block label that says InBus.Step. The part of the label that says Step is in edit mode.

打开属性检查器。然后,选择 In Bus Element 模块。或者,双击该模块打开对话框。

在属性检查器或对话框中,选择名为 InBus 的顶层总线。然后,点击 Add element

Bus hierarchy with InBus selected and pointer over Add element button

在新模块的标签中,双击 signal1。然后,输入 NestedBus.Chirp

In Bus Element block with block label that says InBus.NestedBus.Chirp. The part of the label that says NestedBus.Chirp is in edit mode.

圆点指定层次结构的另一个级别,将名为 Chirp 的元素放入名为 NestedBus 的嵌套总线中。

Bus hierarchy with Chirp under NestedBus under InBus

在属性检查器或对话框中,选择名为 NestedBus 的元素。然后,点击 Add element 按钮箭头,并选择添加元素(不带模块)

Bus hierarchy with NestedBus selected and pointer over Add element without block button

双击新元素名称。然后,输入 Sine

Bus hierarchy with Sine in edit mode

通过添加元素而不添加模块,您可以定义只有一个 In Bus Element 模块(而没有 Simulink.Bus 对象)的整个总线层次结构。

提示

当您要添加许多不带模块的元素时,使用 Simulink.Bus.addElementToPort 函数可能比使用对话框更快。有关示例,请参阅Programmatically Create Bus Element Ports

要在创建后对元素重新排序,请将它们拖到新位置。例如,将 NestedBus 拖到 Step 上方。

Reordered bus hierarchy

(可选)要指定元素的属性,请将鼠标暂停在元素名称上。然后,点击出现的铅笔按钮

Bus hierarchy that has elements with nondefault properties

当您创建要重用的文件时,在接口上定义元素的属性非常有用。接口定义确定引用子系统或模型支持的输入。输入总线的层次结构和属性必须与对应端口的定义匹配。

要编辑属性或指定其他属性,请点击元素名称旁边的属性。

假设您最初添加了不带模块的元素,后来决定需要通过 In Bus Element 模块来选择它们。要为输入元素添加模块,请点击一个元素名称,或在按住 Ctrl 键的同时点击多个元素名称。然后,点击 Add blocks for selected signals

Pointer paused on Add blocks for selected signals button

对应的 In Bus Element 模块出现在模块图中。

有关更多示例和信息,请参阅 In Bus Element

访问总线的元素

您可以将总线作为一个整体来访问,也可以从总线中选择特定的信号、消息或嵌套总线。

如何从总线中提取元素取决于总线的位置。

另请参阅

| | |

相关主题