DO-178C/DO-331 Проверки

DO-178C/DO-331 Проверки

DO-178C/DO-331 проверки упрощают разработку и поиск и устранение неисправностей моделей, из которых код сгенерирован для приложений, которые должны встретить безопасности или критически важным для миссии требованиям.

Model Advisor выполняет контроль лицензии Simulink® Check™, когда вы запускаетесь DO-178C/DO-331 проверки.

Эти проверки квалифицированы DO Qualification Kit к использованию в проектах, включающих стандарт DO-178 и связанные стандарты.

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

Проверяйте связанные с безопасностью настройки генерации кода

ID проверки: mathworks.do178.CodeSet

Проверяйте настройку модели на настройки генерации кода, которые могут повлиять на безопасность.

Описание

Эта проверка проверяет, что параметры конфигурации модели для генерации кода установлены оптимально для связанного с безопасностью приложения.

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Опция, чтобы включать комментарии в сгенерированный код очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Include comments (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр GenerateComments к on.
Опция, чтобы включать комментарии, которые описывают код для блоков, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Simulink block comments (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр SimulinkBlockComments к on.
Опция, чтобы включать комментарии, которые описывают код для блоков, устраненных из модели, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Show eliminated blocks (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр ShowEliminatedStatement к on.
Опция, чтобы включать имена переменных параметра и исходных блоков как комментарии в описании структуры параметра модели в model_prm.h очищен. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Verbose comments for 'Model default' storage class (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр ForceParamTrailComments к on.
Опция, чтобы включать описания требования, присвоенные блокам Simulink как комментарии, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Requirements in block comments (Simulink Coder) на Code Generation> панель Custom comments в диалоговом окне Configuration Parameters или установите параметр ReqsInCode к on.
Опция, чтобы сгенерировать неличные данные и операции выбрана. Поддержка неличных чисел является несоответствующей для встроенных систем реального времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: non-finite numbers (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportNonFinite к off.
Опция, чтобы сгенерировать и обеспечить целочисленные счетчики в течение абсолютного и прошедшего времени выбрана. Поддержка в течение абсолютного времени является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: absolute time (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportAbsoluteTime к off.
Опция, чтобы сгенерировать код для блоков, которые используют непрерывное время, выбрана. Поддержка в течение непрерывного времени является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: continuous time (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportContinuousTime к off.
Опция, чтобы сгенерировать код для невстроенных S-функций выбрана. Эта опция требует поддержки неличных чисел, которая является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: non-inlined S-functions (Simulink Coder) в диалоговом окне Configuration Parameters или установите параметр SupportNonInlinedSFcns к off.
Опция, чтобы сгенерировать вызовы функции модели, совместимые с основным программным модулем цели pre-R2012a GRT, выбрана. Эта опция является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Classic call call interface (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр GRTInterface к off.
Опция, чтобы сгенерировать model_update функция очищена. Наличие одного вызова функций выхода и обновления упрощает интерфейс до операционной системы реального времени (RTOS) и упрощает верификацию сгенерированного кода. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Выберите Single output/update function (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр CombineOutputUpdateFcns к on.
Опция, чтобы сгенерировать model_terminate функция выбрана. Эта функция освобождает динамическую память, которая является неподходящей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Terminate function (Simulink Coder) на панели Code Generation в диалоговом окне Configuration Parameters или установите параметр IncludeMdlTerminateFcn к off.
Опция, чтобы регистрировать или состояние ошибки монитора очищена. Если вы не выбираете эту опцию, продукт Simulink Coder™ генерирует дополнительный код, который не может быть достижимым для тестирования. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Выберите Remove error status field in real-time model data structure (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SuppressErrorStatus к on.
Логгирование MAT-файла выбрано. Эта опция добавляет дополнительный код для логгирования тестовых точек к MAT-файлу, который не поддержан целевыми процессорами. Используйте эту опцию только в тестовых обвязках. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите MAT-file logging (Simulink Coder) в диалоговом окне Configuration Parameters или установите параметр MatFileLogging к off.
Опция, которая задает стиль для использования круглой скобки, установлена в Minimum (Rely on C/C++ operators precedence) или к Nominal (Optimize for readability). Для связанных с безопасностью приложений явным образом задайте приоритет с круглыми скобками. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером, DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером, и MISRA C:2012, Правилом 12.1.)Установите параметр ParenthesesLevel к Maximum (Specify precedence with parentheses).
Опция, которая задает, сохранить ли порядок операнда, очищена. Эта опция увеличивает трассируемость сгенерированного кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите параметр PreserveExpressionOrder к on.
Опция, которая задает, сохранить ли пустые первичные выражения условия в if операторы очищены. Эта опция увеличивает трассируемость сгенерированного кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите параметр PreserveIfCondition к on.
Минимальное количество символов, заданных для генерации строк искажения имени, меньше четыре. Можно использовать эту опцию, чтобы минимизировать вероятность, что параметр и имена сигнала изменятся во время генерации кода, когда модель изменится. Использование этой опции помогает с минимизацией различий кода между версиями файла, уменьшая усилие выполнить рассмотрения кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите Minimum mangle length (Simulink Coder) на Code Generation> панель Symbols в диалоговом окне Configuration Parameters или параметре MangleLength к значению 4 или больше.

Результаты действия

Нажатие на Modify Settings конфигурирует настройки генерации типового кодекса, которые могут повлиять на безопасность.

Подпроверки зависят от результатов подпроверок, отмеченных с D в таблице результатов в окне Model Advisor.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Не позволяет исключения блоков или графиков.

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

Проверяйте использование блоков Математических операций

ID проверки: mathworks.do178.MathOperationsBlocksUsage

Идентифицируйте использование блоков Math Operation, которые могут повлиять на безопасность.

Описание

Эта проверка смотрит использование следующих блоков:

  • Abs

  • Gain

  • Math Function

    • Натуральный логарифм

    • Распространенный (базируются 10), логарифм

    • Остаток после деления

    • Обратная величина

  • Assignment

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие

Модель или подсистема содержат блок Absolute Value, который работает с одним из следующего:

  • Булевская переменная или тип входных данных без знака. Это условие результаты в недостижимых трассах симуляции через модель и может привести к недостижимому коду

  • Значение целого числа со знаком с флажком Saturate on integer overflow, не установленным. Для типов данных со знаком абсолютное значение наиболее отрицательной величины проблематично, потому что это не является представимым, по условию вводят. Это условие приводит к переполнению в сгенерированном коде.

Если идентифицированный блок Absolute Value работает с булевым или типом данных без знака, выполнить одно из следующих действий:

  • Измените вход блока Absolute Value к входному типу со знаком.

  • Удалите блок Absolute Value из модели.

Если идентифицированный блок Absolute Value работает с типом данных со знаком в диалоговом окне Block Parameters > Signal Attributes, выберите Saturate on integer overflow.

Модель или подсистема содержат блоки Gain со значения 1 или единичная матрица.Если вы используете блоки Gain в качестве буферов, рассматриваете заменяющий их на блоки Signal Conversion.
Модель или подсистема содержат Math Function - Натуральный логарифм (log) блоки, которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с log функционируйте, защитите вход с блоком из того, чтобы быть меньше чем или равным нулю. В противном случае выход может произвести NaN или -Inf и приведите к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Math Function - Распространенный (базируйтесь 10), (base 10 logarithm) блоки, которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с log10 функционируйте, защитите вход с блоком из того, чтобы быть меньше чем или равным нулю. В противном случае выход может произвести NaN или -Inf и приведите к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Math Function - Остаток после division(rem) блоки, которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с rem функционируйте, защитите второй вход с блоком из равного нулю. В противном случае выход может произвести Inf или -Inf и приведите к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Math Function - Обратная величина (reciprocal) блоки, которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с reciprocal функционируйте, защитите вход с блоком из равного нулю. В противном случае выход может произвести Inf или -Inf и приведите к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема могут содержать блоки Assignment с неполной инициализацией массивов, которые не имеют параметров блоков набором Action if any output element is not assigned к Error или Warning.

Установите параметры блоков Action if any output element is not assigned на одно из рекомендуемых значений:

  • Error, если блок Assignment не находится в подсистеме Итератора.

  • Warning, если блок Assignment находится в подсистеме Итератора.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

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

Проверяйте использование блоков Битовых операций и Логики

ID проверки: mathworks.do178.LogicBlockUsage

Идентифицируйте использование Logical Operator и блоков Bit Operations, которые могут повлиять на безопасность.

Описание

Эта проверка смотрит использование:

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блок, вычисляя оператор отношения, который работает с различными типами данных. Условие может привести к непредсказуемым результатам в сгенерированном коде. Для идентифицированных блоков используйте типы общих данных в качестве входных параметров. Можно использовать блоки Data Type Conversion, чтобы изменить типы входных данных.
Модель или подсистема содержат блок, вычисляя оператор отношения, который не имеет булева выхода. Условие может привести к непредсказуемым результатам в сгенерированном коде. Для заданных блоков, на Параметрах блоков> панель Атрибутов Сигнала, устанавливает Output data type на boolean.
Модель или подсистема содержат блок, вычисляя оператор отношения, который использует == или ~ = оператор, чтобы сравнить сигналы с плавающей точкой. Использование этих операторов на сигналах с плавающей точкой ненадежно и непредсказуемо из-за проблем точности с плавающей точкой. Эти операторы могут привести к непредсказуемым результатам в сгенерированном коде.

Для идентифицированного блока выполнить одно из следующих действий:

  • Измените тип данных сигнала.

  • Переделайте модель, чтобы устранить использование == или ~ = операторы на сигналах с плавающей точкой.

Модель или подсистема содержат блок Logical Operator, который имеет вводы или выводы, которые не являются булевыми вводами или выводами. Блок может привести к сравнениям равенства или неравенства с плавающей точкой в сгенерированном коде.
  • Измените блок Logical Operator так, чтобы все вводы и выводы были булевской переменной. На Параметрах блоков> панель Атрибутов Сигнала, рассмотрите Require all inputs to have the same data type выбора и setting Output data type к boolean.

  • В диалоговом окне Configuration Parameters рассмотрите выбор Implement logic signals as boolean data (vs. double).

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

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

Проверяйте использование блоков Подсистем и Портов

ID проверки: mathworks.do178.PortsSubsystemsUsage

Идентифицируйте использование Ports и блоков Subsystems, которые могут повлиять на безопасность.

Описание

Эта проверка смотрит использование этих блоков:

  • For Iterator

  • While Iterator

  • If

  • Switch Case

Проверка не делает блоков флага Switch Case, которые не используют целочисленные типы данных или перечислимые величины для входных параметров. Выполнить hisl_0011: Использование блоков Случая Переключателя и блоков Subsystem Действия (Simulink) – C, используйте целочисленный тип данных или перечислимую величину для входных параметров с блоками Switch Case.

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блок For Iterator, который имеет переменные итерации. Это условие может привести к непредсказуемым временам выполнения или бесконечным циклам в сгенерированном коде.

Для идентифицированных блоков For Iterator выполнить одно из следующих действий:

  • Установите the Iteration limit source параметр на internal.

  • Если параметром Iteration limit source должен быть external, используйте Constant, Probe или блок Width как источник.

  • Снимите Набор следующий флажок i (iteration variable) externally.

  • Рассмотрите установку флажка Show iteration variable и наблюдайте значение итерации в процессе моделирования.

Модель или подсистема содержат блок While Iterator, который имеет неограниченные итерации. Это условие может привести к бесконечным циклам в сгенерированном коде.

Для идентифицированных блоков While Iterator:

  • Установите параметр Maximum number of iterations (-1 for unlimited) на положительное целочисленное значение.

  • Рассмотрите установку флажка Show iteration number port и наблюдайте значение итерации в процессе моделирования.

Модель или подсистема содержат блок If с, Если выражение или выражения Elseif, которые могут вызвать сравнения равенства или неравенства с плавающей точкой в сгенерированном коде.Измените выражения в блоке If, чтобы избежать сравнений равенства или неравенства с плавающей точкой в сгенерированном коде.
Модель или подсистема Еще содержат использование блока If выражения Elseif без условие.В диалоговом окне Block Parameters блока If выберите Show else condition. Еще соедините получившееся выходной порт с блоком If Action Subsystem.
Модель или подсистема содержат блок If с выходными портами, которые не соединяются с блоками If Action Subsystem.Проверьте, что выходные порты блока If соединяются с блоками If Action Subsystem.
Модель или подсистема содержат блок Switch Case без случая по умолчанию.В диалоговом окне Block Parameters блока Switch Case выберите Show default case. Соедините получившийся выходной порт по умолчанию с блоком Switch Case Action Subsystem.
Модель или подсистема содержат блок Switch Case с выходным портом, который не соединяется с блоком Switch Case Action Subsystem.Проверьте, что выходные порты блоков Switch Case соединяются с блоками Switch Case Action Subsystem.

Модель или подсистема содержат один из следующих зависящих от времени блоков в подсистеме While Iterator или For Iterator:

  • Discrete Filter

  • Discrete FIR Filter

  • Discrete State-Space

  • Discrete Transfer Fcn

  • Discrete Zero-Pole

  • Transfer Fcn First Order

  • Transfer Fcn Lead or Lag

  • Transfer Fnc Real Zero

  • Discrete Derivative

  • Discrete Transfer Fcn (with initial outputs)

  • Discrete Transfer Fcn (with initial states)

  • Discrete Zero-Pole (with initial outputs)

  • Discrete Zero-Pole (with initial states)

В модели или подсистеме, рассмотрите удаление зависящих от времени блоков.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

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

Информация о версии модели дисплея

ID проверки: mathworks.do178.MdlChecksum

Информация о версии модели дисплея в вашем отчете.

Описание

Эта проверка отображает следующую информацию для текущей модели:

  • Номер версии

  • Автор

  • Дата

  • Контрольная сумма модели

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Невозможно получить информацию о версии и контрольной сумме модели. Эти сводные данные предоставлены для вашей информации. Никакое действие не требуется.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Не позволяет исключения блоков или графиков.

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