Проверяйте действие состояния при помощи 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 состояния верхнего уровня в поле или другом состоянии. Добавление корпуса препятствует тому, чтобы поисковый процесс обнаружил подсостояния в состоянии верхнего уровня.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте