in
ОператорВ графике Stateflow® с параллельным разложением состояния подсостояния могут быть активными одновременно. Чтобы скоординировать поведение различных параллельных состояний, одно состояние может проверять действие подсостояния другого состояния и реагировать соответственно. Например, одно состояние может сохранить свои подсостояния синхронизируемыми с подсостояниями другого состояния.
in
ОператорЧтобы проверять, активно ли состояние в данном временном шаге, вызовите in
оператор в состоянии и действиях перехода. in
оператор берет квалифицированное имя состояния state_name
и возвращает булев выходной параметр. Если state_name
состояния активно,
in
возвращает значение 1 (true
). В противном случае, in
возвращает значение 0 (false
).
in(state_name)
Например, в этом графике, Fan
и Heater
параллельны (AND) состояния. Каждое состояние имеет пару подсостояний, On
и Off
. Каждый раз график просыпается, активное подсостояние Fan
состояния альтернативы между
Fan.Off
и Fan.On
. В Heater
состояния, условия на переходах проверяют действие подсостояния в
Fan
и сохраните состояния синхронизируемыми. Изменение активного подсостояния в Fan
вызывает соответствующее изменение активного подсостояния в Heater
.
Проверка действия состояния является процессом 2D части. Во-первых, диаграмма Stateflow разрешает квалифицированное имя состояния путем выполнения локализованного поиска иерархии графика для соответствующего состояния. Затем график определяет, активно ли соответствующее состояние.
Поиск начинается на уровне иерархии где in
оператор вызван квалифицированным именем состояния:
Для состояния активности начальная точка является состоянием, содержащим действие.
Для метки перехода начальная точка является родительским элементом источника перехода.
Процесс разрешения ищет каждый уровень иерархии графика для пути к состоянию. Если состояние совпадает с путем, процесс добавляет что состояние в список возможных соответствий. Затем процесс продолжает поиск один уровень выше в иерархии. Остановки процесса разрешения после того, как это ищет уровень графика иерархии. Если уникальное соответствие существует, проверки графика, если соответствующее состояние активно. В противном случае, сбои процесса разрешения. Симуляция останавливается с ошибкой.
Эта блок-схема иллюстрирует различные этапы в процессе для проверки действия состояния.
Чтобы разрешить действие состояния, диаграмма Stateflow не выполняет исчерпывающий поиск всех состояний и не останавливается после нахождения первого соответствия. Улучшить возможности нахождения уникального результата поиска:
Используйте определенные пути на квалифицированные имена данных.
Дайте уникальные имена состояний.
Используйте состояния и поля как корпуса, чтобы ограничить осциллограф поиска разрешения пути.
Этот график содержит два параллельных состояния, A
и B
. Каждое состояние имеет пару подсостояний, A1
и A2
. A1
имеет подутверждает X
и Y
, в то время как A1
имеет подутверждает P
и Q
. В A.A2
и в B.A2
, условие in(A1.Y)
охраняет переход от P
к Q
.
График разрешает каждое квалифицированное имя состояния как локальную копию Y
подсостояния:
В A
состояния, условие
in(A1.Y)
проверяет действие A.A1.Y
состояния.
В B
состояния, условие
in(A1.Y)
проверяет действие B.A1.Y
состояния.
Например, эта таблица приводит различные этапы в процессе разрешения для условия перехода в A
состояния.
Этап | Описание | Результат |
---|---|---|
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
состояния верхнего уровня в поле или другом состоянии. Добавление корпуса препятствует тому, чтобы поисковый процесс обнаружил подсостояния в состоянии верхнего уровня.