Управление выполнением диаграммы при помощи временной логики

Временная логика управляет выполнением графика в терминах времени. В состояниях активности и переходах, можно использовать два типа временной логики:

  • Основанная на событии временная логика отслеживает повторяющиеся события. Можно использовать любое явное или неявное событие в качестве основного события.

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

    • Графики в Simulink® модель define абсолютно-разовая временная логика в терминах времени симуляции.

    • Автономные диаграммы в MATLAB® задайте абсолютно-разовую временную логику в терминах тактового стеной времени, которое ограничивается 1 точностью миллисекунды.

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

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

  • on состояния действия

  • Действия с путями к переходу, которые происходят из состояния

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

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

after(n,E)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

E основное событие для оператора.

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

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

on after(3,E):
   disp('ON');

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

after(5,E)

after(n,tick)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

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

Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события. Для получения дополнительной информации смотрите Поведение Диаграммы управления при помощи Неявных Событий.

Переход из ассоциированной страны, когда график просыпается, по крайней мере, в седьмой раз начиная с состояния, стал активным, но только если переменная temp больше 98.6.

after(7,tick)[temp > 98.6]

after(n,sec)

after(n,msec)

after(n,usec)

n положительное вещественное число или выражение, которое оценивает к положительному вещественному значению.

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

В графиках в модели Simulink задайте время в секундах (sec), миллисекунды (msec), или микросекунды (usec).

В автономных диаграммах в MATLAB задайте время в секундах (sec). Оператор создает timer MATLAB объект, который генерирует неявное событие, чтобы разбудить график. MATLAB timer объекты ограничиваются 1 точностью миллисекунды. Для получения дополнительной информации смотрите События в Автономных диаграммах.

Установите temp переменная к LOW каждый раз, когда график просыпается, начиная, когда ассоциированная страна активна в течение по крайней мере 12,3 секунд.

on after(12.3,sec):
   temp = LOW;
at

at(n,E)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

E основное событие для оператора.

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

Отобразите сообщение о состоянии, когда график обработает третью широковещательную передачу события E после того, как состояние стало активным.

on at(3,E):
   disp('ON');

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

at(5,E)

at(n,tick)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

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

Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события. Для получения дополнительной информации смотрите Поведение Диаграммы управления при помощи Неявных Событий.

Переход из ассоциированной страны, когда график просыпается в седьмой раз начиная с состояния, стал активным, но только если переменная temp больше 98.6.

at(7,tick)[temp > 98.6]

at(n,sec)

n положительное вещественное число или выражение, которое оценивает к положительному вещественному значению.

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

Используя at когда абсолютно-разовый временный логический оператор поддерживается только в автономных диаграммах в MATLAB. Оператор создает timer MATLAB объект, который генерирует неявное событие, чтобы разбудить график. MATLAB timer объекты ограничиваются 1 точностью миллисекунды. Для получения дополнительной информации смотрите События в Автономных диаграммах.

Установите temp переменная к HIGH если состояние было активно в течение точно 12,3 секунд.

on at(12.3,sec):
   temp = HIGH;
before

before(n,E)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

E основное событие для оператора.

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

Временный логический оператор before поддерживается только в диаграммах Stateflow в моделях Simulink.

Отобразите сообщение о состоянии, когда график обработает первые и вторые широковещательные сообщения события E после того, как состояние стало активным.

on before(3,E):
   disp('ON');

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

before(5,E)

before(n,tick)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

Возвращает true если график разбудил меньше, чем n времена, поскольку ассоциированная страна стала активной. В противном случае оператор возвращает false.

Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события. Для получения дополнительной информации смотрите Поведение Диаграммы управления при помощи Неявных Событий.

Временный логический оператор before поддерживается только в диаграммах Stateflow в моделях Simulink.

Переход из ассоциированной страны, когда график просыпается, но только если переменная temp больше 98.6, и график проснулся меньше чем семь раз, поскольку состояние стало активным.

before(7,tick)[temp > 98.6]

before(n,sec)

before(n,msec)

before(n,usec)

n положительное вещественное число или выражение, которое оценивает к положительному вещественному значению.

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

Задайте время в секундах (sec), миллисекунды (msec), или микросекунды (usec).

Временный логический оператор before поддерживается только в диаграммах Stateflow в моделях Simulink.

Установите temp переменная к MED каждый раз, когда график просыпается, но только если ассоциированная страна была активна для меньше 12,3 секунд.

on before(12.3,sec):
   temp = MED;
every

every(n,E)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

E основное событие для оператора.

Возвращает true в каждом nth вхождение события E поскольку ассоциированная страна стала активной. В противном случае оператор возвращает false.

Отобразите сообщение о состоянии, когда график обработает каждую третью широковещательную передачу события E после того, как состояние стало активным.

on every(3,E):
   disp('ON');

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

every(5,E)

every(n,tick)

n положительное целое число или выражение, которое оценивает к положительному целочисленному значению.

Возвращает true в каждом nth время, когда график просыпается, поскольку ассоциированная страна стала активной. В противном случае оператор возвращает false.

Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события. Для получения дополнительной информации смотрите Поведение Диаграммы управления при помощи Неявных Событий.

Переход из ассоциированной страны каждый седьмой tick событие начиная с состояния стало активным, но только если переменная temp больше 98.6.

every(7,tick)[temp > 98.6]

every(n,sec)

n положительное вещественное число или выражение, которое оценивает к положительному вещественному значению.

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

Используя every когда абсолютно-разовый временный логический оператор поддерживается только в автономных диаграммах в MATLAB. Оператор создает timer MATLAB объект, который генерирует неявное событие, чтобы разбудить график. MATLAB timer объекты ограничиваются 1 точностью миллисекунды. Для получения дополнительной информации смотрите События в Автономных диаграммах.

Постепенно увеличьте temp переменная 5 каждые 12.3 секунд, что состояние активно.

on every(12.3,sec):
   temp = temp+5;
temporalCount

temporalCount(E)

E основное событие для оператора.

Возвращает количество случаев события E поскольку ассоциированная страна стала активной.

Используя temporalCount когда основанный на событии временный логический оператор поддерживается только в диаграммах Stateflow в моделях Simulink.

Доступ к последовательным элементам массива M каждый раз, когда график обрабатывает широковещательную передачу события E.

on E:
   y = M(temporalCount(E));
temporalCount(tick)

Возвращает число раз, которое разбудил график, поскольку ассоциированная страна стала активной.

Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события.

Используя temporalCount когда основанный на событии временный логический оператор поддерживается только в диаграммах Stateflow в моделях Simulink.

Сохраните значение входных данных u в последовательных элементах массива M.

en,du:
   M(temporalCount(tick)+1) = u;

temporalCount(sec)

temporalCount(msec)

temporalCount(usec)

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

Задайте время в секундах (sec), миллисекунды (msec), или микросекунды (usec).

Сохраните количество миллисекунд, поскольку состояние стало активным.

en,du:
   y = temporalCount(msec);
elapsed

elapsed(sec)

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

Эквивалентный temporalCount(sec).

Сохраните номер секунд, поскольку состояние стало активным.

en,du:
   y = elapsed(sec);
etАльтернативный способ выполнить elapsed(sec).

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

E{disp(et);}
count

count(C)

C выражение, которое оценивает к true или false.

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

Диаграмма Stateflow сбрасывает значение count оператор, если условное выражение C становится false или если ассоциированная страна становится неактивной.

В графиках в модели Simulink, значении count может зависеть от размера шага. Изменение решателя или размера шага для модели влияет на результаты, приведенные count оператор.

Переход из ассоциированной страны, когда переменная x был больше или равен 2 для дольше, чем пять выполнения графика.

[count(x>=2) > 5]

Сохраните количество выполнения графика начиная с переменной x стал больше, чем 5.

en,du:
   y = count(x>5);
duration

duration(C)

duration(C,sec)

duration(C,msec)

duration(C,usec)

  • C выражение, которое оценивает к true или false.

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

Задайте время в секундах (sec), миллисекунды (msec), или микросекунды (usec). Модуль по умолчанию является секундами.

Диаграмма Stateflow сбрасывает значение duration оператор, если условное выражение C становится false или если ассоциированная страна становится неактивной.

Временный логический оператор duration не поддерживается в автономных диаграммах в MATLAB.

Переход из состояния, когда переменная x был больше или равен 0 для дольше, чем 0,1 секунды.

[duration(x>=0) > 0.1]

Сохраните количество миллисекунд начиная с переменной x стал больше, чем 5, и состояние стало активным.

en,du:
   y = duration(x>5,msec);

Можно использовать кавычки, чтобы заключить ключевые слова 'tick'секунда, 'msec', и 'usec'. Например, after(5,'tick') эквивалентно after(5,tick).

Примечание

Временные логические операторы after, at, before, и every сравните порог n к внутреннему счетчику целочисленного типа. Если n номер фиксированной точки, заданный или наклоном, который не является целочисленной степенью двойки или ненулевым смещением, затем сравнение может привести к неожиданным результатам из-за округления. Для получения дополнительной информации смотрите Реляционные операции для Данных Фиксированной точки.

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

Задайте задержки

В этом примере показано, как задать две абсолютных задержки графика непрерывного времени.

Выполнение графика выполняет эти шаги:

  1. Когда график просыпается, Input состояния активируется сначала.

  2. После 5,33 миллисекунд времени симуляции, перехода от Input к Output происходит.

  3. Input состояния становится неактивным и Output состояния становится активным.

  4. После 10,5 секунд времени симуляции, перехода от Output к Input происходит.

  5. Output состояния становится неактивным и Input состояния становится активным.

Шаги 2 - 5 повторяются, пока симуляция не заканчивается.

Если график имеет дискретный шаг расчета, любое действие в графике происходит в целочисленных множителях этого шага расчета. Например, предположите, что вы изменяете параметры конфигурации так, чтобы решатель Simulink® использовал фиксированный шаг размера 0,1 секунды. Затем первый переход от Input состояния утверждать Output происходит в t = 0,1 секунды. Это поведение применяется, потому что решатель не будит график в точно t = 5,33 миллисекунд. Вместо этого решатель будит график в целочисленных множителях 0,1 секунд, таких как t = 0,0 и 0,1 секунды.

Обнаружьте прошедшее время

В этом примере блок Step (Simulink) предоставляет модульный вход шага диаграмме Stateflow.

График определяет когда вход u равняется 1:

  • Если вход равняется 1 прежде t = 2 секунды, переход происходит от Start к Fast.

  • Если вход равняется 1 между t = 2 и t = 5 секунд, переход происходит от Start к Medium.

  • Если вход равняется 1 после t = 5 секунд, переход происходит от Start к Slow.

Используйте абсолютно-временную временную логику в Enabled подсистеме

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

Эта модель имеет активированную подсистему со Штатами при включении набора параметров к held.

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

Блок Signal Editor (Simulink) предоставляет входному сигналу эти характеристики:

  • Сигнал включает подсистему в t = 0.

  • Сигнал отключает подсистему в t = 2.

  • Сигнал повторно включает подсистему в t = 6.

Этот график показывает, что общее время протекло в графике. Когда входной сигнал включает подсистему во время t = 0, A состояния становится активным. В то время как система включена, увеличения прошедшего времени. Когда подсистема отключена в t = 2, график засыпает, и прошедшее время прекращает увеличиваться. Для 2 <t <6, прошедшее время остается замороженным в 2 секунды, потому что система отключена. Когда график просыпается в t = 6, прошедшее время начинает увеличиваться снова.

Переход от A состояния утверждать B зависит от прошедшего времени в то время как A состояния активно, не на времени симуляции. Поэтому переход происходит в t = 9, когда прошедшее время в A состояния равняется 5 секундам. Когда переход происходит, выходное значение y изменения от 0 до 1.

Это поведение модели применяется только к подсистемам, где вы устанавливаете Разрешать состояния параметров блоков при включении к held. Если вы устанавливаете параметр на reset, график повторно инициализирует полностью, когда подсистема повторно включена. Переходы по умолчанию выполняются и любой временный логический сброс счетчиков к 0.

Обозначение для основанной на событии временной логики в переходах

В диаграммах Stateflow в моделях Simulink, операторы after, at, и before поддержите два отличных обозначения, чтобы описать основанную на событии временную логику в переходе.

  • Trigger notation задает переход, который зависит только от основного события для временного логического оператора. Триггерное обозначение следует за этим синтаксисом:

    temporalLogicOperator(n,E)[C]
    где:

    • temporalLogicOperator булев временный логический оператор.

    • n количество вхождения оператора.

    • E основное событие оператора.

    • C дополнительное выражение условия.

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

  • Conditional notation задает переход, который зависит от основных и неосновных событий. Условное обозначение следует за этим синтаксисом:

    F[temporalLogicOperator(n,E) && C]
    где:

    • temporalLogicOperator булев временный логический оператор.

    • n количество вхождения оператора.

    • E основное событие оператора.

    • F дополнительное неосновное событие.

    • C дополнительное выражение условия.

    Когда вы используете условное обозначение с неосновным событием F, переход может произойти только, когда график обрабатывает широковещательную передачу F. Если вы не используете неосновное событие, переход может произойти, когда график обрабатывает любое явное или неявное событие.

    Условное обозначение для временных логических операторов не поддерживается в автономных диаграммах в MATLAB.

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

after(5,E)

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

[after(5,E)]

Примечание

Оператор every триггер поддержек и условные обозначения. Однако оба обозначения эквивалентны для этого оператора. Переход маркирует every(5,E) и [every(5,E)] укажите на переход из ассоциированной страны, когда график обработает kth широковещательная передача основного события E после того, как состояние стало активным, где k является кратным пять.

Лучшие практики для временной логики

Не используйте временную логику на путях к переходу без исходного состояния

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

  • on состояния действия

  • Действия с путями к переходу, которые происходят из состояния

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

Используйте абсолютно-разовую временную логику вместо tick в графиках в моделях Simulink

В графиках в модели Simulink значение выражений задержки, которые используют абсолютно-разовую временную логику, семантически независимо от шага расчета модели. В отличие от этого задержите выражения, которые используют временную логику на основе неявного события tick зависьте от размера шага, используемого решателем Simulink.

Кроме того, абсолютно-разовая временная логика поддерживается в графиках, которые ввели события. Неявное событие tick не поддерживается, когда диаграмма Stateflow в модели Simulink ввела события.

Не используйте at для абсолютно-временной временной логики в графиках в моделях Simulink

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

Chart with a transition that uses at as an absolute-time temporal logic operator.

Чтобы предотвратить ошибку времени выполнения, измените метку перехода в after(5.33,sec).

Chart with a transition that uses after as an absolute-time temporal logic operator.

Не используйте every для абсолютно-временной временной логики в графиках в моделях Simulink

В графиках в модели Simulink, с помощью every когда абсолютно-разовый временный логический оператор не поддерживается. Вместо этого используйте внешний переход самоцикла с after оператор. Например, предположите, что вы хотите распечатать сообщение о состоянии для активного состояния каждые 2.5 секунды во время выполнения графика.

Chart with a state action that uses every as an absolute-time temporal logic operator.

Чтобы предотвратить ошибку времени выполнения, замените состояние активности на внешний переход самоцикла.

Chart with a self-loop transition that uses after as an absolute-time temporal logic operator.

Добавьте соединение истории в состоянии, таким образом, график помнит настройки состояния до каждого перехода самоцикла. Смотрите Действие состояния Записи при помощи Соединений Истории.

Не используйте временную логику в путях к переходу с многочисленными источниками в автономных диаграммах в MATLAB

Автономные диаграммы в MATLAB не поддерживают использование временных логических операторов на путях к переходу, которые имеют больше чем одно исходное состояние. Например, эта автономная диаграмма производит ошибку времени выполнения потому что временное логическое выражение after(10,sec) инициировал путь к переходу, который имеет больше чем одно исходное состояние.

Standalone chart containing a temporal logic expression on the transition path originating from states Positive and Negative to state End.

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

Standalone chart using temporal logic expressions on separate transition paths.

Постарайтесь не смешивать абсолютно-разовую временную логику и условия в путях к переходу автономных диаграмм в MATLAB

В автономных диаграммах в MATLAB, операторы after, at, и every создайте MATLAB timer объекты, которые генерируют неявные события, чтобы разбудить график. Объединение этих операторов с условиями на том же пути к переходу может привести к непреднамеренному поведению:

  • Если условие на пути к переходу является ложным когда timer будит график, график выполняет during и on действия активного состояния.

  • График не сбрасывает timer объект сопоставил с операторами after и at. Если условие на пути к переходу становится верным в более позднее время, переход не происходит, пока другое явное или неявное событие не будит график.

Например, в этом графике, пути к переходу от A состояния утверждать B комбинирует абсолютно-разовый временный логический триггер after(1,sec) и условие [guard]. Переход от A состояния утверждать C имеет абсолютно-разовый временный логический триггер after(5,sec). Каждый переход сопоставлен с timer объект, который генерирует неявное событие. Первоначально, локальная переменная guard false.

Chart combining an absolute-time temporal logic trigger and a condition on the same transition path.

Когда вы выполняете график, утверждаете A становится активным. График выполняет entry действие и отображения сообщение 'Hello!'. После 1 секунды, timer сопоставленный с переходом от A к B будит график. Поскольку переход не допустим, график выполняет during действие в A состояния и отображает сообщение 'Hello!' во второй раз.

Предположим, что после 2 секунд график получает входное событие E. График выполняет on действие в A состояния и изменяет значение guard к true. Поскольку график не сбрасывает timer сопоставленный с оператором after, переход от A к B не происходит, пока другое событие не будит график.

После 5 секунд, timer сопоставленный с переходом от A toc будит график. Поскольку переход от A к B допустимо и имеет более высокий порядок выполнения, график не берет переход, чтобы утвердить C или отобразите сообщение 'Farewell!'. Вместо этого B состояния становится активным, и график отображает сообщение 'Good bye!'.

Используйте графики с дискретными шагами расчета для более эффективной генерации кода

Код сгенерировал для дискретных графиков, которые не являются в целочисленных счетчиках использования инициированной или активированной подсистемы, чтобы отследить время вместо времени, обеспеченного Simulink. Это поведение допускает более эффективную генерацию кода в терминах издержек и памяти, и включает этот код для использования в программном обеспечении в цикле (SIL) и процессор в цикле (PIL) режимы симуляции. Для получения дополнительной информации смотрите SIL симуляции и PIL симуляции (Embedded Coder).

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

| | | | | | | | | (Simulink) | (Simulink)

Похожие темы