## Model Finite State Machines by Using Stateflow Charts

A *finite state machine* is a representation of an event-driven,
reactive system that makes a transition from one operating mode to another when the condition
defining the change is true. For example, you can use a state machine to represent the
automatic transmission of a car. The transmission has operating modes, such as park, reverse,
neutral, drive, and low. As the driver moves the gearshift, the system makes a transition from
one operating mode to another.

### Types of Stateflow Blocks

To represent the relationships between the inputs, outputs, and operating modes of a
finite state machine, you can add Stateflow^{®} blocks to a Simulink^{®} model to create state transition diagrams, state transition tables, and truth tables:

A Chart is a graphical representation of a finite state machine based on a state transition diagram. In charts, states and transitions form the basic building blocks of a sequential logic system. States correspond to operating modes and transitions represent pathways between states. For more information, see Represent Operating Modes by Using States and Transition Between Operating Modes.

A State Transition Table provides a tabular representation of the sequential logic used for modeling train-like state machines, where the modal logic involves transitions between a sequence of states. For more information, see State Transition Tables in Stateflow.

A Truth Table describes combinatorial logic in terms of the relationships between the inputs and outputs of a finite state machine. For more information, see Use Truth Tables to Model Combinatorial Logic.

**Tip**

To combine the advantages of state machine programming with the full functionality of
MATLAB^{®}, you can create a standalone Stateflow chart. You execute standalone charts as MATLAB objects directly through the Command Window or by using a script. You can
also program a MATLAB app that controls the state of the chart through a graphical user interface.
For more information, see Create Stateflow Charts for Execution as MATLAB Objects.

### Program a Stateflow Chart

To create a Stateflow chart that models a finite state machine:

Create a Simulink model that contains an empty Stateflow chart by calling the function

`sfnew`

.sfnew

To open the Stateflow Editor, double-click the chart block. For more information on using the Stateflow Editor, see Stateflow Editor Operations.

For each operating mode in your system, draw a state and implement the state actions by adding state labels, as described in Represent Operating Modes by Using States.

To organize complex systems, define a hierarchy of states by drawing child states inside a parent state. For example, you can use a superstate to enclose substates that share the same state actions. For more information, see Use State Hierarchy to Design Multilevel State Complexity.

To model operating modes that are active at the same time, enable parallel (AND) decomposition in a parent state. For more information, see Define Exclusive and Parallel Modes by Using State Decomposition.

To represent the direction of flow logic between states, draw transitions and implement the transition conditions by adding transition labels, as described in Transition Between Operating Modes.

To mark the first state to become active, use a default transition. For more information, see Use Default Transitions to Specify Initial Substate Activity.

To create paths from a single source to multiple destinations or from multiple sources to a single destination, combine transitions and connective junctions. For more information, see Combine Transitions and Junctions to Create Branching Paths.

If your system has inputs or outputs, or depends on any state variables, add input, output, and local data, as described in Add Stateflow Data.

If your system reacts to event triggers or must trigger actions in your chart or other blocks in your model, add input, output, or local events, as described in Synchronize Model Components by Broadcasting Events.

If your chart has complex state actions or transition conditions, add reusable functions to your chart. Use the function format that is most natural for the type of calculation in the state action or transition condition by selecting from these functions:

Graphical functions — Encapsulate flow charts that contain logic and iterative loop patterns. See Reuse Logic Patterns by Defining Graphical Functions.

MATLAB functions — Write matrix-oriented algorithms for data analysis and visualization. See Reuse MATLAB Code by Defining MATLAB Functions.

Simulink functions — Streamline your design by calling Simulink function-call subsystems. See Reuse Simulink Functions in Stateflow Charts.

Truth tables — Represent combinational logic for decision-making applications. See Use Truth Tables to Model Combinatorial Logic.

Alternatively, you can write your own C or C++ code for integration with your chart. For more information, see Reuse Custom Code in Stateflow Charts.

Connect the chart to other blocks in the Simulink model by using input and output ports.

To simulate the model, click

**Run**. During the simulation, the Stateflow Editor highlights active states and transitions through chart animation.

For a tutorial that illustrates this workflow, see Construct and Run a Stateflow Chart.

## References

[1] Harel, David. "Statecharts: A
Visual Formalism for Complex Systems." *Science of Computer Programming*
8, no.3 (June 1987): 231-74.

[2] Hatley, Derek J. and Imtiaz A.
Pirbhai. *Strategies for Real-Time System Specification.* New York, NY:
Dorset House Publishing, 1988.

## See Also

`sfnew`

| Chart | State Transition Table | Truth Table