Чтобы задать поведение графика 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
. Контроллер затем сразу выключает после того, как бойлер достигает ссылочной температуры, приводящей к более холодному бойлеру.