Stateflow | ![]() ![]() |
Inner Transitions
An inner transition is a transition that does not exit the source state. Inner transitions are most powerful when defined for superstates with exclusive (OR) decomposition. Use of inner transitions can greatly simplify a Stateflow diagram, as shown by the following examples:
Before Using an Inner Transition
This is an example of a Stateflow diagram that could be simplified by using an inner transition.
Any event occurs and awakens the Stateflow diagram. The default transition to the connective junction is valid. The destination of the transition is determined by [C_one]
and [C_two]
. If [C_one]
is true, the transition to A1
is true. If [C_two]
is true, the transition to A2
is valid. If neither [C_one]
nor [C_two]
is true, the transition to A3
is valid. The transitions among A1
, A2
, and A3
are determined by E_one
, [C_one]
, and [C_two]
.
After Using an Inner Transition to a Connective Junction
This example simplifies the preceding example using an inner transition to a connective junction.
Any event occurs and awakens the Stateflow diagram. The default transition to the connective junction is valid. The destination of the transitions is determined by [C_one]
and [C_two]
.
The Stateflow diagram is simplified by using an inner transition in place of the many transitions among all the states in the original example. If state A
is already active, the inner transition is used to reevaluate which of the substates of state A
is to be active. When event E_one
occurs, the inner transition is potentially valid. If [C_one]
is true, the transition to A1
is valid. If [C_two]
is true, the transition to A2
is valid. If neither [C_one]
nor [C_two]
is true, the transition to A3
is valid. This solution is much simpler than the previous one.
See Processing the First Event with an Inner Transition to a Connective Junction for more information on the semantics of this notation.
Using an Inner Transition to a History Junction
This example shows an inner transition to a history junction.
State Power_on.High
is initially active. When event Reset
occurs, the inner transition to the history junction is valid. Because the inner transition is valid, the currently active state, Power_on.High
, is exited. When the inner transition to the history junction is processed, the last active state, Power_on.High
, becomes active (is reentered). If Power_on.Low
was active under the same circumstances, Power_on
.Low
would be exited and reentered as a result. The inner transition in this example is equivalent to drawing an outer self-loop transition on both Power_on.Low
and Power_on.High
.
See Use of History Junctions Example for another example using a history junction.
See Inner Transition to a History Junction Example for more information on the semantics of this notation.
![]() | Self-Loop Transitions | Default Transitions | ![]() |