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

old_sf_car модель содержит подсистему вызова функций под названием Threshold Calculation и диаграмму Stateflow под названием shift_logic. Два блока взаимодействуют можно следующим образом:
График широковещательно передает выходное событие CALC_TH инициировать подсистему вызова функций.
Подсистема использует интерполяционные таблицы, чтобы интерполировать два значения для графика shift_logic.
Подсистема выходные параметры (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 больше не существует.
Удалите любые пунктирные сигнальные линии из своей модели.
Ваша новая модель выглядит примерно так:

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