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.

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

Чтобы разрешить действие состояния, диаграмма Stateflow не выполняет исчерпывающий поиск всех состояний и не останавливается после нахождения первого соответствия. Чтобы повысить шансы на поиск уникального результата поиска:
Использовать определенные пути в определенных именах данных.
Дать состояниям уникальные имена.
Используйте состояния и поля в качестве вложений, чтобы ограничить область поиска разрешения пути.
Эта диаграмма содержит два параллельных состояния, A и B. Каждое состояние имеет пару подстанций, A1 и A2. A1 имеет подстанции X и Y, пока A2 имеет подстанции 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). Поток состояний не может разрешить полное имя состояния 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). Поток состояний не может разрешить полное имя состояния 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 в коробке или другом состоянии. Добавление корпуса не позволяет процессу поиска обнаружить подсостояния в состоянии верхнего уровня.
