Таблица переходов состояний является альтернативным способом выражения последовательной модальной логики. Вместо графического отображения состояний и переходов в диаграмме Stateflow ® используйте таблицы переходов состояний для выражения модальной логики в табличном формате. Таблицы перехода состояний поддерживаются только как блоки в модели Simulink ®. Дополнительные сведения см. в разделе Таблицы перехода состояний в потоке состояний.
В этом примере показано, как моделировать регулятор давления для регулирования температуры котла с использованием таблицы перехода состояния. Контроллер должен включать и выключать котел в соответствии со следующими проектными требованиями:
Высокая температура не может превышать 25 градусов Цельсия.
Низкая температура не может опускаться ниже 23 градусов Цельсия.
Для работы в установившемся режиме требуется период прогрева 10 секунд.
При появлении сигнала тревоги котел должен немедленно выключиться.
Когда звучит полностью ясный сигнал, котел может включиться снова.
Можно определить режимы работы и требования к данным для контроллера bang-bang на основе его проектных требований.
Высокоуровневые режимы работы котла:
Нормальная работа, когда не звучит аварийный сигнал.
Состояние аварийного сигнала во время подачи аварийного сигнала.
При нормальной работе котел может находиться в одном из трех состояний:
Выключено, когда температура выше 25 градусов Цельсия.
Прогрев, в течение первых 10 секунд включения.
Включен, установившийся после 10 секунд прогрева, когда температура ниже 23 градусов Цельсия.
Контроллеру bang-bang требуются следующие данные.
| Объем | Описание | Имя переменной |
|---|---|---|
| Вход | Уставка высокой температуры | reference_high |
| Вход | Уставка низкой температуры | reference_low |
| Вход | Индикатор тревоги | ALARM |
| Вход | Полностью очищенный индикатор | CLEAR |
| Вход | Текущая температура котла | temp |
| Местный | Индикатор завершения прогрева котла | doneWarmup |
| Продукция | Команда для установки режима котла: выкл., прогрев или вкл. | boiler_cmd |
Чтобы создать модель контроллера bang-bang с помощью таблицы переходов состояний, следуйте этим упражнениям. В противном случае можно открыть законченную модель.
Для представления контроллера bang-bang используется таблица переходов состояний. По сравнению с графической диаграммой переходов состояний таблица переходов состояний является компактным способом представления модальной логики, которая включает переходы между соседними состояниями. В этом примере в качестве языка действий используйте MATLAB ®.
Откройте модель частично построенной котельной установки.
Эта модель содержит все необходимые блоки Simulink, за исключением контроллера bang-bang.

Удалите пять выходных портов и один входной порт.
Откройте обозреватель библиотек. На вкладке «Моделирование» выберите «Обозреватель библиотек».
На левой панели обозревателя библиотек выберите библиотеку Stateflow, а затем перетащите блок State Transition Table с правой панели в модель котла.
Ваша модель похожа на эту.

Закройте обозреватель библиотек.
Теперь можно добавить состояния и иерархию в таблицу перехода состояний.
Для представления режимов работы котла добавьте состояния и иерархию в таблицу переходов состояний.
Откройте таблицу переходов состояний.
Представляют высокоуровневые режимы работы: нормальный и аварийный.
Двойной щелчок state1 и переименовать его Normal.
Двойной щелчок state2 и переименовать его Alarm.
Представить три состояния нормальной эксплуатации как подстанции Normal:
Щелкните правой кнопкой мыши Normal выберите «Вставить строку» > «Строка дочернего состояния» и присвойте имя новому состоянию Off.
Повторите шаг еще два раза, чтобы создать дочерние состояния Warmup и On, в таком порядке.
По умолчанию при наличии неоднозначности первое состояние верхнего исключающего (OR) состояния на каждом уровне иерархии становится активным. По этой причине Normal и Off появляются состояния с переходами по умолчанию. Эта конфигурация соответствует требованиям к конструкции для данной модели. Чтобы задать состояние по умолчанию, щелкните его правой кнопкой мыши и выберите Задать по умолчанию (Set to default).
Таблица перехода состояния выглядит как эта таблица.

Теперь вы готовы указать действия для каждого состояния.
Чтобы описать поведение, происходящее в каждом состоянии, укажите действия состояния в таблице. В этом упражнении выполняется инициализация режимов работы при переходе котла в нормальное и аварийное состояние с использованием переменных boiler_cmd и doneWarmup (описано в разделе «Требования к данным»).
В следующих состояниях щелкните после имени состояния, нажмите Enter и введите указанные действия ввода.
| В состоянии: | Тип: | Результирующее поведение |
|---|---|---|
Off |
entry: boiler_cmd = 0; doneWarmup = false; | Выключает котел и указывает, что котел не прогрелся. |
Warmup |
entry: boiler_cmd = 2; | Начинает прогревать котел. |
On |
entry: boiler_cmd = 1; | Включает котел. |
Alarm |
entry: boiler_cmd = 0; | Выключает котел. |
Сохраните таблицу переходов состояний.
Таблица перехода состояния выглядит как эта таблица.

Теперь можно задать условия и действия для перехода из одного состояния в другое.
Чтобы указать, когда следует перейти из одного режима работы в другой, укажите условия перехода и действия в таблице. В этом упражнении мы создадим инструкции с использованием переменных, описанных в разделе Требования к данным.
В Normal строка состояния, введите:
| если |
|---|
[ALARM] |
| Тревога |
Во время моделирования:
При первом вводе диаграмма активирует Normal состояние.
На каждом временном шаге нормальная работа осуществляется через Off, Warmup, и On указывает до тех пор, пока условие ALARM не станет истинным.
Когда состояние ALARM истинно, котел переходит в Alarm состояние и немедленно отключается.
В Off строка состояния, введите:
| если |
|---|
[temp <= reference_low] |
| Разминка |
Во время моделирования, когда текущая температура котла падает ниже 23 градусов Цельсия, котел начинает прогреваться.
В Warmup строка состояния, введите:
| если | else-if |
|---|---|
[doneWarmup] | [after(10, sec)] |
{doneWarmup = true;} | |
| На | На |
Во время моделирования котел прогревается в течение 10 секунд, а затем переходит к On состояние.
В On строка состояния, введите:
| если |
|---|
[temp >= reference_high] |
| Прочь |
Во время моделирования, когда текущая температура котла поднимается выше 25 градусов Цельсия, котел отключается.
В Alarm строка состояния, введите:
| если |
|---|
[CLEAR] |
| Нормальный |
Во время моделирования, когда условие полной очистки является истинным, котел возвращается в нормальный режим.
Сохраните таблицу переходов состояний.
Таблица перехода состояния выглядит как эта таблица.

Теперь можно добавлять определения данных с помощью Мастера графических образов.
При создании таблицы перехода состояний, использующей синтаксис MATLAB, существуют языковые требования для генерации кода C/C + +. Одним из этих требований является определение размера, типа и сложности всех переменных MATLAB для определения их свойств во время компиляции. Несмотря на то, что данные в таблице перехода состояния еще явно не определены, можно использовать мастер графических образов. Во время моделирования Мастер символов предупреждает о неразрешенных символах, выводит их свойства и добавляет отсутствующие данные в таблицу.
В модели Simulink выберите Run.
Появятся два диалоговых окна:
Средство просмотра диагностики показывает, что в таблице перехода состояния имеются неразрешенные символы.
Мастер графических образов пытается устранить недостающие данные. Мастер правильно определяет объем всех данных, за исключением входных ALARM and CLEAR.

В мастере графических образов исправьте области ALARM и CLEAR путем выбора параметра Ввод (Input) в выпадающих списках Область (Scope).
При открытии Обозревателя моделей убедитесь, что Мастер графических образов (Symbol Wizard) правильно добавил все необходимые определения данных.
Некоторые входы назначены неверным портам.
На панели Содержимое (Contents) обозревателя моделей переназначите входные порты следующим образом:
| Назначить: | В порт: |
|---|---|
reference_low | 2 |
reference_high | 1 |
temp | 5 |
ALARM | 3 |
CLEAR | 4 |
Сохраните таблицу переходов состояний.
Закройте средство просмотра диагностики и обозреватель моделей.
В модели Simulink определенные входные и выходные данные отображаются в блоке Таблица перехода состояний (State Transition Table). Теперь вы готовы подключить эти входы и выходы к сигналам Simulink и запустить модель.
В модели Simulink подключите таблицу перехода состояния к входам и выходам Simulink:

Сохраните модель.
Снова откройте таблицу переходов состояний.
Запустите моделирование, выбрав команду Выполнить (Run).
При выполнении моделирования можно наблюдать, как анимация в таблице перехода состояний активирует различные состояния.
В блоке «Scope» появятся следующие выходные данные.

При выполнении интерактивной отладки можно задавать точки останова в различных состояниях и просматривать значения данных в различных точках моделирования. Дополнительные сведения об отладке см. в разделе Отладка диаграмм состояния.
Stateflow автоматически создает доступное только для чтения графическое представление созданной таблицы перехода к состоянию.
На вкладке Отладка (Debug) щелкните Показать автоматическую диаграмму (Show Auto Chart).
Диаграмма перехода состояния верхнего уровня:

Normal состояние отображается как вложенная диаграмма.
Для просмотра состояний и переходов, содержащихся в диаграмме, дважды щелкните значок Normal состояние.