Моделируйте Bang-Bang контроллер при помощи таблицы переходов состояний

Таблица переходов состояний является альтернативным способом выражения последовательной модальной логики. Вместо графических состояний и переходов в Stateflow® график, используйте таблицы переходов состояний, чтобы выразить модальную логику в табличном формате. Таблицы переходов состояний поддерживаются только как блоки в Simulink® модель. Для получения дополнительной информации смотрите Таблицы переходов состояний в Stateflow.

Требования к проектированию

Этот пример показывает, как смоделировать контроллер для регулирования температуры бойлера, используя таблицу переходов состояния. Контроллер должен включить и выключить котел для выполнения следующих проектных требований:

  • Высокая температура не может превышать 25 степени Цельсия.

  • Низкая температура не может опуститься ниже 23 степени Цельсия.

  • Установившаяся операция требует периода прогрева 10 секунд.

  • Когда звучит сигнал тревоги, бойлер должен немедленно отключиться.

  • Когда звучит сигнал all-clear, котел может снова включиться.

Идентифицируйте системные атрибуты

Можно определить рабочие режимы и требования к данным для релейного контроллера на основе его проектных требований.

Рабочие режимы

Высокоуровневые режимы работы котла:

  • Нормальная операция, когда не звучит сигнал тревоги.

  • Состояние тревоги, во время сигнала тревоги.

Во время нормальной операции котел может находиться в одном из трех состояний:

  • Off, когда температура выше 25 степеней Цельсия.

  • Разминка, в течение первых 10 секунд работы.

  • Включено, установившееся состояние после 10 секунд прогрева, когда температура ниже 23 степеней Цельсия.

Требования к данным

Релейный контроллер требует следующих данных.

ВозможностиОписаниеИмя переменной
ВходНабор высоких температур точкиreference_high
ВходНабор низких температур точкиreference_low
ВходИндикатор тревогиALARM
ВходИндикатор All-ClearCLEAR
ВходТекущая температура бойлераtemp
МестныйИндикатор того, что котел завершил прогревdoneWarmup
ВыходКоманда на включение котельного режима: выключение, разогрев или включениеboiler_cmd

Создайте контроллер или используйте поставляемую модель

Чтобы создать модели контроллеров самостоятельно с помощью таблицы переходов состояний, следуйте этим упражнениям. В противном случае можно открыть завершенную модель.

Создайте новую таблицу переходов состояний

Чтобы представлять контроллер, используйте таблицу переходов состояний. По сравнению с графической диаграммой переходов состояний, таблица переходов состояний является компактным способом представления модальной логики, которая включает переходы между соседними состояниями. В данном примере используйте MATLAB® как ваш язык действий.

  1. Откройте частично построенный котельную модель объекта управления.

    Эта модель содержит все необходимые блоки Simulink, кроме релейного контроллера.

  2. Удалите пять выходных портов и один входной порт.

  3. Откройте браузер библиотеки. На вкладке Simulation нажмите Library Browser.

  4. На левой панели браузера библиотек выберите библиотеку Stateflow, а затем перетащите блок таблицы переходов состояний из правой панели в модель бойлера.

    Ваша модель похожа на эту модель.

  5. Закройте браузер библиотеки.

Теперь вы готовы добавить состояния и иерархию в таблицу переходов состояний.

Добавление состояний и иерархии

Чтобы представлять рабочие режимы бойлера, добавьте состояния и иерархию в таблицу переходов состояний.

  1. Откройте таблицу переходов состояний.

  2. Представление высокоуровневых рабочих режимов: normal и alarm.

    1. Дважды кликните state1 и переименовать его Normal.

    2. Дважды кликните state2 и переименовать его Alarm.

  3. Представление трех состояний нормальной операции как подсостояний Normal:

    1. Щелкните правой кнопкой мыши по Normal выберите Insert Row > Child State Row и назовите новое состояние Off.

    2. Повторите шаг еще два раза, чтобы создать дочерние состояния Warmup и On, в таком порядке.

    По умолчанию, когда существует неоднозначность, первое состояние исключения (OR) на каждом уровне иерархии становится активным. По этой причине Normal и Off появляются состояния с переходами по умолчанию. Это строение соответствует проект требованиям к этой модели. Чтобы задать состояние по умолчанию, щелкните правой кнопкой мыши состояние и выберите Set to default.

Ваша таблица переходов состояний похожа на эту таблицу.

Теперь вы готовы задать действия для каждого состояния.

Задайте состояния активности

Чтобы описать поведение, которое происходит в каждом состоянии, задайте состояния активности в таблице. В этом упражнении вы инициализируете режимы работы, когда бойлер входит в нормальное и аварийное состояния, используя переменные boiler_cmd и doneWarmup (описывается в разделе «Требования к данным»).

  1. В следующих состояниях щелкните имя состояния, нажмите Enter и введите указанные действия входа.

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

Ваша таблица переходов состояний похожа на эту таблицу.

Теперь вы готовы задать условия и действия для перехода от одного состояния к другому состоянию.

Задайте условия и действия перехода

Чтобы указать, когда переходить с одного рабочего режима на другой, задайте условия перехода и действия в таблице. В этом упражнении операторы создаются с использованием переменных, описанных в разделе Требования к данным.

  1. В Normal строка состояния, введите:

    если
    [ALARM]
     
    Alarm

    Во время симуляции:

    1. При первом вводе график активирует Normal состояние.

    2. На каждом временном шаге нормальная операция переходит через Off, Warmup, и On состояния до тех пор, пока условие ALARM не будет true.

    3. Когда условие ALARM верно, бойлер переходит к Alarm состояние и немедленно отключается.

  2. В Off строка состояния, введите:

    если
    [temp <= reference_low]
     
    Warmup

    Во время симуляции, когда текущая температура котла опускается ниже 23 степени Цельсия, котел начинает прогреваться.

  3. В Warmup строка состояния, введите:

    еслиelse-if
    [doneWarmup][after(10, sec)]
     {doneWarmup = true;}
    OnOn

    Во время симуляции котел прогревается в течение 10 секунд, а затем переходит к On состояние.

  4. В On строка состояния, введите:

    если
    [temp >= reference_high]
     
    Off

    Во время симуляции, когда текущая температура бойлера повышается выше 25 степени Цельсия, котел отключается.

  5. В Alarm строка состояния, введите:

    если
    [CLEAR]
     
    Normal

    Во время симуляции, когда условие all-clear верно, бойлер возвращается к режиму normal mode.

  6. Сохраните таблицу переходов состояний.

Ваша таблица переходов состояний похожа на эту таблицу.

Теперь вы готовы добавить определения данных с помощью Мастера создания символов.

Определите данные

Когда вы создаете таблицу переходов состояний, которая использует синтаксис MATLAB, существуют требования к языку для генерации кода C/C + +. Одно из этих требований состоит в том, что вы задаете размер, тип и сложность всех переменного MATLAB, чтобы их свойства могли быть определены во время компиляции. Несмотря на то, что данные в таблице переходов состояний еще не определены явным образом, можно использовать Мастер обозначений. Во время симуляции Мастер символов предупреждает вас о неразрешенных символах, выводит их свойства и добавляет отсутствующие данные в таблицу.

  1. В модели Simulink выберите Run.

    Появляются два диалоговых окна:

    • Diagnostic Viewer указывает, что в таблице переходов состояний имеются неразрешенные символы.

    • Мастер создания графических образов пытается устранить недостающие данные. Мастер правильно выводит возможности всех данных, кроме входов ALARM and CLEAR.

  2. В мастере символов исправьте возможности ALARM и CLEAR путем выбора Input из раскрывающихся списков Возможностей (Scope).

  3. Когда откроется Обозреватель моделей (Model Explorer), убедитесь, что Мастер символов (Symbol Wizard) правильно добавил все необходимые определения данных.

    Некоторые входы назначаются неправильным портам.

  4. На панели Содержимое (Contents) Обозревателя моделей (Model Explorer) переопределите входные порты следующим образом:

    Присвоение:В порт:
    reference_low2
    reference_high1
    temp5
    ALARM3
    CLEAR4
  5. Сохраните таблицу переходов состояний.

  6. Закройте Средство Просмотра и Model Explorer.

В модели Simulink заданные вами входы и выходы появляются в блоке State Transition Table. Теперь вы готовы соединить эти входы и выходы с сигналами Simulink и запустить модель.

Соедините таблицу переходов и запустите модель

  1. В модели Simulink соедините таблицу переходов состояний с входами и выходами Simulink:

  2. Сохраните модель.

  3. Снова откройте таблицу переходов состояний.

  4. Запустите симуляцию, выбрав Run.

    Когда симуляция выполняется, можно наблюдать, как анимация в таблице переходов состояний активирует различные состояния.

Следующий выход появляется в блоке Scope.

При выполнении интерактивной отладки можно задать точки останова в различных состояниях и просмотреть значения данных в различных точках симуляции. Для получения дополнительной информации об отладке см. Раздел «Отладка диаграмм Stateflow».

Просмотр графического представления

Stateflow автоматически генерирует графическое представление созданной таблицы переходов только для чтения.

  1. На вкладке Debug нажмите Show Auto Chart.

    Верхний уровень диаграммы переходов состояний:

    The Normal состояние появляется как субдиаграмма.

  2. Чтобы просмотреть состояния и переходы, содержащиеся в графике, дважды кликните Normal состояние.

Похожие темы