Таблица изменения состояния является альтернативным способом выразить последовательную модальную логику. Вместо того, чтобы чертить состояния и переходы графически в графике Stateflow®, используйте таблицы переходов состояний, чтобы выразить модальную логику в табличном формате. Таблицы переходов состояний поддерживаются только как блоки в модели Simulink®. Для получения дополнительной информации смотрите Таблицы переходов состояний в Stateflow.
В этом примере показано, как смоделировать контроллер скорострельного оружия для температурного регулирования бойлера, с помощью таблицы изменения состояния. Контроллер должен включить и выключить бойлер, чтобы соответствовать следующим конструктивным требованиям:
Высокая температура не может превысить 25 градусов Цельсия.
Низкая температура не может упасть ниже 23 градусов Цельсия.
Установившаяся операция требует периода прогрева 10 секунд.
Когда сигнал тревоги звучит, бойлер должен сразу закрыться.
Когда звуки сигнала отбоя, бойлер может включить снова.
Можно идентифицировать рабочие режимы и требования к данным для контроллера скорострельного оружия на основе его конструктивных требований.
Высокоуровневые рабочие режимы для бойлера:
Нормальное функционирование, когда никакой сигнал тревоги не звучит.
Сигнальное состояние, во время сигнала тревоги.
Во время нормального функционирования бойлер может быть в одном из трех состояний:
Прочь, когда температура выше 25 градусов Цельсия.
Прогрев, в течение первых 10 секунд того, чтобы быть включенного.
На, установившийся после 10 секунд прогрева, когда температура ниже 23 градусов Цельсия.
Контроллер скорострельного оружия требует следующих данных.
Осциллограф | Описание | Имя переменной |
---|---|---|
Входной параметр | Сетбол высокой температуры | reference_high |
Входной параметр | Низкий температурный сетбол | reference_low |
Входной параметр | Сигнальный индикатор | ALARM |
Входной параметр | Индикатор отбоя | CLEAR |
Входной параметр | Текущая температура бойлера | temp |
Локальный | Индикатор, что бойлер завершил прогрев | doneWarmup |
Вывод | Команда, чтобы установить режим бойлера: прочь, прогрев, или на | boiler_cmd |
Чтобы создать модели контроллеров скорострельного оружия самостоятельно с помощью таблицы изменения состояния, следуйте за этими упражнениями. В противном случае можно открыть завершенную модель.
Чтобы представлять контроллер скорострельного оружия, используйте таблицу изменения состояния. По сравнению с графической диаграммой переходов состояний таблица изменения состояния является компактным способом представлять модальную логику, которая включает переходы между соседними государствами. В данном примере используйте MATLAB® в качестве своего языка действия.
Откройте частично созданную модель котельной установка.
Эта модель содержит все необходимые блоки Simulink, за исключением контроллера скорострельного оружия.
Удалите эти пять выходных портов и один входной порт.
Откройте Браузер Библиотеки. Во вкладке Simulation нажмите Library Browser.
На левой панели Браузера Библиотеки выберите библиотеку Stateflow, затем перетащите блок State Transition Table из правой панели в вашу модель бойлера.
Ваша модель выглядит так модель.
Закройте браузер библиотеки.
Теперь вы готовы добавить состояния и иерархию к таблице изменения состояния.
Чтобы представлять рабочие режимы бойлера, добавьте состояния и иерархию к таблице изменения состояния.
Откройте таблицу изменения состояния.
Представляйте высокоуровневые рабочие режимы: нормальный и предупреждение.
Дважды кликните 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
утвердите и сразу закрывается.
В Off
строка состояния, введите:
если |
---|
[temp <= reference_low] |
Warmup |
В процессе моделирования, когда текущая температура бойлера опускается ниже 23 градусов Цельсия, бойлер начинает нагреваться.
В Warmup
строка состояния, введите:
если | еще - если |
---|---|
[doneWarmup] | [after(10, sec)] |
{doneWarmup = true;} | |
On | On |
В процессе моделирования бойлер нагревается в течение 10 секунд и затем переходов к On
состояние.
В On
строка состояния, введите:
если |
---|
[temp >= reference_high] |
Off |
В процессе моделирования, когда текущая температура бойлера повышается выше 25 градусов Цельсия, бойлер выключается.
В Alarm
строка состояния, введите:
если |
---|
[CLEAR] |
Normal |
В процессе моделирования, когда условие отбоя верно, бойлер возвращается к режиму normal mode.
Сохраните таблицу изменения состояния.
Ваша таблица изменения состояния выглядит так таблица.
Теперь вы готовы добавить определения данных с помощью Мастера Символа.
Когда вы составляете таблицу изменения состояния, которая использует синтаксис MATLAB, существуют требования языка для генерации кода C/C++. Одно из этих требований - то, что вы задаете размер, введите, и сложность всех переменных MATLAB так, чтобы их свойства могли быть определены во время компиляции. Даже при том, что вы явным образом еще не задали данные в своей таблице изменения состояния, можно использовать Мастер Символа. В процессе моделирования Мастер Символа предупреждает вас к неразрешенным символам, выводит их свойства и добавляет недостающие данные в вашу таблицу.
В модели Simulink выберите Run.
Появляются два диалоговых окна:
Диагностическое Средство просмотра указывает, что вы не разрешили символы в таблице изменения состояния.
Мастер Символа пытается разрешить недостающие данные. Мастер правильно выводит осциллограф всех данных за исключением входных параметров ALARM and CLEAR
.
В Мастере Символа откорректируйте осциллографы ALARM
и CLEAR
путем выбора Input из их Осциллографа выпадающие списки.
Когда Model Explorer открывается, проверьте, что Мастер Символа добавил все необходимые определения данных правильно.
Некоторые входные параметры присвоены неправильным портам.
В панели Содержимого 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.
Диаграмма переходов состояний верхнего уровня:
Normal
состояние появляется как подграфик.
Просмотреть состояния и переходит график, содержит, дважды кликните Normal
состояние.