Таблица изменения состояния является альтернативным способом выразить последовательную модальную логику. Вместо того, чтобы чертить состояния и переходы графически в графике Stateflow®, используйте таблицы переходов состояний, чтобы выразить модальную логику в табличном формате. Таблицы переходов состояний поддерживаются только как блоки в модели Simulink®. Для получения дополнительной информации смотрите Таблицы переходов состояний в Stateflow.
Этот пример показывает, как смоделировать контроллер скорострельного оружия для температурного регулирования бойлера, с помощью таблицы изменения состояния. Контроллер должен включить и выключить бойлер, чтобы соответствовать следующим конструктивным требованиям:
Высокая температура не может превысить 25 градусов Цельсия.
Низкая температура не может упасть ниже 23 градусов Цельсия.
Установившаяся операция требует периода прогрева 10 секунд.
Когда сигнал тревоги звучит, бойлер должен сразу закрыться.
Когда звуки сигнала отбоя, бойлер может включить снова.
Можно идентифицировать рабочие режимы и требования к данным для контроллера скорострельного оружия на основе его конструктивных требований.
Высокоуровневые рабочие режимы для бойлера:
Нормальное функционирование, когда никакой сигнал тревоги не звучит.
Сигнальное состояние, во время сигнала тревоги.
Во время нормального функционирования бойлер может быть в одном из трех состояний:
Прочь, когда температура выше 25 градусов Цельсия.
Прогрев, в течение первых 10 секунд того, чтобы быть включенного.
На, установившийся после 10 секунд прогрева, когда температура ниже 23 градусов Цельсия.
Контроллер скорострельного оружия требует следующих данных.
Осциллограф | Описание | Имя переменной |
---|---|---|
Входной параметр | Сетбол высокой температуры | reference_high |
Входной параметр | Низкий температурный сетбол | reference_low |
Входной параметр | Сигнальный индикатор | ALARM |
Входной параметр | Индикатор отбоя | CLEAR |
Входной параметр | Текущая температура бойлера | temp |
Локальный | Индикатор, что бойлер завершил прогрев | doneWarmup |
Вывод | Команда, чтобы установить режим бойлера: прочь, прогрев, или на | boiler_cmd |
Чтобы создать модели контроллеров скорострельного оружия самостоятельно с помощью таблицы изменения состояния, следуйте за этими упражнениями. В противном случае можно открыть завершенную модель.
Чтобы представлять контроллер скорострельного оружия, используйте таблицу изменения состояния. По сравнению с графической диаграммой переходов состояний таблица изменения состояния является компактным способом представлять модальную логику, которая включает переходы между соседними государствами. В данном примере используйте MATLAB® в качестве своего языка действия.
Откройте частично созданную модель котельной установка.
Эта модель содержит все необходимые блоки Simulink, за исключением контроллера скорострельного оружия.
Удалите эти пять выходных портов и один входной порт.
Откройте Браузер Библиотеки путем выбора View> 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 выберите Simulation> 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:
Сохраните модель.
Вновь откройте свою таблицу изменения состояния.
Запустите симуляцию путем выбора Simulation> Run.
Когда симуляция запускается, можно смотреть, что анимация в таблице изменения состояния активирует различные состояния.
Следующий вывод появляется в блоке Scope.
При выполнении интерактивной отладки можно установить точки останова на различных состояниях и просмотреть значения данных в различных точках в симуляции. Для получения дополнительной информации об отладке, смотрите Отладку Графиков.
Stateflow автоматически генерирует графическое представление только для чтения таблицы изменения состояния, которую вы составили.
В таблице изменения состояния выберите Chart> View auto-generated diagram.
Диаграмма переходов состояний верхнего уровня:
Состояние Normal
появляется как подграфик.
Просмотреть состояния и переходит график, содержит, дважды кликните состояние Normal
.