主要内容

Bus Creator

将输入信号、总线或消息组合到总线中

  • Bus Creator block

库:
Simulink / Commonly Used Blocks
Simulink / Signal Routing
HDL Coder / Signal Routing

描述

Bus Creator 模块将输入信号、总线或消息合并到总线中,该总线保留信号、嵌套总线和消息的各自的身份。默认情况下,Bus Creator 模块创建一个虚拟总线,它类似于用束线带绑在一起的一捆电线。或者,该模块可以创建非虚拟总线,这类似于 C 代码中的结构体。

总线元素必须具有唯一名称。默认情况下,总线的每个元素都继承连接到 Bus Creator 模块的元素的名称。如果存在重复名称,Bus Creator 模块会将端口号追加到所有输入元素名称。对于没有名称的元素,Bus Creator 模块会生成 signaln 形式的名称,其中 n 是连接到元素的端口号。当您搜索元素源或选择元素以连接到其他模块时,您可以按名称引用元素。有关元素命名规范,请参阅信号名称和标签

要按名称从总线中提取元素,请使用 Bus Selector 模块。

要创建包含其他总线的总线,请将其他总线连接到 Bus Creator 模块输入端口。

提示

对于位于子系统和模型接口上的总线,使用 Out Bus Element 模块,而不是 Bus Creator 模块和 Outport 模块。Out Bus Element 模块能够:

  • 减少模块图中线的复杂度和杂乱无章。

  • 允许您更轻松地逐步更改接口。

示例

全部展开

您可以使用 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

您可以使用 Bus Creator 模块在组件中创建非虚拟总线。

打开并编译名为 BusHierarchy 的模型,该模型使用 Bus Creator 模块来创建虚拟总线的层次结构。要编译模型,请在 Simulink® 工具条的建模选项卡上,点击更新模型运行。编译模型会更新线型,您可以使用线型来直观地标识总线。

或者,在 MATLAB® 命令行窗口中,输入这些命令。

mdl = "BusHierarchy";
open_system(mdl)
set_param(mdl, SimulationCommand="Update")

A Bus Creator block groups signals named Chirp and Sine into a virtual bus named NestedBus. Another Bus Creator block groups NestedBus and a signal named Step into a virtual bus named TopBus.

此模型中的虚拟总线不是由 Simulink.Bus 对象定义的。要创建非虚拟总线,必须指定与总线层次结构匹配的总线对象。

要以交互方式创建总线对象,请执行以下操作:

  1. 打开类型编辑器。双击 Bus Creator 模块。然后,在输出数据类型框旁边,点击 Open Type Editor

  2. 在类型编辑器中,通过点击 Create types 创建两个总线对象。

  3. 在每个总线对象中,通过点击 Create elements 创建两个元素。

  4. (可选)双击并重命名对象。对于此示例,使用信号和总线名称。

  5. NestedBus 元素的数据类型设置为 NestedBus

Bus objects in the base workspace in the Type Editor

或者,使用 Simulink.Bus.createObject 函数。

bctop = "BusHierarchy/Bus Creator1";
Simulink.Bus.createObject(mdl,bctop);

该函数创建两个总线对象,它们以对应的总线 TopBusNestedBus 命名。

现在,您已有对应于要创建的非虚拟总线的总线对象,接下来通过更新对应的 Bus Creator 模块参数,将顶层总线转换为非虚拟总线。

  1. 打开属性检查器。在 Simulink 工具条中,在仿真选项卡的准备库中,选择属性检查器

  2. 选择名为 Bus Creator1 的 Bus Creator 模块。

  3. 在属性检查器中,将输出数据类型设置为 Bus: TopBus

  4. 在属性检查器中,选择以非虚拟总线输出

  5. 要通过线型识别非虚拟总线,请重新编译模型。

或者,输入这些命令。

set_param(bctop, OutDataTypeStr="Bus: TopBus")
set_param(bctop, NonVirtualBus="on")
set_param(mdl, SimulationCommand="Update")

The line style of TopBus indicates a nonvirtual bus.

TopBus 现在是非虚拟总线,而 NestedBus 仍是虚拟总线。

要将嵌套总线转换为非虚拟总线,请更新对应的 Bus Creator 模块参数:

  1. 选择名为 Bus Creator 的 Bus Creator 模块。

  2. 在属性检查器中,将输出数据类型设置为 Bus: NestedBus

  3. 在属性检查器中,选择以非虚拟总线输出

  4. 要通过线型识别非虚拟总线,请重新编译模型。

或者,输入这些命令。

bcnested = "BusHierarchy/Bus Creator";
set_param(bcnested, OutDataTypeStr="Bus: NestedBus")
set_param(bcnested, NonVirtualBus="on")
set_param(mdl, SimulationCommand="Update")

The line style of NestedBus indicates a nonvirtual bus.

NestedBus 现在是非虚拟总线。

如果不保存总线对象,您必须在重新打开模型时重新创建总线对象。有关如何保存总线对象的信息,请参阅使用总线对象指定总线属性

扩展示例

端口

输入

全部展开

输入端口接受要包含在总线中的元素。输入端口的数量由输入数目参数决定。

每个 Bus Creator 模块都支持这些输入元素的组合:

  • 仅信号

  • 信号和信号总线

  • 仅消息

  • 消息和总线

  • 仅限总线

您可以指定可变大小输入信号,其上界小于对应的 Bus Creator 模块输入端口可以接受的可变大小信号的上界。要配置 Bus Creator 模块输入端口可接受的可变大小信号的上界,请使用 Simulink.BusElement 对象。有关详细信息,请参阅 Simulink.BusElement。可变大小输入信号的维度必须与对应的 Bus Creator 模块输入端口配置的可接受信号维度相同。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | Boolean | fixed point | enumerated | bus
复数支持:

输出

全部展开

输出总线由输入元素组成。

以非虚拟总线输出参数指定输出总线是虚拟总线还是非虚拟总线。软件将虚拟总线视为其组成元素,将非虚拟总线视为标量。

有关总线类型的详细信息,请参阅合成接口规范

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | Boolean | fixed point | enumerated | bus
复数支持:

参数

全部展开

要以交互方式编辑模块参数,请使用属性检查器。在 Simulink 工具条中,在仿真选项卡的准备库中,选择属性检查器

要创建一个总线,模块输入的数目必须为大于或等于 2 的整数。

增加输入数目会向模块添加未连接的输入端口。在对模型进行仿真之前,请确保为每个输入端口连接了一个输入。

如果每个输入端口都已连接,您可以通过将另一条线连接到 Bus Creator 模块来添加一个输入端口。

A line is dragged near a Bus Creator block with two connected ports and a third port appears.

以交互方式添加端口会更新输入的数目参数值并将新输入添加到输入列表。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

将输入的数目指定为大于或等于 2 的整数。

参数: Inputs
值: '2' (默认) | integer in quotes
数据类型: char | string

示例: set_param(gcb, Inputs="3")

输入列表提供进入模块的元素,包括嵌套总线的元素。元素旁边的箭头表示输入是总线。要显示该总线的内容,请点击箭头。

要对输入元素重新排序,请从输入列表中选择一个或多个顶层元素。然后,将元素拖到新位置。

要添加或删除输入元素,请分别点击 AddRemove。在仿真模型之前,确保每个输入端口都已连接。

要刷新输入元素列表,请点击 Refresh。例如,在以下情况下刷新输入元素列表:

  • 在对话框打开时重命名输入元素。

  • 添加、删除或重新排序未命名的输入元素。Bus Creator 模块将这些元素命名为 signalN,其中 N 是对应模块端口的编号。当对应的模块端口更改时,自动生成的名称也会随之更改。

要按名称过滤输入元素(使用或不使用正则表达式均可),请在过滤器框中输入搜索词。请勿将搜索词括在引号内。(可选)通过点击 Show filtered results as a flat list 将过滤后的结果显示为扁平列表。扁平列表使用圆点表示法来反映总线层次结构。默认情况下,过滤结果显示在层次结构树中。

在 R2025a 之前的版本中: 要使用正则表达式进行过滤,请点击 Show filtering options。然后,选择启用正则表达式

要选择进入模块的元素的来源,请在列表中选择该元素。然后,点击 Select source blocks属性检查器显示选定源模块的参数。当您选择包含多个元素的源模块时,属性检查器会显示具有焦点的源模块的参数。

无法撤消或重做对输入列表的更改。

提示

  • 输出数据类型设置为 Simulink.Bus 对象时,要显示哪个 Simulink.BusElement 对象映射到顶层输入,请将鼠标悬停在顶层输入上。括号中会显示从输入到 Simulink.BusElement 对象的映射,例如 Input1 → BusElementObject1

  • 正则表达式允许您根据输入元素是否匹配某个模式进行过滤。例如,要显示其名称以小写字母 t 结尾的所有元素,请在过滤器框中输入 t$。有关详细信息,请参阅 正则表达式

指定输出总线的数据类型。

如果选择 Bus: <object name>,请用 Simulink.Bus 对象的名称替换 <object name>。编辑模型时,必须可以访问总线对象。

提示

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: OutDataTypeStr
值: "Inherit: auto" (默认) | "Bus: <object name>"

示例: set_param(gcb, OutDataTypeStr="Bus: control")

默认情况下,Bus Creator 模块使用模块输入的名称作为输出总线元素的名称,即使将 Simulink.Bus 对象指定为数据类型也是如此。

  • 根据输入 - 从模块输入继承输出总线元素的名称。

    在 R2025a 之前的版本中: 选择使用来自输入的名称,而不是来自总线对象的名称

  • 根据输出数据类型 - 从指定的总线对象继承输出总线元素的名称。

    在 R2025a 之前的版本中: 清除使用来自输入的名称,而不是来自总线对象的名称

元素名称设置为根据输出数据类型时:

  • 强制应用强数据定型。

  • 避免在总线对象和模型中多次输入一个元素名称。多次输入名称可能导致意外的元素名称不匹配。

  • 支持在数组元素之间必须具有一致的元素名称这一总线数组要求。

元素名称设置为根据输入时,考虑将元素名称不匹配配置参数设置为错误。此配置参数检查输入元素名称是否与总线对象中的对应名称匹配。

依赖关系

要启用此参数,请将输出数据类型设置为 Simulink.Bus 对象。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: InheritFromInputs
值: "on" (默认) | "off"

示例: set_param(gcb, InheritFromInputs="off")

下表将交互值映射到此参数的等效编程值。

元素名称

InheritFromInputs
根据输入(默认值)"on"(默认值)
根据输出数据类型"off"

选择此参数以输出非虚拟总线。

非虚拟总线类似于 C 代码中的结构体。选中此参数可以:

  • 构造总线数组。

  • 总线数据需要跨 MATLAB Function 模块或 Stateflow® 图边界。

  • 将总线数据打包为生成的 C 代码中的结构体。

  • 通过 S-Function 对接外部代码。

  • 减少生成代码中传递给子组件的函数参量数目。

非虚拟总线中的所有元素都必须具有相同的采样时间,即使关联的 Simulink.Bus 对象的元素为某些元素指定了继承采样时间也是如此。任何导致包含不同采样率元素的非虚拟总线的操作都会生成错误。要更改采样时间不同于其他非虚拟总线输入元素的元素或总线的采样时间,请使用 Rate Transition 模块。有关详细信息,请参阅Modify Sample Times for Nonvirtual Buses

依赖关系

要启用此参数,请将输出数据类型设置为 Simulink.Bus 对象。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: NonVirtualBus
值: "off" (默认) | "on"

示例: set_param(gcb, NonVirtualBus="on")

模块特性

数据类型

Boolean | bus | double | enumerated | fixed point | half | integer | single | string

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

全部展开

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

版本历史记录

在 R2006a 之前推出

全部展开