exponenta event banner

Управление поведением диаграммы с помощью неявных событий

Неявные события - это встроенные события, которые происходят во время выполнения диаграммы, когда:

  • Диаграмма просыпается.

  • Диаграмма переходит в состояние, и состояние становится активным.

  • Диаграмма выходит из состояния, и состояние становится неактивным.

  • Диаграмма присваивает значение внутреннему объекту данных.

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

Неявные события, основанные на выполнении диаграммы

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

Например, на этой диаграмме: Fan и Heater являются параллельными состояниями (AND). Каждое состояние имеет пару подстанций, On и Off. Первоначально подстанции Fan.Off и Heater.Off активны. Каждый раз, когда диаграмма просыпается, она генерирует tick событие. Третье tick запускает переход из Heater.Off кому Heater.On. Аналогичным образом, четвертый tick запускает переход из Fan.Off кому Fan.On. На восьмой tick, диаграмма переходит обратно в Fan.Off и Heater.Off.

Stateflow chart that uses the implicit event tick.

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

Примечание

tick событие ссылается на диаграмму, содержащую оцениваемое действие. Событие не может ссылаться на другую диаграмму.

Неявные события, основанные на данных и состояниях

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

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

change(data_name)

chg(data_name)

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

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

change(Engine.rpm)

войти

enter(state_name)

en(state_name)

Создает неявное локальное событие в указанном состоянии state_name становится активным.

Определение неявного локального события при входе в состояние выполнения диаграммы Fan.On.

enter(Fan.On)

выход

exit(state_name)

ex(state_name)

Создает неявное локальное событие в указанном состоянии state_name становится неактивным.

Определение неявного локального события при выходе из состояния выполнения диаграммы Fan.Off.

exit(Fan.Off)

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

Например, на этой диаграмме: Fan и Heater являются параллельными состояниями (AND). Каждое состояние имеет пару подстанций, On и Off. Первоначально подстанции Fan.Off и Heater.Off активны. Когда диаграмма просыпается, она генерирует tick событие, которое инициирует переход от Fan.Off кому Fan.On. Когда Fan.Off становится неактивным, диаграмма генерирует другое неявное событие, которое запускает переход из Heater.Off кому Heater.On. По окончании выполнения диаграммы подсостояния Fan.On и Heater.On активны.

Stateflow chart that uses the implicit event exit.

Примечание

Если одно и то же неявное событие вызывает множество переходов в параллельных состояниях, то порядок, в котором выполняются переходы, не обязательно соответствует порядку выполнения параллельных состояний. Чтобы избежать непредвиденного поведения и обеспечить выполнение переходов в порядке, указанном для параллельных состояний, не используйте неявные события. Вместо этого используйте условия перехода, которые вызывают операторы, такие как in или hasChanged. Дополнительные сведения см. в разделах Проверка активности состояния с помощью оператора in и Обнаружение изменений в значениях данных.

См. также

| | | | |

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