Чтобы задать поведение графика Stateflow® в терминах времени симуляции, включайте временные логические операторы в состояние и действия перехода графика. Временные логические операторы являются встроенными функциями, которые могут сказать вам отрезок времени, что состояние остается активным или что булево условие остается верным. С временной логикой можно управлять синхронизацией:
Переходы между состояниями
Вызовы функции
Изменения в значениях переменных
Для получения дополнительной информации смотрите, Задают Поведение Графика при помощи Действий.
Наиболее распространенными операторами для абсолютно-разовой временной логики является after
, elapsed
, и duration
.
Оператор | Синтаксис | Описание |
---|---|---|
| Возвращает | |
| Возвращает номер секунд времени симуляции, которые протекли начиная с активации ассоциированной страны. | |
| Возвращает номер секунд времени симуляции, которые протекли начиная с булева условия |
Каждый оператор сбрасывает свой связанный таймер, чтобы обнулить каждый раз когда:
Состояние, содержащее оператор, повторно активирует.
Исходное состояние для перехода, содержащего оператор, повторно активирует.
Булево условие в duration
оператор становится false
.
Некоторые операторы, такие как after
, поддержите основанную на событии временную логику и абсолютно-разовую временную логику в секундах (sec
), миллисекунды (msec
), и микросекунды (usec
). Для получения дополнительной информации смотрите Выполнение Диаграммы управления при помощи Временной Логики.
Этот пример использует временную логику, чтобы смоделировать релейный регулятор, который регулирует внутреннюю температуру бойлера.
Пример состоит из диаграммы Stateflow и подсистемы Simulink®. Диспетчер Скорострельного оружия строит диаграмму, сравнивает текущую температуру бойлера с точкой множества элементарных исходов и определяет, включить ли бойлер. Подсистема модели Котельной установка моделирует динамику в бойлере, увеличиваясь или уменьшая его температуру согласно состоянию контроллера. Температура бойлера затем возвращается в график контроллера для следующего шага в симуляции.
Диспетчер Скорострельного оружия график использует временный логический оператор after
к:
Отрегулируйте синхронизацию цикла скорострельного оружия, когда бойлер чередуется между на и прочь.
Управляйте состоянием LED, которое высвечивается на различных уровнях в зависимости от рабочего режима бойлера.
Таймеры, задающие поведение бойлера и подсистем LED, действуют друг независимо от друга, не блокируясь или разрушая симуляцию контроллера.
График Bang-Bang Controller содержит пару подсостояний, представляющих два рабочих режима бойлера: 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
указывает, что эти действия происходят каждый раз, когда соответствующее состояние активно.
В панели Символов нажмите Resolve Undefined Symbols
. Редактор Stateflow разрешает символы Timer1
и Timer2
как выходные данные.
Позвольте регистрировать для каждого из этих символов. В панели Символов выберите каждый символ. В Property Inspector, под Logging, выбирают Log signal data.
boiler
Timer1
Timer2
Во вкладке Simulation нажмите Run .
Во вкладке Simulation, под Review Results, нажимают Data Inspector .
В Инспекторе Данных моделирования отобразите сигналы boiler
и Timer1
в том же наборе осей. График показывает что:
On
фаза цикла скорострельного оружия обычно длится 20 секунд, когда бойлер является холодным и 4 секунды, когда бойлер является теплым.
Первый раз, когда бойлер достигает ссылочной температуры, цикл, прерван преждевременно, и контроллер остается в On
состояние в течение только 18 секунд.
Когда бойлер является теплым, первый цикл немного короче, чем последующие циклы, когда контроллер остается в On
состояние в течение только 3 секунд.
В Инспекторе Данных моделирования отобразите сигналы boiler
и Timer2
в том же наборе осей. График показывает что:
Если бойлер является теплым, обычно требуется 9 секунд, чтобы охладиться в Off
фаза цикла скорострельного оружия.
В первый раз, когда бойлер достигает ссылочной температуры, он берет более двух раз как долго, чтобы охладиться (19 секунд).
Более короткий цикл и более длительное время охлаждения является последствием иерархии подсостояния в On
состояние. Когда бойлер достигает ссылочной температуры впервые, перехода от HIGH
к NORM
сохраняет контроллер на для шага дополнительного времени, приводящего к более-теплому-,-чем-нормальный бойлеру. В более поздних циклах соединение истории вызывает On
фаза, чтобы запуститься с активного NORM
подсостояние. Контроллер затем сразу выключает после того, как бойлер достигает ссылочной температуры, приводящей к более холодному бойлеру.
после | длительность | прошедший