in
ОператорIn a Stateflow® график с параллельным разложением состояний, подсостояния могут быть активны одновременно. Чтобы координировать поведение различных параллельных состояний, одно состояние может проверить субстатную активность другого состояния и реагировать соответственно. Например, одно состояние может сохранить свои подсостояния синхронизированными с подсостояниями другого состояния.
in
ОператорЧтобы проверить, является ли состояние активным в установленный временной шаг, вызовите in
оператор в состоянии и переходные действия. The 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
.
График разрешает каждое квалифицированное имя состояния как локальную копию substate 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
. The 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 . | Совпадение найдено. |
Поиск заканчивается одним найденным совпадением. The 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
, в результате чего произошла ошибка.
Чтобы избежать этой ошибки:
Используйте более конкретное имя состояния. Например, чтобы проверить активность subsate внутри B
, используйте выражение in(B.P.Q.R)
.
Переименуйте одно из соответствующих состояний.
Окружение состояния верхнего уровня P
в коробке или другом состоянии. Добавление корпуса препятствует процессу поиска обнаруживать подсостояния в состоянии верхнего уровня.