Обнаружение распространенных ошибок моделирования во время симуляции графика

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

Когда вы симулируете модель, анализатор Stateflow оценивает графические и неграфические объекты и данные в каждой машине Stateflow с учетом поддерживаемого обозначения на графике и синтаксиса языка действий. Можно также проверить синтаксис графика, выбрав Update Chart на вкладке Modeling Stateflow Toolstrip.

Если синтаксические ошибки существуют в графике, график автоматически появляется с подсвеченным объектом, который вызывает первую ошибку. Можно выбрать ошибку в окне диагностики, чтобы перенести ее исходный график на фронт с выделенным исходным объектом. Все неразрешенные данные или события на графике помечены в мастере обозначений.

Несоответствия состояний

В диаграмме Stateflow состояния противоречивы, если они нарушают одно из следующих правил:

  • Активное состояние с исключительным (OR) разложением и, по крайней мере, одним подсостоянием имеет в точности одно активное подсостояние.

  • Все подсостояния активного состояния с параллельным (И) разложением активны.

  • Все подсостояния неактивного состояния неактивны независимо от разложения состояний.

Во время редактирования графика Редактор Stateflow отображает потенциальные причины несоответствий состояний, подсвечивая объекты красным или оранжевым цветом. Для получения дополнительной информации см. «Обнаружение ошибок моделирования во время редактирования».

Причины несогласованности состояний

Один тип несогласованности состояний возникает, когда все эти условия верны:

  • Состояние с несколькими подсостояниями имеет эксклюзивное (OR) разложение.

  • Состояние не содержит исторического соединения.

  • Каждый путь по умолчанию, который ведет к подсостояние, охраняется условием или запускается событием.

  • Не все переходы в состояние являются суперпереходами, ведущими непосредственно к подсостоянию.

Для примера этот график имеет несогласованность состояний, потому что нет перехода по умолчанию, чтобы указать, какое подсостояние становится активным первым.

Добавление безусловного перехода по умолчанию к одному из состояний устраняет несогласованность состояний.

Обнаружение несоответствий состояния

Во время компиляции диаграммы Stateflow обнаруживают несоответствия состояний, вызванные упущением безусловного перехода по умолчанию. Чтобы контролировать уровень диагностического действия, откройте диалоговое окно Model Параметры Конфигурации. На панели Diagnostics > Stateflow для диагностического No unconditional default transitions можно выбрать error, warning, или none. Настройкой по умолчанию является error. Для получения дополнительной информации смотрите Нет безусловных переходов по умолчанию (Simulink).

Нарушения области значений данных

Во время симуляции нарушение области значений происходит, когда:

Для примера этот график содержит локальные данные a которое имеет Minimum значение 0 и Maximum значение 2. The entry действие в состоянии A инициализирует a по 1. The during действие увеличивает значение a по 1. После двух временных шагов значение a превышает свои заданные области, приводя к нарушению области значений данных.

Обнаружение нарушений области значений данных

Во время исполнения диаграммы Stateflow обнаруживают нарушения области значений данных. Чтобы контролировать уровень диагностического действия, откройте диалоговое окно Model Параметры Конфигурации. На панели Diagnostics > Data Validity можно выбрать error, warning, или none для этой диагностики:

  • Simulation range checking обнаруживает нарушения на основе минимальных и максимальных проверок области значений. Настройкой по умолчанию является none.

  • Wrap on overflow и Saturate on overflow обнаруживают нарушения, которые происходят, когда целое число или операции с фиксированной точкой превышают числовую емкость их типа результата. Настройкой по умолчанию является warning.

Для получения дополнительной информации смотрите Simulation range checking (Simulink), Wrap on overflow (Simulink) и Saturate on overflow (Simulink).

Циклическое поведение

Циклическое поведение происходит, когда шаг или последовательность шагов повторяется бесконечно во время симуляции графика.

Например, действия на этом графике создают бесконечный цикл рекурсивных трансляций событий.

  • The during действие в состоянии C транслирует событие E1.

  • Событийный E1 инициирует переход от состояния A.A1 в состояние A.A2. Действие условия для этого перехода транслирует событие E2.

  • Событийный E2 инициирует переход от состояния B.B1 в состояние B.B2. Действие условия для этого перехода транслирует событие E1.

Событие вещает в состояниях A и B происходит в действиях условия, поэтому переходы не происходят до тех пор, пока график не обработает результирующие события. Область подсостояний A.A1 и B.B1 оставаться активным, поэтому новые трансляции событий продолжают запускать переходы, и процесс повторяется бесконечно.

Поскольку неориентированные локальные широковещательные передачи событий могут вызвать нежелательное рекурсивное поведение, использование send рекомендуется оператор для трансляции ориентированных локальных событий. Для получения дополнительной информации смотрите Широковещание локальных событий для синхронизации параллельных состояний.

Обнаружение циклического поведения во время симуляции

Во время симуляции графика Stateflow используют алгоритмы обнаружения цикла, чтобы обнаружить класс бесконечных рекурсий, вызванных широковещательными сообщениями о событиях. Чтобы включить обнаружение цикла, откройте диаграмму Stateflow. На вкладке Debug выберите Diagnostics > Detect Cyclical Behavior. Циклическая проверка поведения выбрана по умолчанию.

Диаграммы Stateflow также обнаруживают неориентированные локальные трансляции событий. Чтобы контролировать уровень диагностического действия, откройте диалоговое окно Model Параметры Конфигурации. На панели Diagnostics > Stateflow для диагностики Undirected event broadcasts можно выбрать error, warning, или none. Настройкой по умолчанию является warning. Для получения дополнительной информации смотрите Неориентированные трансляции событий (Simulink).

Ограничения циклического обнаружения поведения

Обнаружение цикла Stateflow ограничено случаями рекурсии из-за трансляций событий и не распространяется на другие типы циклического поведения.

Для образца Stateflow не может обнаружить бесконечный цикл в этом графике потока. В этом примере переход по умолчанию инициализирует локальные данные i в 0. Шаг следующего сегмента перехода увеличивается i. Переход к оконечному соединению действителен только тогда, когда условие [i < 0] является true. Поскольку это условие никогда не является правдой, получается бесконечный цикл.

Модель sf_cycle_error_fix предоставляет рекомендации по фиксации циклического поведения в графики потока. В MATLAB® в командной строке введите:

sfhelp('cycle_error');

Похожие темы