Чтобы определить поведение диаграммы Stateflow ® с точки зрения времени моделирования, включите временные логические операторы в действия состояния и перехода диаграммы. Операторы временной логики - это встроенные функции, которые могут определить продолжительность времени, в течение которого состояние остается активным или логическое условие остается верным. С помощью временной логики можно управлять синхронизацией:
Переходы между состояниями
Вызовы функций
Изменения значений переменных
Дополнительные сведения см. в разделе Определение поведения диаграммы с помощью действий.
Наиболее распространенными операторами для временной логики абсолютного времени являются after, elapsed, и duration.
| Оператор | Синтаксис | Описание |
|---|---|---|
| Прибыль | |
| Возвращает число секунд времени моделирования, прошедших с момента активации связанного состояния. | |
| Возвращает число секунд времени моделирования, прошедших с момента логического условия |
Каждый оператор сбрасывает связанный с ним таймер на ноль каждый раз, когда:
Состояние, содержащее оператор, повторно активируется.
Исходное состояние перехода, содержащего оператор, повторно активируется.
Логическое условие в duration оператор становится false.
Примечание
Некоторые операторы, такие как after, поддерживать временную логику на основе событий и временную логику абсолютного времени в секундах (sec), миллисекунды (msec) и микросекунды (usec). Дополнительные сведения см. в разделе Управление выполнением диаграммы с помощью временной логики.
В этом примере используется временная логика для моделирования контроллера взрыва, который регулирует внутреннюю температуру котла.

Пример состоит из диаграммы Stateflow и подсистемы Simulink ®. На диаграмме контроллера Bang-Bang сравнивается текущая температура котла с контрольной уставкой и определяется необходимость включения котла. Подсистема модели котельной установки моделирует динамику внутри котла, увеличивая или понижая его температуру в соответствии с состоянием контроллера. Затем температура котла возвращается на схему контроллера для следующего этапа моделирования.
Диаграмма контроллера Bang-Bang использует оператор временной логики after кому:
Регулировка времени цикла bang-bang, когда котел чередуется между включением и выключением.
Управление светодиодным индикатором состояния, который мигает с различной скоростью в зависимости от режима работы котла.
Таймеры, определяющие поведение подсистем котла и светодиодов, работают независимо друг от друга без блокирования или нарушения моделирования контроллера.
Диаграмма контроллера Bang-Bang содержит пару подстанций, которые представляют два режима работы котла, On и Off. Диаграмма использует выходные данные активного состояния boiler для указания активного подсостояния.

Метки на переходах между On и Off Подстанции определяют поведение контроллера bang-bang.
| Переход | Этикетка | Описание |
|---|---|---|
От On кому Off | after(20,sec) | Переход к Off штат, проведя 20 секунд в On состояние. |
От Off кому On | after(40,sec)[cold()] | Когда температура котла ниже контрольной уставки (когда графическая функция cold() прибыль true), переход к On штат, проведя не менее 40 секунд в Off состояние. |
От On кому Off | [Heater.On.warm()] | Когда температура котла находится на или выше контрольной уставки (когда графическая функция Heater.On.warm() прибыль true), переход к Off состояние. |
В результате этих переходных действий хронометраж цикла bang-bang зависит от текущей температуры котла. В начале моделирования, когда котел холодный, контроллер проводит 40 секунд в Off состояние и 20 секунд в On состояние. В момент времени t = 478 секунд температура котла достигает контрольной точки. С этого момента котел должен компенсировать только тепло, потерянное во время Off состояние. Затем контроллер проводит 40 секунд в Off состояние и 4 секунды в On состояние.

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

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

В результате хронометраж светодиодного индикатора состояния зависит от режима работы котла. Например:
От t = 0 до t = 40 секунд котел выключен и LED сигнал изменяется от 0 до 1 каждые 5 секунд.
От t = 40 до t = 60 секунд, котел включен и LED сигнал изменяется от 0 до 2 в секунду.
От t = 60 до t = 100 секунд котел снова отключается, и LED сигнал изменяется от 0 до 1 каждые 5 секунд.

Используйте дополнительную временную логику, чтобы выяснить, как изменяется время цикла взрыва по мере приближения температуры котла к контрольной точке.
Введите новые действия состояния, которые вызывают elapsed и duration операторов.
В On состояние, пусть Timer1 - продолжительность времени, в течение которого On состояние активно:
en,du,ex: Timer1 = elapsed(sec)
В Off состояние, пусть Timer2 - продолжительность времени, в течение которого температура котла находится на уровне или выше контрольной уставки:
en,du,ex: Timer2 = duration(temp>=reference)
Этикетка en,du,ex указывает, что эти действия выполняются при каждом активном состоянии.
На панели Символы (Symbols) щелкните Разрешить неопределенные символы (Resolve Undefined Symbols
Редактор Stateflow
разрешает символы Timer1 и Timer2 в качестве выходных данных.![]()
Включите ведение журнала для каждого из этих символов. На панели «Символы» выберите каждый символ. В инспекторе свойств в разделе «Ведение журнала» выберите «Регистрировать данные сигнала».
Timer1
Timer2
На вкладке Моделирование (Simulation) щелкните Выполнить (Run).
![]()
На вкладке Моделирование (Simulation) в разделе Результаты проверки (Review Results) щелкните Инспектор данных (Data Inspector).
![]()
В инспекторе данных моделирования просмотрите сигналы. boiler и Timer1 в одном и том же наборе осей. График показывает, что:
On фаза цикла bang-bang обычно длится 20 секунд, когда котел холодный, и 4 секунды, когда котел теплый.
Первый раз, когда котел достигает контрольной температуры, цикл преждевременно прерывается, и контроллер остается в On состояние всего на 18 секунд.
Когда котел теплый, первый цикл немного короче, чем последующие циклы, так как контроллер остается в On состояние всего на 3 секунды.

В инспекторе данных моделирования просмотрите сигналы. boiler и Timer2 в одном и том же наборе осей. График показывает, что:
Как только котел теплый, обычно требуется 9 секунд, чтобы охладиться в Off фаза цикла bang-bang.
Первый раз, когда котел достигает эталонной температуры, для охлаждения требуется более чем в два раза больше времени (19 секунд).

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