Main Content

Design Charts with Simulink Functions

In this tutorial, you use a Simulink® function in a Stateflow® chart to improve the design of a model named old_sf_car.

Simulink functions are not supported in standalone Stateflow charts in MATLAB®.

The old_sf_car model contains a function-call subsystem named Threshold Calculation and a Stateflow chart named shift_logic.

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 (up_th and down_th) return 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.

Edit a Model to Use a Simulink Function

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.

1Open the model.Open the Model
2Move the contents of the function-call subsystem into a Simulink function in the chart.Add a Simulink Function to the Chart
3Change the scope of specific chart-level data to Local.Change the Scope of Chart Data
4Replace the event broadcast with a function call.Update State Action in the Chart
5Verify that function inputs and outputs are defined.Add Data to the Chart
6Remove unused items in the model.Remove Unused Items in the Model


To skip the conversion steps, open the model sf_car.

Open the Model

Open the model old_sf_car. If you simulate the model, you see these results in the two scopes.

Add a Simulink Function to the Chart

Follow these steps to add a Simulink function to the shift_logic chart.

  1. In the Simulink model, right-click the Threshold Calculation block in the lower left corner and select Cut from the context menu.

  2. Open the shift_logic chart.

  3. In the chart, right-click below selection_state and select Paste from the context menu.

  4. 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.

  5. Expand the border of selection_state to 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 up_th and down_th. See Bind a Simulink Function to a State.

  6. Rename the Simulink function from Threshold_Calculation to calc_threshold by entering [down_th, up_th] = calc_threshold(gear, throttle) in the function box.

Change the Scope of Chart Data

In the Model Explorer, change the scope of chart-level data up_th and down_th to Local because calculations for those data now occur inside the chart.

Update State Action in the Chart

In the Stateflow Editor, change the during action in selection_state to call the Simulink function calc_threshold.

during: [down_th, up_th] = calc_threshold(gear, throttle);

Add Data to the Chart

Because the function calc_threshold takes throttle as an input, you must define that data as a chart input. (For details, see Add Stateflow Data.)

  1. 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.

  2. 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.

Remove Unused Items in the Model

  1. In the Model Explorer, delete the function-call output event CALC_TH because the Threshold Calculation block no longer exists.

  2. Delete any dashed signal lines from your model.

Run the New Model

Your new model looks something like this:

If you simulate the new model, the results match those of the original design.

Related Topics