Диаграмма управления при помощи неявных Событий

Implicit events являются встроенными событиями, которые происходят во время выполнения графика, когда:

  • График просыпается.

  • График входит в состояние, и состояние становится активным.

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

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

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

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

Ключевое слово 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, см. Управление выполнением диаграммы при помощи временной логики.

Примечание

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

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

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

ОператорСинтаксисОписаниеПример
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 и Обнаружение изменений в значениях данных.

См. также

| | | | |

Похожие темы