Simulink® функция является графическим объектом, который вы заполняете блоками Simulink и вызываете в действиях состояний и переходах. Функции Simulink не поддерживаются в автономном Stateflow® графики в MATLAB®. Для получения дополнительной информации смотрите Повторное использование Функции Simulink в диаграммах Stateflow.
Цель этого примера состоит в том, чтобы использовать функции Simulink в диаграмме Stateflow, чтобы улучшить проект модели под названием sf_temporal_logic_scheduler
.
sf_temporal_logic_scheduler
модель содержит диаграмму Stateflow и три подсистемы вызова функций. Эти блоки взаимодействуют можно следующим образом:
График широковещательно передает выходные события A1
, A2
, и A3
инициировать подсистемы вызова функций.
Подсистемы A1, A2 и A3 выполняются на различных уровнях, заданных графиком.
Подсистема выходные параметры питается непосредственно в график.
Никакие другие блоки в доступе модели подсистема выходные параметры.
Можно заменить подсистемы вызова функций на функции Simulink в графике когда:
Подсистемы выполняют вычисления, требуемые графиком.
Другим блокам в модели не нужен доступ к подсистеме выходные параметры.
Разделы, которые следуют, описывают, как заменить блоки подсистемы вызова функций в модели Simulink с функциями Simulink в диаграмме Stateflow. Эта процедура сокращает количество объектов в модели при сохранении тех же результатов симуляции.
Шаг | Задача | Ссылка |
---|---|---|
1 | Откройте модель. | Откройте модель |
2 | Переместите содержимое подсистем вызова функций в функции Simulink в графике. | Добавьте функции Simulink в график |
3 | Измените осциллограф определенных данных уровня графика к Local . | Измените осциллограф данных о графике |
4 | Замените широковещательные сообщения события на вызовы функции. | Обновите состояния активности в графике |
5 | Проверьте, что вводы и выводы этой функции заданы. | Добавьте данные в график |
6 | Удалите неиспользованные элементы в модели. | Удалите неиспользованные элементы в модели |
Примечание
Чтобы пропустить шаги преобразования, можно получить доступ к новой модели непосредственно.
Откройте sf_temporal_logic_scheduler
модель. Если вы симулируете модель, вы видите этот результат в осциллографе.
Для получения дополнительной информации смотрите Подсистемы Расписания, чтобы Выполниться в конкретные моменты времени.
Выполните эти шаги, чтобы добавить функции Simulink во Временный Логический график Планировщика.
В модели Simulink щелкните правой кнопкой по блоку A1 по правому нижнему углу и выберите Cut из контекстного меню.
Откройте Временный Логический график Планировщика.
В графике щелкните правой кнопкой вне любых состояний и выберите Paste из контекстного меню.
Расширьте новую функцию Simulink так, чтобы подпись соответствовала в функциональном поле.
Совет
Чтобы изменить размер шрифта функции, щелкните правой кнопкой по функциональному полю и выберите новый размер из меню Font Size.
Переименуйте функцию Simulink от A1
к f1
путем ввода y = f1(u)
в функциональном поле.
Повторите шаги 1 - 5 для этих случаев:
Копирование содержимого A2 в функцию с именем Simulink f2
.
Копирование содержимого A3 в функцию с именем Simulink f3
.
Примечание
Новые функции находятся на уровне графика потому что оба состояния FastScheduler
и SlowScheduler
потребуйте доступа к функциональным выходным параметрам.
В Model Explorer измените область видимости данных уровня графика y
к Local
потому что вычисление для тех данных теперь происходит в графике.
В редакторе Stateflow можно заменить широковещательные сообщения события в состояниях активности с вызовами функции.
Отредактируйте состояния активности в FastScheduler
и SlowScheduler
вызывать функции Simulink f1
, f2
, и f3
.
В обоих состояниях обновите каждый during
действие можно следующим образом.
du: y = u1-y2;
Для on every
состояния активности FastScheduler
и SlowScheduler
, задайте три данные. (Для получения дополнительной информации смотрите, Добавляют Данные Stateflow.)
Добавьте локальные данные y1
и y2
к графику.
Добавьте выходные данные y3
к графику.
В модели соедините выход для y3
к осциллографу.
Совет
Чтобы инвертировать блок Scope, выберите блок. Затем в панели инструментов, на вкладке Format, нажимают Flip left-right .
В Model Explorer удалите выходные события A1
, A2
, и A3
и входные данные u2
потому что подсистемы вызова функций больше не существуют.
Удалите любые пунктирные сигнальные линии из своей модели.
Ваша новая модель выглядит примерно так:
Если вы симулируете новую модель, результаты совпадают с теми из первоначального проекта.