В этом примере вы используете Simulink® функция в Stateflow® стройте диаграмму, чтобы улучшить проект модели под названием old_sf_car.
Функции Simulink не поддерживаются в автономных диаграммах Stateflow в MATLAB®.

old_sf_car модель содержит подсистему вызова функций под названием Threshold Calculation и диаграмма Stateflow под названием shift_logic.
При выполнении этой модели сначала график широковещательно передает выходное событие CALC_TH инициировать подсистему вызова функций. Подсистема интерполирует два значения для shift_logic график. Затем график широковещательно передает выходное событие CALC_TH инициировать подсистему вызова функций. Наконец, подсистема выходные параметры (up_th и down_th) возвратитесь к графику как входные параметры.
Можно заменить подсистему вызова функций на функцию Simulink в графике когда:
Подсистема выполняет вычисления, требуемые графиком.
Другим блокам в модели не нужен доступ к подсистеме выходные параметры.
Разделы, которые следуют, описывают, как заменить подсистему вызова функций в модели Simulink с функцией Simulink в диаграмме Stateflow. Эта процедура сокращает количество объектов в модели при сохранении тех же результатов симуляции.
| Шаг | Задача | Ссылка |
|---|---|---|
| 1 | Откройте модель. | Откройте модель |
| 2 | Переместите содержимое подсистемы вызова функций в функцию Simulink в графике. | Добавьте функцию Simulink в график |
| 3 | Измените осциллограф определенных данных уровня графика к Local. | Измените осциллограф данных о графике |
| 4 | Замените широковещательную передачу события на вызов функции. | Обновите состояние активности в графике |
| 5 | Проверьте, что вводы и выводы этой функции заданы. | Добавьте данные в график |
| 6 | Удалите неиспользованные элементы в модели. | Удалите неиспользованные элементы в модели |
Примечание
Чтобы пропустить шаги преобразования, откройте модель sf_car.
Откройте модель old_sf_car. Если вы симулируете модель, вы видите эти результаты в двух осциллографах.


Выполните эти шаги, чтобы добавить функцию Simulink в график shift_logic.
В модели Simulink щелкните правой кнопкой по блоку Threshold Calculation по левому нижнему углу и выберите Cut из контекстного меню.

Откройте график shift_logic.
В графике щелкните правой кнопкой ниже selection_state и выберите Paste из контекстного меню.
Расширьте новую функцию Simulink так, чтобы подпись соответствовала в функциональном поле.

Совет
Чтобы изменить размер шрифта функции, щелкните правой кнопкой по функциональному полю и выберите новый размер из меню Font Size.
Расширьте границу selection_state включать новую функцию.

Примечание
Функция находится в этом состоянии вместо уровня графика, потому что никакое другое состояние в графике не требует функциональных выходных параметров up_th и down_th. Смотрите связывают функцию Simulink с состоянием.
Переименуйте функцию Simulink от Threshold_Calculation к calc_threshold путем ввода [down_th, up_th] = calc_threshold(gear, throttle) в функциональном поле.
В Model Explorer измените область видимости данных уровня графика up_th и down_th к Local потому что вычисления для тех данных теперь происходят в графике.
В редакторе Stateflow измените during действие в selection_state чтобы вызвать Simulink функционируют calc_threshold.
during: [down_th, up_th] = calc_threshold(gear, throttle);

Поскольку функциональный calc_threshold берет throttle как вход, необходимо задать те данные как вход графика. (Для получения дополнительной информации смотрите, Добавляют Данные Stateflow.)
Добавьте входные данные throttle к графику со свойством Port 1.
Используя порт 1 препятствует тому, чтобы сигнальные линии перекрылись в модели Simulink.
В модели Simulink добавьте сигнальную линию для throttle к входу к Блоку двигателя и к входу к графику shift_logic.
В Model Explorer удалите вызов функции выходное событие CALC_TH потому что блок Threshold Calculation больше не существует.
Удалите любые пунктирные сигнальные линии из своей модели.
Ваша новая модель выглядит примерно так:

Если вы симулируете новую модель, результаты совпадают с теми из первоначального проекта.