In this tutorial, you use a Simulink® function in a Stateflow® chart to improve the design of a model named
Simulink functions are not supported in standalone Stateflow charts in MATLAB®.
old_sf_car model contains a function-call subsystem named
Threshold Calculation and a Stateflow chart named
When running this model, first the chart broadcasts the output event
CALC_TH to trigger the function-call subsystem. The subsystem
interpolates two values for the
shift_logic chart. Next, the chart
broadcasts the output event
CALC_TH to trigger the function-call subsystem.
Lastly, the subsystem outputs (
to the chart as inputs.
You can replace a function-call subsystem with a Simulink function in a chart when:
The subsystem performs calculations required by the chart.
Other blocks in the model do not need access to the subsystem outputs.
The sections that follow describe how to replace a function-call subsystem in a Simulink model with a Simulink function in a Stateflow chart. This procedure reduces the number of objects in the model while retaining the same simulation results.
|1||Open the model.||Open the Model|
|2||Move the contents of the function-call subsystem into a Simulink function in the chart.||Add a Simulink Function to the Chart|
|3||Change the scope of specific chart-level data to
||Change the Scope of Chart Data|
|4||Replace the event broadcast with a function call.||Update State Action in the Chart|
|5||Verify that function inputs and outputs are defined.||Add Data to the Chart|
|6||Remove unused items in the model.||Remove Unused Items in the Model|
To skip the conversion steps, open the model
Open the model
old_sf_car. If you
simulate the model, you see these results in the two scopes.
Follow these steps to add a Simulink function to the shift_logic chart.
In the Simulink model, right-click the Threshold Calculation block in the lower left corner and select Cut from the context menu.
Open the shift_logic chart.
In the chart, right-click below
selection_state and select
Paste from the context menu.
Expand the new Simulink function so that the signature fits inside the function box.
To change the font size of a function, right-click the function box and select a new size from the Font Size menu.
Expand the border of
selection_state to include the new
The function resides in this state instead of the chart level because no other
state in the chart requires the function outputs
down_th. See Bind a Simulink Function to a State.
Rename the Simulink function from
calc_threshold by entering
[down_th, up_th] =
calc_threshold(gear, throttle) in the function box.
In the Model Explorer, change the scope of chart-level data
Local because calculations
for those data now occur inside the chart.
In the Stateflow Editor, change the
during action in
selection_state to call the Simulink function
during: [down_th, up_th] = calc_threshold(gear, throttle);
Because the function
throttle as an input, you must define that data as a chart input.
(For details, see Add Stateflow Data.)
Add input data
throttle to the chart with a
Port property of 1.
Using port 1 prevents signal lines from overlapping in the Simulink model.
In the Simulink model, add a signal line for
throttle to an input to
the Engine block and to an input to the shift_logic chart.
In the Model Explorer, delete the function-call output event
CALC_TH because the Threshold Calculation block no
Delete any dashed signal lines from your model.
Your new model looks something like this:
If you simulate the new model, the results match those of the original design.