Задайте поведение графика при помощи неявных Событий

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

  • Стройте диаграмму пробуждения

  • Запись в состояние

  • Выход из состояния

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

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

Ключевые слова для неявных Событий

Чтобы сослаться на неявные события, операторы действия используют этот синтаксис:

event(object)

где event является именем неявного события, и object является состоянием или данными, в которых событие имеет место.

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

Неявное событие

Значение

изменитесь (data_name) или chg(data_name)

Задает и неявно генерирует локальное событие, когда программное обеспечение Stateflow® пишет значение в переменную data_name. Поддерживаемый только в диаграммах Stateflow в моделях Simulink®.

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

enter(state_name) или en(state_name)

Задает и неявно генерирует локальное событие, когда заданный state_name вводится. Поддерживаемый только в диаграммах Stateflow в моделях Simulink.

exit(state_name) или ex(state_name)

Задает и неявно генерирует локальное событие, когда из заданного state_name выходят. Поддерживаемый только в диаграммах Stateflow в моделях Simulink.

tick

Задает и неявно генерирует локальное событие, когда график оцениваемого действия просыпается.

wakeup

Эквивалентный tick. Поддерживаемый только в диаграммах Stateflow в моделях Simulink.

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

enter(switch_on)
en(switch_on)
change(engine.rpm)

Примечание

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

Переход между состояниями Используя неявные События

Этот пример иллюстрирует использование неявных событий tick.

Fan и Heater параллельны (AND) сверхдержавы. Первый раз, когда событие пробуждает диаграмму Stateflow, состояния Fan.Off и Heater.Off, становится активным.

Примите, что вы запускаете симуляцию дискретного времени. Каждый раз, когда график просыпается, широковещательная передача события tick, происходит. После четырех широковещательных сообщений происходит переход от Fan.Off до Fan.On. Точно так же после трех широковещательных сообщений, переход от Heater.Off до Heater.On происходит.

Для получения информации об операторе after смотрите Выполнение Диаграммы управления при помощи Временной Логики.

Порядок выполнения переходов с неявными Событиями

Предположим что:

  • Ваш график содержит параллельные состояния.

  • В нескольких параллельных состояниях то же неявное событие используется, чтобы охранять переход от одного подсостояния до другого.

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

Когда переход от IV.HERE до IV.THERE происходит, условие, ex(IV.HERE) допустим для переходов от до B для параллели, утверждает I, II, и III. Эти три перехода от до B выполняются в порядке, в котором они были созданы: в состоянии I, затем II, и наконец III. Этот порядок не совпадает с порядком активации тех состояний.

Чтобы гарантировать, что допустимые переходы выполняются в том же порядке, что параллельные состояния становятся активными, используйте оператор in вместо неявных событий enter или exit:

С этой модификацией переходы от до B происходят в том же порядке как активация параллельных состояний. Для получения дополнительной информации об операторе in, смотрите Действие состояния Проверки при помощи в Операторе.