Логические и битовые операции

hisl_0016: Использование блоков, которые вычисляют реляционные операторы

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

Чтобы поддержать робастность операций, при использовании блоков, которые вычисляют реляционные операторы, включая Relational Operator, Compare To Constant, Compare To Zero, Sign, Detect Change и блоки If:

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

Из-за проблем с точностью с плавающей точностью не проверяйте выражения с плавающей точкой на равенство (==) или неравенство (~=).

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

ОбъяснениеAУлучшите робастность модели.
Проверки Model AdvisorПроверяйте на наличие блоков реляционных операторов, которые приравнивают типы с плавающей точкой (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    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 (1с) «Обеспечение соблюдения строгих типоразмеров»

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

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

  • MISRA C:2012, Dir 1.1

См. также

hisl_0017: Использование блоков, которые вычисляют реляционные операторы (2)

himl_0009: код MATLAB с равными/не равными реляционными операторами

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

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

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

hisl_0017: Использование блоков, которые вычисляют реляционные операторы (2)

Идентификатор: Заголовокhisl_0017: Использование блоков, которые вычисляют реляционные операторы (2)
Описание

Чтобы поддержать однозначное поведение в сгенерированном коде, при использовании блоков, которые вычисляют реляционные операторы, включая Relational Operator, Compare To Constant, Compare to Zero и Detect Change

AУстановите параметры блоков Output data type в Boolean.
BДля блоков Relational Operator проверьте, что входные сигналы имеют совпадающий тип данных.
ОбъяснениеA, BПоддержка генерации кода, который производит однозначное поведение.
Проверки Model AdvisorПроверяйте использование блоков реляционных операторов (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    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 (1с) «Обеспечение соблюдения строгих типоразмеров»

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

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

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

См. такжеhisl_0016: Использование блоков, которые вычисляют реляционные операторы
Последнее изменениеR2018a

hisl_0018: Использование блока Логического Оператора

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

Чтобы поддержать однозначное поведение сгенерированного кода, при использовании блока Logical Operator,

A

Установите параметры блоков Output data type в Boolean.

B

Убедитесь, что входные сигналы имеют тип Boolean.

Необходимые условия

hisl_0045: Параметры конфигурации > Типы математики и данных > Реализуйте логические сигналы как логические данные (против double)

ОбъяснениеA, BИзбегайте неоднозначного поведения сгенерированного кода.
Проверки Model AdvisorПроверяйте использование блоков логического оператора (Simulink Check)
Ссылки
  • DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

  • IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    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 (1с) «Обеспечение соблюдения строгих типоразмеров»

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

  • MISRA C:2012, Директива 10.1

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

hisl_0019: Использование побитовых операций

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

Чтобы поддержать однозначное поведение, при использовании побитовых операций в блоках Simulink,

A

Избегайте типов данных со знаком в качестве входных данных для блока.

Примечания

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

Битовые блоки включают:

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

  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "

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

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

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

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

См. такжеhisf_0003: Использование побитовых операций
Последнее изменениеR2019a