himl_0011: Тип данных и размер выражений условия

ID: Заголовокhiml_0011: Тип данных и размер выражений условия
Описание

Логические скаляры должны использоваться в выражениях условия. Выражения условия включают:

  • if выражения

  • elseif выражения

  • while выражения

  • Выражения условия переходов Stateflow®

Объяснение

Предотвратите выполнение неожиданных путей выполнения кода

Проверки Model Advisor
  • By Task> Modeling Standards for DO-178C/DO-331> High-Integrity Systems> MATLAB> Check type and size of condition expressions

  • By Task> Modeling Standards for IEC 61508> High-Integrity Systems> MATLAB> Check type and size of condition expressions

  • By Task> Modeling Standards for IEC 62304> High-Integrity Systems> MATLAB> Check type and size of condition expressions

  • By Task> Modeling Standards for EN 50128> High-Integrity Systems> MATLAB> Check type and size of condition expressions

  • By Task> Modeling Standards for ISO 26262> High-Integrity Systems> MATLAB> Check type and size of condition expressions

Для получения дополнительной информации проверки смотрите тип Проверки и размер выражений условия (Simulink Check).

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

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

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

  • EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'
    EN 50128, таблица A.4 (11) 'языковое подмножество'

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

  • Правило 14.4 MISRA C:2012 - выражение управления if оператор и выражение управления iteration-statement буду иметь essential Boolean ввод.

В последний раз измененныйR2019b
Примеры

Рекомендуемый

Примите переменную var скаляр, типа double со значением -1.

КОД MATLAB:

if var > 0 % expression is a logical scalar
    … % will not be executed
elseif var < 0 % expression is a logical scalar
    … % will be executed
else
    … % will not be executed
end
while var < 5 % expression is a logical scalar        
    var = var + 1; % executed 5 times
end

Условие перехода Stateflow:

[var > 0]{…} % condition action will not be executed

Не рекомендуемый

Примите переменную var скаляр, типа double со значением -1.

КОД MATLAB:

if var % expression is a double scalar
    … % will be executed because var is non-zero
elseif ~var    
    … % will not be executed
else
    … % will not be executed
end
while var % expression is a double scalar
    var = var + 1; % executed 1 time
end

Условие перехода Stateflow:

[var]{…} % condition action will be executed because var is non-zero