Функция Simulink® является графическим объектом, который вы заполняете с блоками Simulink и вызываете в действиях состояний и переходах. Функции Simulink поддерживаются только в графиках Stateflow® в моделях Simulink. Для получения дополнительной информации смотрите Повторное использование Компоненты Simulink в диаграммах Stateflow.
Цель этого примера состоит в том, чтобы использовать функцию Simulink в диаграмме Stateflow, чтобы улучшить проект модели под названием old_sf_car
.
Модель old_sf_car
содержит подсистему вызова функций под названием Пороговое Вычисление и диаграмма 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 больше не существует.
Удалите любые пунктирные сигнальные линии из своей модели.
Ваша новая модель выглядит примерно так:
Если вы моделируете новую модель, результаты совпадают с теми из первоначального проекта.