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

Чтобы задать поведение графика 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). Для получения дополнительной информации смотрите Выполнение Диаграммы управления при помощи Временной Логики.

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

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

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

Диспетчер Скорострельного оружия график использует временный логический оператор after для:

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

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

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

Синхронизация цикла скорострельного оружия

Контроллер Скорострельного оружия график содержит пару подсостояний, представляющих два рабочих режима бойлера: On и Off. turn_boiler графической функции обновляет выходные данные boiler, чтобы указать, какое из подсостояний активно.

Действия, охраняющие переходы между 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.

Синхронизация состояния LED

Состояние 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 секунд.

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

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

  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. В окне Symbols кликните по значку Resolve Undefined Symbols. Редактор Stateflow разрешает символы Timer1 и Timer2 как выходные данные.

  3. В Property Inspector позвольте регистрировать для этих символов:

    • boiler

    • Timer1

    • Timer2

  4. Запустите симуляцию.

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

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

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

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

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

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

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

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

Связанные примеры

Больше о