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

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, смотрите Выполнение Диаграммы управления при помощи Временной Логики.

Примечание

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

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

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

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

изменение (data_name)

заряд (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)

исключая (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. Для получения дополнительной информации смотрите Действие состояния Проверки при помощи в Операторе и Обнаружьте Изменения в Значениях данных.

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

| | | | |

Похожие темы