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

The 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 к графику Temporal Logic Scheduler.
В модели Simulink щелкните правой кнопкой мыши блок A1 в правом нижнем углу и выберите Cut из контекстного меню.

Откройте график Temporal Logic Scheduler.
На графике щелкните правой кнопкой мыши вне любых состояний и выберите 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, щелкните правой кнопкой мыши и выберите Rotate & Flip > Flip Block из контекстного меню.
В Model Explorer удалите выходные события A1, A2, и A3 и входных данных u2 поскольку подсистемы вызова функций больше не существуют.
Удалите все штриховые сигнальные линии из вашей модели.
Ваша новая модель выглядит примерно так:

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