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

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

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

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

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

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

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

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

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

event(object)

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

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

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

Значение

изменение (data_name) или заряд (data_name)

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

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

войдите (state_name) или en (state_name)

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

выход (state_name) или исключая (state_name)

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

tick

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

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

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

Примечание

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

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

Этот пример иллюстрирует использование неявного 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 оператор, смотрите Действие состояния Проверки при помощи в Операторе.