exponenta event banner

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

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

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

  • Временная логика абсолютного времени отслеживает прошедшее время после того, как состояние стало активным. Время для временных логических операторов абсолютного времени зависит от типа диаграммы Stateflow ®:

    • Диаграммы в модели Simulink ® определяют временную логику абсолютного времени с точки зрения времени моделирования.

    • Автономные диаграммы в 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). Оператор создает MATLAB timer объект, генерирующий неявное событие для пробуждения диаграммы. MATLAB timer объекты ограничены точностью до 1 миллисекунды. Дополнительные сведения см. в разделе События в автономных диаграммах.

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

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

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. Оператор создает MATLAB timer объект, генерирующий неявное событие для пробуждения диаграммы. MATLAB timer объекты ограничены точностью до 1 миллисекунды. Дополнительные сведения см. в разделе События в автономных диаграммах.

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

on at(12.3,sec):
   temp = HIGH;
прежде

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(n,E)

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

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

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

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

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

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

every(5,E)

every(n,tick)

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

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

Неявное событие tick не поддерживается, если диаграмма Stateflow в модели Simulink имеет входные события. Дополнительные сведения см. в разделе Управление поведением диаграммы с помощью неявных событий.

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

every(7,tick)[temp > 98.6]

every(n,sec)

n - положительное вещественное число или выражение, которое вычисляет положительное действительное значение.

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

Используя every как оператор временной логики абсолютного времени поддерживается только в автономных диаграммах в MATLAB. Оператор создает MATLAB timer объект, генерирующий неявное событие для пробуждения диаграммы. 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(sec)

Возвращает время, прошедшее с момента активации связанного состояния.

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

Сохраните количество секунд с момента активации состояния.

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

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

E{disp(et);}
количество

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(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', 'sec', '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.

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

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

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

Подсистема содержит диаграмму, использующую after для запуска перехода.

Блок редактора сигналов (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.

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

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

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

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

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

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

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

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

    • C является необязательным выражением условия.

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

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

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

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

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

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

    • F является необязательным событием без базы данных.

    • C является необязательным выражением условия.

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

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

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

after(5,E)

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

[after(5,E)]

Примечание

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

Рекомендации по временной логике

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

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

  • Государство on действия

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

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

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

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

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

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

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

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

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

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

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

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

Не использовать временную логику в путях перехода с несколькими источниками в автономных диаграммах в 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 объекты, генерирующие неявные события для пробуждения диаграммы. Объединение этих операторов с условиями на одном и том же пути перехода может привести к непреднамеренному поведению:

  • Если условие на пути перехода имеет значение false, то 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 кому C пробуждает график. Потому что переход от A кому B является действительным и имеет более высокий порядок выполнения, диаграмма не принимает переход в состояние C или вывести сообщение на экран 'Farewell!'. Вместо этого состояние B становится активным, и на диаграмме отображается сообщение 'Good bye!'.

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

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

См. также

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

Связанные темы