Проверяйте действие состояния при помощи оператора in

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

Например, этот график имеет два параллельных состояния: Place и Tracker. Переходы в Tracker проверяют действие состояния в Place и сохраняют подсостояния синхронизируемыми. Изменение активного подсостояния в Place вызывает соответствующее изменение активного подсостояния в Tracker.

  • Если R становится активным подсостоянием в Place, то Moved_Right становится активным подсостоянием в Tracker.

  • Если L становится активным подсостоянием в Place, то Moved_Left становится активным подсостоянием в Tracker.

Оператор in

Чтобы проверять, активно ли состояние в данном временном шаге во время выполнения графика, используйте оператор in:

in(S)
Оператор in берет квалифицированное имя состояния S и возвращает булев выходной параметр. Если S состояния активен, in возвращает значение 1. В противном случае in возвращает значение 0.

Можно использовать оператор in в актах государственной власти и в переходах, которые происходят из состояний.

Разрешение действия состояния

Проверка действия состояния является процессом 2D части. Во-первых, Stateflow разрешает квалифицированное имя состояния путем выполнения локализованного поиска иерархии графика для соответствующего состояния. Затем Stateflow определяет, активно ли соответствующее состояние.

Поиск начинается на уровне иерархии, где квалифицированное имя состояния появляется:

  • Для акта государственной власти отправная точка является состоянием, содержащим действие.

  • Для метки перехода отправная точка является родительским элементом источника перехода.

Процесс разрешения ищет каждый уровень иерархии графика для пути к состоянию. Если состояние совпадает с путем, процесс добавляет что состояние в список возможных соответствий. Затем процесс продолжает поиск один уровень выше в иерархии. Остановки процесса разрешения после того, как это ищет уровень графика иерархии. Если уникальное соответствие существует, проверки оператора in, если соответствующее состояние активно. В противном случае, сбои процесса разрешения. Симуляция останавливается, и вы видите сообщение об ошибке.

Эта блок-схема иллюстрирует различные этапы в процессе для проверки действия состояния.

Лучшые практики для проверки действия состояния

Решение действия состояния:

  • Не выполняет исчерпывающий поиск всех состояний в графике.

  • Не останавливается после нахождения первого соответствия.

Чтобы улучшить возможности нахождения уникального результата поиска, когда решение квалифицировало имена данных:

  • Используйте определенные пути на квалифицированные имена данных.

  • Дайте уникальные имена состояний.

  • Используйте состояния и поля как корпуса, чтобы ограничить осциллограф поиска разрешения пути.

Примеры разрешения действия состояния

Поиск находит локальную копию подсостояния

Этот график содержит параллель, утверждает A и B, которые имеют идентичные подсостояния A1 и A2. Условие in(A1.Y) охраняет переход от P до Q в A.A2 и в B.A2. Stateflow разрешает каждое квалифицированное имя состояния как локальную копию Y подсостояния:

  • В A состояния условие in(A1.Y) проверяет действие A.A1.Y состояния.

  • В B состояния условие in(A1.Y) проверяет действие B.A1.Y состояния.

Эта таблица приводит различные этапы в процессе разрешения для условия перехода в A.A2 состояния.

Этап ОписаниеРезультат
1При запуске в A.A2 состояния ищите A.A2.A1.Y состояния.Никакое соответствие не найдено.
2Переместитесь до следующего уровня иерархии (утвердите A). Ищите A.A1.Y состоянияСоответствие найдено.
3Переместитесь до следующего уровня иерархии (уровень графика). Ищите A1.Y состоянияНикакое соответствие не найдено.

Поиск заканчивается одним найденным соответствием. Поскольку алгоритм разрешения локализует осциллограф поиска, оператор in, охраняющий переход в A.A2, обнаруживает только A.A1.Y состояния. Оператор in, охраняющий переход в B.A2, обнаруживает только B.A1.Y состояния.

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

  • В A состояния используйте выражение in(B.A1.Y).

  • В B состояния используйте выражение in(A.A1.Y).

Поиск не производит соответствий

В этом графике действие during в A.B состояния содержит выражение in(Q.R). Stateflow не может разрешить квалифицированное имя состояния Q.R.

Эта таблица приводит различные этапы в процессе разрешения.

ЭтапОписаниеРезультат
1При запуске в A.B состояния ищите A.B.Q.R состояния.Никакое соответствие не найдено.
2Переместитесь до следующего уровня иерархии (утвердите A). Ищите A.Q.R состояния.Никакое соответствие не найдено.
3Переместитесь до следующего уровня иерархии (уровень графика). Ищите Q.R состояния.Никакое соответствие не найдено.

Поиск заканчивается на уровне графика без соответствия, найденного для Q.R, приводящего к ошибке.

Чтобы избежать этой ошибки, используйте более определенное квалифицированное имя состояния. Например, проверяйте действие состояния при помощи выражения in(P.Q.R).

Поиск находит неправильное состояние

В этом графике действие during в A.B состояния содержит выражение in(Q.R). При решении квалифицированного имени состояния Q.R Stateflow не может обнаружить A.B.P.Q.R подсостояния.

Эта таблица приводит различные этапы в процессе разрешения.

ЭтапОписаниеРезультат
1При запуске в A.B состояния ищите A.B.Q.R состояния.Никакое соответствие не найдено
2Переместитесь до следующего уровня иерархии (утвердите A). Ищите A.Q.R состояния.Никакое соответствие не найдено.
3Переместитесь до следующего уровня иерархии (уровень графика). Ищите Q.R состояния.Соответствие найдено.

Поиск заканчивается одним найденным соответствием. Оператор in обнаруживает только R подсостояния Q состояния верхнего уровня.

Чтобы проверять действие состояния A.B.P.Q.R, используйте более определенное квалифицированное имя состояния. Например, используйте выражение in(P.Q.R).

Поиск производит несколько соответствий

В этом графике действие during в A.B состояния содержит выражение in(P.Q.R). Stateflow не может разрешить квалифицированное имя состояния P.Q.R.

Эта таблица приводит различные этапы в процессе разрешения.

ЭтапОписаниеРезультат
1При запуске в A.B состояния ищите A.B.P.Q.R состояния.Соответствие найдено
2Переместитесь до следующего уровня иерархии (утвердите A). Ищите A.P.Q.R состояния.Никакое соответствие не найдено.
3Переместитесь до следующего уровня иерархии (уровень графика). Ищите P.Q.R состояния.Соответствие найдено.

Поиск заканчивается на уровне графика двумя соответствиями, найденными для P.Q.R, приводящего к ошибке.

Избегать этой ошибки:

  • Используйте более определенное квалифицированное имя состояния. Например:

    • Чтобы проверять действие подсостояния в B, используйте выражение in(B.P.Q.R).

    • Чтобы проверять действие подсостояния в P состояния верхнего уровня, используйте выражение in(\P.Q.R).

  • Переименуйте одно из соответствующих состояний.

  • Заключите P состояния верхнего уровня в поле или другое состояние. Добавление корпуса препятствует тому, чтобы поисковый процесс обнаружил подсостояния в состоянии верхнего уровня.

Похожие темы