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

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

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

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

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

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

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

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

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

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

График Bang-Bang Controller содержит пару подсостояний, которые представляют два рабочих режима бойлера, On и Off. График использует активные выходные данные состояния boiler указать, какое подсостояние активно.

Chart modeling a bang-bang controller. Subcharts appear as opaque boxes to hide the low-level details of the chart.

Метки на переходах между On и Off подсостояния задают поведение контроллера скорострельного оружия.

ПереходМеткаОписание
От On к Offafter(20,sec)Переход к Off состояние после пребывания в течение 20 секунд в On состояние.
От Off к Onafter(40,sec)[cold()]Когда температурой бойлера является ниже точки множества элементарных исходов, как определено графической функцией cold(), переход к On состояние после пребывания в течение по крайней мере 40 секунд в Off состояние.
От On к OffturnOffКогда внутренняя логика перехода в On состояние требует, чтобы бойлер выключил, потому что температура бойлера в или выше точки множества элементарных исходов, перехода к Off состояние.

В результате этих действий перехода синхронизация цикла скорострельного оружия зависит от текущей температуры бойлера. В начале симуляции, когда бойлер является холодным, диспетчер проводит 40 секунд в Off состояние и 20 секунд в On состояние. Во время t = 478 секунд, температура бойлера достигает контрольной точки. От той точки на бойлер должен компенсировать только тепло, потерянное в то время как в Off состояние. Диспетчер затем проводит 40 секунд в Off состояние и 4 секунды в On состояние.

Simulation Data Inspector showing the output of the chart.

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

Off состояние содержит Flash подсостояния с переходом самоцикла, который охраняет действие after(5,sec). Из-за этого перехода, когда Off состояние активно, подсостояние выполняет свое действие входа и вызывает графическую функцию flash_LED каждые 5 секунд. Функция переключает значение выходного символа LED между 0 и 1.

The Off substate.

On состояние вызывает графическую функцию flash_LED как состояние активности типа en,du. Когда On состояние активно, оно вызывает функцию на каждом временном шаге симуляции (в этом случае, каждую секунду), переключая значение выходного символа LED между 0 и 2.

The On substate.

В результате синхронизация состояния LED зависит от рабочего режима бойлера. Например:

  • От t = 0 к t = 40 секунд, бойлер выключен и LED предупредите об альтернативах между 0 и 1 каждые 5 секунд.

  • От t = 40 к t = 60 секунд, бойлер включен и LED предупредите об альтернативах между 0 и 2 каждую секунду.

  • От t = 60 к t = 100 секунд, бойлер еще раз выключен и LED предупредите об альтернативах между 0 и 1 каждые 5 секунд.

Simulation Data Inspector showing the output of the chart.

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

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

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

  3. Позвольте регистрировать для каждого из этих символов. В панели Символов выберите каждый символ. В Property Inspector, под Logging, выбирают Log signal data.

    • Timer1

    • Timer2

  4. Во вкладке Simulation нажмите Run .

  5. Во вкладке Simulation, под Review Results, нажимают Data Inspector .

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

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

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

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

    Simulation Data Inspector showing the output of the chart.

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

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

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

    Simulation Data Inspector showing the output of the chart.

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

Похожие темы