A state transition table is an alternative way of expressing sequential modal logic. Instead of drawing states and transitions graphically in a Stateflow® chart, use state transition tables to express the modal logic in tabular format. State transition tables are supported only as blocks in a Simulink® model. For more information, see State Transition Tables in Stateflow.
This example shows how to model a bang-bang controller for temperature regulation of a boiler, using a state transition table. The controller must turn the boiler on and off to meet the following design requirements:
High temperature cannot exceed 25 degrees Celsius.
Low temperature cannot fall below 23 degrees Celsius.
Steady-state operation requires a warm-up period of 10 seconds.
When the alarm signal sounds, the boiler must shut down immediately.
When the all-clear signal sounds, the boiler can turn on again.
You can identify the operating modes and data requirements for the bang-bang controller based on its design requirements.
The high-level operating modes for the boiler are:
Normal operation, when no alarm signal sounds.
Alarm state, during an alarm signal.
During normal operation, the boiler can be in one of three states:
Off, when the temperature is above 25 degrees Celsius.
Warm-up, during the first 10 seconds of being on.
On, steady-state after 10 seconds of warm-up, when the temperature is below 23 degrees Celsius.
The bang-bang controller requires the following data.
Scope | Description | Variable Name |
---|---|---|
Input | High temperature set point | reference_high |
Input | Low temperature set point | reference_low |
Input | Alarm indicator | ALARM |
Input | All-clear indicator | CLEAR |
Input | Current temperature of the boiler | temp |
Local | Indicator that the boiler completed warm-up | doneWarmup |
Output | Command to set the boiler mode: off, warm-up, or on | boiler_cmd |
To build the bang-bang controller model yourself using a state transition table, follow these exercises. Otherwise, you can open the completed model.
To represent the bang-bang controller, use a state transition table. Compared to a graphical state transition diagram, the state transition table is a compact way to represent modal logic that involves transitions between neighboring states. For this example, use MATLAB® as your action language.
Open the partially built boiler plant model.
This model contains all required Simulink blocks, except for the bang-bang controller.
Delete the five output ports and the single input port.
Open the Library Browser. In the Simulation tab, click Library Browser.
In the left pane of the Library Browser, select the Stateflow library, then drag a State Transition Table block from the right pane into your boiler model.
Your model looks like this model.
Close the Library Browser.
Now you are ready to add states and hierarchy to the state transition table.
To represent the operating modes of the boiler, add states and hierarchy to the state transition table.
Open the state transition table.
Represent the high-level operating modes: normal and alarm.
Double-click state1
and rename it
Normal
.
Double-click state2
and rename it
Alarm
.
Represent the three states of normal operation as substates of
Normal
:
Right-click the Normal
state, select Insert Row > Child State Row, and name the new state Off
.
Repeat step a two more times to
create the child states Warmup
and
On
, in that order.
By default, when there is ambiguity, the top exclusive (OR) state at every
level of hierarchy becomes active first. For this reason, the
Normal
and Off
states appear with
default transitions. This configuration meets the design requirements for
this model. To set a default state, right-click the state and select
Set to default.
Your state transition table looks like this table.
Now you are ready to specify actions for each state.
To describe the behavior that occurs in each state, specify state actions in the
table. In this exercise, you initialize modes of operation as the boiler enters
normal and alarm states, using the variables boiler_cmd
and
doneWarmup
(described in Data Requirements).
In the following states, click after the state name, press Enter, and type the specified entry actions.
In State: | Type: | Resulting Behavior |
---|---|---|
Off |
entry: boiler_cmd = 0; doneWarmup = false; | Turns off the boiler and indicates that the boiler has not warmed up. |
Warmup |
entry: boiler_cmd = 2; | Starts warming up the boiler. |
On |
entry: boiler_cmd = 1; | Turns on the boiler. |
Alarm |
entry: boiler_cmd = 0; | Turns off the boiler. |
Save the state transition table.
Your state transition table looks like this table.
Now you are ready to specify the conditions and actions for transitioning from one state to another state.
To indicate when to change from one operating mode to another, specify transition conditions and actions in the table. In this exercise, you construct statements using variables described in Data Requirements.
In the Normal
state row, enter:
if |
---|
[ALARM] |
Alarm |
During simulation:
When first entered, the chart activates the
Normal
state.
At each time step, normal operation cycles through the
Off
, Warmup
, and
On
states until the ALARM condition is
true.
When the ALARM condition is true, the boiler transitions to
the Alarm
state and shuts down
immediately.
In the Off
state row, enter:
if |
---|
[temp <= reference_low] |
Warmup |
During simulation, when the current temperature of the boiler drops below 23 degrees Celsius, the boiler starts to warm up.
In the Warmup
state row, enter:
if | else-if |
---|---|
[doneWarmup] | [after(10, sec)] |
{doneWarmup = true;} | |
On | On |
During simulation, the boiler warms up for 10 seconds and then
transitions to the On
state.
In the On
state row, enter:
if |
---|
[temp >=
reference_high] |
Off |
During simulation, when the current temperature of the boiler rises above 25 degrees Celsius, the boiler shuts off.
In the Alarm
state row, enter:
if |
---|
[CLEAR] |
Normal |
During simulation, when the all-clear condition is true, the boiler returns to normal mode.
Save the state transition table.
Your state transition table looks like this table.
Now you are ready to add data definitions using the Symbol Wizard.
When you create a state transition table that uses MATLAB syntax, there are language requirements for C/C++ code generation. One of these requirements is that you define the size, type, and complexity of all MATLAB variables so that their properties can be determined at compile time. Even though you have not yet explicitly defined the data in your state transition table, you can use the Symbol Wizard. During simulation, the Symbol Wizard alerts you to unresolved symbols, infers their properties, and adds the missing data to your table.
In the Simulink model , select Run.
Two dialog boxes appear:
The Diagnostic Viewer indicates that you have unresolved symbols in the state transition table.
The Symbol Wizard attempts to resolve the missing data.
The wizard correctly infers the scope of all data except for
the inputs ALARM and CLEAR
.
In the Symbol Wizard, correct the scopes of ALARM
and CLEAR
by selecting
Input from their Scope drop-down
lists.
When the Model Explorer opens, verify that the Symbol Wizard added all required data definitions correctly.
Some of the inputs are assigned to the wrong ports.
In the Contents pane of the Model Explorer, reassign input ports as follows:
Assign: | To Port: |
---|---|
reference_low | 2 |
reference_high | 1 |
temp | 5 |
ALARM | 3 |
CLEAR | 4 |
Save the state transition table.
Close the Diagnostic Viewer and the Model Explorer.
In the Simulink model, the inputs and outputs that you defined appear in the State Transition Table block. Now you are ready to connect these inputs and outputs to the Simulink signals and run the model.
In the Simulink model, connect the state transition table to the Simulink inputs and outputs:
Save the model.
Reopen your state transition table.
Start the simulation by selecting Run.
As the simulation runs, you can watch the animation in the state transition table activate different states.
The following output appears in the Scope block.
When performing interactive debugging, you can set breakpoints on different states and view the data values at different points in the simulation. For more information about debugging, see Debugging Stateflow Charts.
Stateflow automatically generates a read-only graphical representation of the state transition table you created.
In the Debug tab, click Show Auto Chart.
The top-level state transition diagram:
The Normal
state appears as a subchart.
To view the states and transitions the chart contains, double-click the
Normal
state.