Design Charts with金宝appFunctions
In this tutorial, you use a Simulink®function in a Stateflow®chart to improve the design of a model that contains a function-call subsystem. 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.
Simulink functions are not supported in standalone Stateflow charts in MATLAB®。
Note
To skip the conversion steps, open the modelsf_car
:
openExample("stateflow/AutomaticTransmissionWithActiveStateDataExample")
Open the Model
Open the modelold_sf_car
。这个模型包含了一个函数调用子系统namedThreshold Calculation
and a Stateflow chart namedshift_logic
。
When you run this model, the chart broadcasts the output eventCALC_TH
傅来触发nction-call subsystem. The subsystem interpolates two values for theshift_logic
chart. The subsystem outputs (up_th
anddown_th
) return to the chart as inputs.
After the simulation, the Scope blocks display these results.
Add a金宝appFunction to the Chart
Follow these steps to add a Simulink function to theshift_logicchart.
In the Simulink model, right-click the Threshold Calculation block in the lower left corner and selectCutfrom the context menu.
Open theshift_logicchart.
In the chart, right-click below
selection_state
and selectPastefrom the context menu.Expand the new Simulink function so that the signature fits inside the function box.
Tip
To change the font size of a function, right-click the function box and select a new size from theFont Sizemenu.
Expand the border of
selection_state
to include the new function.Note
The function resides in this state instead of the chart level because no other state in the chart requires the function outputs
up_th
anddown_th
。SeeBind a Simulink Function to a State。Rename the Simulink function from
Threshold_Calculation
tocalc_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 dataup_th
anddown_th
toLocal
because calculations for those data now occur inside the chart.
Update State Action in the Chart
In the Stateflow Editor, change theduring
action inselection_state
to call the Simulink functioncalc_threshold
。
during: [down_th, up_th] = calc_threshold(gear, throttle);
Add Data to the Chart
Because the functioncalc_threshold
takesthrottle
as an input, you must define that data as a chart input. (For details, seeAdd Stateflow Data。)
Add input data
throttle
to the chart with aPortproperty 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 theshift_logicchart.
Remove Unused Items in the Model
In the Model Explorer, delete the function-call output event
CALC_TH
because theThreshold Calculationblock no longer exists.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.