主要内容

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

为了减少模块图中信号线的复杂度和杂乱无章,并使接口的增量更改更容易,可以使用虚拟总线。虚拟总线信号类似于用束线带绑在一起的一捆电线。同样,非虚拟总线类似于 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 模块。Out Bus Element 模块接受信号、报文和总线作为输入。

例如,创建将三个信号连接到一个输出端口的简单模型。

  1. 打开一个新模型并添加 Chirp SignalSine WaveStep 模块。

    Model with three source blocks

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

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

  3. 要复制两个 Out Bus Element 模块,请按下 Ctrl 并拖动 Out Bus Element 模块两次。要对额外的输出信号使用相同的端口,请在每次复制模块时选择新元素

    Menu with pointer on New Element

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

    Each source block connected to a default Out Bus Element block

  5. 为了更容易识别端口的元素,请对这些元素进行重命名。每个 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 a cursor after Step

Out Bus Element 模块在模型的输出端口创建一个虚拟总线。

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

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

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

Bus output from a Model block that references the example model

(可选)通过添加或不添加更多 Out Bus Element 模块来向总线层次结构添加更多元素。有关详细信息,请参阅Define Output Bus Without Extra Blocks or Bus Objects

在一个端口上指定多个输入信号

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

假设一个输入端口需要一条总线,该总线包含名为 NestedBus 的嵌套总线和名为 Step 的信号。嵌套总线包含名为 ChirpSine 的信号。您期望仅使用名为 Step 的信号,而不使用嵌套总线或其元素。

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

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

  2. 要重命名模块表示的元素,请在模块标签中双击 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 模块且没有 Simulink.Bus 对象的情况下定义总线的其余层次结构,请在不添加模块的情况下添加元素。

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

  2. 在属性检查器或对话框中,选择名为 InBus 的顶层总线。然后,点击向下箭头按钮 Add element,并选择添加元素(不带模块)

    Pointer paused on Add element without block option

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

    InBus with new element named signal1

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

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

    Bus hierarchy with NestedBus in edit mode

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

    NestedBus selected and pointer paused on Add element without block option

    在 R2026a 之前的版本中: 要向一个总线添加多个元素,请在添加每个元素之前选择父级。所选内容会更改到新元素,而不是保持在父级上。

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

    Bus hierarchy with Chirp and Sine under NestedBus

提示

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

为总线元素端口添加模块

假设您要为一个总线元素端口添加模块。

要为输入元素添加模块,请点击一个元素名称,或在按住 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

访问总线的元素

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

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

另请参阅

| | |

主题