Таблица переходов состояний является альтернативным способом выражения последовательной модальной логики. Вместо графических состояний и переходов в Stateflow® график, используйте таблицы переходов состояний, чтобы выразить модальную логику в табличном формате. Таблицы переходов состояний поддерживаются только как блоки в Simulink® модель. Для получения дополнительной информации смотрите Таблицы переходов состояний в Stateflow.
Этот пример показывает, как смоделировать контроллер для регулирования температуры бойлера, используя таблицу переходов состояния. Контроллер должен включить и выключить котел для выполнения следующих проектных требований:
Высокая температура не может превышать 25 степени Цельсия.
Низкая температура не может опуститься ниже 23 степени Цельсия.
Установившаяся операция требует периода прогрева 10 секунд.
Когда звучит сигнал тревоги, бойлер должен немедленно отключиться.
Когда звучит сигнал all-clear, котел может снова включиться.
Можно определить рабочие режимы и требования к данным для релейного контроллера на основе его проектных требований.
Высокоуровневые режимы работы котла:
Нормальная операция, когда не звучит сигнал тревоги.
Состояние тревоги, во время сигнала тревоги.
Во время нормальной операции котел может находиться в одном из трех состояний:
Off, когда температура выше 25 степеней Цельсия.
Разминка, в течение первых 10 секунд работы.
Включено, установившееся состояние после 10 секунд прогрева, когда температура ниже 23 степеней Цельсия.
Релейный контроллер требует следующих данных.
Возможности | Описание | Имя переменной |
---|---|---|
Вход | Набор высоких температур точки | reference_high |
Вход | Набор низких температур точки | reference_low |
Вход | Индикатор тревоги | ALARM |
Вход | Индикатор All-Clear | CLEAR |
Вход | Текущая температура бойлера | temp |
Местный | Индикатор того, что котел завершил прогрев | doneWarmup |
Выход | Команда на включение котельного режима: выключение, разогрев или включение | boiler_cmd |
Чтобы создать модели контроллеров самостоятельно с помощью таблицы переходов состояний, следуйте этим упражнениям. В противном случае можно открыть завершенную модель.
Чтобы представлять контроллер, используйте таблицу переходов состояний. По сравнению с графической диаграммой переходов состояний, таблица переходов состояний является компактным способом представления модальной логики, которая включает переходы между соседними состояниями. В данном примере используйте MATLAB® как ваш язык действий.
Откройте частично построенный котельную модель объекта управления.
Эта модель содержит все необходимые блоки Simulink, кроме релейного контроллера.
Удалите пять выходных портов и один входной порт.
Откройте браузер библиотеки. На вкладке Simulation нажмите Library Browser.
На левой панели браузера библиотек выберите библиотеку Stateflow, а затем перетащите блок таблицы переходов состояний из правой панели в модель бойлера.
Ваша модель похожа на эту модель.
Закройте браузер библиотеки.
Теперь вы готовы добавить состояния и иерархию в таблицу переходов состояний.
Чтобы представлять рабочие режимы бойлера, добавьте состояния и иерархию в таблицу переходов состояний.
Откройте таблицу переходов состояний.
Представление высокоуровневых рабочих режимов: normal и alarm.
Дважды кликните state1
и переименовать его Normal
.
Дважды кликните state2
и переименовать его Alarm
.
Представление трех состояний нормальной операции как подсостояний Normal
:
Щелкните правой кнопкой мыши по Normal
выберите Insert Row > Child State Row и назовите новое состояние 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] |
Alarm |
Во время симуляции:
При первом вводе график активирует Normal
состояние.
На каждом временном шаге нормальная операция переходит через Off
, Warmup
, и On
состояния до тех пор, пока условие ALARM не будет true.
Когда условие ALARM верно, бойлер переходит к Alarm
состояние и немедленно отключается.
В Off
строка состояния, введите:
если |
---|
[temp <= reference_low] |
Warmup |
Во время симуляции, когда текущая температура котла опускается ниже 23 степени Цельсия, котел начинает прогреваться.
В Warmup
строка состояния, введите:
если | else-if |
---|---|
[doneWarmup] | [after(10, sec)] |
{doneWarmup = true;} | |
On | On |
Во время симуляции котел прогревается в течение 10 секунд, а затем переходит к On
состояние.
В On
строка состояния, введите:
если |
---|
[temp >= reference_high] |
Off |
Во время симуляции, когда текущая температура бойлера повышается выше 25 степени Цельсия, котел отключается.
В Alarm
строка состояния, введите:
если |
---|
[CLEAR] |
Normal |
Во время симуляции, когда условие all-clear верно, бойлер возвращается к режиму normal mode.
Сохраните таблицу переходов состояний.
Ваша таблица переходов состояний похожа на эту таблицу.
Теперь вы готовы добавить определения данных с помощью Мастера создания символов.
Когда вы создаете таблицу переходов состояний, которая использует синтаксис MATLAB, существуют требования к языку для генерации кода C/C + +. Одно из этих требований состоит в том, что вы задаете размер, тип и сложность всех переменного MATLAB, чтобы их свойства могли быть определены во время компиляции. Несмотря на то, что данные в таблице переходов состояний еще не определены явным образом, можно использовать Мастер обозначений. Во время симуляции Мастер символов предупреждает вас о неразрешенных символах, выводит их свойства и добавляет отсутствующие данные в таблицу.
В модели Simulink выберите Run.
Появляются два диалоговых окна:
Diagnostic Viewer указывает, что в таблице переходов состояний имеются неразрешенные символы.
Мастер создания графических образов пытается устранить недостающие данные. Мастер правильно выводит возможности всех данных, кроме входов ALARM and CLEAR
.
В мастере символов исправьте возможности ALARM
и CLEAR
путем выбора Input из раскрывающихся списков Возможностей (Scope).
Когда откроется Обозреватель моделей (Model Explorer), убедитесь, что Мастер символов (Symbol Wizard) правильно добавил все необходимые определения данных.
Некоторые входы назначаются неправильным портам.
На панели Содержимое (Contents) Обозревателя моделей (Model Explorer) переопределите входные порты следующим образом:
Присвоение: | В порт: |
---|---|
reference_low | 2 |
reference_high | 1 |
temp | 5 |
ALARM | 3 |
CLEAR | 4 |
Сохраните таблицу переходов состояний.
Закройте Средство Просмотра и Model Explorer.
В модели Simulink заданные вами входы и выходы появляются в блоке State Transition Table. Теперь вы готовы соединить эти входы и выходы с сигналами Simulink и запустить модель.
В модели Simulink соедините таблицу переходов состояний с входами и выходами Simulink:
Сохраните модель.
Снова откройте таблицу переходов состояний.
Запустите симуляцию, выбрав Run.
Когда симуляция выполняется, можно наблюдать, как анимация в таблице переходов состояний активирует различные состояния.
Следующий выход появляется в блоке Scope.
При выполнении интерактивной отладки можно задать точки останова в различных состояниях и просмотреть значения данных в различных точках симуляции. Для получения дополнительной информации об отладке см. Раздел «Отладка диаграмм Stateflow».
Stateflow автоматически генерирует графическое представление созданной таблицы переходов только для чтения.
На вкладке Debug нажмите Show Auto Chart.
Верхний уровень диаграммы переходов состояний:
The Normal
состояние появляется как субдиаграмма.
Чтобы просмотреть состояния и переходы, содержащиеся в графике, дважды кликните Normal
состояние.