State Flow
State Flow
www.mathworks.com Web
comp.soft-sys.matlab Newsgroup
www.mathworks.com/contact_TS.html Technical Support
508-647-7000 (Phone)
508-647-7001 (Fax)
Trademarks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, and xPC TargetBox
are registered trademarks, and SimBiology, SimEvents, and SimHydraulics are trademarks of
The MathWorks, Inc.
Other product or brand names are trademarks or registered trademarks of their respective
holders.
Patents
The MathWorks products are protected by one or more U.S. patents. Please see
www.mathworks.com/patents for more information.
Revision History
June 2004 First printing New for Version 6.0 (Release 14)
October 2004 Online only Revised for Version 6.1 (Release 14SP1)
March 2005 Online only Revised for Version 6.2 (Release 14SP2)
September 2005 Online only Revised for Version 6.3 (Release 14SP3)
October 2005 Reprint Version 6.0
March 2006 Second printing Revised for Version 6.4 (Release R2006a)
September 2006 Reprint Version 6.5 (Release R2006b)
Contents
Introduction to Stateflow
1
What Is Stateflow? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Extends the Capabilities of Traditional State Charts . . . . 1-2
Generates C Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
v
Running the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
vi Contents
Defining State Actions and Variables
5
Design Considerations for Defining State Actions and
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-2
Defining State Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-2
Determining Whether to Use State Actions . . . . . . . . . . . . 5-2
Determining the Type of State Action to Use . . . . . . . . . . . 5-4
vii
Implementing the Triggers . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
Defining the CLOCK Event . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
Connecting the Edge-Triggered Events to the Input
Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4
Index
viii Contents
1
Introduction to Stateflow
What Is Stateflow?
Stateflow is an interactive graphical design tool that works with Simulink
to model and simulate event-driven systems, also called reactive systems.
Event-driven systems transition from one operating mode to another in
response to events and conditions. These systems are often used to model
logic for dynamically controlling a physical device such as a fan, motor, or
pump. Event-driven systems can be modeled as finite-state machines.
You will learn more about these elements later in this guide.
1-2
What Is Stateflow?
Generates C Code
Stateflow performs simulation by generating a C code implementation of the
Stateflow chart. The simulation code is generated from a simulation target.
You will learn more about simulation targets later in Chapter 8, “Simulating
the Chart”.
You can also generate portable C code from Stateflow charts automatically
using Stateflow® Coder (available separately). Stateflow Coder also works
with Real-Time Workshop® (available separately) to generate C code for
Simulink models that include Stateflow charts.
1-3
1 Introduction to Stateflow
Event
State action
Condition
Transition
You will learn more about these features later in this guide as you build your
own Stateflow chart.
1-4
What Does a Stateflow Chart Look Like?
This chart is part of a model called sf_car that ships with Stateflow. To
explore the model further, run it from your MATLAB Command Window, as
described in “Running a Demo Model” in the online documentation Getting
Started with Simulink.
1-5
1 Introduction to Stateflow
1-6
How Stateflow Works with Simulink
You can develop your Stateflow chart before or after the Simulink model in
which it will run. Stateflow comes with its own editor and debugger, which
allows you to simulate and test the chart logic before you integrate it with a
Simulink model. You can test a Stateflow chart independently of its parent
model by attaching a Simulink Source block as an input and a Simulink
Sink block as an output (see “Sources” and “Sinks” in the online Stateflow
Reference documentation). During simulation, you can animate the chart to
get visual feedback about its run-time behavior. You will edit, simulate, and
debug your chart later in this guide.
1-7
1 Introduction to Stateflow
2 6
Define the states Simulate
for modeling each the chart
mode of operation
1 3 5 7
Define the Define Decide how to Debug
interface state actions trigger the chart the chart
to Simulink and variables
4
Define the
transitions
between states
To get started quickly, you will participate in hands-on exercises that guide
you through each phase of this workflow for building a realistic Stateflow
chart and integrating it with a Simulink model. Note that work flows in one
direction until you get to phase 6. At this phase, you may need to iterate
between simulating and debugging your Stateflow chart as you fix errors and
experiment with different parameters until the model produces the desired
behavior.
1-8
Installing Stateflow
Installing Stateflow
Stateflow runs on Windows and UNIX operating systems. Your
platform-specific MATLAB installation documentation provides all the
information you need to install Stateflow. Before installing Stateflow, make
sure you address the following configuration requirements:
Prerequisite Software
Before installing Stateflow, you need the following software:
• MATLAB
• Simulink
• Stateflow Coder
• C or C++ compiler supported by MATLAB
The compiler is required for compiling code generated by Stateflow for
simulation. The Microsoft Windows version of Stateflow comes with a C
compiler (lcc.exe) and a make utility (lccmake). Both tools are installed
in the directory matlabroot\sys\lcc. If you do not configure MATLAB to
use any other compiler, Stateflow uses lcc to build targets.
1-9
1 Introduction to Stateflow
Product Dependencies
For information about product dependencies and requirements, see
www.mathworks.com/products/stateflow/requirements.html.
mex -setup
1 Click the right mouse button on the Windows desktop to display the
desktop menu.
2 Select Properties from the desktop menu to display the Windows Display
Properties dialog box.
4 Choose a setting that is more than 256 colors and click OK.
1-10
Related Products
Related Products
The MathWorks provides several products that extend the capabilities
of Stateflow. For information about these related products, see
www.mathworks.com/products/stateflow/related.htm.
1-11
1 Introduction to Stateflow
1-12
2
To get hands-on experience using Stateflow, you will build a Stateflow chart in
incremental steps that follow the basic workflow described in “Basic Workflow
for Building a Stateflow Chart” on page 1-8. To give you a context for your
development efforts, this chapter describes the purpose and function of the
chart you will build and explains how it interfaces with a Simulink model.
You will also learn how to run a completed version of the model from the
MATLAB command line.
The Stateflow Chart (p. 2-2) Shows the Stateflow chart you will
learn how to build; demonstrates
how the Stateflow control block
works with the Simulink model.
How the Stateflow Chart Works with Describes the interface between the
the Simulink Model (p. 2-6) Stateflow chart and the Simulink
model
A Look at the Physical Plant (p. 2-8) Describes how Simulink models the
physical plant that is controlled by
the Stateflow chart
Running the Model (p. 2-11) Shows how to run the
sf_aircontrol model to explore its
behavior
2 The Stateflow Chart You Will Build
2-2
The Stateflow Chart
As you can see from the title bar, the Stateflow chart is called Air Controller
and is part of a Simulink model called sf_aircontrol. When you build
this chart, you will learn how to work with the following elements of
state-transition charts:
• PowerOn
• PowerOff
• FAN1.On
• FAN1.Off
• FAN2.On
• FAN2.Off
• FAN1
2-3
2 The Stateflow Chart You Will Build
• FAN2
• SpeedValue
Transition. Graphical object that links one state to another and specifies a
direction of flow. Transitions are represented by unidirectional arrows:
• PowerOn to PowerOff
• PowerOff to PowerOn
• FAN1.On to FAN1.Off
• FAN1.Off to FAN1.On
• FAN2.On to FAN2.Off
• FAN2.Off to FAN2.On
• At the chart level, the default transition indicates that the state PowerOff
is activated (wakes up) first when the chart is activated.
• In the FAN1 and FAN2 states, the default transitions specify that the fans be
powered off when the states are activated.
2-4
The Stateflow Chart
• entry (en) action in the PowerOff state. Entry actions are executed when
the state is entered (becomes active).
• during (du) action in the SpeedValue state. During actions are executed for
a state while it is active and no valid transition to another state is available.
Note There are other types of state actions besides entry and during,
but they involve concepts that go beyond the scope of this guide. For more
information, see “Using Actions in Stateflow” in the online Stateflow User’s
Guide documentation.
2-5
2 The Stateflow Chart You Will Build
As you can see, Simulink passes the temperature of the plant as an input
temp to the Stateflow Air Controller block. Based on the temperature of the
plant, the controller activates zero, one, or two fans, and passes back to
Simulink an output value airflow that indicates how fast the air is flowing.
The speed of the airflow depends on the amount of cooling activity generated
by the fans. As cooling activity increases, air flows faster. Simulink uses the
value of airflow to simulate the effect of cooling when it computes the air
temperature in the plant over time. You will learn more about these design
elements in Chapter 3, “Defining the Interface to Simulink”.
2-6
How the Stateflow Chart Works with the Simulink Model
The Signal Builder block in the Simulink model sends a square wave signal
(CLOCK) to wake up the Stateflow chart at regular intervals and a pulse signal
(SWITCH) to cycle the power on and off for the control system modeled by the
Stateflow chart. You will learn more about these design elements in Chapter
7, “Triggering a Stateflow Chart”.
2-7
2 The Stateflow Chart You Will Build
In this model, the internal temperature of the plant attempts to rise to achieve
steady state with the ambient air temperature, set at a constant 160 degrees
(as shown in “How the Stateflow Chart Works with the Simulink Model” on
page 2-6). The rate at which the internal temperature rises depends in part on
the degree of thermal isolation in the plant and the amount of cooling activity.
Thermal isolation measures how much heat flows into a closed structure,
based on whether the structure is constructed of materials with insulation or
2-8
A Look at the Physical Plant
Over time, the subsystem calculates the cooling effect inside the plant, taking
into account thermal isolation and cooling activity. The cooling effect is the
time-derivative of the temperature and is the input to the Integrator block in
the Physical Plant subsystem. Let the variable temp_change represent the
time derivative of temperature. Note that temp_change can be a warming or
cooling effect, depending on whether it is positive or negative, based on this
equation:
temp_change = ((ambient − temp) ∗ ( thermal isolation multiplier )) + ((ambient − temp) ∗ ( cooling factor))
2-9
2 The Stateflow Chart You Will Build
The Integrator block computes its output temp from the input temp_change,
as follows:
t
temp(t) = ∫ temp _ change(t) dt + 70
t0
Note In this model, the initial condition of the Integrator block is 70 degrees.
temp is passed back to the Stateflow Air Controller to determine how much
cooling is required to maintain the ideal plant temperature.
2-10
Running the Model
1 Start MATLAB.
2-11
2 The Stateflow Chart You Will Build
Tip Position the Air Controller chart and the Scope window so they are
both visible on your desktop.
5 Start simulation in the Air Controller chart by selecting Start from the
Simulation menu or clicking the Start Simulation icon:
As the simulation runs, the chart becomes active (wakes up) in the
PowerOff state. Notice in the Scope that until PowerOn becomes active, the
temperature rises unchecked. After approximately 350 seconds into the
simulation, a rising edge signal switches power on and the fans become
active.
When the temperature rises above 120 degrees, FAN1 cycles on. When the
temperature exceeds 150 degrees, FAN2 cycles on to provide additional
cooling. Ultimately, FAN1 succeeds in maintaining the temperature at 120
degrees until a falling edge signal switches power off again at 500 seconds.
Then, the temperature begins to rise again.
2-12
Running the Model
2-13
2 The Stateflow Chart You Will Build
Tip You can stop or pause simulation at any time. To stop simulation,
select Stop from the Simulation menu or click the Stop Simulation icon:
Where to go next. Now you are ready to start building the Stateflow Air
Controller chart. Begin at phase 1 of the workflow: Chapter 3, “Defining
the Interface to Simulink”.
2-14
3
2
Define the states 6
for modeling each Simulate
mode of operation the chart
1 3 5 7
Define the Define Decide how to Debug
interface state actions trigger the chart the chart
to Simulink and variables
4
Define the
transitions
between states
You have entered phase 1 of a basic workflow for building a Stateflow chart:
define the interface to Simulink. This chapter presents the design questions
that you must answer and guides you through exercises for implementing the
interface, based on your design decisions.
Design Considerations for Defining Poses the design questions for phase
the Interface (p. 3-2) 1 of the workflow and presents the
rationale for the solutions
Implementing the Interface (p. 3-4) Provides hands-on exercises that
show you how to implement the
interface as designed
3 Defining the Interface to Simulink
Property Value
Name temp
Scope Input from Simulink
Size Inherit from Simulink input signal to ensure
compatibility
Data type Inherit from Simulink input signal to ensure
compatibility
Port 1
Watch in debugger Enable
3-2
Design Considerations for Defining the Interface
Property Value
Name airflow
Scope Output from Simulink
Data type 8-bit unsigned integer
(The values can be only 0, 1, or 2.)
Port 1
Watch in debugger Enable
3-3
3 Defining the Interface to Simulink
3-4
Implementing the Interface
The model is incomplete because it doesn’t include the Stateflow chart that
you will build as you work through the exercises in this guide. Instead,
the model contains several nonfunctional blocks: the Terminator, Inport,
and Annotation blocks, as shown:
Nonfunctional blocks
Tip Hold down the Shift key to select multiple objects, and then press
Delete.
3-5
3 Defining the Interface to Simulink
b In the Simulink model window, select Save As from the File menu.
f Click Save.
4 From the toolbar of the Simulink model, select the Library Browser icon:
3-6
Implementing the Interface
3-7
3 Defining the Interface to Simulink
5 Add the Stateflow block to the Simulink model by following these steps:
Operating Instructions
System
Windows Follow these steps:
1 In the left scroll pane of the Library Browser, select
Stateflow.
2 Drag the first block, called Chart, into your
Simulink model.
UNIX Follow these steps:
1 In the Simulink library window, double-click
Blocksets & Toolboxes.
2 In the bottom row of the Blocksets & Toolboxes
window, double-click Stateflow.
3-8
Implementing the Interface
6 Click the label Chart under the Stateflow block and rename it Air
Controller.
3-9
3 Defining the Interface to Simulink
Tip There is a shortcut for adding a Stateflow block to a new Simulink model.
At the MATLAB command prompt, enter this command:
sfnew
3-10
Implementing the Interface
2 Add a data element to hold the value of the temperature input from
Simulink by following these steps:
a Select Data > Input from Simulink from the Add menu.
3-11
3 Defining the Interface to Simulink
The Data properties dialog box opens on your desktop with the General
tab selected:
The default values that appear are based on the scope — in this case, a
data input.
b In the Name field, change the name of the data element to temp.
3-12
Implementing the Interface
c Leave the other fields at their default values in the General tab because
they meet the design requirements, as follows:
Note Ports are assigned to inputs and outputs in the order they are
created. Because temp is the first input you created, it is assigned to
input port 1.
d Select the Value Attributes tab and select the Watch in debugger
check box.
3 Add a data element to hold the value of the airflow output from the Air
Controller chart by following these steps:
a Select Data > Output to Simulink from the Add menu.
3-13
3 Defining the Interface to Simulink
The Data properties dialog box opens on your desktop, this time with
different default values, associated with the scope Output:
b In the Name field of the Data properties dialog box, change the name of
the data element to airflow.
c In the Data type field, select uint8 (8-bit unsigned integer) from the
submenu.
d Leave the other fields at their default values in the General tab pane
because they meet the design requirements, as follows:
3-14
Implementing the Interface
e Click the Value Attributes tab and look at the Initial value field.
3-15
3 Defining the Interface to Simulink
4 Look back at the Simulink model by clicking the up-arrow in the Stateflow
Editor toolbar:
3-16
Implementing the Interface
Notice that the input temp and output airflow have been added to the
Stateflow block:
Tip You may need to enlarge the Air Controller block to see the input and
output clearly. To change the size of the block:
a Select the block and move your cursor over one of the corners until it
changes to this shape:
b Hold down the left mouse button and drag the block to the desired size.
5 Save Stage1Interface, but leave the Stateflow Editor open for the next
exercise.
3-17
3 Defining the Interface to Simulink
Tip There are several ways to add data objects to Stateflow charts. You
used the Stateflow Editor, which allows you to add data elements to the
Stateflow chart that is open and has focus. However, to add data objects not
just to a chart, but anywhere in the Stateflow design hierarchy, you can use
a tool called the Model Explorer. This tool also lets you view and modify the
data objects you have already added to Stateflow. For more information, see
“Stateflow Hierarchy of Objects” and “Adding Data Using the Model Explorer”
in the online Stateflow User’s Guide documentation. You can also add data
objects programmatically using the Stateflow API, as described in “Creating
Stateflow Objects” in the online Stateflow API documentation.
3-18
Implementing the Interface
2 Connect the output temp from the Physical Plant to the corresponding
input in Air Controller by drawing a branch line from the line that connects
temp to the Scope:
a Position the cursor on the line where you want the branch line to start.
b While holding down the Ctrl key, press and hold down the left mouse
button.
c Drag the cursor to the input port for temp on the left side of the Air
Controller block.
d Release the mouse button and the Ctrl key.
3-19
3 Defining the Interface to Simulink
Tip To reposition connections, hold down the left mouse button over any
side of the connection line so that the cursor changes to this symbol:
3 Save Stage1Interface.
Where to go next. Now you are ready to begin phase 2 of the workflow:
Chapter 4, “Defining the States for Modeling Each Mode of Operation”.
3-20
4
2
Define the states 6
for modeling each Simulate
mode of operation the chart
1 3 5 7
Define the Define Decide how to Debug
interface state actions trigger the chart the chart
to Simulink and variables
4
Define the
transitions
between states
You have entered phase 2 of a basic workflow for building a Stateflow chart:
defining the states for modeling each mode of operation. This chapter presents
the design questions that you must answer and guides you through exercises
for implementing the states, based on your design decisions.
Design Considerations for Defining Poses the design questions for phase
the States (p. 4-2) 2 of the workflow and presents the
rationale for the solutions
Implementing the States (p. 4-7) Provides hands-on exercises that
show you how to implement the
states as designed
4 Defining the States for Modeling Each Mode of Operation
The Stateflow Air Controller chart is a system that cools a physical plant
by transitioning between several modes of operation and, therefore, can be
modeled as a finite state machine. In the following sections, you will design
the states that model each mode of operation.
4-2
Design Considerations for Defining the States
4-3
4 Defining the States for Modeling Each Mode of Operation
4-4
Design Considerations for Defining the States
Note Notice the use of dot notation to refer to the On and Off states for FAN1
and FAN2. You use namespace dot notation to give objects unique identifiers
when they have the same name in different parts of the Stateflow model
hierarchy.
4-5
4 Defining the States for Modeling Each Mode of Operation
The Air Controller chart requires both types of states. Here is a breakdown of
the exclusive (OR) and parallel (AND) states required for the Stateflow chart:
4-6
Implementing the States
To add PowerOn and PowerOff to your Stateflow chart, follow these steps:
4-7
4 Defining the States for Modeling Each Mode of Operation
The Stateflow Editor for Air Controller opens on your desktop. Notice the
object palette on the left side of the editor window. This palette displays a
set of tools for drawing graphical Stateflow chart objects, including states:
5 Click in the upper-left corner of the drawing area to place the state.
The new state appears with a blinking text cursor in its upper-left corner.
4-8
Implementing the States
Tip If you click away from the text cursor before typing the new name, the
cursor changes to a question mark. Click the question mark to restore
the text cursor.
4-9
4 Defining the States for Modeling Each Mode of Operation
9 Click the state tool icon again and draw a smaller state named PowerOff at
the bottom of the drawing area, like this:
10 Save the chart by clicking Save Model in the File menu of the Stateflow
Editor, but leave the Stateflow Editor open for the next exercise.
4-10
Implementing the States
1 In the Stateflow Editor for the chart Air Controller, right-click inside
PowerOn.
A submenu opens, presenting tasks you can perform and properties you
can set for the selected state.
3 Save the model Stage2States, but leave the Stateflow Editor open for
the next exercise.
1 Left-click the state tool icon in the Stateflow Editor and place two states
inside the PowerOn state.
Tip Instead of using the state tool icon to add multiple states, you can
right-click inside an existing state and drag a copy to a new position in the
chart. This shortcut is convenient when you need to create states of the
same size and shape, such as the fan states.
4-11
4 Defining the States for Modeling Each Mode of Operation
The borders of the two states appear as dashed lines, indicating that
they are parallel states. Note also that the substates display numbers in
their upper-right corners. These numbers specify the order of execution.
Although multiple parallel (AND) states in the same chart are activated
concurrently, Stateflow must determine when to execute each one during
simulation.
You have created hierarchy in the Air Controller chart. PowerOn is now a
superstate while FAN1 and FAN2 are substates. Your chart should look like
something like this:
4-12
Implementing the States
Note Your chart may not show the same execution order for parallel
substates FAN1 and FAN2. The reason is that, by default, Stateflow orders
parallel states based on where they are located in the state diagram.
Priority goes from top to bottom and then left to right. If FAN2 is higher
in position than FAN1 in your diagram, FAN2 moves to the top of the order.
You will fine-tune order of activation in a later exercise, “Setting Explicit
Ordering of Parallel States” on page 4-14.
Tip If you want to move a state together with its substates — and any
other graphical objects it contains — double-click the state. It turns gray,
indicating that the state is grouped with the objects inside it and that they
can be moved as a unit. To ungroup the objects, double-click again.
4 Save the model Stage2States, but leave the Stateflow Editor open for
the next exercise.
1 Add another substate to PowerOn under FAN1 and FAN2, either by using the
state tool icon or copying an existing state in the chart.
You may need to resize the substate so that it doesn’t overlap any other
substate, but remains within the borders of PowerOn.
4-13
4 Defining the States for Modeling Each Mode of Operation
Like FAN1 and FAN2, SpeedValue appears as a parallel substate because its
parent, the superstate PowerOn, has parallel decomposition.
3 Save the model Stage2States, but leave the Stateflow Editor open for the
next exercise, “Setting Explicit Ordering of Parallel States” on page 4-14.
4-14
Implementing the States
1 In the Stateflow Editor, select Chart Properties from the File menu.
The properties dialog box for the Air Controller chart opens on your desktop.
4-15
4 Defining the States for Modeling Each Mode of Operation
Note Selecting this option also allows you to explicitly specify the order
in which transitions are executed when there is a choice of transitions to
take from one state to another. This is not an issue for the Air Controller
chart because it is deterministic: for each exclusive (OR) state, there is one
and only one transition to a next exclusive (OR) state. You will learn more
about transitions in “Drawing the Transitions Between States” on page 6-5.
3 Assign order of execution for each parallel state in the Air Controller chart:
4 Save the model Stage2States, but leave the Stateflow Editor open for the
next exercise, “Adding the On and Off States for the Fans” on page 4-16.
4-16
Implementing the States
2 Resize the substates to fit within the borders of FAN1 and FAN2.
3 In each fan state, name one substate On and name the other Off.
Your Air Controller chart should now look something like this:
Where to go next. Now you are ready to begin phase 3 of the workflow:
Chapter 5, “Defining State Actions and Variables”.
4-17
4 Defining the States for Modeling Each Mode of Operation
4-18
5
2
Define the states 6
for modeling each Simulate
mode of operation the chart
1 3 5
Define 7
Define the Decide how to Debug
interface state actions trigger the chart
and variables the chart
to Simulink
4
Define the
transitions
between states
You have entered phase 3 of a basic workflow for building a Stateflow chart:
defining state actions and variables. This chapter presents the design
questions that you must answer and guides you through exercises for defining
state actions and variables, based on your design decisions.
Design Considerations for Defining Poses the design questions for phase
State Actions and Variables (p. 5-2) 3 of the workflow and presents the
rationale for the solutions
Implementing State Actions (p. 5-5) Provides hands-on exercises that
show you how to implement the state
actions as designed
5 Defining State Actions and Variables
The states in the Air Controller chart do not require local or persistent data,
only the input and output data that you defined in “Defining the Inputs and
Outputs” on page 3-10.
When building the Air Controller chart, you need to determine whether any
states should perform actions. Some charts may not use state actions at all,
but instead perform actions only during the transitions from state to state.
Other charts require both types of state actions.
For the Air Controller chart, think about whether data values need to be
initialized or modified during any of its modes of operation. Recall that
the chart receives the air temperature of the plant as the input temp from
Simulink. The chart then uses this value to activate fans if necessary to cool
5-2
Design Considerations for Defining State Actions and Variables
the air. Based on how many fans are running, the chart sets a value that
indicates speed of airflow, which it sends at each time step to Simulink as the
output airflow. The Air Controller does not modify the value of temp, but
does need to update the value of airflow.
The next consideration is when to update, and for that matter, initialize
the value of airflow. If the when translates to a mode of operation, the
action should likely be performed by the state that represents that mode of
operation. Here is the analysis for the Air Controller chart:
5-3
5 Defining State Actions and Variables
For example, you can use entry actions to initialize data, during actions to
update data, and exit actions to configure data for the next transition. (There
are other types of state actions, but they involve concepts that go beyond the
scope of this guide. For more information, see “Using Actions in Stateflow” in
the online Stateflow User’s Guide documentation.)
5-4
Implementing State Actions
3 Click inside the PowerOff state after the last letter of its name label to
get a blinking text cursor.
entry: airflow = 0;
5-5
5 Defining State Actions and Variables
5 Save Stage3Actions, but leave the Stateflow Editor open for the next
exercise.
5-6
Implementing State Actions
1 Click inside the SpeedValue state after the last letter of its name label to
get a blinking text cursor.
5-7
5 Defining State Actions and Variables
Where to go next. Now you are ready to begin phase 4 of the workflow:
Chapter 6, “Defining Transitions Between States”.
5-8
6
Defining Transitions
Between States
2
Define the states 6
for modeling each Simulate
mode of operation the chart
3 5
1 Define 7
Define the Decide how to Debug
state actions trigger the chart
interface and variables the chart
to Simulink
4
Define the
transitions
between states
You have entered phase 4 of a basic workflow for building a Stateflow chart:
defining the transitions between states. This chapter presents the design
questions you must answer and guides you through exercises for defining
transitions, based on your design decisions.
Design Considerations for Defining Poses the design questions for phase
Transitions Between States (p. 6-2) 4 of the workflow and presents the
rationale for the solutions
Adding the Transitions (p. 6-5) Provides hands-on exercises that
show you how to implement the
transitions as designed
6 Defining Transitions Between States
You should consider the following design questions when defining transitions
between states:
• How does my state machine transition from one operating mode to another?
• Where should I place default transitions?
• How should I guard each transition from one state to another?
The Air Controller chart models a system in which power can cycle on and off
and, while power is on, fans can cycle on and off. Six exclusive (OR) states
represent these operating modes. To model this activity, you need to add the
following transitions between exclusive (OR) states:
• PowerOff to PowerOn
• PowerOn to PowerOff
• FAN1.Off to FAN1.On
• FAN1.On to FAN1.Off
6-2
Design Considerations for Defining Transitions Between States
• FAN2.Off to FAN2.On
• FAN2.On to FAN2.Off
In each case, the initial state should be off so you will add default transitions
to the states PowerOff, FAN1.Off, and FAN2.Off.
6-3
6 Defining Transitions Between States
6-4
Adding the Transitions
You will model this activity by drawing transitions between the PowerOn
and PowerOff states and between the On and Off states for each fan. Follow
these steps:
a Move the cursor over the top edge of PowerOff until the cursor shape
changes to crosshairs.
b Hold down the left mouse button, drag the cursor to the bottom edge of
PowerOn, and release the mouse.
6-5
6 Defining Transitions Between States
6-6
Adding the Transitions
6-7
6 Defining Transitions Between States
5 Save Stage4Transitions, but leave the Stateflow Editor open for the next
exercise.
1 In the Stateflow Editor, left-click the default transition icon in the object
palette:
6-8
Adding the Transitions
4 When the arrow becomes orthogonal to the edge, release the mouse button.
5 Repeat the same procedure to add default transitions at the top edges of
FAN1.Off and FAN2.Off.
6-9
6 Defining Transitions Between States
6-10
Adding the Transitions
Tip The location of the tail of a default transition determines the state
it activates. Therefore, you must make sure that your default transition
fits completely inside the parent of the state that it activates. In the Air
Controller chart pictured above, notice that the default transition for
FAN1.Off correctly resides inside the parent state, FAN1. Now consider
this chart:
In this example, the tail of the default transition resides in PowerOn, not in
FAN1. Therefore, it will activate FAN1 instead of FAN1.Off.
6 Save Stage4Transitions, but leave the Stateflow Editor open for the next
exercise.
As you learned in “Guarding the Transitions” on page 6-3, the fans cycle on
and off depending on the air temperature. In this exercise, you will add
conditions to the transitions in FAN1 and FAN2 that model this behavior.
6-11
6 Defining Transitions Between States
You may need to reposition the condition for readability. Click outside
the condition, then left-click and drag the condition expression to a new
location.
4 Repeat these steps to add the following conditions to the other transitions
in FAN1 and FAN2:
Transition Condition
FAN1.On to FAN1.Off [temp < 120]
FAN2.Off to FAN2.On [temp >= 150]
FAN2.On to FAN2.Off [temp < 150]
6-12
Adding the Transitions
5 Save Stage4Transitions, but leave the Stateflow Editor open for the next
exercise.
As you learned in “Guarding the Transitions” on page 6-3, the control system
should power on and off at regular intervals. You model this behavior by first
defining an event that occurs at the rising or falling edge of an input signal,
and then associating that event with the transitions between the PowerOn
and PowerOff states.
6-13
6 Defining Transitions Between States
1 In the Stateflow Editor, add an input event by selecting Event > Input
from Simulink from the Add menu.
6-14
Adding the Transitions
4 Look back at the Simulink model and notice that a trigger port appears at
the top of the Stateflow block:
Trigger port
When you define one or more input events for a chart, Stateflow adds a
single trigger port to the block. External Simulink blocks can trigger the
input events via a signal or vector of signals connected to the trigger port.
5 Back in the Stateflow Editor, associate the input event SWITCH with the
transitions:
a Select the transition from PowerOff to PowerOn and click the question
mark to get a text cursor.
b Type the name of the event you just defined, SWITCH.
You may need to reposition the event text for readability. If so, click
outside the text string, left-click the text, and drag it to the desired
location.
6-15
6 Defining Transitions Between States
c Repeat these steps to add the same event, SWITCH, to the transition from
PowerOn to PowerOff.
Now that you have associated these transitions with the event SWITCH, the
control system will alternately power on and off every time SWITCH occurs
— that is, every time the chart detects a rising or falling signal edge.
6-16
Adding the Transitions
Note that the Simulink sf_aircontrol model has already defined the
pulse signal SWITCH in the Signal Builder block at the top level of the
model hierarchy:
In the next phase of the workflow, you will connect your Stateflow chart to
the SWITCH signal to trigger the transitions between power on and power off.
6 Save Stage4Transitions.
Where to go next. Now you are ready to begin phase 5 of the workflow:
Chapter 7, “Triggering a Stateflow Chart”.
6-17
6 Defining Transitions Between States
6-18
7
Triggering a Stateflow
Chart
2
Define the states 6
Simulate
for modeling each the chart
mode of operation
1 3 5 7
Define the Define Decide how to Debug
interface state actions trigger the chart the chart
to Simulink and variables
4
Define the
transitions
between states
You have entered phase 5 of a basic workflow for building a Stateflow chart:
deciding how to trigger the chart. This chapter presents the design questions
that you must answer and guides you through exercises for adding triggers,
based on your design decisions.
A signal trigger works best for the Air Controller chart because it needs to
monitor the temperature of the physical plant at regular intervals. To meet
this requirement, you will use a periodic signal to trigger the chart. The
source is a square wave signal called CLOCK, provided by a Signal Builder
block in the Simulink model, described in “How the Stateflow Chart Works
with the Simulink Model” on page 2-6. To harness the signal, you will set
up an edge trigger event in Stateflow that wakes the chart at the rising or
falling edge of CLOCK.
The rationale for using an edge trigger in this case is that it uses the
regularity and frequency of the signal to wake up the chart. When using edge
triggers, it is important to note that there can be a delay from the time the
trigger occurs to the time the chart begins executing. This is because an edge
trigger causes the chart to execute at the beginning of the next simulation
time step, regardless of when the edge trigger actually occurred during the
previous time step. The Air Controller can tolerate this delay, as long as
the edge occurs frequently enough. (For more information about triggering
Stateflow charts, see “Implementing Simulink Update Interfaces” in the
online Stateflow User’s Guide documentation.)
Recall that you already defined one edge-triggered event, SWITCH, to guard
the transitions between PowerOff and PowerOn. You will now define a second
edge-triggered event, CLOCK, to wake up the chart.
7-2
Implementing the Triggers
3 In the Stateflow Editor, add an input event by selecting Event > Input
from Simulink from the Add menu.
7-3
7 Triggering a Stateflow Chart
In Stage5Trigger, notice that the two input signals SWITCH and CLOCK feed
into a Mux block where they are joined in an array to a single output. SWITCH
is a pulse signal and CLOCK is a square wave. When you connect the Mux to
the trigger port, the index of the signals in the array are associated with the
like-numbered ports. Therefore, the SWITCH signal at the top input port of the
Mux triggers the event SWITCH on trigger port 1. Likewise, the CLOCK signal
at the second input port of the Mux triggers the event CLOCK on trigger port 2.
1 Click the Mux block, hold down the Ctrl key, and click the Air Controller
block.
7-4
Implementing the Triggers
The output signal of the Mux block connects to the input trigger port of the
Stateflow block. Your chart should look like this:
2 Save Stage5Trigger.
Where to go next. Now you are ready to begin phase 6 of the workflow:
Chapter 8, “Simulating the Chart”.
7-5
7 Triggering a Stateflow Chart
7-6
8
2
6
Define the states Simulate
for modeling each the chart
mode of operation
1 3
Define 5 7
Define the Decide how to Debug
interface state actions
and variables trigger the chart the chart
to Simulink
4
Define the
transitions
between states
You have entered phase 6 of a basic workflow for building a Stateflow chart:
simulating the chart. By the time you reach this phase, you have finished
building your chart and integrating it with the Simulink model. Now it is
time to test the chart by simulating its run-time behavior. During simulation,
you can animate Stateflow charts to highlight states and transitions as they
execute. This chapter guides you through the tasks required for simulating
the chart with animation.
8-2
Preparing Charts for Simulation
Tip You can specify data types and sizes as expressions in which you call
functions that return property values of other variables already defined in
Stateflow, MATLAB, or Simulink. Such functions include size, type, and
fixdt. For more information, see “Entering Expressions and Parameters for
Data Properties” in the online Stateflow User’s Guide documentation.
8-3
8 Simulating the Chart
8-4
Setting Simulation Parameters
Under Simulation time on the right, note that the start and stop times
have been preset for you. You can adjust these times later as you become
more familiar with the run-time behavior of the Stateflow chart.
c Keep the preset values for now and click OK to close the dialog box.
8-5
8 Simulating the Chart
1 Make sure animation has been enabled for your chart, as follows:
a In the Stateflow Editor, select Open Simulation Target from the Tools
menu.
8-6
Animating Stateflow Charts
Note This dialog box is used to configure Stateflow for building targets.
A target is a program that executes a Stateflow chart or a Simulink
model that contains a Stateflow chart. Stateflow builds a simulation
target (sfun) that lets you simulate your Stateflow application in
Simulink. For more information, see “Building Targets” in the online
Stateflow User’s Guide documentation.
b Click the Coder Options button in the middle of the dialog box.
The Stateflow sfun Coder Options dialog box opens on your desktop:
8-7
8 Simulating the Chart
Note You can change the speed of animation at any time during
simulation
3 Leave the Air Controller chart and the debugger open for the next exercise.
8-8
Setting Breakpoints
Setting Breakpoints
In this exercise, you will learn how to set breakpoints in the debugger to pause
simulation during key run-time activities so you can observe the behavior of
your chart in slow motion. You can set the following breakpoints:
Breakpoint Description
Chart Entry Simulation halts when the Stateflow chart wakes
up.
Event Broadcast Simulation halts when an event, such as SWITCH or
CLOCK, occurs.
State Entry Simulation halts when a state becomes active.
You will also learn how to examine data values when simulation pauses.
Note If you also set breakpoints at each event broadcast, simulation would
pause at every rising or falling edge of the SWITCH and CLOCK signals. To
keep simulation running at a reasonable pace, leave Event Broadcast
unchecked.
8-9
8 Simulating the Chart
2 Notice the Browse Data option in the menu bar just above the output
display pane of the debugger:
Note The Browse Data option appears grayed out, but becomes active
when simulation pauses at a breakpoint. You will use this option in
“Simulating the Air Controller Chart” on page 8-11.
8-10
Simulating the Air Controller Chart
• Parses the chart for state inconsistency errors, like those mentioned in
“Preparing Charts for Simulation” on page 8-3.
• Generates C code that represents the behavior of the chart
• Builds the generated code into an executable program for the simulation
target, called an sfun target
• Creates a directory called sfprj in the directory where the chart resides to
store the generated files that make up the sfun target
• Creates a MEX (MATLAB executable) file that corresponds to the C source
file
The MATLAB command line displays status messages during each of these
processes. You should see the following messages in your MATLAB Command
Window, indicating a successful build:
For more information, see “Building Targets” in the Stateflow User’s Guide.
During simulation, you will change breakpoints and observe data values
when execution pauses. Follow these steps:
1 In Stage6Simulate, open the Scope block. Position the Scope block, Air
Controller chart, and debugger so all are visible on your desktop.
8-11
8 Simulating the Chart
After Stateflow finishes building the simulation target, the Stateflow chart
appears with a gray background, indicating that simulation has begun.
Simulation continues until it reaches the first breakpoint, when the Air
Controller chart wakes up. Notice that the status panel at the top of the
debugger provides a snapshot of simulation activities at the breakpoint.
3 Click the down arrow to the right of the Browse Data option and select
Watched Data (Current Chart) from the submenu.
By selecting this option, you will be able to examine the values of the
input temp and output airflow. Recall that you configured these objects
as data to be watched in the debugger in the exercise “Defining the Inputs
and Outputs” on page 3-10.
8-12
Simulating the Air Controller Chart
Tip You can also view data values from the MATLAB command line at
simulation breakpoints. Here’s how to do it:
a When simulation pauses at a breakpoint, click in the MATLAB command
line and press the Enter key.
4 Scroll down in the output display pane of the debugger to view the values
of temp and airflow.
Note that temp = 70 (below the threshold for turning on FAN1) and airflow
= 0 (indicating that no fans are running).
8-13
8 Simulating the Chart
The default transition activates PowerOff after the chart wakes up.
8-14
Simulating the Air Controller Chart
8-15
8 Simulating the Chart
Note in the output display pane of the debugger that temp has risen to over
157 degrees. The Scope displays the temperature pattern:
8-16
Simulating the Air Controller Chart
Notice that FAN1 continues to cycle on and off as temp fluctuates between
119 and 120 degrees until power cycles off at 500 seconds. After power
cycles off, the fans stop running and temp begins to rise unchecked until
simulation reaches stop time at 600 seconds.
8-17
8 Simulating the Chart
Note This display should look the same as the Scope after running the
prebuilt model in “Running the Model” on page 2-11.
Where to go next. Now you are ready to begin phase 7 of the workflow:
Chapter 9, “Debugging the Chart”.
8-18
9
2 6
Define the states Simulate
for modeling each the chart
mode of operation
1 3 5 7
Define the Define Decide how to Debug
interface state actions trigger the chart the chart
to Simulink and variables
4
Define the
transitions
between states
You have entered phase 7 of a basic workflow for building a Stateflow chart:
debugging the chart. In Chapter 8, “Simulating the Chart”, you learned how to
use the debugger for setting breakpoints and observing data. In this chapter,
you will learn how Stateflow detects errors and provides diagnostic assistance.
9-2
Debugging State Inconsistencies
5 Save the chart, and then build it by clicking the Build icon:
9-3
9 Debugging the Chart
Note The state number in your dialog display may differ from the one
pictured above.
9-4
Debugging State Inconsistencies
This time the chart builds successfully without parser or code generation
errors.
9 Save Stage7Debug, and leave Air Controller open for the next exercise.
9-5
9 Debugging the Chart
1 In the Air Controller chart, modify the during action in the SpeedValue
state by adding 1 to the computed value, as follows:
Recall that in “Defining the Inputs and Outputs” on page 3-10, you set
a limit range of 0 to 2 for airflow. By adding 1 to the computation, the
value of airflow will exceed the upper limit of this range when two fans
are running.
4 Start simulation.
9-6
Debugging Data Range Violations
5 To isolate the problem, double-click the last line in the status panel at
the bottom of the dialog box:
The Model Explorer opens on your desktop, allowing you to view the
properties of airflow in the right, read-only pane (read-only because
simulation is running).
9-7
9 Debugging the Chart
6 Click the Value Attributes tab and check the limit range for airflow:
airflow = 3
8 Stop simulation.
9 Restore the during action to its previous code, and then save and rebuild
the model.
9-8
Debugging Data Range Violations
9-9
9 Debugging the Chart
9-10
Index
A
Index of parallel (AND) states 4-14
animation
of Stateflow charts 8-6 F
finite-state machines
C modeling in Stateflow 1-2
code generation
Stateflow and 1-3 G
compiler
guarding transitions 6-3
for target 1-10
conditions 2-5
for guarding transitions 6-11 I
installation
D product dependencies for Stateflow 1-10
required software for Stateflow 1-9
debugging
Stateflow 1-9
data range violations 9-6
introduction to Stateflow 1-1
setting breakpoints 8-9
state inconsistencies 9-2
decomposition L
of states 4-6 laptop computer with Stateflow 1-10
setting 4-11 license
default transitions 2-4 6-3 for Stateflow 1-9
adding to Stateflow charts 6-8
defining interface between Stateflow and
Simulink M
design considerations 3-2 models
during actions 5-6 running 2-11
E P
edge-triggered events 7-3 parallel (AND) states 2-3 4-10
connecting to input signals 7-4 explicit ordering of 4-14
entry actions 5-5
event-driven systems
R
modeling in Stateflow 1-2
events 2-5 related products
for guarding transitions 6-13 for Stateflow 1-11
exclusive (OR) states 2-3 running models 2-11
execution order
Index-1
Index
Index-2