Represent Operating Modes by Using States

A state describes an operating mode of a reactive system. In a
Stateflow® chart, states are used for sequential design to create state transition
diagrams.

States can be active or inactive. The activity or inactivity of a state can change
depending on events and conditions. The occurrence of an event drives the execution of
the state transition diagram by making states become active or inactive. For more
information, see States.

Create a State

You create states by drawing them in the editor for a particular chart (block).
Follow these steps:

Select the State tool:

Move your pointer into the drawing area.

In the drawing area, the pointer becomes state-shaped (rectangular with
oval corners).

Click in a particular location to create a state.

The created state appears with a question mark (?)
label in its upper left-hand corner.

Click the question mark.

A text cursor appears in place of the question mark.

Enter a name for the state and click outside of the
state when finished.

The label for a state specifies its required name and optional actions. See Label States for more detail.

Move and Resize States

To move a state, do the following:

Click and drag the state.

Release it in a new position.

To resize a state, do the following:

Place your pointer over a corner of the state.

When your pointer is over a corner, it appears as a double-ended arrow (PC
only; pointer appearance varies with other platforms).

Click and drag the state's corner to resize the state
and release the left mouse button.

Create Substates and Superstates

A substate is a state that can be active only when another
state, called its parent, is active. States that have substates are known as
superstates. To create a substate, click the State tool
and drag a new state into the state you want to be the superstate. A Stateflow chart creates the substate in the specified parent state. You can nest
states in this way to any depth. To change the parentage of a substate, drag it from
its current parent in the chart and drop it in its new parent.

Note

A parent state must be graphically large enough to accommodate all its
substates. You might need to resize a parent state before dragging a new
substate into it. You can bypass the need for a state of large graphical size by
declaring a superstate to be a subchart. See Encapsulate Modal Logic by Using Subcharts for
details.

Group States

When to Group a State

Group a state to move all graphical objects inside a state together. When you
group a state, the chart treats the state and its contents as a single graphical
unit. This behavior simplifies editing of a chart. For example, moving a grouped
state moves all substates and functions inside that state.

How to Group a State

You can group a state by right-clicking it and then selecting Group & Subchart > Group in the context menu. The state appears shaded in gray to indicate
that it is now grouped.

When to Ungroup a State

You must ungroup a state before performing these actions:

Selecting objects inside the state

Moving other graphical objects into the state

If you try to move objects such as states and graphical functions into
a grouped state, you see an invalid intersection error message. Also,
the objects with an invalid intersection have a red border.

How to Ungroup a State

You can ungroup a state by right-clicking it and then clearing Group & Subchart > Group in the context menu. The background of the state no longer appears
gray.

Specify Substate Decomposition

You specify whether a superstate contains parallel (AND) states or exclusive (OR)
states by setting its decomposition. A state whose substates are all active when it
is active has parallel (AND) decomposition. A state in which only one substate is
active when it is active has exclusive (OR) decomposition. An empty state's
decomposition is exclusive.

To alter a state's decomposition, select the state, right-click to display the
state's Decomposition context menu, and select OR (Exclusive) or AND
(Parallel) from the menu.

You can also specify the state decomposition of a chart. In this case, the
Stateflow chart treats its top-level states as substates. The chart creates
states with exclusive decomposition. To specify a chart's decomposition, deselect
any selected objects, right-click to display the chart's
Decomposition context menu, and select OR (Exclusive) or AND
(Parallel) from the menu.

The appearance of the substates indicates the decomposition of their superstate.
Exclusive substates have solid borders, parallel substates, dashed borders. A
parallel substate also contains a number in its upper right corner. The number
indicates the activation order of the substate relative to its sibling
substates.

Specify Activation Order for Parallel States

You can specify activation order by using one of two methods: explicit or implicit
ordering.

By default, when you create a new Stateflow chart, explicit ordering applies. In
this case, you specify the activation order on a state-by-state
basis.

You can also override explicit ordering by letting the chart order
parallel states based on location. This mode is known as implicit
ordering.

The label for the state, which includes the name of the
state and its associated actions. See Label States.

Properties You Can Set in the Logging Pane

The Logging pane of the State properties dialog box
appears as shown.

You can set these properties in the Logging pane.

Property

Description

Log self activity

Saves the self activity value to the MATLAB® workspace during simulation.

Test point

Designates the state as a test point that can be
monitored with a floating scope during model simulation. You
can also log test point values into MATLAB workspace objects. See Monitor Test Points in Stateflow Charts.

Logging name

Specifies the name associated with the logged self
activity. Simulink® software uses the signal name as its logging
name by default. To specify a custom logging name, select
Custom from the list box and
enter the new name in the adjacent edit
field.

Limit data points to
last

Limits the self activity logged to the most recent
samples.

Decimation

Limits self activity logged by skipping samples. For
example, a decimation factor of 2 saves every other
sample.

Properties You Can Set in the Documentation Pane

The Documentation pane of the State properties dialog box
appears as shown.

You can set these properties in the Documentation
pane.

Property

Description

Description

Textual description or comment.

Document link

Enter a URL address or a general MATLAB command. Examples are
www.mathworks.com,
mailto:email_address, and
edit
/spec/data/speed.txt.

Label States

The label for a state specifies its required name for the state and the optional
actions executed when the state is entered, exited, or receives an event while it is
active.

Actions executed when a particular state is entered as the
result of a transition taken to that state

during or
du

during actions

Actions that are executed when a state receives an event
while it is active with no valid transition away from the
state

exit or
ex

exit actions

Actions executed when a state is exited as the result of a
transition taken away from the state

bind

data or
events

Binds the specified data or events to this state. Bound
data can be changed only by this state or its children, but can
be read by other states. Bound events can be broadcast only by
this state or its children.

on

event_or_message_name

and

on
event_name actions

A specified event or
message

and

Actions executed when a
state is active and the specified event occurs or message is
present.

Enter the Name

Initially, a state's label is empty. The Stateflow chart indicates this by displaying a ? in the state's label
position (upper left corner). Begin labeling the state by entering a name for
the state with the following steps:

Click the state.

The state turns to its highlight color and a question mark character
appears in the upper left-hand corner of the state.

Click the ? to edit the
label.

An editing cursor appears. You are now free to type a label.

Enter the state's name in the first line of the state's label. Names
are case sensitive. To avoid naming conflicts, do not assign the same
name to sibling states. However, you can assign the same name to states
that do not share the same parent.

After labeling the state, click outside it. Otherwise, continue
entering actions. To reedit the label, click the label text near the
character position you want to edit.

Enter Actions

After entering the name of the state in the label, you can enter actions for
any of the following action types:

Entry Actions — begin on a new
line with the keyword entry or en,
followed by a colon, followed by one or more action statements on one or
more lines. To separate multiple actions on the same line, use a comma
or a semicolon.

You can begin entry actions on the same line as the state's name. In
this case, begin the entry action with a forward slash
(/) instead of the entry keyword.

Exit Actions — begin on a new
line with the keyword exit or ex,
followed by a colon, followed by one or more action statements on one or
more lines. To separate multiple actions on the same line, use a comma
or a semicolon.

During Actions — begin on a
new line with the keyword during or
du, followed by a colon, followed by one or more
action statements on one or more lines. To separate multiple actions on
the same line, use a comma or a semicolon.

Bind Actions — begin on a new
line with the keyword bind followed by a colon,
followed by one or more data or events on one or more lines. To separate
multiple actions on the same line, use a comma or a semicolon.

On Actions — begin with the
keyword on, followed by a space and the name of an
event or message, followed by a colon, followed by one or more action
statements on one or more lines, for example

on ev1: exit();

To separate multiple actions on the same line, use a comma or a
semicolon. If you want different events to trigger different actions,
enter multiple on blocks in the state label. Each
block specifies the action for a specific event or message, for
example:

on ev1: action1(); on ev2: action2();

The execution of the actions you enter for a state is dependent only on their
action type, and not the order in which you enter actions in the label. If you
do not specify the action type explicitly for a statement,
the chart treats that statement as an entry action.

This website uses cookies to improve your user experience, personalize content and ads, and analyze website traffic. By continuing to use this website, you consent to our use of cookies. Please see our Privacy Policy to learn more about cookies and how to change your settings.