Main Content

Bus Creator

Group input signals or messages into bus

  • Bus Creator block

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

Description

The Bus Creator block combines input signals or messages into a bus, which retains the separate identities of the signals and messages. By default, the Bus Creator block creates a virtual bus, which is analogous to a bundle of wires held together by tie wraps. Alternatively, the block can create a nonvirtual bus, which is analogous to a structure in C code.

Elements of a bus must have unique names. By default, each element of the bus inherits the name of the element connected to the Bus Creator block. If duplicate names are present, the Bus Creator block appends the port number to all input element names. For elements that do not have names, the Bus Creator block generates names in the form signaln, where n is the port number connected to the element. You can refer to elements by name when you search for their sources or select elements for connection to other blocks. For element naming guidelines, see Signal Names and Labels.

To extract elements from the bus by name, use a Bus Selector block.

To create a bus that contains other buses, connect the other buses to the Bus Creator block input ports.

Tip

For buses at subsystem and model interfaces, use Out Bus Element blocks instead of a Bus Creator block with an Outport block. Out Bus Element blocks:

  • Reduce line complexity and clutter in a block diagram.

  • Allow you to more easily change the interface incrementally.

Examples

expand all

You can group signals into a virtual bus within a component by using Bus Creator blocks.

Open the model named VirtualBusCreation, which contains three blocks.

Model with three source blocks

To create a bus that contains the outputs from multiple blocks, click and drag to select the blocks. For this example, select the Chirp Signal and Sine Wave blocks. In the action bar that appears, click Create Bus.

Pointer paused on Create Bus button in action bar

The software adds a Bus Creator block and connects the inputs to that block. The output of the Bus Creator block is a virtual bus.

First two source blocks connected to a Bus Creator block

To make identifying the elements of the bus easier, label the inputs to the Bus Creator block. Double-click the line between the Chirp Signal block and the Bus Creator block. Then, enter Chirp. Double-click the line between the Sine Wave block and the Bus Creator block. Then, enter Sine.

To create a second bus that contains the first bus and the output of the Step block, click and drag to select the Bus Creator and Step blocks. In the action bar that appears, click Create Bus. Since the Sine and Chirp signals are elements of the input bus, the software creates the same bus regardless of whether your selection includes the Sine Wave and Chirp Signal blocks.

The software adds another Bus Creator block and connects the inputs to that block. The output of the Bus Creator block is a virtual bus that contains a nested bus.

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

You can nest buses to any depth. If one of the inputs to a Bus Creator block is a bus, then its output is a bus hierarchy that contains at least one nested bus.

Label the inputs to the new Bus Creator block. Double-click the line between the Step block and the Bus Creator block. Then, enter Step. Double-click the line between the Bus Creator blocks. Then, enter NestedBus. Optionally, arrange the blocks to improve the readability of the model.

Connect the output of the second Bus Creator block to a Scope block and label the output TopBus. To visually identify the buses, compile the model by clicking Update Model or Run on the Modeling tab of the Simulink Toolstrip. Compiling the model updates the line styles.

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

You can use Bus Creator blocks to create nonvirtual buses within components.

Open and compile the model named BusHierarchy, which uses Bus Creator blocks to create a hierarchy of virtual buses. To compile the model, on the Modeling tab of the Simulink® Toolstrip, click Update Model or Run. Compiling the model updates the line styles, which you can use to visually identify buses.

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

TopBus groups NestedBus and Step in a virtual bus. NestedBus groups Chirp and Sine in a virtual bus.

To create this model, see Group Signal Lines Within Component.

The virtual buses in this model are not defined by Simulink.Bus objects. To change the output of the Bus Creator blocks to nonvirtual buses, you must have bus objects that match the bus hierarchy.

To create the bus objects that correspond to TopBus and NestedBus, use the Simulink.Bus.createObject function. In the MATLAB® Command Window, enter this command.

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

This function creates the bus object that corresponds to the output bus of the specified block. If the output bus contains nested buses, the function also creates bus objects that correspond to the nested buses. In this example, the function creates two bus objects that are named after the corresponding buses, TopBus and NestedBus.

To view the bus objects, open the Type Editor. In the Simulink Toolstrip, on the Modeling tab, in the Design gallery, click Type Editor. To expand an external data source or bus, click the arrow next to its name.

Type Editor with bus objects for NestedBus and TopBus

Now that you have bus objects that correspond to the nonvirtual buses you want to create, create the nonvirtual buses. In the Simulink Editor, double-click the Bus Creator block named Bus Creator1. In the Block Parameters dialog box, set Output data type to Bus: TopBus, select the Output as nonvirtual bus check box, and click OK. TopBus is now a nonvirtual bus, while NestedBus remains a virtual bus. To identify the nonvirtual bus by line style, compile the model.

TopBus with the line style that indicates a nonvirtual bus

Double-click the block named Bus Creator. In the Block Parameters dialog box, set Output data type to Bus: NestedBus, select the Output as nonvirtual bus check box, and click OK. NestedBus is now a nonvirtual bus. To update its line style, compile the model.

NestedBus with the line style that indicates a nonvirtual bus

If you do not save the bus objects, then you must recreate the bus objects when you reopen the model. For information on how to save the bus objects, see Specify Bus Properties with Bus Objects.

Extended Examples

Ports

Input

expand all

The input ports accept the elements to include in the bus. The number of input ports is driven by the Number of inputs parameter.

Each Bus Creator block supports these combinations of input elements:

  • Signals only

  • Signals and signal buses

  • Messages only

  • Messages and buses

  • Buses only

You can specify variable-size input signals with upper bounds smaller than the upper bounds of the variable-size signals that the corresponding Bus Creator block input ports can accept. To configure the upper bounds of variable-size signals that Bus Creator block input ports accept, use a Simulink.BusElement object. For more information, see Simulink.BusElement. Variable-size input signals must have the same dimensionality as the variable-size signals that the corresponding Bus Creator block input ports are configured to accept.

Data Types: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | Boolean | fixed point | enumerated | bus
Complex Number Support: Yes

Output

expand all

The output bus is composed of the input elements. The Output as nonvirtual bus parameter specifies whether the output bus is a virtual or nonvirtual bus. For information about the types of buses, see Composite Interface Guidelines.

Data Types: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | Boolean | fixed point | enumerated | bus
Complex Number Support: Yes

Parameters

expand all

To edit Bus Creator block parameters interactively, double-click the block.

The number of input elements must be an integer greater than or equal to 2. Increasing the number of inputs adds empty input ports to the block. Before you simulate the model, make sure that an input element is connected to each input port.

When you modify the Number of inputs parameter, click Refresh to update the list of elements.

If all input ports are already connected, you can add an input port to the Bus Creator block by connecting another line to it.

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

Interactively adding a port updates the Number of inputs parameter and adds the new element to the list of elements in the bus.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Specify the number of inputs as an integer greater than or equal to 2 or as a comma-separated list of element names. When you specify the names of elements in the bus, the number of inputs matches the number of element names you specify.

Parameter: Inputs
Values: '2' (default) | integer in quotes | comma-separated list of element names in quotes
Data Types: char | string

Example: set_param(gcb,'Inputs','3')

Example: set_param(gcb,'Inputs','element1,element2,element3')

The list of input elements includes all elements that enter the block, including the elements of nested buses. An arrow next to an element indicates that an input element is a bus. To display the contents of that bus, click the arrow.

To highlight the source of an element that enters the block, select the element in the list and click Find.

If you change an element name while the dialog box is open, click Refresh to update the name in the list.

To rearrange the elements in the output bus, use the Up and Down buttons. You can select multiple top-level adjacent elements in the Elements in the bus list to reorder or remove.

To add or remove input elements, click Add or Remove, respectively. Then, update the block icon by clicking Apply or OK. Before you simulate the model, make sure that an input element is connected to each input port.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Specify the elements in the bus as a comma-separated list of element names. When you specify the names of elements in the bus, the number of inputs matches the number of element names you specify.

Parameter: Inputs
Values: '2' (default) | integer in quotes | comma-separated list of element names in quotes
Data Types: char | string

Example: set_param(gcb,'Inputs','element1,element2,element3')

To filter the displayed input elements, enter a search term. The filter does a partial-string search. Do not enclose the search term in quotation marks.

To access the filtering options, click the Show filtering options button to the right of the Filter by name box.

Select this parameter to filter the displayed input elements with either regular expressions or partial search strings. By default, you can filter the displayed input elements with only partial search strings.

Regular expressions let you filter based on whether the input elements match a pattern. For example, enter t$ in the Filter by name box to display all elements whose names end with a lowercase t (and their immediate parents). For more information, see Regular Expressions.

Dependencies

To access this parameter, click the Show filtering options button to the right of the Filter by name box.

Select this parameter to display filtered results as a flat list that uses dot notation to reflect the bus hierarchy. By default, the filtered results appear in a hierarchical tree.

Dependencies

To access this parameter, click the Show filtering options button to the right of the Filter by name box.

Specify the data type of the output bus.

If you select Bus: <object name>, replace <object name> with the name of a Simulink.Bus object. The bus object must be accessible when you edit the model.

To define a Simulink.Bus object using the Type Editor, click the Show data type assistant button , set Mode to Bus object, and then click the Edit button.

If you select <data type expression>, specify an expression that evaluates to a Simulink.Bus object.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: OutDataTypeStr
Values: 'Inherit: auto' (default) | 'Bus: <object name>'

Example: set_param(gcb,'OutDataTypeStr','Bus: control')

This parameter might be removed in a future release. To enforce strong data typing, use the Use names from inputs instead of from bus object parameter.

When selected, this parameter checks that the input element names match the names listed in the Block Parameters dialog box. If the element names do not match, the software returns an error.

Dependencies

  • This parameter is ignored if you select Use names from inputs instead of from bus object.

  • This parameter reverts to off if you programmatically change Number of inputs.

Specify a new name for the selected input element. See Signal Names and Labels for name guidelines.

Dependencies

To enable this parameter, select Require names of inputs to match names above.

By default, the Bus Creator block uses the input element names as the output bus element names, even when you specify a Simulink.Bus object as the data type.

To inherit bus element names from the bus object, clear this parameter. Clearing the parameter:

  • Enforces strong data typing.

  • Avoids having to enter an element name multiple times: in the bus object and in the model. Entering the name multiple times can create accidental element name mismatches.

  • Supports the array of buses requirement to have consistent element names across array elements.

To enforce strong data typing with this parameter selected, set the Element name mismatch configuration parameter to error. This configuration parameter checks that input element names match the corresponding names in the bus object.

Dependencies

To enable this parameter, set Output data type to a Simulink.Bus object.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: InheritFromInputs
Values: 'on' (default) | 'off'

Example: set_param(gcb,'InheritFromInputs','off')

Select this parameter to output a nonvirtual bus instead of a virtual bus.

All elements in a nonvirtual bus must have the same sample time, even if the elements of the associated Simulink.Bus object specify inherited sample times for some elements. Any operation resulting in a nonvirtual bus containing elements with different sample rates generates an error. To change the sample time of an element or bus that has a different sample time than the other nonvirtual bus input elements, use a Rate Transition block. For details, see Modify Sample Times for Nonvirtual Buses.

To generate code that uses a C structure to define the structure of the bus that this block creates, select this parameter.

Dependencies

To enable this parameter, set Output data type to a Simulink.Bus object.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: NonVirtualBus
Values: 'off' (default) | 'on'

Example: set_param(gcb,'NonVirtualBus','on')

Block Characteristics

Data Types

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

Direct Feedthrough

no

Multidimensional Signals

yes

Variable-Size Signals

yes

Zero-Crossing Detection

no

Extended Capabilities

PLC Code Generation
Generate Structured Text code using Simulink® PLC Coder™.

Version History

Introduced before R2006a

expand all