Если включена проверка времени редактирования, Stateflow ® Editor обнаруживает потенциальные ошибки и предупреждения при работе с диаграммой. Устраняя эти проблемы на ранних этапах процесса конструирования, можно избежать предупреждений и ошибок во время компиляции или выполнения.
Редактор Stateflow выделяет объекты, нарушающие проверку времени редактирования, красным (для ошибок) или оранжевым (для предупреждений) цветом. При указании на выделенный объект и щелчке значка ошибки или предупреждения отображается подсказка с подробностями и возможными исправлениями.
По умолчанию включена проверка времени редактирования и подсветка синтаксических ошибок. Чтобы отключить проверки времени редактирования, на вкладке Отладка (Debug) снимите флажок Диагностика (Diagnostics) > Ошибки и предупреждения времени редактирования (Edit-Time Errors & Warnings).
В этой таблице перечислены проверки времени редактирования, имеющие связанный диагностический параметр конфигурации на панели Диагностика (Diagnostics) > Поток состояний (Stateflow) диалогового окна Параметры конфигурации (Configuration Parameters).
| Проблема с проверкой времени редактирования | Параметр конфигурации диагностики |
|---|---|
| Висячий переход | Недоступный путь выполнения (Симулинк) |
| Путь перехода по умолчанию не заканчивается в состоянии | Нет безусловных переходов по умолчанию (Симулинк) |
| Действие перехода предшествует действию условия по этому пути | Действие перехода, указанное перед действием условия (Симулинк) |
| Переходные петли вне естественного родительского элемента | Переход за пределы естественного родителя (Симулинк) |
| Затенение перехода | Недоступный путь выполнения (Симулинк) |
| Безусловный выход из состояния во время действий или дочерних состояний | Переход за пределы естественного родителя (Симулинк) |
| Неожиданное обратное отслеживание | Неожиданное обратное отслеживание (Симулинк) |
| Недостижимое соединение | Недоступный путь выполнения (Симулинк) |
Можно управлять уровнем диагностических действий для этих проверок времени редактирования, установив значение их параметра конфигурации равным error, warning, или none. При изменении параметра конфигурации также изменяется уровень диагностики для соответствующих проверок времени редактирования. Например, если для параметра конфигурации Unreachable execution path задано значение none, то редактор Stateflow не выделяет висячие переходы, затенение перехода или недоступные состояния.
Atomic Subchart Contains State ActionsПроблема: Действия состояния не поддерживаются в атомных подшартах.
Уровень диагностики: ошибка.
Решение: Удалите действия состояния или переместите их в подмножество атомарного подстатива.

Default Transition Is MissingПроблема: В диаграмме или состоянии с исключительным разложением (ИЛИ) и, по крайней мере, двумя подстанциями или переходами для указания начала выполнения требуется переход по умолчанию.
Уровень диагностики: ошибка.
Решение: Укажите начальное состояние, добавив переход по умолчанию. Дополнительные сведения см. в разделе Переходы по умолчанию.

Graphical Function Contains a StateПроблема: Поскольку графические функции выполняются полностью в один временной шаг, они не должны содержать никаких состояний.
Уровень диагностики: ошибка.
Решение: Заменить состояния на соединения. Дополнительные сведения см. в разделе Повторное использование логических шаблонов путем определения графических функций.

Invalid IntersectionВопрос: Состояния и стыки не должны перекрываться в редакторе Stateflow.
Уровень диагностики: ошибка.
Решение: Избегайте пересечений, разделяя состояния и соединения.

Monitoring Leaf or Child State Activity of Parallel StatesПроблема: Диаграммы и состояния с параллельным разложением (AND) не поддерживают мониторинг активности листьев или дочерних состояний, поскольку параллельные подсостояния активны одновременно.
Уровень диагностики: Предупреждение.
Решение: откройте инспектор свойств или обозреватель моделей. Снимите флажок Создать выходные данные для мониторинга или выберите Self activity из раскрывающегося списка. Дополнительные сведения см. в разделе Мониторинг активности состояния через данные активного состояния.

State Contains a Syntax ErrorПроблема: Действие состояния не соответствует правилам синтаксиса Stateflow. Редактор Stateflow подчеркивает синтаксические ошибки красной волнистой линией. См. также Transition Contains a Syntax Error.
Уровень диагностики: ошибка.
Решение: Исправьте синтаксическую ошибку в действии состояния. Дополнительные сведения см. в разделе Метки состояния.

Примечание
На родительской диаграмме дочерние диаграммы с синтаксическими ошибками выделены красным цветом, а значок ошибки указывает на проблему синтаксиса. В редакторе вложенных диаграмм синтаксическая ошибка подчеркивается красным цветом, но отсутствует значок, указывающий на проблему.
Unreachable StateПроблема: Состояние недоступно, когда к нему не приводит ни один допустимый путь выполнения.
Уровень диагностики: Зависит от параметра конфигурации Unreachable execution path (Simulink).
Решение: Соедините недостижимое состояние с переходом из достижимого состояния или соединения.

Dangling TransitionПроблема: каждый переход должен иметь действительное состояние назначения или соединение.
Уровень диагностики: Зависит от параметра конфигурации Unreachable execution path (Simulink).
Решение: Подключите переход к состоянию или соединению. Дополнительные сведения см. в разделе Переходы.

Default Transition Path Does Not Terminate in a StateВопрос: В диаграммах или состояниях с исключительным (ИЛИ) разложением и хотя бы одним подсостоянием:
Каждый путь перехода по умолчанию должен вести к подсостоянию.
Должен существовать один путь перехода по умолчанию, который не защищен условием или инициирован событием.
Уровень диагностики: Зависит от параметра конфигурации Без безусловных переходов по умолчанию (Simulink).
Решение: Завершение каждого пути вдоль перехода по умолчанию в подсостоянии. Убедитесь, что один путь перехода по умолчанию не защищен условием или инициирован событием.

Invalid Default Transition PathПроблема: путь перехода по умолчанию не должен выходить из родительского состояния.
Уровень диагностики: ошибка.
Решение: Измените путь перехода по умолчанию, чтобы он оставался в родительском состоянии.

Transition Contains a Syntax ErrorПроблема: При переходе условие или действие не следует правилам синтаксиса Stateflow. Редактор Stateflow подчеркивает синтаксические ошибки красной волнистой линией. См. также State Contains a Syntax Error.
Уровень диагностики: ошибка.
Решение: Исправьте синтаксическую ошибку в условии перехода или действии. Дополнительные сведения см. в разделе Метки перехода.

Transition Action Precedes a Condition Action Along This PathПроблема: Когда переход с действием перехода сопровождается переходом с действием условия, действия не выполняются в порядке переходов. Диаграммы потока состояний выполняют действия с условиями, когда связанное условие оценивается как true. В отличие от этого, диаграммы выполняют действия перехода только при полном выполнении пути перехода. Как следствие, диаграмма принимает путь перехода, действия условия происходят перед действиями перехода.
Уровень диагностики: Зависит от параметра конфигурации Действие перехода, указанное перед действием условия (Simulink).
Решение: Разместите действие перехода после последнего действия условия на пути.

Transition Begins or Ends in a Parallel StateПроблема: В диаграммах и состояниях с параллельным разложением (AND) все одноуровневые подсостояния активны или неактивны одновременно.
Уровень диагностики: Предупреждение.
Решение: Удалите переходы или измените разложение родительского состояния на исключающее (OR).

Transition Connects to a BoxПроблема: Переходы могут подключаться только к состояниям и соединениям.
Уровень диагностики: ошибка.
Решение: перемещение или удаление переходов, присоединенных к полю.

Transition Crosses Parallel StatesПроблема: Автономные диаграммы Stateflow не поддерживают переходы, пересекающие границу параллельного состояния.
Уровень диагностики: ошибка.
Решение: удаление перехода, переходящего в параллельные состояния или выходящего из них.

Transition Enters or Exits Graphical FunctionПроблема: Переходы не должны входить или выходить из графической функции. Блок-схемы в графических функциях должны полностью содержаться внутри функции.
Уровень диагностики: ошибка.
Решение: Удалите переход, вводя или выходя из графической функции.

Transition Loops Outside Natural ParentПроблема: Если переход выходит за пределы родительского состояния между источником и назначением, диаграмма выполняет exit и entry действия родительского состояния до того, как состояние назначения станет активным.
Уровень диагностики: Зависит от параметра конфигурации Переход вне естественного родителя (Simulink).
Решение: Переместите переход так, чтобы он содержался в родительском состоянии.

Transition ShadowingПроблема: Когда безусловный переход выполняется перед другими исходящими переходами из того же источника, он предотвращает выполнение других переходов.
Уровень диагностики: Зависит от параметра конфигурации Unreachable execution path (Simulink).
Решение: Создать не более одного безусловного перехода из каждого состояния или соединения. Явно укажите, что безусловный переход выполняется после любых переходов с условиями. Дополнительные сведения см. в разделе Порядок оценки перехода.

Unconditional Path Out of State with During Actions or Child StatesВопрос: Безусловные переходы, ведущие из состояния, запрещают выполнение during действия в состоянии и переходы по умолчанию в дочерние состояния.
Уровень диагностики: Зависит от параметра конфигурации Переход вне естественного родителя (Simulink).
Решение: Добавление условия в переход или удаление во время действий и дочерних состояний из состояния.

Cycle Contains Transitions with Transition ActionsПроблема: Циклы не должны содержать переходы с действиями перехода.
Уровень диагностики: ошибка.
Решение: удалите действие перехода или удалите цикл, удалив переход.

Invalid History JunctionПроблема: Соединение истории недопустимо, когда:
Стык истории содержится на уровне диаграммы иерархии.
Исторический переход содержится в состоянии с параллельным (И) разложением.
Соединение истории содержится внутри графической функции.
Существует несколько соединений истории, содержащихся в одном состоянии.
Исторический стык является источником перехода.
Уровень диагностики: ошибка.
Решение: Удаление соединения истории с уровня диаграммы иерархии, состояния с параллельной (И) декомпозицией или графической функции. Удалить из состояния все соединения истории, кроме одного. Переместите источник перехода в соединительное соединение или состояние. Дополнительные сведения см. в разделе Запись активности состояния с помощью соединений истории.

Junction Has No Unconditional Escape from CycleПроблема: Соединение должно иметь безусловный путь отхода от цикла к состоянию или конечному соединению.
Уровень диагностики: ошибка.
Решение: Создание безусловного пути от соединения к состоянию или конечному соединению.

Unexpected BacktrackingПроблема: Неожиданное обратное отслеживание потока управления может произойти, когда несколько путей перехода от одного источника ведут к соединению, а соединение не имеет безусловного пути к состоянию или конечному соединению.
Уровень диагностики: Зависит от параметра конфигурации Неожиданное обратное отслеживание (Simulink).
Решение: Создание безусловного пути от соединения к состоянию или конечному соединению. Дополнительные сведения см. в разделе Обратная связь в блок-схемах.
Например, выделенное соединение на этой диаграмме не имеет безусловного пути перехода в состояние A. Если ConditionA и ConditionB являются истинными и ConditionC false, диаграмма возвращается к первому соединению в пути несколько раз. В результате диаграмма выполняет три действия условия.
![]()
Чтобы избежать обратного отслеживания, объедините условия и создайте безусловный путь от второго соединения к состоянию назначения. После изменения диаграмма выполняет только одно действие условия.
![]()
Unreachable JunctionПроблема: Соединение недоступно, когда к нему не приводит ни один допустимый путь выполнения.
Уровень диагностики: Зависит от параметра конфигурации Unreachable execution path (Simulink).
Решение: Соедините недостижимое соединение с переходом из достижимого состояния или соединения.

Function is UnusedПроблема: Функция не используется, когда диаграмма не содержит операторов, которые вызывают функцию.
Уровень диагностики: Предупреждение.
Решение: Вызовите функцию из состояния или действия перехода или из другой функции.

Invalid Use of Keywords as Function ArgumentsПроблема: Определение функции использует зарезервированное ключевое слово в качестве аргумента.
Уровень диагностики: ошибка.
Решение: Переименуйте аргумент в функцию. Список зарезервированных ключевых слов см. в разделе Рекомендации по именованию объектов Stateflow.
