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

Чтобы задать поведение графика Stateflow® в терминах времени симуляции, включайте временные логические операторы в состояние и действия перехода графика. Временные логические операторы являются встроенными функциями, которые могут сказать вам отрезок времени, что состояние остается активным или что булево условие остается верным. С временной логикой можно управлять синхронизацией:

  • Переходы между состояниями

  • Вызовы функции

  • Изменения в значениях переменных

Для получения дополнительной информации смотрите, Задают Поведение Графика при помощи Действий.

Временные логические операторы

Наиболее распространенными операторами для абсолютно-разовой временной логики является after, elapsed, и duration.

ОператорСинтаксисОписание

после

after(n, sec)

Возвращает true если n секунды времени симуляции протекли начиная с активации ассоциированной страны. В противном случае оператор возвращает false.

прошедший

elapsed(sec)

Возвращает номер секунд времени симуляции, которые протекли начиная с активации ассоциированной страны.

длительность

duration(C)

Возвращает номер секунд времени симуляции, которые протекли начиная с булева условия C становится true.

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

  • Состояние, содержащее оператор, повторно активирует.

  • Исходное состояние для перехода, содержащего оператор, повторно активирует.

  • Булево условие в duration оператор становится false.

Примечание

Некоторые операторы, такие как after, поддержите основанную на событии временную логику и абсолютно-разовую временную логику в секундах (sec), миллисекунды (msec), и микросекунды (usec). Для получения дополнительной информации смотрите Выполнение Диаграммы управления при помощи Временной Логики.

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

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

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

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

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

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

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

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

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

Смотрите также

| |

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

Больше о