В этом примере вы используете 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 больше не существует.
Удалите любые пунктирные сигнальные линии из своей модели.
Ваша новая модель выглядит примерно так:
Если вы симулируете новую модель, результаты совпадают с теми из первоначального проекта.