Bus Creator
将输入信号或消息组合到总线中
![](bus_creator_block_icon.png)
库:
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 模块将信号组合到一个组件内的一个虚拟总线中。
打开名为 VirtualBusCreation
的模型,其中包含三个模块。
要创建一个包含来自多个模块的输出的总线,请点击并拖动以选择这些模块。对于此示例,请选择 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
和 Chirp
信号是输入总线的元素,因此无论您的选择是否包括 Sine Wave 和 Chirp Signal 模块,软件都会创建相同的总线。
软件会添加另一个 Bus Creator 模块,并将输入连接到该模块。Bus Creator 模块的输出是包含嵌套总线的虚拟总线。
您可以将总线嵌套至任意深度。如果 Bus Creator 模块的输入之一是总线,则其输出是包含至少一个嵌套总线的总线层次结构。
标记新 Bus Creator 模块的输入。双击 Step 模块和 Bus Creator 模块之间的信号线。然后,输入 Step
。双击 Bus Creator 模块之间的信号线。然后,输入 NestedBus
。或者,排列模块以提高模型的可读性。
将第二个 Bus Creator 模块的输出连接到 Scope 模块,并对输出加标签 TopBus
。要直观地识别总线,请通过点击 Simulink 工具条的建模选项卡上的更新模型或运行来编译模型。编译模型会更新线型。
在组件内创建非虚拟总线
您可以使用 Bus Creator 模块在组件中创建非虚拟总线。
打开并编译名为 BusHierarchy
的模型,该模型使用 Bus Creator 模块来创建虚拟总线的层次结构。要编译模型,请在 Simulink 工具条的建模选项卡上,点击更新模型或运行。编译模型会更新线型,您可以使用线型来直观地标识总线。
mdl = BusHierarchy;
open_system(mdl)
set_param(mdl,SimulationCommand="Update")
要创建此模型,请参阅将组件内的信号线组合起来。
此模型中的虚拟总线不是由 Simulink.Bus
对象定义的。要将 Bus Creator 模块的输出更改为非虚拟总线,必须有与总线层次结构匹配的总线对象。
要创建对应于 TopBus
和 NestedBus
的总线对象,请使用 Simulink.Bus.createObject
函数。在 MATLAB 命令行窗口中,输入以下命令。
Simulink.Bus.createObject("BusHierarchy","BusHierarchy/Bus Creator1");
该函数创建对应于指定模块输出总线的总线对象。如果输出总线包含嵌套总线,该函数还创建对应于嵌套总线的总线对象。在此示例中,该函数创建两个总线对象,它们以对应的总线 TopBus
和 NestedBus
命名。
要查看总线对象,请打开类型编辑器。在 Simulink® 工具条的建模选项卡上,在设计库中,点击类型编辑器。要展开外部数据源或总线,请点击其名称旁边的箭头。
现在,您已有对应于要创建的非虚拟总线的总线对象,接下来创建非虚拟总线。在 Simulink 编辑器中,双击名为 Bus Creator1
的 Bus Creator 模块。在“模块参数”对话框中,将输出数据类型设置为 Bus: TopBus
,选中输出为非虚拟总线复选框,然后点击确定。TopBus
现在是非虚拟总线,而 NestedBus
仍是虚拟总线。要通过线型识别非虚拟总线,请编译模型。
双击名为 Bus Creator
的模块。在“模块参数”对话框中,将输出数据类型设置为 Bus: NestedBus
,选中输出为非虚拟总线复选框,然后点击确定。NestedBus
现在是非虚拟总线。要更新其线型,请编译模型。
如果不保存总线对象,则必须在重新打开模型时重新创建总线对象。有关如何保存总线对象的信息,请参阅使用总线对象指定总线属性。
端口
输入
Port_1 — 要包含在总线中的输入元素
标量 | 向量 | 矩阵 | 数组 | 总线
输入端口接受要包含在总线中的元素。输入端口的数量由输入的数目参数决定。
每个 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
复数支持: 是
输出
参数
要以交互方式编辑 Bus Creator 模块参数,请双击该模块。
输入的数目 — 输入元素的数量
2
(默认) | 整数
输入元素的数量必须为大于或等于 2 的整数。增加输入的数目会向模块添加空的输入端口。在对模型进行仿真之前,请确保为每个输入端口连接了输入元素。
在修改输入的数目参数后,点击刷新以更新元素列表。
如果所有输入端口都已连接,您可以通过将另一条线连接到 Bus Creator 模块来添加一个输入端口。
以交互方式添加端口会更新输入的数目参数,并将新元素添加到总线中的元素列表。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
将输入的数目指定为大于或等于 2 的整数,或以逗号分隔的元素名称列表。当您指定总线中元素的名称时,输入的数目与您指定的元素名称的数目相匹配。
参数: | Inputs |
值: | '2' (默认) | integer in quotes | comma-separated list of element names in quotes |
数据类型: | char | string |
示例: set_param(gcb,'Inputs','3')
示例: set_param(gcb,'Inputs','element1,element2,element3')
总线中的元素 — 输入元素的列表
元素名称列表
输入元素列表包括进入模块的所有元素,包括嵌套总线的元素。元素旁边的箭头表示输入元素是总线。要显示该总线的内容,请点击箭头。
要突出显示进入模块的元素的来源,请在列表中选择该元素,然后点击查找。
如果在对话框打开时更改了元素名称,请点击刷新以更新列表中的名称。
要重新排列输出总线中的元素,请使用向上和向下按钮。您可以在总线中的元素列表中选择多个要进行重新排序或删除的顶层相邻元素。
要添加或删除输入元素,请分别点击添加或删除。然后,点击应用或确定来更新模块图标。在对模型进行仿真之前,请确保为每个输入端口连接了输入元素。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
将总线中的元素指定为以逗号分隔的元素名称列表。当您指定总线中元素的名称时,输入的数目与您指定的元素名称的数目相匹配。
参数: | Inputs |
值: | '2' (默认) | integer in quotes | comma-separated list of element names in quotes |
数据类型: | char | string |
示例: set_param(gcb,'Inputs','element1,element2,element3')
按名称过滤 — 用于过滤显示的输入元素的搜索词
文本
要过滤显示的输入元素,请输入搜索词。过滤器可执行部分字符串搜索。请勿将搜索词括在引号内。
要访问过滤选项,请点击按名称过滤框右侧的显示过滤选项 按钮。
启用正则表达式 — 通过正则表达式过滤显示的输入元素的选项
off (默认) | on
选择此参数以使用正则表达式或部分搜索字符串过滤显示的输入元素。默认情况下,您可以仅使用部分搜索字符串过滤显示的输入元素。
正则表达式允许您根据输入元素是否匹配某个模式进行过滤。例如,在按名称过滤框中输入 t$
,以显示名称以小写字母 t
结尾的所有元素(及其直接父级)。有关详细信息,请参阅正则表达式。
依存关系
要访问此参数,请点击按名称过滤框右侧的显示过滤选项 按钮。
将过滤结果显示为扁平列表 — 用于将过滤结果显示为扁平列表的选项
off (默认) | on
选择此参数以扁平列表形式显示过滤结果,该列表使用圆点表示法来反映总线层次结构。默认情况下,过滤结果显示在层次结构树中。
依存关系
要访问此参数,请点击按名称过滤框右侧的显示过滤选项 按钮。
输出数据类型 — 输出总线的数据类型
'Inherit: auto' (默认) | 'Bus: <object name>' | <数据类型表达式>
指定输出总线的数据类型。
如果选择 Bus: <object name>,请用 Simulink.Bus
对象的名称替换 <object name>
。编辑模型时,必须可以访问总线对象。
要使用类型编辑器定义 Simulink.Bus
对象,请点击显示数据类型助手按钮 ,将模式设置为总线对象,然后点击编辑按钮。
如果选择 <data type expression>,请指定一个计算结果为 Simulink.Bus
对象的表达式。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | OutDataTypeStr |
值: | 'Inherit: auto' (默认) | 'Bus: <object name>' |
示例: set_param(gcb,'OutDataTypeStr','Bus: control')
要求输入的名称与以上的名称匹配 — 检查输入元素名称是否与对话框中列出的名称相匹配的选项
off (默认) | on
在以后的版本中可能会删除此参数。要强制实施强数据定型,请使用使用来自输入的名称,而不是来自总线对象的名称参数。
当选中时,此参数检查输入元素名称是否与“模块参数”对话框中列出的名称相匹配。如果元素名称不匹配,软件将返回错误。
依存关系
如果您选中使用来自输入的名称,而不是来自总线对象的名称,此参数将被忽略。
如果您以编程方式更改输入数目,此参数将还原为 off。
重命名所选信号 — 所选输入元素的新名称
''
(默认) | 字符向量
使用来自输入的名称,而不是来自总线对象的名称 — 使用来自输入元素(而不是总线对象)的名称的选项
on (默认) | off
默认情况下,Bus Creator 模块使用输入元素名称作为输出总线元素名称,即使您将 Simulink.Bus
对象指定为数据类型也是如此。
要从总线对象继承总线元素名称,请清除此参数。清除此参数将:
强制应用强数据定型。
避免在总线对象和模型中多次输入一个元素名称。多次输入名称可能导致意外的元素名称不匹配。
支持在数组元素之间必须具有一致的元素名称这一总线数组要求。
要在选中此参数的情况下强制实施强数据类型,请将元素名称不匹配配置参数设置为错误。此配置参数检查输入元素名称是否与总线对象中的对应名称匹配。
依存关系
要启用此参数,请将输出数据类型设置为 Simulink.Bus
对象。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | InheritFromInputs |
值: | 'on' (默认) | 'off' |
示例: set_param(gcb,'InheritFromInputs','off')
以非虚拟总线输出 — 输出非虚拟总线的选项
off (默认) | on
选择此参数以输出非虚拟总线而不是虚拟总线。
非虚拟总线中的所有元素都必须具有相同的采样时间,即使关联的 Simulink.Bus
对象的元素为某些元素指定了继承采样时间也是如此。任何导致包含不同采样率元素的非虚拟总线的操作都会生成错误。要更改采样时间不同于其他非虚拟总线输入元素的元素或总线的采样时间,请使用 Rate Transition 模块。有关详细信息,请参阅Modify Sample Times for Nonvirtual Buses。
要生成使用 C 结构体定义此模块创建的总线结构的代码,请选择此参数。
依存关系
要启用此参数,请将输出数据类型设置为 Simulink.Bus
对象。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | NonVirtualBus |
值: | 'off' (默认) | 'on' |
示例: set_param(gcb,'NonVirtualBus','on')
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
实际数据类型或功能支持取决于模块实现。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
要了解有关使用总线进行 HDL 代码生成的更多信息,请参阅Buses (HDL Coder) 和Use Bus Signals to Improve Readability of Model and Generate HDL Code (HDL Coder)。
此模块具有一个默认 HDL 架构。
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
实际数据类型或功能支持取决于模块实现。
版本历史记录
在 R2006a 之前推出R2023a: 可变大小输入信号的上界可以小于对应的 Bus Creator 模块输入端口可接受的可变大小信号的上界
从 R2023a 开始,Bus Creator 模块支持可变大小输入信号,其上界小于对应的 Bus Creator 模块输入端口可接受的可变大小信号的上界。
当输入信号的上界不等于对应的 Bus Creator 模块输入端口可以接受的可变大小信号的上界时,此增强功能允许您使用可变大小输入信号。
R2014b: 不推荐使用要求输入的名称与以上的名称匹配参数
要求输入的名称与以上的名称匹配参数可能会在以后的版本中删除。要强制实施强数据定型,请改用使用来自输入的名称,而不是来自总线对象的名称参数。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)