The goal of this tutorial is to use a Simulink® function
in a Stateflow® chart to improve the design of a model named
old_sf_car model contains a function-call
subsystem named Threshold Calculation and a Stateflow chart
named shift_logic. The two blocks interact as follows:
The chart broadcasts the output event
trigger the function-call subsystem.
The subsystem uses lookup tables to interpolate two values for the shift_logic chart.
The subsystem outputs (
feed directly into the chart as inputs.
No other blocks in the model access the subsystem outputs.
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 and access the new model directly,
sf_car at the MATLAB® command prompt.
old_sf_car at the MATLAB command
prompt. If you simulate the model, you see these results in the two
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
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
include the new function.
The function resides in this state instead of the chart level
because no other state in the chart requires the function outputs
See How a Simulink Function Binds to a State.
Rename the Simulink function from
[down_th, up_th] = calc_threshold(gear, throttle) in
the function box.
In the Model Explorer, change the scope of chart-level data
calculations for those data now occur inside the chart.
In the Stateflow Editor, change the
selection_state to call the Simulink function
[down_th, up_th] = calc_threshold(gear, throttle);
Because the function
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
the inport of the Engine block and the inport of the shift_logic chart.
In the Model Explorer, delete the function-call output
CALC_TH because the Threshold Calculation block
no longer exists.
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.