Математические операции

hisl_0001: Использование блока Abs

Идентификатор: Заголовокhisl_0001: Использование блока Abs
ОписаниеЧтобы поддержать робастность сгенерированного кода, при использовании блока Abs,
AИзбегайте логических и неподписанных типов данных в качестве входов для блока Abs.
BВыберите параметры блоков Saturate on integer overflow.
Примечания

Блок Abs не поддерживает логические типы данных. Установка неподписанного типа входных данных может оптимизировать Abs блок из сгенерированного кода, в результате чего блок, который вы не можете проследить до сгенерированного кода.

Для типов данных со знаком Simulink® не представляет абсолютное значение наиболее отрицательного значения. Когда вы выбираете Saturate on integer overflow, абсолютное значение типа данных достигает наиболее положительного представимого значения. Когда вы очищаете Saturate on integer overflow, вычисления абсолютных значений в симуляции и сгенерированном коде могут быть непротиворечивыми или ожидаемыми.

ОбъяснениеAПоддержка генерации отслеживаемого кода.
BДостигайте последовательного и ожидаемого поведения симуляции модели и сгенерированного кода.
Проверки Model Advisor Проверяйте использование блоков Abs (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка'
    IEC 61508-3, таблица A.4 (3) «Оборонительное программирование»
    IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    IEC 61508-3, Таблица B.8 (3) «Анализ потока управления»

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (1b) «Использование языковых подмножеств»
    ISO 26262-6, Таблица 1 (1d) «Использование защитных методов реализации»
    ISO 26262-6, Таблица 7 (1f) «Анализ потока управления»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'
    EN 50128, таблица A.4 (8) 'Сильно типизированный язык программирования'
    EN 50128, таблица A.19 (3) «Анализ потока управления»

  • DO-331, раздел MB.6.3.2.d 'Низкоуровневые требования проверяются'
    DO-331, раздел MB.6.3.2.g - 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

Последнее изменениеR2018b
Примеры

Рекомендуется

Не рекомендуется

hisl_0002: Использование блоков Math Function (rem и returcal)

Идентификатор: Заголовокhisl_0002: Использование блоков Math Function (rem и returcal)
Описание

Чтобы поддержать робастность сгенерированного кода, при использовании блока Math Function с оставшимся после деления (rem) или ответный (reciprocal) функции:

A

Защитите вход reciprocal функция от перехода к нулю.

B

Защитите второй вход rem функция от перехода к нулю.

Примечание

Можно получить операцию деления на нули, что приводит к бесконечной (Inf) выходное значение для reciprocal function, или не число (NaN) выходное значение для rem функция. Чтобы избежать переполнения или неопределенных значений, защитите соответствующий вход от перехода к нулю.

ОбъяснениеЗащита от переполнений и неопределенных числовых результатов.
Проверки Model AdvisorПроверяйте использование блоков Math Function (rem и обратные функции) (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств»
    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

Последнее изменениеR2017b
Примеры

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

hisl_0003: Использование блоков квадратного корня

Идентификатор: Заголовокhisl_0003: Использование блоков квадратного корня
Описание

Чтобы поддержать робастность сгенерированного кода, при использовании блока Square Root выполните одно из следующих действий:

A

Учитывайте комплексные числа как выход.

B

Защитите вход от отрицательного изменения.

ОбъяснениеA, BИзбегайте нежелательных результатов в сгенерированном коде.
Проверки Model AdvisorПроверяйте использование блоков Sqrt (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств »
    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

Последнее изменениеR2016a
Примеры

hisl_0028: Использование Возвратных Квадратных Корневых блоков

Идентификатор: Заголовокhisl_0028: Использование Возвратных Квадратных Корневых блоков
Описание

Чтобы поддержать робастность сгенерированного кода, при использовании блока Reciprocal Square Root выполните одно из следующих действий:

A

Защитите вход от отрицательного изменения.

B

Защитите вход от перехода к нулю.

Примечание

Можно получить операцию деления на нули, что приводит к (Inf) выходное значение для обратной функции. Чтобы избежать переполнения или неопределенных значений, защитите соответствующий вход от перехода к нулю.

ОбъяснениеA, BИзбегайте нежелательных результатов в сгенерированном коде.
Проверки Model AdvisorПроверяйте использование обратных блоков Sqrt (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств »
    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

Последнее изменениеR2016a
Примеры

hisl_0004: Использование блоков Math Function (натуральный логарифм и основа 10 логарифм)

Идентификатор: Заголовокhisl_0004: Использование блоков Math Function (натуральный логарифм и основа 10 логарифм)
Описание

Чтобы поддержать робастность сгенерированного кода, при использовании блока Math Function с натуральным логарифмом (log) или основание 10 логарифм (log10) параметры функции,

A

Защитите вход от отрицательного изменения.

B

Защитите вход от равного нулю.

C

Учитывайте комплексные числа как выход значение.

Примечания

Если вы устанавливаете тип выходных данных в комплексный, натуральные логарифмические и базовые 10 логарифмические функции выводят комплексные числа для отрицательных входных значений. Если вы устанавливаете тип выходных данных real, функции выводят NAN для отрицательных чисел и минус бесконечность (-inf) для нулевых значений.

ОбъяснениеA, B, CПоддержка генерации робастного кода.
Проверки Model AdvisorПроверяйте использование блоков Math Function (журнала и log10) (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств»
    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

Последнее изменениеR2017b
Примеры

Вы можете защитить от:

  • Отрицательные числа с использованием блока Abs.

  • Нулевые значения с помощью комбинации блока MinMax и блока Constant с Constant value установкой на eps (эпсилон).

В следующем примере показан полученный выход для значений входа в диапазоне от -100 на 100.

hisl_0005: Использование блоков продукта

Идентификатор: Заголовокhisl_0005: Использование блоков продукта
Описание

Когда Product параметров блоков Multiplication установлено на Matrix(*), защитите входные входы делителя от превращения в сингулярные входные матрицы.

Примечания

При использовании Product блоков для вычисления обратной матрицы или матричного деления можно получить деление на сингулярную матрицу. Это деление приводит к NaN выход. Чтобы избежать переполнения, защитите входные входы делителя от превращения в сингулярные входные матрицы.

ОбъяснениеЗащита от переполнения и поддержка робастности сгенерированного кода.
Проверки Model AdvisorСоблюдение этого руководства по моделированию не может быть проверено с помощью проверки Model Advisor.
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (1b) «Использование языковых подмножеств»
    ISO 26262-6, Таблица 1 (1d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Алгоритмы MB.6.3.2.g 'Раздела точны

  • MISRA C:2012, Dir 4.1

Необходимые условияhisl_0314: Параметры конфигурации > Диагностика > Валидность данных > Сигналы
Последнее изменениеR2021a

hisl_0029: Использование блоков назначения

Идентификатор: Заголовокhisl_0029: Использование блоков назначения
Описание

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

Примечания

Если выходной вектор Assignment блока не инициализирован входом в блок, элементы вектора могут не быть инициализированы в сгенерированном коде.

Когда блок Assignment используется итеративно и все поле массива назначаются в течение одного временного шага симуляции, вам не нужен вход инициализации в блок.

Доступ к неинициализированным элементам выхода блоков может привести к неожиданному поведению.

ОбъяснениеИзбегайте нежелательных результатов в сгенерированном коде.
Проверки Model AdvisorПроверяйте использование блоков Assignment (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование»
    IEC 61508-3, Таблица A.3 (2) «Сильно типизированный язык программирования»

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств »
    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'
    EN 50128, таблица A.4 (8) 'Сильно типизированный язык программирования'

  • DO-331, раздел MB.6.3.2.g - 'Алгоритмы точны'

  • MISRA C:2012, правило 9.1

Последнее изменениеR2016a
Примеры

Не Рекомендуемый: Нет входных Y0 инициализации, когда блок не используется итеративно


Рекомендуемый: Инициализация входного Y0, когда блок не используется итеративно


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

hisl_0066: Использование блоков Gain

Идентификатор: Заголовокhisl_0066: Использование блоков Gain
ОписаниеЧтобы поддержать трассируемость сгенерированного кода, значение блока Gain не должно разрешиться к 1.
Примечания

Процесс генерации кода может удалить значения Gain, равные 1 во время оптимизации, в результате чего элементы модели не имеют отслеживаемого кода.

Исключением из этого правила является установка значения Gain на именованный объект данных параметра с классом памяти, отличным от auto.

ОбъяснениеПоддержка генерации отслеживаемого кода.
Проверки Model AdvisorПроверяйте использование блоков Gain (Simulink Check)
Ссылки
  • DO-331, раздел MB 6.3.2.b 'Низкоуровневые требования точны и непротиворечивы'

  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка'
    IEC 61508-3, таблица A.4 (3) «Оборонительное программирование»
    IEC 61508-3, Таблица B.8 (3) «Анализ потока управления»

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (1b) «Использование языковых подмножеств»
    ISO 26262-6, Таблица 1 (1d) «Использование защитных методов реализации»
    ISO 26262-6, Таблица 7 (1f) «Анализ потока управления»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'
    EN 50128, таблица A.19 (3) «Анализ потока управления»

Последнее изменениеR2018a

hisl_0067: Защитите от вычислений деления на нули

Идентификатор: Заголовокhisl_0067: Защитите от вычислений деления на нули
ОписаниеЧтобы поддержать робастность сгенерированного кода, при выполнении операций деления, защитите делитель от перехода в нуль.
Примечание

Чтобы доказать, что деление на нули невозможно, выполните статический анализ модели.

Если деление на нули возможно, реализуйте одно из следующего. Использование нескольких опций может привести к избыточным операциям защиты:

Использование CRL или параметра конфигурации очистки Remove code, который защищает от арифметических исключений деления (Embedded Coder), защищает операции деления от операций деления на нули. Однако это действие действительно вводит дополнительные вычислительные и служебные данные памяти, а также потенциал для введения недоступного кода.

ОбъяснениеУлучшите податливость кода сгенерированного кода
Проверки Model AdvisorПроверяйте на разделение на нули вычислений (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "

    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование»

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств»

    ISO 26262-6, таблица 1 d) «Использование защитных методов реализации»

  • EN 50128, таблица A.4 (11) 'Language Subset'

    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • MISRA C:2012, Dir 4.1

См. также
Последнее изменениеR2021a
Пример

Неправильный

Операция деления может привести к разделению на нули.

Divide-by-zero exists in model example.

Правильный

Графическая функция для модели деления на нули.

Correct example of modeling to prevent divide-by-zero.