Main Content

Control Chart Execution by Using Condition Actions

Condition Action Behavior

This example shows the behavior of a simple condition action in a transition path with multiple segments. The chart uses implicit ordering of outgoing transitions (see Implicit Ordering).

Stateflow chart with states called A, B, and C.

Initially, the chart is asleep. State A is active. Conditions C_one and C_two are false. Event E_one occurs and awakens the chart, which processes the event from the root down through the hierarchy:

  1. The chart root checks to see if there is a valid transition as a result of E_one. A valid transition segment from state A to a connective junction is detected. The condition action A_one is detected on the valid transition segment and is immediately executed and completed. State A is still active.

  2. Because the conditions on the transition segments to possible destinations are false, none of the complete transitions is valid.

  3. State A during actions (durA()) execute and complete.

    State A remains active.

  4. The chart goes back to sleep.

This sequence completes the execution of this Stateflow® chart associated with event E_one when state A is initially active.

Condition and Transition Action Behavior

This example shows the behavior of a simple condition and transition action specified on a transition from one exclusive (OR) state to another.

Stateflow chart with states called A and B.

Initially, the chart is asleep. State A is active. Condition C_one is true. Event E_one occurs and awakens the chart, which processes the event from the root down through the hierarchy:

  1. The chart root checks to see if there is a valid transition as a result of E_one. A valid transition from state A to state B is detected. The condition C_one is true. The condition action A_one is detected on the valid transition and is immediately executed and completed. State A is still active.

  2. State A exit actions (ExitA()) execute and complete.

  3. State A is marked inactive.

  4. The transition action A_two is executed and completed.

  5. State B is marked active.

  6. State B entry actions (entB()) execute and complete.

  7. The chart goes back to sleep.

This sequence completes the execution of this Stateflow chart associated with event E_one when state A is initially active.

Create Condition Actions Using a For-Loop

Condition actions and connective junctions are used to design a for loop construct. This example shows the use of a condition action and connective junction to create a for loop construct. The chart uses implicit ordering of outgoing transitions (see Implicit Ordering).

Stateflow chart with states called A and B.

See For-Loop Construct to see the behavior of this example.

Broadcast Events to Parallel (AND) States Using Condition Actions

This example shows how to use condition actions to broadcast events immediately to parallel (AND) states. The chart uses implicit ordering of parallel states (see Implicit Ordering of Parallel States).

Stateflow chart with a top-level state called A. A has two parallel substates called A1 and A2. A1 has substates A1a and A1B. A2 has substates A2a and A2b.

See Broadcast Events in Condition Actions to see the behavior of this example.

Tip

Avoid using undirected local event broadcasts. Undirected local event broadcasts can cause unwanted recursive behavior in your chart. Instead, send local events by using directed broadcasts. For more information, see Broadcast Local Events to Synchronize Parallel States.

During simulation, Stateflow charts can detect undirected local event broadcasts. To control the level of diagnostic action, open the Configuration Parameters dialog box and, in the Diagnostics > Stateflow pane, set the Undirected event broadcasts parameter to none, warning, or error. The default setting is warning. For more information, see Undirected event broadcasts (Simulink).

Avoid Cyclic Behavior

This example shows a notation to avoid when using event broadcasts as condition actions because the semantics results in cyclic behavior.

Stateflow chart with states called On and Off.

Initially, the chart is asleep. State On is active. Event E_one occurs and awakens the chart, which processes the event from the root down through the hierarchy:

  1. The chart root checks to see if there is a valid transition as a result of E_one.

    A valid transition from state On to state Off is detected.

  2. The condition action on the transition broadcasts event E_one.

  3. Event E_one is detected on the valid transition, which is immediately executed. State On is still active.

  4. The broadcast of event E_one awakens the chart a second time.

  5. Go to step 1.

Steps 1 through 5 continue to execute in a cyclical manner. The transition label indicating a trigger on the same event as the condition action broadcast event results in unrecoverable cyclic behavior. This sequence never completes when event E_one is broadcast and state On is active.

Tip

Avoid using undirected local event broadcasts. Undirected local event broadcasts can cause unwanted recursive behavior in your chart. Instead, send local events by using directed broadcasts. For more information, see Broadcast Local Events to Synchronize Parallel States.

During simulation, Stateflow charts can detect undirected local event broadcasts. To control the level of diagnostic action, open the Configuration Parameters dialog box and, in the Diagnostics > Stateflow pane, set the Undirected event broadcasts parameter to none, warning, or error. The default setting is warning. For more information, see Undirected event broadcasts (Simulink).

Related Topics