Проверяйте активность состояния при помощи in Оператор

In a Stateflow® график с параллельным разложением состояний, подсостояния могут быть активны одновременно. Чтобы координировать поведение различных параллельных состояний, одно состояние может проверить субстатную активность другого состояния и реагировать соответственно. Например, одно состояние может сохранить свои подсостояния синхронизированными с подсостояниями другого состояния.

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

См. также

|

Похожие темы