A Simulink® function is a graphical object that you fill with Simulink blocks and call in the actions of states and transitions. Simulink functions are supported only in Stateflow® charts in Simulink models. For more information, see Reuse Simulink Components in Stateflow Charts.
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
The chart broadcasts the output event
CALC_TH to trigger the
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, 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 between the
inport of the Engine block and the inport of the shift_logic
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.