Использование Stateflow® график для предоставления планировщика вызовов функций, где вы можете полностью управлять процессом планирования для периодических (синхронных) или апериодических (асинхронных) последовательностей вызовов.
Создайте новый Simulink® модель.
Добавьте блок Model, который ссылается на модель export-function.
Задайте вызов функции Входы с помощью диаграммы Stateflow.
Задайте входы данных.
Запустите симуляцию.
Чтобы создать модель для этого примера, см. Раздел «Создание модели экспорта функций».
Чтобы открыть завершенную экспериментальную модель, см. ex_export_function_test_model_with_stateflow_chart
.
Ссылка на модель экспорта функций из блока Model позволяет добавлять события вызова функции из диаграммы Stateflow и регистрировать сигналы данных для проверки, не меняя саму модель.
Добавьте блок Model к новой модели Simulink. В Model name поле введите export_function_model
.
Добавьте Outport блоки к портам output_100ms и output_10ms для сохранения данных моделирования в MATLAB.
Добавьте блок Sine Wave, чтобы обеспечить вход данных. Установите Amplitude значение 2
и Sample time к 0.01
. Соедините блок с input_10ms входным портом на блоке Model.
Создайте новую диаграмму Stateflow. Для этого шага требуется лицензия Stateflow.
На вкладке Modeling и из раздела Design выберите Model Explorer.
На панели Model Hierarchy выберите Chart.
Добавьте события вызова функции с выходными портами к графику. В меню выберите Add > Event. В Name поле введите out_100ms
. Из списка Scope выберите Output to Simulink
. Повторите шаг, чтобы создать событие вызова функции и выходной порт для out_10ms
.
Откройте график, дважды кликнув по блоку. Добавьте блок State и стрелу перехода по умолчанию.
Переименуйте состояние в function_call_scheduler
.
Добавляйте периодические вызовы функций каждые 10 и 100 миллисекунд. В блоке состояний введите следующие команды.
on every(10, tick):send(out_10ms); on every(100, tick):send(out_100ms);
Ключевое слово tick
является неявным событием, которое подсчитывает количество шагов симуляции во время send
- явное событие, которое выводит событие вызова функции на выходные порты.
Вы используете экспериментальную модель Simulink только для симуляции. После проверки симуляции сгенерируйте код из модели экспорта функций, а затем интегрируйте экспортированный код функции с внешне закодированным планировщиком.
Добавьте диаграмму Stateflow к своей экспериментальной модели.
Соедините Диаграмму Stateflow выходов с Model входами блока.
Если экспериментальная модель ссылается на модель экспорта функций, существуют некоторые ограничения, чтобы гарантировать согласованность с результатами симуляции.
Для экспериментальной модели:
Вызовы функций к входным портам блока Model должны следовать порядку выполнения блоков function-call корневого уровня в Inport модели export-function.
Если экспериментальная модель вызывает функции модели-ссылки вне порядка в любой временной шаг, Simulink отображает ошибку. Для получения информации о отсортированном поручении на выполнение смотрите Управление и Отображение порядка выполнения. Чтобы отключить это ограничение, снимите флажок для параметр конфигурации <reservedrangesplaceholder0>.
Для модели экспорта функций:
Для блоков шагов расчета вызова функции корневого уровня должно быть задано Inport наследование (-1
) или соответствовать шагу расчета вызовов функции из диаграммы Stateflow, которая управляет ими.
Симулируйте модель экспорта функций, чтобы протестировать и наблюдать ее поведение перед генерацией кода.
Примечание
При использовании моделей экспорта функций в симуляциях верхней модели не изменяйте состояние включения/отключения модели во время симуляции. Включите его в начале симуляции и используйте вызовы функций для его вызова.
Установите параметры конфигурации для экспериментальной модели. На вкладке Modeling и из раздела Setup выберите Model Settings. Выберите панель Модели ссылок. Снимите флажок для параметр конфигурации <reservedrangesplaceholder0>.
Проверьте параметры конфигурации, Solver Type установлено в Fixed-step
, Solver установлено на discrete (no continuous states)
и Размер с фиксированным шагом (основной шаг расчета), установленный на auto
.
Щелкните правой кнопкой мыши выходные сигналы порта на блоке Model и выберите Log selected signal.
Запустите симуляцию.
Откройте Simulation Data Inspector, щелкнув значок.
После тестирования модели можно сгенерировать код для функций. См. «Генерация кода для модели экспорта функций».