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

Пример состоит из диаграммы Stateflow и подсистемы Simulink®. Диспетчер Скорострельного оружия строит диаграмму, сравнивает текущую температуру бойлера с точкой множества элементарных исходов и определяет, включить ли бойлер. Подсистема Котельной установка моделирует динамику в бойлере, увеличиваясь или уменьшая его температуру согласно состоянию контроллера. Температура бойлера затем возвращается в график контроллера для следующего шага в симуляции.
Диспетчер Скорострельного оружия график использует временный логический оператор after для:
Отрегулируйте синхронизацию цикла скорострельного оружия, когда бойлер чередуется между на и прочь.
Управляйте состоянием LED, которое высвечивается на различных уровнях в зависимости от рабочего режима бойлера.
Таймеры, задающие поведение бойлера и подсистем LED, действуют друг независимо от друга, не блокируясь или разрушая симуляцию контроллера.
Контроллер Скорострельного оружия график содержит пару подсостояний, представляющих два рабочих режима бойлера: On и Off. turn_boiler графической функции обновляет выходные данные boiler, чтобы указать, какое из подсостояний активно.

Действия, охраняющие переходы между On и подсостояниями Off, задают поведение контроллера скорострельного оружия.
| Переход | Действие | Описание |
|---|---|---|
От 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. |
В результате этих действий перехода синхронизация цикла скорострельного оружия зависит от текущей температуры бойлера. В начале симуляции, когда бойлер является холодным, диспетчер проводит 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 как акт государственной власти типа during. Когда состояние On активно, оно вызывает функцию на каждом временном шаге симуляции (в этом случае, каждую секунду), переключая значение выходного символа LED между 0 и 2.

В результате синхронизация состояния LED зависит от рабочего режима бойлера. Например:
От 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 как выходные данные
.
В Property Inspector позвольте регистрировать для этих символов:
boiler
Timer1
Timer2
Запустите симуляцию.
В Инспекторе Данных моделирования отобразите сигналы boiler и Timer1 в том же наборе осей. График показывает что:
Фаза On цикла скорострельного оружия обычно длится 20 секунд, когда бойлер является холодным и 4 секунды, когда бойлер является теплым.
Первый раз, когда бойлер достигает ссылочной температуры, цикл, прерван преждевременно, и контроллер остается в состоянии On в течение только 18 секунд.
Когда бойлер является теплым, первый цикл немного короче, чем последующие циклы, когда контроллер остается в состоянии On в течение только 3 секунд.

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

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