Типы действий состояния

Состояния могут иметь различные типы действия, включая entry, duringвыход, bind, и, on действия. Вы задаете действия для состояния при помощи метки состояния активности с этим полным форматом:

name/
entry:entry actions
during:during actions
exit:exit actions
bind:data_name, event_name
on event_name:on event_name actions
on message_name:on message_name actions

Начните действия различных типов на отдельных линиях после имени состояния. Можно начать эти действия в любом порядке. Если вы не задаете тип действия явным образом для оператора, график обрабатывает тот оператор как объединенный entry,during действие.

Например, этот график содержит различные типы состояния активности.

Эта таблица суммирует различные типы состояния активности.

Состояние активностиСокращениеОписание
entryenВыполняется, когда состояние становится активным.
exitexВыполняется, когда состояние активно, и переход из состояния происходит.
duringduВыполняется, когда состояние активно, и определенное событие имеет место.
bind'none'Связывает событие или объект данных так, чтобы только, что состояние и его дочерние элементы могут широковещательно передать событие или изменить значение данных.

on event_name

'none'Выполняется, когда состояние активно, и оно получает широковещательную передачу event_name.

on message_name

'none'Выполняется когда сообщение message_name доступно.

on afterNEventName)

on afterNсекунда

on afterN, msec)

on afterN, мкс)

'none'

Выполняется когда:

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

  • по крайней мере, n модули времени протекли, поскольку ассоциированная страна стала активной.

Для получения дополнительной информации смотрите after.

on atNEventName)

on atNсекунда

'none'

Выполняется когда:

  • событие event_name произошел точно n времена, поскольку ассоциированная страна стала активной.

  • точно n секунды протекли, поскольку ассоциированная страна стала активной.

Для получения дополнительной информации смотрите at.

on beforeNEventName)

on beforeNсекунда

on beforeN, msec)

on beforeN, мкс)

'none'

Выполняется когда:

  • событие event_name произошел меньше, чем n времена, поскольку ассоциированная страна стала активной.

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

Для получения дополнительной информации смотрите before.

on everyNEventName)

on everyNсекунда

'none'

Выполняется:

  • каждый nвхождение th события event_name поскольку ассоциированная страна стала активной.

  • каждый n секунды, с тех пор как ассоциированная страна стала активной.

Для получения дополнительной информации смотрите every.

entry Действия

Действия записи выполняются, когда состояние становится активным. Действия записи состоят из префиксного entry (или сокращение en) сопровождаемый двоеточием (:) и одно или несколько действий. Чтобы разделить многократные действия, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.

В предыдущем примере, действие записи id = x+y выполняется, когда график берет переход по умолчанию, и состояние A становится активным. Смотрите Вводят График или состояние.

exit Действия

Выйдите действия выполняются, когда состояние активно, и переход из состояния происходит. Выйдите действия состоят из префиксного exit (или сокращение ex) сопровождаемый двоеточием (:) и одно или несколько действий. Чтобы разделить несколько выходных действий, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.

В предыдущем примере, выходное действие time_out выполняется, когда график берет один из переходов от состояния, чтобы утвердить B или C. Смотрите Выход состояние.

during Действия

Во время действий выполняются, когда состояние активно, событие имеет место, и никакой допустимый переход к другому состоянию или текущему состоянию не доступен. Во время действий состоят из префиксного during (или сокращение du) сопровождаемый двоеточием (:) и одно или несколько действий. Чтобы разделить несколько во время действий, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.

В предыдущем примере, во время действия switch_on() выполняется каждый раз, когда состояние C активно, потому что нет никаких допустимых переходов к другому состоянию. Смотрите Выполнение диаграммы Stateflow.

bind Действия

Можно связать данные и события к состоянию при помощи bind действие. bind действие состоит из префиксного bind сопровождаемый двоеточием (:) и одно или несколько событий или данных. Чтобы разделить несколько событий и данных, используйте точки с запятой или запятые. Можно также ввести события и данные по отдельным линиям.

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

Свяжите действия, применяются к графику, активно ли обязательное состояние или нет. В предыдущем примере, связывать действие bind: id, time_out для A состояния связывает данные id и событие time_out утверждать A. Эта привязка предотвращает любое другое состояние (или его дочерние элементы) в графике от изменения id или широковещательное событие time_out.

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

Состояние активностиПричина ошибки анализа
bind: id в B состоянияТолько одно состояние может изменить данные id, который обязан утвердить A
entry: time_out в C состоянияТолько одно состояние может широковещательно передать событие time_out, который обязан утвердить A

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

Свяжите действия, поддерживаются только в графиках Stateflow® в моделях Simulink®.

on Действия

На действиях выполняются, когда состояние активно, и оно получает событие или сообщение. На действиях состоят из префиксного on сопровождаемый уникальным событием event_name или передайте message_name, двоеточие (:), и одно или несколько действий. Чтобы разделить несколько на действиях, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.

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

on ev1: action1();
on ev2: action2();
Если несколько событий имеют место одновременно, соответствие на действиях выполняются в порядке, что они появляются в метке состояния активности. Например, в предыдущем примере, если события ev1 и ev2 происходите одновременно, затем action1() выполняется сначала и action2() выполняется второй. Смотрите Выполнение диаграммы Stateflow.

Похожие темы