Существует два общих подхода к программированию диаграммы Stateflow ® в модели Simulink ®:
Определите режимы работы системы.
Определите системный интерфейс, например, события, на которые реагирует система.
В этом учебном пособии используется первый подход, то есть сначала определяются режимы работы системы для программирования диаграммы.
В этом примере показано, как построить диаграмму Stateflow с использованием MATLAB ® в качестве языка действий. Модель представляет машину на сборочной линии, которая подает сырье в другие части линии. Этот питатель работает следующим образом:
При инициализации системы проверьте, что значения трех датчиков нормальны.
Положительное значение означает, что датчик работает правильно. Ноль означает, что датчик не работает.
Если все значения датчиков нормальны, переход с «инициализации системы» на «вкл».
Если питатель не выходит из режима инициализации через 5 секунд, принудительно переведите питатель в состояние отказа.
После включения системы начинается подсчет количества подаваемых компонентов.
На каждом шаге времени, если показания датчика равны 2 или больше, деталь перемещается на следующую станцию.
Если аварийный сигнал звучит, принудительно переведите систему в состояние отказа.
Аварийный сигнал может появиться, когда оператор открывает одну из предохранительных дверей на питателе или возникает проблема на сборочной линии, которая приводит к остановке всех питателей выше по потоку.
При звуковом сигнале полной очистки возобновите нормальную работу и обнулите количество подаваемых компонентов.
Светодиодный индикатор питателя изменяет цвет в соответствии с режимом работы системы - оранжевый для «инициализации системы», зеленый для «включения» и красный для «состояния отказа».
На основе описания поведения питателей можно определить ключевые системные атрибуты.
| Признак | Особенность |
|---|---|
| Режимы работы |
|
| Переходы |
|
| Параллельные режимы | Никакие режимы работы не выполняются параллельно. В любое время может быть активен только один режим. |
| Режим по умолчанию | Инициализация системы |
| Исходные данные |
|
| Продукция |
|
В этом упражнении в модель Simulink добавляется диаграмма State flow, содержащая входные сигналы датчиков и аварийных сигналов для питателя.
Чтобы реализовать модель самостоятельно, следуйте этим упражнениям. В противном случае можно открыть законченную модель.
Откройте частично построенную модель.

Дважды щелкните значок SensorSignals для просмотра трех сигналов датчиков, представленных блоками генератора импульсов.
sensors сигнал указывает, когда сборочная деталь готова к перемещению на следующий пикет.
Дважды щелкните значок AlarmSignal для просмотра ступенчатых блоков, представляющих аварийный сигнал.
Когда ALARM сигнал активен, машина выключается.
Запустите модель для просмотра выходного сигнала датчика и аварийных сигналов в блоке Scope.

Верхняя ось показывает сигналы датчика. Только два сигнала датчика появляются, потому что два датчика имеют один и тот же сигнал. На нижней оси отображается аварийный сигнал, который отключает фидер между временем моделирования от 45 до 80 секунд.
Откройте библиотеку Stateflow, выполнив команду sflib в командной строке MATLAB.
Выбрать Chart и перетащите его в модель.
Совет
Чтобы создать новую модель с пустой диаграммой Stateflow, использующей MATLAB в качестве языка действий, используйте функцию sfnew.
Удалите соединения из подсистемы SensorSignals в область и из подсистемы AlarmSignal в область.
Переименование метки Chart находится под диаграммой Stateflow для Feeder. Модель теперь должна выглядеть следующим образом:

На основе описанных выше системных атрибутов существуют три режима работы:
Инициализация системы
На
Состояние отказа
Чтобы добавить состояния для моделирования поведения этих режимов работы:
Дважды щелкните диаграмму питателей, чтобы начать добавление состояний.
Примечание
Значок MATLAB в левом нижнем углу диаграммы показывает, что используется диаграмма Stateflow с синтаксисом MATLAB.
![]()
Щелкните значок Инструмент состояния (State Tool), чтобы ввести состояние в диаграмму.
![]()
Щелкните в левом верхнем углу состояния и введите имя. InitializeSystem.
Повторите шаги 2 и 3, чтобы добавить еще два состояния On и FailState.
Состояния выполняют действия на различных фазах своего цикла выполнения с момента их активации до момента, когда они становятся неактивными. Три основных действия состояния:
| Тип действия | При выполнении | Как часто выполняется при активном состоянии |
|---|---|---|
| Вход | При вводе состояния (становится активным) | Однажды |
| Во время | Пока состояние активно и нет допустимого перехода в другое состояние | На каждом шаге времени |
| Выход | Перед переходом в другое состояние | Однажды |
Например, можно использовать entry действия по инициализации данных, during действия по обновлению данных и exit действия по настройке данных для следующего перехода. Дополнительные сведения о других типах действий состояния см. в разделе Синтаксис состояний и переходов.)
Нажмите кнопку return после InitializeSystem и добавьте этот текст, чтобы определить действие записи состояния:
entry: Light = ORANGE;
InitializeSystem состояние.Добавить следующий код после FailState имя состояния для определения действия записи:
entry: Light = RED;
Красный светодиодный индикатор указывает на запись в FailState.
Добавить следующий код после On имя состояния для определения действия записи:
entry: Light = GREEN; partsFed = 0;
On состояние. Количество подаваемых компонентов инициализируется равным 0 при каждом вводе On состояние.Добавьте следующий код в On состояние после действия ввода для проверки наличия сильного сигнала датчика и приращения компонентов, подаваемых на следующую станцию:
during: if(any(sensors >= 2)) partsFed = partsFed + 1; end
On состояние проверяет сигнал датчика, чтобы определить, готова ли деталь к подаче на следующую сборочную станцию. Если сигнал датчика является сильным (количество включенных датчиков больше или равно 2), то диаграмма считает, что деталь перешла на следующую станцию.
Синтаксис для во время действий
Теперь диаграмма должна выглядеть как эта цифра.

Условия перехода определяют время перехода из одного рабочего режима в другой. Когда условие истинно, диаграмма переходит в следующее состояние. В противном случае текущее состояние остается активным. Дополнительные сведения см. в разделе Переходы.
На основе описания поведения питателя укажите правила для переходов между состояниями:
Подключение перехода по умолчанию к InitializeSystem состояние для указания точки входа диаграммы.
![]()
Переходы по умолчанию указывают место начала моделирования.
Нарисуйте переход из InitializeSystem состояние в On состояние:
Наведите курсор мыши на нижний край InitializeSystem состояние до тех пор, пока форма указателя не изменится на перекрестие.
Щелкните и перетащите мышь к верхнему краю On состояние. Затем вы увидите переход от InitializeSystem состояние в On состояние.
Дважды щелкните переход, чтобы добавить условие:
[all(sensors>0)]
Это условие перехода проверяет, имеют ли все датчики значения больше нуля.
Повторите эти шаги для создания оставшихся условий перехода.
| Переход | Состояние |
|---|---|
On кому FailState | [Alarm == 1] |
FailState кому InitializeSystem | [Alarm == 0] |
Нарисовать еще один переход из InitializeSystem кому FailState. Для этого перехода введите следующее, чтобы создать событие перехода:
after(5,sec)
InitializeSystem кому FailState.Примечание
Синтаксис этого перехода является событием, а не условием перехода. Дополнительные сведения см. в разделе Управление выполнением диаграммы с помощью временной логики.
Теперь диаграмма выглядит так.

Примечание
Исходящие переходы из InitializeSystem имеют небольшие метки 1 и 2 для указания порядка, в котором вычисляются переходные сегменты. Если числа из рисунка не соответствуют модели, щелкните правой кнопкой мыши переход, а затем измените его, щелкнув значок Execution Order. Дополнительные сведения см. в разделе Порядок оценки перехода.
Запустите моделирование модели. Вместе с мастером графических образов появляются ошибки о неразрешенных символах.

Мастер графических образов не добавляет данные в диаграмму автоматически. Он идентифицирует неразрешенные данные и выводит класс и объем этих данных с помощью правил вывода выражений MATLAB в действиях Stateflow. На диаграмме:
Данные, считанные из, но не записанные в, выводятся как входные данные. Однако если имя данных состоит из всех прописных букв, Мастер символов выводит данные в качестве параметра.
Данные, записанные в, но не считанные из, выводятся как выходные данные.
Данные, считываемые из и записываемые в, выводятся как локальные данные.
Мастер графических образов определяет область входных данных на диаграмме. Однако необходимо исправить область данных для partsFed Вывод. Выполните следующие действия.
Для данных partsFed в столбце Объем выберите Вывод из списка.
Мастер графических образов теперь выглядит следующим образом.

Чтобы добавить данные, предложенные Мастером графических образов, нажмите кнопку «ОК».
Добавьте начальные значения параметров. В командной строке MATLAB введите:
RED = 0;
Аналогично, в командной строке MATLAB добавьте следующие начальные значения для остальных параметров:
| Параметр | Стоимость |
|---|---|
| КРАСНЫЙ | 0 |
| ОРАНЖЕВЫЙ | 1 |
| ЗЕЛЕНЫЙ | 2 |
Вернитесь к модели и подключите входы и выходы к соответствующим портам.

Запустите моделирование.
Дважды щелкните блок Scope, чтобы убедиться, что модель фиксирует ожидаемое поведение питателя.

Верхняя ось показывает светодиодный сигнал, который изменяется между оранжевым (1), зеленым (2) и красным (0) для указания текущего режима работы. Нижняя ось показывает количество деталей, подаваемых на следующую сборочную станцию, которое увеличивается с шагом до тех пор, пока аварийный сигнал не выключит машину и не сбросит ее.
Другой подход к программированию диаграммы состоит в том, чтобы начать с определения частей системного интерфейса, таких как события, на которые реагирует система.
В предыдущем примере при использовании входных данных для представления события диаграмма периодически пробуждается и проверяет правильность условий при переходах. В этом случае, если ALARM = = 1, то переход в состояние отказа происходит на следующем шаге времени. Однако создание диаграммы Stateflow, реагирующей на входные события, позволяет реагировать на аварийный сигнал при запуске события.
Дополнительные сведения об использовании диаграммы на основе событий см. в разделе Синхронизация компонентов модели по широковещательным событиям.
В подходе, основанном на событиях, системными атрибутами для рассмотрения в первую очередь являются события, входные и выходные данные.
В следующей таблице рассматриваются характеристики управляемой событиями модели питателей, которые отличаются от системных в зависимости от условий перехода.
| Признаки | Особенности |
|---|---|
| События | Два асинхронных события: сигнал тревоги и сигнал полной очистки |
| Исходные данные | Три показания датчика для определения перемещения детали на сборочную станцию ниже по потоку |
В этом примере модель питателя реагирует на входные события с помощью запускаемой диаграммы.

Диаграмма теперь имеет только один входной порт слева и инициируемый событием вход вверху. Дополнительные сведения о создании диаграммы Stateflow, активированной событиями, см. в разделе Активация диаграммы Stateflow путем отправки входных событий
Когда ALARM сигнал запускает диаграмму, диаграмма реагирует на триггер на этом временном шаге. Если текущее состояние On при срабатывании аварийного сигнала текущее состояние переходит в FailState.

Выходные данные области для диаграммы, вызванной событием, представлены на следующем рисунке.

Верхняя ось показывает светодиодный сигнал, который изменяется между красным (0), оранжевым (1) и зеленым (2) для указания текущего режима работы. Нижняя ось показывает количество деталей, подаваемых на следующую сборочную станцию, которое увеличивается с шагом до тех пор, пока аварийный сигнал не выключит машину и не сбросит ее. Однако моделирование на основе событий подает больше деталей на следующую сборочную станцию из-за различий между часами и решателями.