Чтобы избежать ошибок общего умысла, можно осуществить диагностические проверки, которые тестируют полноту графика Stateflow® во время компиляции и симуляции. Диагностика Stateflow обнаруживает несоответствия состояния, нарушения в областях значений данных и циклическое поведение в диаграммах Stateflow в моделях Simulink®.
Когда вы симулируете модель, Stateflow автоматически анализирует машину Stateflow. Синтаксический анализатор оценивает графические и неграфические объекты и данные в каждой машине Stateflow против поддерживаемого обозначения графика и синтаксиса языка действия. Можно также проверять синтаксис графика путем выбора Update Chart во вкладке Modeling Панели инструментов Stateflow.
Если синтаксические ошибки существуют в вашем графике, график автоматически появляется с подсвеченным объектом, который вызывает первую ошибку. Можно выбрать ошибку в диагностическом окне, чтобы выявить его исходный график с подсвеченным исходным объектом. Любые неразрешенные данные или события в графике отмечаются в Мастере Символа.
В диаграмме Stateflow состояния противоречивы, если они нарушают одно из этих правил:
Активное состояние с исключительным (OR) разложение и по крайней мере одно подсостояние имеет точно одно активное подсостояние.
Все подсостояния активного состояния с параллелью (AND) разложение активны.
Все подсостояния неактивного состояния неактивны независимо от разложения состояния.
В то время как вы редактируете свой график, редактор Stateflow отображает потенциальные причины для несоответствий состояния путем выделения объектов красного или оранжевого цвета. Для получения дополнительной информации смотрите, Обнаруживают Ошибки Моделирования В течение Времени Редактирования.
Один тип несоответствия состояния происходит, когда все эти условия верны:
Состояние с несколькими подсостояниями имеет исключительный (OR) разложение.
Состояние не содержит соединение истории.
Каждый путь по умолчанию, который приводит к подсостоянию, охраняет условие или инициировало событие.
Не все переходы в состояние являются суперпереходами, ведущими непосредственно к подсостоянию.
Например, этот график имеет несоответствие состояния, потому что нет никакого перехода по умолчанию, чтобы указать, какое подсостояние становится активным сначала.
Добавление безусловного перехода по умолчанию к одному из состояний разрешает несоответствие состояния.
Во время компиляции диаграммы Stateflow обнаруживают несоответствия состояния, вызванные пропуском безусловного перехода по умолчанию. Чтобы управлять уровнем диагностического действия, откройте диалоговое окно Model Configuration Parameters. В Diagnostics> панель Stateflow, для диагностического No unconditional default transitions, можно выбрать error
Предупреждение
, или none
. Настройкой по умолчанию является error
. Для получения дополнительной информации не смотрите безусловные переходы по умолчанию (Simulink).
В процессе моделирования нарушение области значений данных происходит когда:
Операция целочисленной или фиксированной точки переполняет числовой способности своего типа результата. Смотрите Целочисленное переполнение Указателя для Операций Данных и Фиксированной точки Графика в диаграммах Stateflow.
Значение объекта данных находится вне области значений значений, заданных Initial value, Minimum и свойствами Maximum. Смотрите Область значений Начального значения и Предела.
Например, этот график содержит локальные данные a
это имеет значение Minimum 0 и значение Maximum 2. entry
действие в A
состояния инициализирует
a
к 1. during
действие постепенно увеличивает значение a
1. После двух временных шагов, значения a
превышает его заданную область, приводящую к нарушению области значений данных.
Во время выполнения диаграммы Stateflow обнаруживают нарушения области значений данных. Чтобы управлять уровнем диагностического действия, откройте диалоговое окно Model Configuration Parameters. В Diagnostics> панель Data Validity, можно выбрать error
Предупреждение
, или none
для этой диагностики:
Simulation range checking обнаруживает нарушения на основе проверок диапазона минимума-и-максимума. Настройкой по умолчанию является None
.
Wrap on overflow и Saturate on overflow обнаруживают нарушения, которые происходят, когда операции целочисленной или фиксированной точки превышают числовую способность своего типа результата. Настройкой по умолчанию является warning
.
Для получения дополнительной информации смотрите проверку диапазона Симуляции (Simulink), Перенеситесь на переполнении (Simulink) и Насыщайте на переполнении (Simulink).
Циклическое поведение происходит, когда шаг или последовательность шагов повторяются неопределенно во время симуляции графика.
Например, действия в этом графике производят бесконечный цикл рекурсивных широковещательных сообщений события.
during
действие в C
состояния широковещательно передает событие
E1
.
Событие E1
инициировал переход от A.A1
состояния утверждать
A.A2
. Действие условия для этого перехода широковещательно передает событие E2
.
Событие E2
инициировал переход от B.B1
состояния утверждать
B.B2
. Действие условия для этого перехода широковещательно передает событие E1
.
Широковещательные сообщения события в состояниях A
и B
происходите в действиях условия, таким образом, переходы не происходят, пока график не обрабатывает получившиеся события. Подсостояния A.A1
и B.B1
останьтесь активными, таким образом, новые широковещательные сообщения события продолжают инициировать переходы, и процесс повторяется неопределенно.
Поскольку неориентированные локальные широковещательные сообщения события могут вызвать нежелательное рекурсивное поведение, использование send
оператор, чтобы широковещательно передать направленные локальные события рекомендуется. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.
Во время симуляции графика диаграммы Stateflow используют алгоритмы обнаружения цикла, чтобы обнаружить класс бесконечных рекурсий, вызванных широковещательными сообщениями события. Чтобы включить обнаружение цикла, откройте свой Stateflowchart. Во вкладке Debug выберите Diagnostics> Detect Cyclical Behavior. Циклическая проверка поведения выбрана по умолчанию.
Диаграммы Stateflow также обнаруживают неориентированные локальные широковещательные сообщения события. Чтобы управлять уровнем диагностического действия, откройте диалоговое окно Model Configuration Parameters. В Diagnostics> панель Stateflow, для диагностики Undirected event broadcasts, можно выбрать error
Предупреждение
, или none
. Настройкой по умолчанию является warning
. Для получения дополнительной информации смотрите широковещательные сообщения события Undirected (Simulink).
Обнаружение цикла Stateflow ограничивается случаями рекурсии из-за широковещательных сообщений события и не расширяет к другим типам циклического поведения.
Например, Stateflow не может обнаружить бесконечный цикл в этой блок-схеме. В этом примере переход по умолчанию инициализирует локальные данные i
к 0. Следующий сегмент перехода постепенно увеличивает i
. Переход к завершающему работу соединению допустим только когда условие [i < 0]
верно. Поскольку это условие никогда не верно, бесконечный цикл заканчивается.
Модель sf_cycle_error_fix
обеспечивает предложения для фиксации циклического поведения в блок-схемах. В командной строке MATLAB®, введите:
sfhelp('cycle_error');