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

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

Правила для Использования временных логических операторов

  • Временные логические операторы могут появиться в только:

    • Акты государственной власти

    • Переходы, которые происходят из состояний

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

    Примечание

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

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

  • Используйте обозначение события, чтобы выразить основанную на событии временную логику в актах государственной власти. Смотрите Обозначение для Основанной на событии Временной Логики.

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

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

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

    Используйте абсолютно-разовую временную логику вместо неявного события tick по этим причинам:

    • Задержите выражения, что абсолютно-разовая временная логика использования независима от шага расчета модели. Однако событие tick зависит от шага расчета.

    • Абсолютно-разовая временная логика работает в графиках, которые имеют входные события вызова функции. Событие tick не работает в графиках с входными параметрами вызова функции.

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

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

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

after(n,E)

E является основным событием для оператора after, и n также:

  • Положительное целое число

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

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

В графике без входных событий, after(n,tick) или after(n,wakeup) возвращает true, если график проснулся во времена n или больше начиная с активации ассоциированной страны.

Сбрасывает счетчик для E к 0 каждым разам, когда ассоциированная страна повторно активирует.

в

at(n,E)

E является основным событием для оператора at, и n также:

  • Положительное целое число.

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

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

В графике без входных событий, at(n,tick) или at(n,wakeup) возвращает true, если график проснулся для n th во время начиная с активации ассоциированной страны.

Сбрасывает счетчик для E к 0 каждым разам, когда ассоциированная страна повторно активирует.

прежде

before(n,E)

E является основным событием для оператора before, и n также:

  • Положительное целое число.

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

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

В графике без входных событий, before(n,tick) или before(n,wakeup) возвращает true, если график разбудил меньше, чем времена n начиная с активации ассоциированной страны.

Сбрасывает счетчик для E к 0 каждым разам, когда ассоциированная страна повторно активирует.

каждый

every(n,E)

E является основным событием для оператора every, и n также:

  • Положительное целое число.

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

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

В графике без входных событий, every(n,tick) или every(n,wakeup) возвращает true, если график разбудил целочисленное кратное времена n начиная с активации ассоциированной страны.

Сбрасывает счетчик для E к 0 каждым разам, когда ассоциированная страна повторно активирует.

temporalCount

temporalCount(E)

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

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

В графике без входных событий, temporalCount(tick) или temporalCount(wakeup) возвращает число раз, которое график разбудил начиная с активации ассоциированной страны.

Сбрасывает счетчик для E к 0 каждым разам, когда ассоциированная страна повторно активирует.

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

Примечание

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

Примеры основанной на событии временной логики

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

ОператорИспользованиеПримерОписание

after

Акт государственной власти (on after)

on after(5,CLK): status('on');

Сообщение о состоянии появляется во время каждого цикла CLK, запуская 5 тактов после активации состояния.

after

Переход

ROTATE[after(10,CLK)]

Переход из ассоциированной страны происходит только на широковещательной передаче события ROTATE, но только, чем 10 циклов CLK после активации состояния.

before

Акт государственной власти (on before)

on before(MAX,CLK): temp++;

Шаг переменной temp однажды на цикл CLK до состояния достигает предела MAX.

before

Переход

ROTATE[before(10,CLK)]

Переход из ассоциированной страны происходит только на широковещательной передаче события ROTATE, но не позднее, чем 10 циклов CLK после активации состояния.

at

Акт государственной власти (on at)

on at(10,CLK): status('on');

Сообщение о состоянии появляется точно в 10 циклах CLK после активации состояния.

at

Переход

ROTATE[at(10,CLK)]

Переход из ассоциированной страны происходит только на широковещательной передаче события ROTATE точно в 10 циклах CLK после активации состояния.

every

Акт государственной власти (on every)

on every(5,CLK): status('on');

Сообщение о состоянии появляется каждые 5 циклов CLK после активации состояния.

temporalCount

Акт государственной власти (during)

du: y = mm[temporalCount(tick)];

Это действие считает и возвращает целое число меток деления, которые протекли начиная с активации состояния. Затем действие присваивает переменной y значение массива mm, индекс которого является значением, которое возвращает оператор temporalCount.

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

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

Обозначение события

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

Обозначение события следует за этим синтаксисом:

tlo(n,E)[C]

где

  • tlo является булевым временным логическим оператором (after, before, at или every)

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

  • E является основным событием оператора

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

Условное обозначение

Используйте условное обозначение, чтобы задать условие перехода, которое зависит от основных и неосновных событий.

Условное обозначение следует за этим синтаксисом:

E1[tlo(n,E2) && C]

где

  • E1 является любым неосновным событием

  • tlo является булевым временным логическим оператором (after, before, at или every)

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

  • E2 является основным событием оператора

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

Примеры события и условного обозначения

ОбозначениеИспользованиеПримерОписание

Событие

Акт государственной власти (on after)

on after(5,CLK): temp = WARM;

Переменная temp становится WARM 5 циклов CLK после активации состояния.

Событие

Переход

after(10,CLK)[temp == COLD]

Переход из ассоциированной страны происходит, если переменной temp является COLD, но только, чем 10 циклов CLK после активации состояния.

Условное выражение

Переход

ON[after(5,CLK) && temp == COLD]

Переход из ассоциированной страны происходит только на широковещательной передаче события ON, но только, чем 5 циклов CLK после активации состояния и только если переменной temp является COLD.

Примечание

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

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

Для абсолютно-разовой временной логики используйте операторы, описанные в этой таблице.

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

after(n,sec)

after(n,msec)

after(n,usec)

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

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

Сбрасывает счетчик для sec, msec и usec к 0 каждым разам, когда ассоциированная страна повторно активирует.

прежде

before(n,sec)

before(n,msec)

before(n,usec)

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

Возвращает true, если меньше, чем модули n времени симуляции протекли начиная с активации ассоциированной страны. В противном случае оператор возвращает false. Задайте время симуляции в секундах (sec), миллисекунды (msec), или микросекунды (usec).

Сбрасывает счетчик для sec, msec и usec к 0 каждым разам, когда ассоциированная страна повторно активирует.

каждый

every(n,sec)

every(n,msec)

every(n,usec)

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

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

Сбрасывает счетчик для sec, msec и usec к 0 каждым разам, когда ассоциированная страна повторно активирует.

Использование every как абсолютно-разовый временный логический оператор поддерживается только в автономных графиках для выполнения, когда MATLAB® возражает.

temporalCount

temporalCount(sec)

temporalCount(msec)

temporalCount(usec)

sec, msec и usec являются ключевыми словами, которые обозначают, что время симуляции протекло начиная с активации ассоциированной страны.

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

Сбрасывает счетчик для sec, msec и usec к 0 каждым разам, когда ассоциированная страна повторно активирует.

прошедший

elapsed(sec)

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

Сбрасывает счетчик для sec к 0 каждым разам, когда ассоциированная страна повторно активирует.

количество

count(C)

Возвращает количество меток деления после того, как условное выражение, C, станет true. Оператор count сбрасывается, если условное выражение становится false. Если оператор count используется в состоянии, он сбрасывается, когда состояние, которое содержит его, вводится. Если оператор count используется на переходе, он сбрасывается, когда исходное состояние для того перехода вводится.

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

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

duration(C)

Возвращает номер секунд после того, как условное выражение, C, станет true. Оператор duration сбрасывается, если условное выражение становится false. Если оператор duration используется в состоянии, он сбрасывается, когда состояние, которое содержит его, вводится. Если оператор duration используется на переходе, он сбрасывается, когда исходное состояние для того перехода вводится.

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

Примечание

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

Примеры абсолютно-разовой временной логики

Эти примеры иллюстрируют абсолютно-разовую временную логику в актах государственной власти и переходах.

ОператорИспользованиеПримерОписание

after

Акт государственной власти (on after)

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

После 12,3 секунд времени симуляции начиная с активации состояния переменная temp становится LOW.

after

Переход

after(8,msec)

После того, как 8 миллисекунд времени симуляции передали начиная с активации состояния происходит переход из ассоциированной страны.

after

Переход

after(5,usec)

После того, как 5 микросекунд времени симуляции передали начиная с активации состояния происходит переход из ассоциированной страны.

before

Переход

[temp > 75 && before(12.34,sec)]

Если переменная temp превышает 75 и меньше чем 12,34 секунд, протекли начиная с активации состояния происходит переход из ассоциированной страны.

temporalCount

Акт государственной власти (exit)

exit: y = temporalCount(sec);

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

Пример определения задержек

Этот непрерывно-разовый график задает две абсолютных задержки переходов.

Стройте диаграмму выполнение состоит из этих шагов:

  • Когда график просыпается, 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 предоставляет модульный вход шага графику.

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

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

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

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

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

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

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

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

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

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

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

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

Этот график показывает, что общее время протекло в активированном состоянии (или A или B).

Когда входной сигнал включает подсистему во время t = 0, A состояния становится активным, или включил. В то время как состояние активно, время протекло увеличения. Однако, когда подсистема отключена в t = 2, график засыпает, и A состояния становится неактивным.

Для 2 <t <6, время, истекшее в активированном состоянии, остается замороженным в 2 секунды, потому что никакое состояние не активно. Когда график просыпается в t = 6, A состояния становится активным снова, и истекшее время начинает увеличиваться. Переход от A состояния, чтобы утвердить B зависит от времени, истекшего, в то время как A состояния включен, не на времени симуляции. Поэтому A состояния остается активен до t = 9, так, чтобы время протекло в тот общие количества состояния 5 секунд.

Когда переход от A до B происходит в t = 9, выходное значение, y изменяется с 0 до 1.

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

Они семантика также применяются к оператору before.

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

Используйте оператор after, чтобы заменить оператор at

Если вы используете оператор at с абсолютно-разовой временной логикой, сообщение об ошибке появляется, когда вы пытаетесь моделировать свою модель. Используйте оператор after вместо этого.

Предположим, что вы хотите задать задержку с помощью перехода at(5.33, sec).

Измените переход к after(5.33, sec), как показано в этом графике.

Используйте внешний переход самоцикла с оператором after, чтобы заменить оператор every

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

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

Замените акт государственной власти на внешний переход самоцикла, как показано в этом графике.

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

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

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

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

| | | | | | |

Похожие темы