Почему функциональная безопасность — не формальность
Техасский Сити, 2005 год. Взрыв на нефтеперерабатывающем заводе BP. 15 погибших, 180 раненых, $1.5 млрд ущерба. Причина: переполнение ректификационной колонны — датчик уровня дал неверные показания, система безопасности не сработала.
Бхопал, 1984 год. Утечка метилизоцианата. 3 787 погибших (официально), десятки тысяч раненых. Системы безопасности были отключены для экономии.
Функциональная безопасность — это не бюрократия и не документация ради документации. Это инженерная дисциплина, которая систематически снижает вероятность того, что отказ автоматики приведёт к катастрофе.
Базовые концепции
Опасность, риск, допустимый риск
Опасность (Hazard): потенциальный источник вреда (горючий газ, высокое давление, токсичное вещество).
Риск (Risk): комбинация вероятности события и его последствий:
Риск = Вероятность × Тяжесть последствий
Допустимый риск (Tolerable Risk): уровень риска, который общество считает приемлемым. Для промышленных объектов — обычно ≤10⁻⁵/год (один раз в 100 000 лет) для смертельного события.
Независимые защитные слои (IPL — Independent Protection Layer)
Принцип швейцарского сыра: ни один слой защиты не идеален, но несколько слоёв с отверстиями в разных местах надёжно блокируют опасность.
Слой 1: Базовая система управления (BPCS) — ПЛК основной автоматики
↓ не сработала
Слой 2: SIS (Safety Instrumented System) — независимая система безопасности
↓ не сработала
Слой 3: Механические защиты — предохранительный клапан, разрывной диск
↓ не сработала
Слой 4: Физические барьеры — обвалование, газоулавливающая система
↓
Катастрофа
Каждый слой снижает риск в 10–1000 раз.
Задача: снизить суммарный риск до допустимого уровня.
Стандарты: IEC 61508 и его отраслевые производные
IEC 61508 — базовый стандарт функциональной безопасности для электрических/электронных/программируемых систем безопасности. 7 частей, охватывает весь жизненный цикл.
Отраслевые стандарты (выводятся из 61508):
IEC 61511 — нефтехимия, газ, химия (процессные установки)
IEC 62061 — машиностроение
EN 50128 / EN 50129 — железнодорожный транспорт
IEC 60601 — медицинское оборудование
DO-178C — авиационное ПО
Уровни полноты безопасности (SIL)
SIL (Safety Integrity Level) — дискретная мера целостности функции безопасности. Определяется вероятностью отказа при выполнении функции по требованию:
SIL | PFDavg (в режиме по требованию) | PFH (в непрерывном режиме) | Примеры |
|---|---|---|---|
SIL 1 | 10⁻² ... 10⁻¹ | 10⁻⁶ ... 10⁻⁵ | Простые защиты, блокировки |
SIL 2 | 10⁻³ ... 10⁻² | 10⁻⁷ ... 10⁻⁶ | Большинство промышленных SIS |
SIL 3 | 10⁻⁴ ... 10⁻³ | 10⁻⁸ ... 10⁻⁷ | Нефтегаз, ядерная энергетика |
SIL 4 | 10⁻⁵ ... 10⁻⁴ | 10⁻⁹ ... 10⁻⁸ | Ядерная энергетика (редко) |
PFDavg — средняя вероятность отказа в режиме ожидания (датчик не сработал когда нужно).
PFH — частота опасных отказов в час (для непрерывных защит).
Расчёт SIL: упрощённый подход
Определение требуемого SIL — через LOPA (Layer of Protection Analysis):
Пример: высокое давление в реакторе может привести к взрыву
Частота инициирующего события: 0.1 /год (раз в 10 лет, типично для BPCS)
Вероятность последствий без защит: 1.0 (взрыв неизбежен)
Тяжесть: катастрофическая (несколько погибших)
Допустимый риск: 10⁻⁵ /год
Требуемое снижение риска:
RRF = Частота × Вероятность / Допустимый риск
RRF = 0.1 × 1.0 / 10⁻⁵ = 10 000
LOPA уже учитывает другие IPL (предохранительный клапан, оператор):
- Предохранительный клапан: снижение в 100 раз (PFD = 0.01)
- Независимый алярм оператора: снижение в 10 раз
Оставшийся RRF для SIS: 10 000 / (100 × 10) = 10
PFD_SIS = 1/10 = 0.1 → SIL 1 (10⁻² ... 10⁻¹)
Если предохранительного клапана нет: PFD_SIS = 0.001 → SIL 2
Архитектура Safety Instrumented System
Типовая SIS архитектура для SIL 2:
Датчики (1oo2 или 2oo3)
│
[Логический решатель — Safety PLC]
│
Исполнительные устройства (финальные элементы)
1oo1: один из одного — нет резервирования (SIL 1)
1oo2: один из двух — высокая готовность, ложные срабатывания
2oo2: два из двух — низкая доступность к опасности, ложные отказы
2oo3: два из трёх — оптимальный баланс (SIL 2-3)
Для SIL 2 часто используют:
- Датчики: 1oo2D (один из двух с диагностикой) или 2oo3
- Logic Solver: 1oo1D (один с диагностикой) или 1oo2
- Финальные элементы: 1oo1 (один клапан) или 1oo2 (два параллельных)
Safety PLC: ключевые отличия от обычных ПЛК
Safety PLC (FS-PLC — Fail-Safe PLC) — это не просто обычный ПЛК с "безопасным" лейблом. Конструктивные отличия:
Аппаратные:
Двойное/тройное резервирование процессора
Непрерывная взаимная проверка процессоров (cross-checking)
Ошибка → переход в безопасное состояние (обычно: все выходы = 0)
Диагностика: обнаружение > 99% опасных отказов (DC — Diagnostic Coverage)
Специальные I/O модули с самодиагностикой
Программные:
Память программы верифицирована (CRC/хэш)
Данные хранятся дважды или с кодом исправления ошибок
Принцип fail-safe: при любой неопределённости → безопасное состояние
Ограниченный набор инструкций (только сертифицированные блоки)
Популярные Safety PLC:
Siemens SIMATIC S7-300F / S7-400F / S7-1500F
Rockwell Allen-Bradley GuardLogix 5580
Schneider Modicon M580 Safety
ABB AC500-S
Pilz PSS 4000
Программирование Safety PLC: особенности
На примере Siemens S7-1500F + TIA Portal Safety:
Ключевые принципы программирования Safety:
1. Fail-safe блоки (FB) vs Standard блоки
- Безопасный код должен использовать ТОЛЬКО сертифицированные F-блоки
- Смешивание: Standard → F OK; F → Standard НЕЛЬЗЯ без копирования
2. F-Signature: каждый F-блок имеет уникальную подпись
- Изменение любого бита → другая подпись → требует повторной верификации
3. Consistent data transfer:
- При передаче данных между F и Standard зонами — специальная процедура
- Данные защищены от случайного изменения
4. Passivation: при ошибке датчика — F-код устанавливает безопасное значение (0 или FALSE)
- Программа должна обрабатывать пассивацию явно!
(* Пример F-программы на Structured Text (S7-1500F / TIA Portal) *)
(* Функция безопасности: аварийная остановка при высоком давлении *)
FUNCTION_BLOCK FB_PressureShutdown
VAR_INPUT
PressureHigh_1 : BOOL; // Датчик высокого давления 1 (активен = HIGH)
PressureHigh_2 : BOOL; // Датчик высокого давления 2 (резервный)
EStop_1 : BOOL; // Кнопка аварийной остановки 1
EStop_2 : BOOL; // Кнопка аварийной остановки 2
Reset : BOOL; // Сброс защиты (после устранения причины)
// Каналы датчиков (после F_DI блока)
CH_Pressure_1 : BOOL; // TRUE = канал исправен
CH_Pressure_2 : BOOL;
CH_EStop_1 : BOOL;
CH_EStop_2 : BOOL;
END_VAR
VAR_OUTPUT
ShutdownCommand : BOOL; // TRUE = закрыть клапан, остановить насосы
AlarmActive : BOOL; // TRUE = авария активна
AlarmCode : INT; // Код аварии
ReadyToReset : BOOL; // Можно сбросить (причина устранена)
END_VAR
VAR
Trip_Pressure : BOOL;
Trip_EStop : BOOL;
Trip_ChannelFault : BOOL;
TripLatch : SR; // SR-триггер (Set-Reset)
END_VAR
(* Анализ датчиков давления (1oo2 логика) *)
(* Срабатывание при ЛЮБОМ из двух датчиков *)
Trip_Pressure := (PressureHigh_1 AND CH_Pressure_1) OR
(PressureHigh_2 AND CH_Pressure_2);
(* Кнопка аварийной остановки (2oo2 логика для предотвращения ложных срабатываний) *)
(* Исправный канал при нажатой кнопке EStop: NC контакт → LOW *)
Trip_EStop := (NOT EStop_1 AND CH_EStop_1) OR
(NOT EStop_2 AND CH_EStop_2);
(* Отказ канала датчика = безопасное состояние (принцип fail-safe) *)
Trip_ChannelFault := NOT CH_Pressure_1 OR NOT CH_Pressure_2 OR
NOT CH_EStop_1 OR NOT CH_EStop_2;
(* Защёлка аварии: Set при любой причине, Reset только при явном сбросе *)
TripLatch(
SET1 := Trip_Pressure OR Trip_EStop OR Trip_ChannelFault,
RESET := Reset AND NOT (Trip_Pressure OR Trip_EStop OR Trip_ChannelFault)
(* Нельзя сбросить пока причина активна! *)
);
ShutdownCommand := TripLatch.Q1;
AlarmActive := ShutdownCommand;
(* Определяем код аварии *)
IF Trip_ChannelFault THEN
AlarmCode := 3; (* Наивысший приоритет: отказ диагностики *)
ELSIF Trip_EStop THEN
AlarmCode := 2;
ELSIF Trip_Pressure THEN
AlarmCode := 1;
ELSE
AlarmCode := 0;
END_IF;
(* Условие готовности к сбросу *)
ReadyToReset := AlarmActive AND
NOT Trip_Pressure AND NOT Trip_EStop AND NOT Trip_ChannelFault;
END_FUNCTION_BLOCK
Финальные элементы: клапаны и их диагностика
Финальный элемент (обычно отсечной клапан) — самое слабое место SIS. Клапан может "прикипеть" в открытом положении — и не закроется по команде.
Диагностика финальных элементов:
Частичное хождение клапана (Partial Valve Stroke Test, PVST):
- Раз в 3-6 месяцев в рабочем режиме
- Клапан закрывается на 10-15% от полного хода
- Проверяется отклик (позиционер, время отклика)
- Полное закрытие не происходит → нет нарушения производства
- Сокращает интервал плановой проверки → снижает PFD
Полная проверка (Full Stroke Test):
- При плановом останове (раз в год или реже)
- Полное закрытие, замер времени
- Проверка концевых выключателей
def calculate_pfd_valve_with_pvst(
pfd_full_stroke: float, # PFD без диагностики
pvst_coverage: float, # Покрытие диагностикой PVST (обычно 0.6-0.8)
pvst_interval_months: int, # Интервал PVST
full_test_interval_years: int # Интервал полной проверки
) -> dict:
"""
Расчёт PFD финального элемента с учётом PVST.
Упрощённая модель (для точного расчёта — IEC 61511-1 Annex K).
"""
# Частота опасных отказов (из datasheet производителя или OREDA)
# Например, для шарового клапана DN100: lambda_D ≈ 1e-6 /час
lambda_d = pfd_full_stroke / (full_test_interval_years * 8760 / 2)
# PFD без PVST (только полная проверка раз в год)
pfd_no_pvst = lambda_d * full_test_interval_years * 8760 / 2
# PFD с PVST: диагностика снижает эффективный интервал
# PFD_pvst ≈ PFD_full × (1 - DC_pvst) + PFD_full × DC_pvst × (Ti_pvst/Ti_full)
pvst_interval_years = pvst_interval_months / 12
pfd_with_pvst = (pfd_no_pvst * (1 - pvst_coverage) +
pfd_no_pvst * pvst_coverage *
(pvst_interval_years / full_test_interval_years))
reduction_factor = pfd_no_pvst / pfd_with_pvst if pfd_with_pvst > 0 else 1
return {
'pfd_without_pvst': round(pfd_no_pvst, 6),
'pfd_with_pvst': round(pfd_with_pvst, 6),
'reduction_factor': round(reduction_factor, 1),
'sil_without_pvst': 1 if pfd_no_pvst >= 1e-2 else 2 if pfd_no_pvst >= 1e-3 else 3,
'sil_with_pvst': 1 if pfd_with_pvst >= 1e-2 else 2 if pfd_with_pvst >= 1e-3 else 3,
}
# Пример расчёта:
result = calculate_pfd_valve_with_pvst(
pfd_full_stroke = 0.01, # PFD при ежегодном тестировании = SIL 1
pvst_coverage = 0.7, # PVST выявляет 70% опасных отказов
pvst_interval_months = 3, # PVST раз в квартал
full_test_interval_years = 1
)
print(f"PFD без PVST: {result['pfd_without_pvst']} (SIL {result['sil_without_pvst']})")
print(f"PFD с PVST: {result['pfd_with_pvst']} (SIL {result['sil_with_pvst']})")
print(f"Снижение PFD: в {result['reduction_factor']} раз")
Жизненный цикл SIS: от концепции до вывода из эксплуатации
По IEC 61511, жизненный цикл SIS включает 16 фаз:
Фаза 1-4: Анализ
1. Анализ опасностей (HAZOP)
2. Оценка рисков (SIL Determination / LOPA)
3. Концепция безопасности
4. Требования к SIS (SRS — Safety Requirements Specification)
Фаза 5-9: Проектирование
5. Архитектура SIS
6. Выбор оборудования
7. Проектирование F-программы
8. Factory Acceptance Test (FAT)
9. Site Acceptance Test (SAT)
Фаза 10-13: Эксплуатация
10. Ввод в эксплуатацию
11. Плановое техническое обслуживание
12. Периодическое функциональное тестирование (Proof Test)
13. Управление изменениями (MOC — Management of Change)
Фаза 14-16: Завершение
14. Вывод из эксплуатации
15. Оценка соответствия (SIL Verification)
16. Функциональная оценка (Functional Safety Assessment)
HAZOP: анализ опасностей и работоспособности
HAZOP (Hazard and Operability Study) — методология анализа, где команда экспертов применяет "направляющие слова" к каждому параметру процесса:
Направляющие слова × Параметры → Отклонения → Последствия → Защиты
Параметры: расход, температура, давление, уровень, состав, время
Направляющие слова: Нет, Больше, Меньше, Другое, Обратное, Часть
Примеры:
"Нет расхода" → охладитель не подаётся → перегрев реактора → взрыв
Защита: датчик расхода + BPCS блокировка; SIS ESD; предохранительный клапан
"Больше давления" → разрыв оборудования → утечка газа → взрыв/пожар
Защита: HS датчик давления + SIS; предохранительный клапан на 120% рабочего
"Обратный поток" → смешение несовместимых реагентов
Защита: обратный клапан; двойная задвижка с блоком (Double Block & Bleed)
Практические советы по SIS-проектам
1. Независимость — не просто разные ПЛК Датчики SIS и BPCS должны быть на РАЗНЫХ отборах давления/температуры, разных кабелях, разных шинах питания. Один кабельный канал для обоих = нет независимости.
2. Воздействие оператора — только через стандартный HMI Обход (bypass) защиты — только физический (байпасный выключатель), с аудитом и процедурой. Никакого программного обхода через меню!
3. Документируйте каждое изменение через MOC Изменение уставки датчика, замена компонента, изменение программы — всё через официальную процедуру управления изменениями. Иначе следующий HAZOP или audit найдёт несоответствие.
4. Proof Test — проводите регулярно и документируйте PFD рассчитан на конкретный интервал тестирования. Пропустили proof test — ваш SIL больше не действителен формально (и реально выше PFD).
Заключение
Функциональная безопасность — это та область, где нет места импровизации. Стандарты IEC 61508/61511 написаны на основе реальных промышленных катастроф и содержат выверенные методологии.
Для старта: изучите IEC 61511 (он ориентирован на процессные установки и более практичный, чем базовый 61508). Пройдите курс TÜV Rheinland или TÜV SÜD по Functional Safety Engineer — они дают систематическое понимание и признаваемый сертификат.
И помните: в функциональной безопасности "достаточно хорошо" и "почти правильно" не существует. Либо соответствует SIL, либо нет. Промежуточных значений нет.
Create an account or sign in to leave a review
There are no reviews to display.