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