Main Content

Create Charts by Using the Stateflow API

This example shows how to create a Stateflow® chart by using the Stateflow application programming interface (API). The Stateflow API is a tool to create or change Stateflow charts through MATLAB® commands. For more information, see Overview of the Stateflow API.

Create a Stateflow Chart

This Stateflow chart presents the logic underlying a half-wave rectifier. The chart contains two states labeled On and Off. In the On state, the chart output signal y is equal to the input x. In the Off state, the output signal is set to zero. When the input signal crosses some threshold t0, the chart transitions between these states. The actions in each state update the value of y at each time step of the simulation.

Stateflow chart with two states.

For more information on simulating this chart, see Construct and Run a Stateflow Chart.

1. Create a Simulink® model called rectify that contains an empty Stateflow Chart block.

sfnew rectify

2. Access the Stateflow.Chart object that corresponds to the chart in your model by calling the find function. Use the function sfroot to access the Simulink.Root object, which is the parent of all objects in the Stateflow API.

ch = find(sfroot,"-isa","Stateflow.Chart", ...
    Path="rectify/Chart");

3. Open the chart in the Stateflow Editor by calling the view function.

view(ch);

4. Change the action language by modifying the ActionLanguage property of the chart.

ch.ActionLanguage = "C";

Add States

To create a Stateflow API object as the child of a parent object, use the parent object as the input argument to a function that creates the child object. For more information, see Create and Delete Stateflow Objects.

1. Call the Stateflow.State function to add a state to the chart.

s1 = Stateflow.State(ch);

2. Adjust the position of the state by changing the Position property of the corresponding State object. Specify the new position as a four-element vector in which the first two values are the (x,y) coordinates of the upper-left corner of the state and the last two values are the width and height of the state.

s1.Position = [30 30 90 60];

3. Specify the name and label for the state by changing the LabelString property, as described in Specify Labels in States and Transitions Programmatically.

s1.LabelString = "On"+newline+"y = x;";

Chart with one state, On.

4. Create a second state. Adjust its position and specify its name and label.

s2 = Stateflow.State(ch);
s2.Position = [230 30 90 60];
s2.LabelString = "Off"+newline+"y = 0;";

Chart with two states, On and Off.

Add Transitions

When you add a transition, you specify its source and destination by modifying its Source and Destination properties. For a default transition, you specify a destination but no source.

1. Call the Stateflow.Transition function to add a transition to the chart.

t1 = Stateflow.Transition(ch);

2. Set the transition source and destination.

t1.Source = s1;
t1.Destination = s2;

3. Adjust the position of the transition by modifying its SourceOClock property.

t1.SourceOClock = 2.1;

4. Specify the transition label and its position by changing the LabelString and LabelPosition properties.

t1.LabelString = "[x<t0]";
t1.LabelPosition= [159 23 31 16];

Chart with the two states joined by a transition.

5. Create a second transition. Specify its source, destination, and label.

t2 = Stateflow.Transition(ch);
t2.Source = s2;
t2.Destination = s1;
t2.SourceOClock = 8.1;
t2.LabelString = "[x>=t0]";
t2.LabelPosition= [155 81 38 16];

Charts with the two states joined by two transitions.

6. Add a default transition to the state On. To make a vertical transition, modify the values of the SourceEndpoint and Midpoint properties. For more information, see Add a Default Transition.

t0 = Stateflow.Transition(ch);
t0.Destination = s1;
t0.DestinationOClock = 0;
t0.SourceEndpoint = t0.DestinationEndpoint-[0 30];
t0.Midpoint = t0.DestinationEndpoint-[0 15];

Chart with a default transition connected to state On.

Add Data

Before you can simulate your chart, you must define each data symbol that you use in the chart and specify its scope and type.

1. Call the Stateflow.Data function to add a data object that represents the input to the chart.

x = Stateflow.Data(ch);

2. Specify the name of the data object as x and its scope as Input.

x.Name = "x";
x.Scope = "Input";

3. To specify that the input x has type double, set its Props.Type.Method property to Built-in. The default built-in data type is double.

x.Props.Type.Method = "Built-in";
x.DataType
ans = 
'double'

4. Add a data object that represents the output for the chart. Specify its name as y and its scope as Output.

y = Stateflow.Data(ch);
y.Name = "y";
y.Scope = "Output";

5. To specify that the output y has type single, set its Props.Type.Method property to Built-in and its DataType property to single.

y.Props.Type.Method = "Built-in";
y.DataType = "single";
y.DataType
ans = 
'single'

6. Add a data object that represents the transition threshold in the chart. Specify its name as t0 and its scope as Constant. Set its initial value to 0.

t0 = Stateflow.Data(ch);
t0.Name = "t0";
t0.Scope = "Constant";
t0.Props.InitialValue = "0";

7. To specify that the threshold t0 has a fixed-point data type, set its Props.Type.Method property to Fixed-point. Then specify the values of the Props.Type properties that apply to fixed-point data.

t0.Props.Type.Method = "Fixed point";
t0.Props.Type.Signed = true;
t0.Props.Type.WordLength = "5";
t0.Props.Type.Fixpt.ScalingMode = "Binary point";
t0.Props.Type.Fixpt.FractionLength = "2";
t0.DataType
ans = 
'fixdt(1,5,2)'

Save and Simulate Your Chart

To save the model that contains your completed chart, call the sfsave function.

sfsave

To simulate the chart, connect it to other blocks in the Simulink model through input and output ports.

In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

For more information, see Simulate the Model.

See Also

Blocks

Functions

Objects

Related Topics