To model systems that switch between periodic or continuous time dynamics, use Simulink® based states. Simulink based states are not supported in standalone Stateflow® charts in MATLAB®. For more information, see Simulink Subsystems as States.
You can read and write the state of blocks within your Simulink based states in transition actions of your Stateflow chart. You can read and write the state of blocks textually on the chart transitions or by using Simulink State Reader and State Writer blocks.
This Stateflow chart models a person moving
through the stages of pole vaulting. The first stage is the approach run of the vaulter,
which is modeled by the Simulink based state
Run_up. In the second stage, the vaulter
plants the pole and takes off, which is modeled by the Simulink based state
Take_off. The final stage happens when the
vaulter clears the bar and releases the pole, which is modeled by the Simulink based state
Fly are easier to model by
using Cartesian coordinates. The state
Take_off is easer to model by
using polar coordinates. The Simulink functions
are used to switch from one coordinate system to another. For more details on this
chart, see Model a Pole Vaulter by Using Simulink Based States.
This subsystem is contained within the Simulink based state
Run_up. For the transition
Take_off to occur, the
position of the pole vaulter along the x-axis,
p(1), must be
By setting the State Name of the integrator block
'p', you can textually access the state of this block from
your Stateflow chart. To access the state of the integrator block in the transition
[Run_up.p(1)> -4]. When this condition becomes
true, the transition is taken and the active state becomes
In the Symbols pane, you can see that the state
under the state
Stateflow uses State Reader and State Writer blocks to connect the subsystems within a Simulink based state to other Simulink subsystems in your model. State Reader and State Writer blocks display the name of the state owner block that they are connected to. Conversely, the state owner block displays a tag indicating a link to a State Reader or a State Writer block. If you click the label above the tag, a list opens with a link for navigating to the State Writer block.
The following subsystem is contained within the Simulink function
InitTakeOff. The function uses
State Reader blocks to connect to the state
Run_up and reads
v. The function then converts the Cartesian values for
the position of the pole vaulter and velocity into polar coordinates,
These polar coordinates are then accessed by using state owner blocks in the
When the transition action occurs, the State Reader blocks in
InitTakeOff read the state of their state owner blocks.
Once the Simulink function finishes executing, the State Writer
blocks write to the state owner blocks in the Simulink based state
To connect a State Reader or a State Writer block to an owner block within a Simulink subsystem:
To open the properties, double-click the State Reader.
In the State Owner Selector Tree, navigate to the
block that you want to be the state owner block. In this example, by
Position, you connect the State
Reader block to the integrator
in the state
By connecting the State Reader block to the
Position integrator block, this Simulink function can use the state of the integrator
Position to execute.