Разработка «простого генератора напряжения» в соответствии с ГОСТ Р МЭК 61508 (IEC 61508)

от автора

image

В данной статье будут рассмотрены необходимые шаги для создания устройства, отвечающего общим требованиям функциональной безопасности (ФБ). А также будет предложена архитектура простейшего «безопасного» (safety) генератора напряжения. Так как управляя напряжением, можно управлять практически любым устройством.
На сайте есть замечательные статьи (раз, два) на эту тему и книга на которых я вырос как инженер по ФБ.
Серия стандартов ГОСТ Р МЭК 61508 (IEC 61508) является базовой для Российских стандартов, определяющих порядок разработки устройств к которым предъявляются требования ФБ. Как известно, при разработке устройств, связанных с ФБ, существуют отраслевые стандарты регламентирующие порядок разработки (для железных дорог таковыми являются ГОСТ Р 52980-2015 «Требования к ПО», ГОСТ Р 34012-2016 «Общие требования к аппаратуре ЖД» и.т.д).
Согласно стандартов ГОСТ Р МЭК 61508 и IEC 61508 отказы делятся на 2 типа: систематические и случайные.

Систематические отказы определяются ошибками спецификации, проектирования, кодирования программного обеспечения, защита от них строится средствами организации жизненного цикла, к ним относится: верификация всех этапов жизненного цикла на соответствие требованиям, и валидация (валидационное тестирование) конечного продукта.

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

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

Основные организационные методы защиты от систематических ошибок описаны в приложениях ГОСТ Р МЭК 61508. В качестве примера рассмотрим систематическую составляющую программного обеспечения. При написании программного кода следует уделить большое внимание правилам кодирования и стандартам используемым при кодировании. Одним из известных стандартов при программировании на языке «СИ» является «MISRA-C», его применение улучшает безопасность системы. При этом существуют статические анализаторы ( анализаторами вообще полезно проверять любой код на предмет ошибок), способные проверять на соответствие стандарту «MISRA-C», одним из них является PVS-Studio .

Частичного диверситета программного обеспечения можно достигнуть за счет применения различных алгоритмов разработки ПО. Полный диверсистет программного обеспечения достигается только тогда, когда имеются две различные спецификации требований на программное обеспечение, разные команды программистов, разные средства программирования устройств при производстве т.е. данные программы должны быть абсолютно разными и процесс программирования устройств тоже должен быть разным. Так же при разработке программных средств необходимо защититься от ошибок инструментальных средств. Самым критичным ПО с точки зрения инструментальных средств являются компилятор в связке со стандартной библиотекой и линкер. Разнообразия инструментальных средств можно достигнуть, используя компиляторы «ARMCC» и «GCC». При этом некоторые версии «ARMCC» имеют сертификацию TUV на соответствие SIL-3 согласно IEC 61508, а «GCC» успешно применяется при разработке ПО Falcon 9 .

Рассмотрим результаты компиляции команды «Запись в порт»:

Команда на языке «СИ» (ISO/IEC 9899): MDR_PORTE->CLRTX =0x0040
«GCC» «ARMCC»
LDR r3, [pc, #20] MOVS r0,#0x40
MOVS r2, #64; 0x40 LDR r1,[pc,#16]; @0x0000072C
STR r2, [r3, #36] STR r0,[r1,#0x24]

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

Рассмотрим методы защиты от случайных ошибок на примере устройства, управления электромагнитным реле, представленного на рисунке. Для того чтобы определить методы защиты необходимо выявить опасные отказы оборудования. Как известно реле управляется подачей напряжения на его обмотку, в этом случае опасным отказом для данного устройства будет несанкционированное появление напряжения достаточного для срабатывания реле. Данное устройство строится на архитектуре 2 из 2. В данной архитектуре MCU_А и MCU_B должны получать команды по физически разделенным сетям.

image
Рисунок — схема безопасного сопряжения

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

  1. Пробивается оптрон U1
  2. Пробивается ключ K2
  3. Пробивается трансформатор

Интенсивность наступления событий данного типа определяется по формуле image. Так как все три отказа связаны между собой интенсивность данной цепочки будет определяться формулой image. При грубых допущениях интенсивность отказов данной цепочки составляет менее чем (10e-15) 1/ч, в предположении что отказы могут накапливаться в течении 24 часов.

Рассмотрим еще один из отказов: выход из строя MCU_A и MCU_B так, что они «случайным образом» генерируют последовательность импульсов на выходе.

Под «случайным образом» понимается выполнение микроконтроллером как минимум девяти команд (три записи в порт), при этом напряжение на выходе будет зафиксировано двумя микроконтроллерами и будет выдана ошибка несоответствия принятой и «выданной команды». Интенсивность данных событий является крайне низкой так как: два МК одновременно должны будут выполнить 9 команд (не говоря о том что МК должны будут писать противополжные значения в порты, через определенные интервалы времени для того чтобы на выходе сформировать напряжение необходимое для срабатывания реле).

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

  1. диверсификацию программно-аппаратных средств;
  2. самодиагностику всех ресурсов микроконтроллеров (ОЗУ, ПЗУ, АЛУ, рабочие регистры и.т.д), а также узлов устройства;
  3. снижение параметров элементов схем относительно предельных значений (De-rating), для обеспечения лучших эксплуатационных характеристик и снижения вероятности отказов.

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

Р.S. В рассмотренном примере для снижения вероятности отказов по общей причине можно один из микроконтроллеров заменить на FPGA.

Всем спасибо за внимание (это моя первая статья)!


ссылка на оригинал статьи https://habr.com/ru/post/481594/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *