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

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

  • Переходы между состояниями

  • Вызовы функций

  • Изменения в значениях переменных

Для получения дополнительной информации смотрите Задать поведение графика при помощи действий.

Временные логические операторы

Наиболее распространенными операторами для временной логики в абсолютном времени являются after, elapsed, и duration.

ОператорСинтаксисОписание

after

after(n,sec)

Возвращает true если n секунд времени симуляции прошло с момента активации связанного состояния. В противном случае оператор возвращается false.

elapsed

elapsed(sec)

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

duration

duration(C)

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

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

  • Состояние, содержащее оператор, активируется повторно.

  • Исходное состояние для перехода, содержащего оператор, активируется повторно.

  • Логическое условие в duration оператор становится false.

Примечание

Некоторые операторы, такие как after, поддерживает основанную на событиях временную логику и абсолютную временную логику в секундах (sec), миллисекунды (msec) и микросекунды (usec). Для получения дополнительной информации см. «Управление выполнением диаграммы при помощи временной логики».

Пример временной логики

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

Пример состоит из диаграммы Stateflow и подсистемы Simulink ®. Bang-Bang Контроллера графика сравнивает текущую температуру бойлера с ссылкой уставкой и определяет, включать ли бойлер. Подсистема Boiler Модель Объекта Управления моделирует динамику внутри котла, увеличивая или понижая его температуру в соответствии с состоянием контроллера. Затем температура бойлера возвращается в график контроллера для следующего шага симуляции.

Bang-Bang Контроллера графика использует оператор временной логики after кому:

  • Регулируйте время релейного цикла, когда котел чередуется между включением и выключением.

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

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

Синхронизация цикла Bang-Bang

Bang-Bang Controller графика содержит пару подсостояний, которые представляют два режима работы бойлера, On и Off. График использует выходные данные активного состояния boiler чтобы указать, какое подсостояние активно.

Chart modeling a bang-bang controller. Subcharts appear as opaque boxes to hide the low-level details of the chart.

Метки переходов между On и Off подсостояния определяют поведение контроллера.

ПереходМеткаОписание
Из On на Offafter(20,sec)Переход к Off состояние после 20 секунд пребывания в On состояние.
Из Off на Onafter(40,sec)[cold()]Когда температура бойлера ниже установленной ссылки точки (когда графическая функция cold() возвращает true), переход к On состояние после проведения не менее 40 секунд в Off состояние.
Из On на Off[Heater.On.warm()]Когда температура бойлера на или выше ссылки точки набора (когда графическая функция Heater.On.warm() возвращает true), переход к Off состояние.

В результате этих переходных действий время релейного цикла зависит от текущей температуры бойлера. В начале симуляции, когда бойлер холодный, контроллер проводит 40 секунд в Off состояние и 20 секунд в On состояние. В момент времени t = 478 секунд температура бойлера достигает ссылки точки. С этого момента бойлер должен компенсировать только потерянное тепло в Off состояние. Затем контроллер тратит 40 секунд в Off состояние и 4 секунды в On состояние.

Simulation Data Inspector showing the output of the chart.

Синхронизация светодиодного индикатора состояния

The Off состояние содержит подсостояние Flash с самоциклом переходом, охраняемым действием after(5,sec). Из-за этого перехода, когда Off состояние активно, подсостояние выполняет свое действие входа и вызывает графическую функцию flash_LED каждые 5 секунд. Функция переключает значение выходного символа LED от 0 до 1.

The Off substate.

The On состояние вызывает графическую функцию flash_LED как состояние активности типа en,du. Когда On состояние активно, оно вызывает функцию в каждый временной шаг симуляции (в данном случае, каждую секунду), переключая значение выходного символа LED от 0 до 2.

The On substate.

В результате синхронизация светодиодного индикатора состояния зависит от режима работы бойлера. Для примера:

  • От t = 0 до t = 40 секунд, котел выключен и LED сигнал чередуется между 0 и 1 каждые 5 секунд.

  • От t = 40 до t = 60 секунд, котел включен и LED сигнал чередуется между 0 и 2 каждую секунду.

  • От t = 60 до t = 100 секунд, котел снова выключен и LED сигнал чередуется между 0 и 1 каждые 5 секунд.

Simulation Data Inspector showing the output of the chart.

Исследуйте пример

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

  1. Введите новые состояния активности, которые вызывают elapsed и duration операторы.

    • В On состояние, позвольте Timer1 быть периодом времени, в течение которого On состояние активно:

      en,du,ex: Timer1 = elapsed(sec)

    • В Off состояние, позвольте Timer2 - продолжительность времени, в течение которого температура котла находится на уровне или выше ссылки набора точки:

      en,du,ex: Timer2 = duration(temp>=reference)

    Область метки en,du,ex указывает, что эти действия происходят всякий раз, когда соответствующее состояние активно.

  2. На панели «Символы» нажмите кнопку Resolve Undefined Symbols. Редактор Stateflow разрешает символы Timer1 и Timer2 в качестве выходных данных.

  3. Включите ведение журнала для каждого из этих символов. На панели «Символы» выберите каждый символ. В Property Inspector в разделе Logging выберите Log signal data.

    • Timer1

    • Timer2

  4. На вкладке Simulation нажмите Run.

  5. На вкладке Simulation, под Review Results, нажмите Data Inspector.

  6. В Данные моделирования Inspector отобразите сигналы boiler и Timer1 в том же наборе осей. График показывает, что:

    • The On фаза релейного цикла обычно длится 20 секунд, когда бойлер холодный, и 4 секунды, когда бойлер теплый.

    • Первый раз, когда бойлер достигает ссылки температуры, цикл прерывается преждевременно, и контроллер остается в On состояние всего 18 секунд.

    • Когда бойлер теплый, первый цикл немного короче, чем последующие циклы, так как контроллер остается в On состояние всего 3 секунды.

    Simulation Data Inspector showing the output of the chart.

  7. В Данные моделирования Inspector отобразите сигналы boiler и Timer2 в том же наборе осей. График показывает, что:

    • Когда бойлер теплый, обычно требуется 9 секунд, чтобы охладиться в Off фаза релейного цикла.

    • В первый раз, когда котел достигает ссылки температуры, на охлаждение уходит более чем в два раза больше времени (19 секунд).

    Simulation Data Inspector showing the output of the chart.

Более короткий цикл и более длительное время охлаждения являются следствием иерархии субстатов внутри On состояние. Когда бойлер впервые достигает ссылку температуры, переход от HIGH на NORM держит контроллер включенным в течение дополнительного временного шага, приводя к более теплому, чем обычно, котлу. В более поздних циклах историческое соединение вызывает On фаза для начала с активной NORM подсостояние. Затем контроллер отключается сразу после того, как бойлер достигает ссылки температуры, получая более холодный бойлер.

См. также

| |

Похожие примеры

Подробнее о