A logically executed subsystem block runs one or more times at the current time step when enabled by a control block. A control block implements control logic similar to that expressed by a programming language statement (e.g., if-then, switch, while, for).
Selector subsystems are one type of logically executed subsystem that execute once during a time step in response to an action signal from a control block located external to the subsystem. Simulink® supports two selector subsystem structures, if-else and switch-case.
The If Action Subsystem block is a Subsystem block preconfigured as a starting point for creating a subsystem whose execution is enabled by an If block.
An external If block controls execution. The If block evaluates a logical expression and then, depending on the result of the evaluation, outputs an action signal to a If Action Subsystem block.
Consider the following model. To open model, see ex_if_block
.
In this model, the inputs to the If block provide the operand values for
the logical expressions represented as output ports. Each output port is attached to an
If Action Subsystem block. The expressions in the If block
are evaluated top down starting with the if
expression. When an
expression evaluates to true, its corresponding If Action Subsystem is
executed and the remaining expressions are not evaluated.
The if-else structure in the model can be represented with the following pseudo code.
IF u1 > 0 THEN Subsystem 1 ELSEIF u2 > 0 Subsystem 2 ELSE Subsystem 3 END IF
To create the example model, use the following procedure.
Place an If block in the Simulink Editor. Double-click the block to open the block parameters dialog box.
In the Number of inputs box, enter
2
.
Two input ports are added to the block. The inputs ports are for signals
containing operand values, not necessary the number of operands. An input signal can
be a vector. For example, you could specify the fifth element of a vector u in an
expression as u(5) > 0
.
In the If expression text box, enter u1 >
0
.
An output port is added to the block with the label if(u1 > 0)
.
This port is the only required output for an If block.
In the Elseif expressions text box, enter u2 >
0
.
You can enter multiple elseif expressions with a comma separating the expressions.
Each expression adds an output port to the If block with a label of the
form elseif(expression)
.
Check the Show else condition check box.
An output port is added to the block with the label
else
.
Add three If Action Subsystem blocks.
These blocks are Subsystem blocks with an Action Port block. When you place an Action Port block inside a subsystem, an input port named Action is added to the block.
Connect each output port from the If block to the action port of an If Action Subsystem block.
When you make the connection, the icon for the If Action Subsystem block is renamed to the type of expression that attached to it.
In each If Action Subsystem block, enter the Simulink blocks to be executed for the condition it handles.
Connect outputs from If Action Subsystem blocks to a Merge block.
Run a simulation.
The action signal lines between the If block and the If Action Subsystem blocks change from a solid to a dashed line.
Note
All blocks in an If Action Subsystem block driven by an If block must run at the same rate as the driving block.
The Switch Case Action Subsystem block is a Subsystem block preconfigured as a starting point for creating a subsystem whose execution is enabled by a Switch Case block.
An external Switch Case block controls execution. The Switch Case block evaluates a case index and then, depending on the selected case, outputs an action signal to a Switch Case Action Subsystem block.
Consider the following model with a switch structure. To open
model, see ex_switch_case_block
.
In this model, the input to the Switch Case block provides the index value for selecting a case represented as output ports. Each output port is attached to an If Action Subsystem block. When a case is selected, its corresponding If Action Subsystem is executed.
The switch structure in the model can be represented with the following pseudo code.
CASE u1 u1 = 1: subsystem_1 break u1 = 2 or 3: subsystem_2_3 break u1 = OTHER VALUES: subsystem_default break END CASE
To create the example model, use the following procedure.
Place a Switch Case block in the Simulink Editor. Double-click the block to open the block parameters dialog box.
In the Case conditions box, enter {1,
[2,3]}
.
Two cases are defined. The first case when the input value is
1
, and the second case when the input value is 2
or 3
. Cases can be single or multivalued and appear as output ports
on the Switch Case block. Non-integer input values are truncated to
integers.
Select the Show default case check box.
An output port labeled default:
is added to the block. This port
sends an action signal if no other cases are selected.
Add three Switch Case Action Subsystem blocks.
These blocks are Subsystem blocks with an Action Port block. When you place an Action Port block inside a subsystem, an input port named Action is added to the block.
Connect each output port from the Switch Case block to the action port of an Switch Case Action Subsystem block.
When you make the connection, the icon for the Switch Case Action Subsystem block is renamed to the type of expression attached to it.
In each Switch Case Action Subsystem block, enter the Simulink blocks to be executed for the case it handles.
Run a simulation.
The action signal lines between the Switch Case block and the Switch Case Action Subsystem blocks change from a solid to a dashed line.
Note
After the subsystem for a particular case executes, an implied break terminates the
execution of the Switch Case block. Simulink
Switch Case blocks do not exhibit the fall -through behavior of C
switch
statements.