将信号或消息组合到虚拟总线中
为了减少模块图中信号线的复杂度和杂乱无章,并使接口的增量更改更容易,可以使用虚拟总线。虚拟总线信号类似于用束线带绑在一起的一捆电线。同样,非虚拟总线类似于 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 Signal、Sine Wave 和 Step 模块。
要创建一个包含来自多个模块的输出的总线,请点击并拖动以选择这些模块。对于此示例,选择 Chirp Signal 和 Sine Wave 模块。在出现的操作栏中,点击创建总线。
软件会添加 Bus Creator 模块,并将输入连接到该模块。Bus Creator 模块的输出是虚拟总线。
为了更容易识别总线的元素,请对 Bus Creator 模块的输入加标签。
双击 Chirp Signal 模块和 Bus Creator 模块之间的信号线。然后,输入
Chirp
。双击 Sine Wave 模块和 Bus Creator 模块之间的信号线。然后,输入
Sine
。
要创建包含第一条总线和 Step 模块输出的第二条总线,请点击并拖动以选择 Bus Creator 和 Step 模块。在出现的操作栏中,点击创建总线。在所选内容中包含 Sine Wave 和 Chirp Signal 模块不会影响结果,因为这些模块提供输入总线的元素。
软件会添加另一个 Bus Creator 模块,并将输入连接到该模块。Bus Creator 模块的输出是包含嵌套总线的虚拟总线。
您可以将总线嵌套至任意深度。如果 Bus Creator 模块的输入之一是总线,则其输出是包含至少一个嵌套总线的总线层次结构。
为新的 Bus Creator 模块的输入添加标签。
双击 Bus Creator 模块之间的信号线。然后,输入
Sinusoidal
。双击 Step 模块和 Bus Creator 模块之间的信号线。然后,输入
Step
。
或者,排列模块以提高模型的可读性。
将第二个 Bus Creator 模块的输出连接到 Scope 模块,并对输出加标签 Sources
。
要通过信号线样式直观识别总线,请在 Simulink 工具条的建模选项卡上,点击更新模型或运行。
将多个输出信号连接到一个端口
此示例显示如何使用 Out Bus Element 模块子系统或模型的输出信号分组到虚拟总线中。
打开一个新模型并添加三个源模块。例如,添加 Chirp Signal、Sine Wave 和 Step 模块。
向模型添加一个 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
的顶层总线,其中包含名为 NestedBus
和 Step
的元素。NestedBus
是嵌套总线,包含名为 Chirp
和 Sine
的元素。
虽然此示例将信号连接到每个 Out Bus Element 模块,但您可以将总线连接到 Out Bus Element 模块。
三个 Out Bus Element 模块在模型的输出端口创建一个虚拟总线。要查看虚拟总线,请在另一个模型中引用该模型或将 Out Bus Element 模块移动到子系统中。当您编译模型时,线型会更新。要编译模型,请在 Simulink 工具条中的建模选项卡上点击更新模型或运行。
指定一个端口的多个元素
当模型或子系统文件在某个端口需要总线时,请使用 In Bus Element 或 Out Bus Element 模块定义该端口。
要在一个接口上指定总线元素端口的元素,您可以:
向该接口添加元素,向模块图添加或不添加模块。
使用
Simulink.Bus
对象定义总线层次结构。
注意
要将 Simulink.Bus
对象指定为总线元素端口上总线的数据类型,则 In Bus Element 或 Out Bus Element 模块必须表示总线或总线元素。
此示例说明如何在具有一个模块且没有 Simulink.Bus
对象的接口上定义输入总线元素端口。
假设该端口需要一条总线,该总线包含名为 NestedBus
的嵌套总线和名为 Step
的信号。嵌套总线包含名为 Chirp
和 Sine
的信号。您的模型或子系统当前仅使用名为 Step
的信号。
在空白模型或子系统中,添加一个 In Bus Element 模块。此模块创建一个输入端口。
要重命名模块表示的元素,请在模块标签中双击 signal1
。然后,将 signal1
替换为 Step
。
打开属性检查器。然后,选择 In Bus Element 模块。或者,双击该模块打开对话框。
在属性检查器或对话框中,选择名为 InBus
的顶层总线。然后,点击 按钮箭头,并选择添加元素(不带模块)。
新元素嵌套在先前所选元素下。模块图没有变化。
新元素名称以灰色和斜体显示,表示 In Bus Element 模块不直接表示该元素。
双击新元素名称。然后,输入 NestedBus
。
要向嵌套总线添加元素,请选择 NestedBus
。然后,点击 按钮箭头,并选择添加元素(不带模块)。
要添加另一个总线元素,请选择 NestedBus
。然后,点击 按钮箭头,并选择添加元素(不带模块)。
要将总线元素分别从 signal
和 signal2
重命名为 Chirp
和 Sine
,请双击每个新元素名称并输入新名称。
通过添加元素而不添加模块,您可以定义只有一个 In Bus Element 模块(而没有 Simulink.Bus
对象)的整个总线层次结构。
提示
当您要添加许多不带模块的元素时,使用 Simulink.Bus.addElementToPort
函数可能比使用对话框更快。有关示例,请参阅Programmatically Create Bus Element Ports。
要切换端口、信号和执行属性的显示,点击 。然后根据需要指定属性。
在 R2025a 之前的版本中: 要指定属性,请在总线、信号或消息的名称上暂停。然后,点击 查看信号属性,或点击
查看执行属性。或者,如果可用,点击属性摘要。
当您指定属性时,属性摘要会出现在元素名称旁边。要进一步编辑属性,点击元素名称旁边的属性摘要。
当您创建要重用的文件时,在接口上定义元素的属性非常有用。接口定义确定引用子系统或模型支持的输入。输入总线的层次结构和属性必须与对应端口的定义匹配。
假设您添加了没有模块的元素,然后决定要添加选择它们的 In Bus Element 模块。要为输入元素添加模块,请点击一个元素名称,或在按住 Ctrl 键的同时点击多个元素名称。然后,点击 。例如,为
Chirp
和 Sine
添加模块。
对应的 In Bus Element 模块出现在模块图中。
在模块标签中,每个圆点表示一个新的层次结构级别。
对于输出总线元素端口,为元素添加模块的方式略有不同。要为输出总线元素端口添加模块,请选择现有 Out Bus Element 模块未表示的元素。然后,通过点击 添加 Out Bus Element 模块。要防止多个 Out Bus Element 模块表示同一元素时发生冲突,一次只能添加一个 Out Bus Element 模块。
有关更多示例和信息,请参阅 In Bus Element 和 Out Bus Element。
访问总线的元素
您可以将总线作为一个整体来访问,也可以从总线中选择特定的信号、消息或嵌套总线。
如何从总线中提取元素取决于总线的位置。
在组件内 - 使用 Bus Selector 模块。
在组件接口上 - 使用 In Bus Element 模块。
另请参阅
Bus Creator | Bus Selector | In Bus Element | Out Bus Element