主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

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

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

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

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

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

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

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

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

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

提示

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

要使用函数在组件的输入或输出接口上创建总线,请参阅Programmatically Create Bus Element Ports

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

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

打开一个新模型并添加三个源模块。例如,添加 Chirp SignalSine WaveStep 模块。

Model with three source blocks

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

Pointer paused on Create Bus button in action bar

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

First two source blocks connected to a Bus Creator block

为了更容易识别总线的元素,请对 Bus Creator 模块的输入加标签。

  • 双击 Chirp Signal 模块和 Bus Creator 模块之间的信号线。然后,输入 Chirp

  • 双击 Sine Wave 模块和 Bus Creator 模块之间的信号线。然后,输入 Sine

要创建包含第一条总线和 Step 模块输出的第二条总线,请点击并拖动以选择 Bus CreatorStep 模块。在出现的操作栏中,点击创建总线。在所选内容中包含 Sine WaveChirp Signal 模块不会影响结果,因为这些模块提供输入总线的元素。

Pointer paused on Create Bus button in action bar

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

First Bus Creator block and third source block connected to another Bus Creator block

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

为新的 Bus Creator 模块的输入添加标签。

  • 双击 Bus Creator 模块之间的信号线。然后,输入 Sinusoidal

  • 双击 Step 模块和 Bus Creator 模块之间的信号线。然后,输入 Step

或者,排列模块以提高模型的可读性。

将第二个 Bus Creator 模块的输出连接到 Scope 模块,并对输出加标签 Sources

要通过信号线样式直观识别总线,请在 Simulink 工具条的建模选项卡上,点击更新模型运行

Compiled model with bus line style at output of Bus Creator blocks

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

此示例显示如何使用 Out Bus Element 模块子系统或模型的输出信号分组到虚拟总线中。

打开一个新模型并添加三个源模块。例如,添加 Chirp SignalSine WaveStep 模块。

Model with three source blocks

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

First source block connected to an Out Bus Element block labeled OutBus.signal1

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

Menu with pointer on New Element

Sine WaveStep 模块连接到 Out Bus Element 模块。

Each source block connected to a default Out Bus Element block

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

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

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

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

  • 双击 signal3。然后,输入 Step

Out Bus Element blocks labeled OutBus.NestedBus.Chirp, OutBus.NestedBus.Sine, and OutBus.Step with cursor after Step

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

Bus hierarchy with NestedBus and Step under OutBus and Chirp and Sine under NestedBus

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

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

Bus output from a Model block that references the example model

指定一个端口的多个元素

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

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

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

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

注意

要将 Simulink.Bus 对象指定为总线元素端口上总线的数据类型,则 In Bus ElementOut Bus Element 模块必须表示总线或总线元素。

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

假设该端口需要一条总线,该总线包含名为 NestedBus 的嵌套总线和名为 Step 的信号。嵌套总线包含名为 ChirpSine 的信号。您的模型或子系统当前仅使用名为 Step 的信号。

在空白模型或子系统中,添加一个 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 按钮箭头,并选择添加元素(不带模块)

Pointer paused on Add element without block button

新元素嵌套在先前所选元素下。模块图没有变化。

InBus with new element named signal1

新元素名称以灰色和斜体显示,表示 In Bus Element 模块不直接表示该元素。

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

Bus hierarchy with NestedBus in edit mode

要向嵌套总线添加元素,请选择 NestedBus。然后,点击 Add element 按钮箭头,并选择添加元素(不带模块)

NestedBus selected and pointer paused on Add element without block button

要添加另一个总线元素,请选择 NestedBus。然后,点击 Add element 按钮箭头,并选择添加元素(不带模块)

NestedBus selected and pointer paused on Add element without block button

要将总线元素分别从 signalsignal2 重命名为 ChirpSine,请双击每个新元素名称并输入新名称。

Bus hierarchy with Chirp and Sine under NestedBus

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

提示

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

要切换端口、信号和执行属性的显示,点击 Specify attributes。然后根据需要指定属性。

Signal attributes of InBus.Step

在 R2025a 之前的版本中: 要指定属性,请在总线、信号或消息的名称上暂停。然后,点击 Specify attributes 查看信号属性,或点击 Specify execution attributes 查看执行属性。或者,如果可用,点击属性摘要。

当您指定属性时,属性摘要会出现在元素名称旁边。要进一步编辑属性,点击元素名称旁边的属性摘要。

Bus hierarchy that has elements with nondefault properties

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

假设您添加了没有模块的元素,然后决定要添加选择它们的 In Bus Element 模块。要为输入元素添加模块,请点击一个元素名称,或在按住 Ctrl 键的同时点击多个元素名称。然后,点击 Add blocks for selected elements。例如,为 ChirpSine 添加模块。

Pointer paused on Add blocks for selected signals button

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

In Bus Element blocks labeled InBus.NestedBus.Chirp and InBus.NestedBus.Sine

在模块标签中,每个圆点表示一个新的层次结构级别。

对于输出总线元素端口,为元素添加模块的方式略有不同。要为输出总线元素端口添加模块,请选择现有 Out Bus Element 模块未表示的元素。然后,通过点击 Add block for selected element 添加 Out Bus Element 模块。要防止多个 Out Bus Element 模块表示同一元素时发生冲突,一次只能添加一个 Out Bus Element 模块。

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

访问总线的元素

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

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

另请参阅

| | |

主题