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
.
Для получения информации о временном логическом операторе after
, см. Управление выполнением диаграммы при помощи временной логики.
Примечание
The tick
событие относится к графику, содержащей оцениваемое действие. Событие не может ссылаться на другой график.
В Stateflow® графики в Simulink® модели, эти операторы генерируют неявные события, когда график устанавливает значение переменной или когда график входит или выходит из состояния.
Оператор | Синтаксис | Описание | Пример |
---|---|---|---|
change |
| Генерирует неявное локальное событие, когда график устанавливает значение переменной data_name . Переменная data_name не могут быть данными с пометкой машины. Это неявное событие работает только с данными, которые находятся на уровне графика или ниже в иерархии. Для машинно-родительских данных используйте операторы обнаружения изменений, чтобы определить, когда изменяется значение данных. Для получения дополнительной информации смотрите Обнаружение изменений в значениях данных. | Задайте неявное локальное событие, когда состояние или действие перехода записывает значение в переменную change(Engine.rpm) |
enter |
| Генерирует неявное локальное событие, когда заданное состояние state_name становится активным. | Задайте неявное локальное событие, когда выполнение графика входит в состояние enter(Fan.On) |
exit |
| Генерирует неявное локальное событие, когда заданное состояние state_name становится неактивным. | Задайте неявное локальное событие, когда выполнение графика выйдет из состояния 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
активны.
Примечание
Если одно и то же неявное событие запускает несколько переходов в параллельных состояниях, то порядок, в котором выполняются переходы, не обязательно совпадает с порядком выполнения параллельных состояний. Чтобы избежать неожиданного поведения и убедиться, что переходы выполняются в порядке, заданном для параллельных состояний, не используйте неявные события. Вместо этого используйте условия перехода, которые вызывают операторов, таких как in
или hasChanged
. Для получения дополнительной информации смотрите Проверка активности состояния при помощи оператора in и Обнаружение изменений в значениях данных.
after | change | enter | exit | hasChanged | in