Временная логика управляет выполнением диаграммы с точки зрения времени. В действиях состояния и переходах можно использовать два типа временной логики:
Временная логика на основе событий отслеживает повторяющиеся события. В качестве базового события можно использовать любое явное или неявное событие.
Временная логика абсолютного времени отслеживает прошедшее время после того, как состояние стало активным. Время для временных логических операторов абсолютного времени зависит от типа диаграммы Stateflow ®:
Диаграммы в модели Simulink ® определяют временную логику абсолютного времени с точки зрения времени моделирования.
Автономные диаграммы в MATLAB ® определяют временную логику абсолютного времени с точки зрения времени настенных часов, которое ограничено точностью 1 миллисекунда.
Чтобы определить поведение диаграммы Stateflow на основе временной логики, используйте операторы, перечисленные в этой таблице. Эти операторы могут отображаться в:
Государство on действия
Действия с путями перехода, исходящими из состояния
Каждый оператор временной логики имеет ассоциированное состояние, которое является состоянием, в котором появляется действие или из которого происходит путь перехода. Диаграмма Stateflow сбрасывает счетчик, используемый каждым оператором при каждом повторном включении связанного состояния.
| Оператор | Синтаксис | Описание | Пример |
|---|---|---|---|
after |
| Прибыль true если событие E произошло, по крайней мере, n раз после того, как связанное состояние стало активным. В противном случае оператор возвращает false. | Отображение сообщения о состоянии, когда диаграмма обрабатывает широковещательную передачу события on after(3,E): disp('ON'); |
Переход из связанного состояния, когда диаграмма обрабатывает широковещательную передачу события after(5,E) | |||
| Прибыль Неявное событие | Переход из связанного состояния при пробуждении диаграммы, по крайней мере, в седьмой раз с момента активации состояния, но только в том случае, если переменная after(7,tick)[temp > 98.6] | |
| Прибыль В диаграммах модели Simulink укажите время в секундах ( В автономных диаграммах в MATLAB укажите время в секундах ( | Установите on after(12.3,sec):
temp = LOW; | |
в |
| Прибыль true если событие E произошло точно n раз после того, как связанное состояние стало активным. В противном случае оператор возвращает false. | Отображение сообщения о состоянии, когда диаграмма обрабатывает третью широковещательную передачу события on at(3,E): disp('ON'); |
Переход из связанного состояния, когда диаграмма обрабатывает пятую широковещательную передачу события at(5,E) | |||
| Прибыль Неявное событие | Переход из связанного состояния, когда диаграмма пробуждается в седьмой раз после того, как состояние стало активным, но только если переменная at(7,tick)[temp > 98.6] | |
| Прибыль Используя | Установите on at(12.3,sec):
temp = HIGH; | |
прежде |
| Прибыль Оператор временной логики | Отображение сообщения о состоянии при обработке первой и второй широковещательных передач события on before(3,E): disp('ON'); |
Переход из связанного состояния, когда диаграмма обрабатывает широковещательную передачу события before(5,E) | |||
| Прибыль Неявное событие Оператор временной логики | Переход из связанного состояния при пробуждении диаграммы, но только если переменная before(7,tick)[temp > 98.6] | |
| Прибыль Укажите время в секундах ( Оператор временной логики | Установите on before(12.3,sec):
temp = MED; | |
каждый |
| Прибыль | Отображение сообщения о состоянии, когда диаграмма обрабатывает каждую третью широковещательную передачу события on every(3,E): disp('ON'); |
Переход из связанного состояния, когда диаграмма обрабатывает каждую пятую широковещательную передачу события every(5,E) | |||
| Прибыль Неявное событие | Переход из ассоциированного состояния каждый седьмой every(7,tick)[temp > 98.6] | |
| Прибыль Используя | Приращение on every(12.3,sec):
temp = temp+5; | |
temporalCount |
| Возвращает число вхождений события Используя | Доступ к последовательным элементам массива |
temporalCount(tick) | Возвращает число срабатываний диаграммы с момента активизации связанного состояния. Неявное событие Используя | Сохранение значения входных данных en,du: M(temporalCount(tick)+1) = u; | |
| Возвращает время, прошедшее с момента активации связанного состояния. Укажите время в секундах ( | Сохраните число миллисекунд с момента активации состояния. en,du: y = temporalCount(msec); | |
истекший |
| Возвращает время, прошедшее с момента активации связанного состояния. Эквивалентно | Сохраните количество секунд с момента активации состояния. en,du: y = elapsed(sec); |
et | Альтернативный способ выполнения elapsed(sec). | Когда диаграмма обрабатывает широковещательную передачу события E{disp(et);} | |
количество |
| Возвращает число пробуждений диаграммы с момента условного выражения Диаграмма Stateflow сбрасывает значение В диаграммах в модели Simulink значение | Переход из связанного состояния, когда переменная [count(x>=2) > 5] |
Сохранить число выполнений диаграммы с момента ввода переменной en,du: y = count(x>5); | |||
продолжительность |
| Возвращает время, прошедшее с момента условного выражения Укажите время в секундах ( Диаграмма Stateflow сбрасывает значение Оператор временной логики | Переход из состояния, когда переменная [duration(x>=0) > 0.1] |
Сохранить число миллисекунд с момента ввода переменной en,du: y = duration(x>5,msec); |
Для включения ключевых слов можно использовать кавычки 'tick', 'sec', 'msec', и 'usec'. Например, after(5,'tick') эквивалентно after(5,tick).
Примечание
Операторы временной логики after, at, before, и every сравнить пороговое значение n к внутреннему счетчику целочисленного типа. Если n является числом с фиксированной точкой, определяемым либо наклоном, который не является целочисленной степенью двух, либо ненулевым смещением, то сравнение может дать неожиданные результаты из-за округления. Дополнительные сведения см. в разделе Реляционные операции для данных с фиксированной точкой.
В этом примере показано, как определить две абсолютные временные задержки на диаграмме непрерывного времени.

Выполнение диаграммы выполняется следующим образом:
Когда диаграмма пробуждается, состояние Input активируется первым.
После 5,33 миллисекунд времени моделирования переход от Input кому Output происходит.
Государство Input становится неактивным и состояние Output становится активным.
После 10,5 секунд моделирования переход от Output кому Input происходит.
Государство 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 не поддерживают использование временных логических операторов на путях перехода, имеющих более одного исходного состояния. Например, эта автономная диаграмма создает ошибку времени выполнения, поскольку выражение временной логики after(10,sec) запускает путь перехода с несколькими исходными состояниями.

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

В автономных диаграммах в 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.

При выполнении диаграммы состояние 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 (встроенный кодер).
после | в | прежде | количество | продолжительность | истекший | каждый | temporalCount | timer | Редактор сигналов (Simulink) | шаг (Simulink)