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

Смотрите также

|

Похожие темы