← 전체 글
SCADA 기초/약 12분 읽기/— 조회

아무도 해제하지 않은 Bypass: 정비 우회를 SCADA 화면에서 보이게 만들기

정비 Bypass는 Comment가 아니라 운전 상태다. Tag 이름, ISA-18.2 Out of Service, 만료 규칙, 임시 우회가 영구가 되지 않게 막는 Audit.

SCADAHMI알람태그문제 해결

Area 2 가스 검지기를 화요일 오후에 Bypass했다. 정비 기사가 Bump Test를 하는 동안 환기팬이 Trip되지 않게 하려는 것이었다. 7주 뒤, 알람 빈도 Report를 뽑던 사람이 그 Suppression이 아직 살아 있는 걸 발견했다.

서류를 속인 사람은 없었다. Bypass가 Operator가 실제로 보는 자리에 한 번도 나타나지 않았을 뿐이다. 검지기 Faceplate에는 흰색 글씨로 측정값만 떠 있었다. 두 교대조가 그 화면 앞에서 스물한 번 인수인계를 했고, 질문할 이유를 화면이 주지 않았다.

이게 전형적인 실패 방식이다. 사람이 부주의해서 잊는 게 아니라, 설정한 화면 말고는 어디에서도 보이지 않기 때문에 잊힌다.

표준은 이미 이걸 운전 상태로 본다

굳이 처음부터 논리를 만들 필요가 없다. IEC 61511-1 11.8절은 안전계장기능(SIF)이 Bypass되었을 때 Operator Interface가 이를 표시하도록 요구하고, 운전·정비 절차 쪽에서는 Bypass가 걸려 있는 동안의 보완 조치를 요구한다. PLC 안의 Bit로만 존재하는 Bypass는 이 요구를 만족한다고 보기 어렵다.

ISA-18.2는 대부분의 HMI가 틀리는 용어를 정리해 준다. Shelving은 Operator가 스스로, 일시적으로 처리하는 것이다. Chattering하는 성가신 알람을 한 시간 치워 두는 동작이다. Out of Service는 정비가 시작하고, 더 높은 권한이 필요하며, 별도로 추적하고 Review해야 하는 상태다. 정비 Bypass는 Out of Service 쪽이다. HMI가 이걸 Shelved 목록에 같이 넣으면 Operator가 실수로 해제하거나, 목록이 성가신 항목으로 가득 차서 아예 안 보게 된다.

계기 단에서는 NAMUR NE 107이 같은 개념을 이미 갖고 있다. Function Check는 누군가 작업 중이라 측정값이 일시적으로 유효하지 않다는 뜻이다. Transmitter가 HART나 PROFINET으로 NE 107 상태를 올려 준다면, 그것과 어긋날 수 있는 별도 Flag를 새로 만들지 말고 그 상태를 쓰는 게 낫다.

Tag 이름은 일련번호가 아니라 우회한 위험을 담는다

BYPASS_01, MAINT_MODE, TEMP_BYP. 셋 다 쫓아다녀 봤는데, 플랜트가 돌아가는 중에 이 이름이 알려 주는 정보는 없었다. 이름은 6주 뒤 CSV Export 안에서 앞뒤 맥락 없이 읽혀도 뜻이 통해야 한다.

  • P101_LOW_FLOW_TRIP_BYPASS — P101 Low Flow Trip
  • TT204_BAD_QUALITY_ALARM_BYPASS — TT204 Bad Quality 알람
  • CONV3_GUARD_DOOR_PERMISSIVE_BYPASS — Conveyor 3 Guard Door Permissive
  • AREA2_GAS_DETECTOR_MAINT_BYPASS — Area 2 가스 검지기

이름을 무조건 길게 쓰자는 얘기가 아니다. 같은 문자열이 알람 Summary, Event Log, Trend Annotation, 인수인계 시트 네 군데에 그대로 들어가고, 네 군데에서 같은 뜻으로 읽혀야 한다는 얘기다.

판단하는 자리에 표시한다

한 화면에만 있는 표시는 없는 것과 같다. Pump를 기동할지 말지 정하는 Operator는 Bypass Summary를 보고 있지 않다. Pump를 보고 있다.

최소한 설비 Faceplate, Interlock·Permissive Detail 화면, 우회로 억제되는 알람의 Detail, Area별 Active Bypass 목록, 그리고 기동 조건 목록에는 상태가 떠야 한다. 색만으로는 전달되지 않는다. 붉은 계열 하나를 절반은 "알람"으로, 절반은 "정비 중"으로 읽는다. 글자를 쓴다. BYPASSED, TRIP BYPASSED, ALARM BYPASSED. Icon 위주 설계라면 Tooltip이나 Detail Popup에서 "정비 중"이 아니라 우회된 기능 이름을 밝혀야 한다.

만료 시간을 주고, 만료를 조금 성가시게 만든다

화면을 손보는 어떤 개선보다 잊힌 Bypass를 많이 줄여 준 건 예상 종료 시간 하나였다.

기본값은 1교대로 잡는다. 8시간, 12시간 교대 현장이면 12시간이다. 정말 3일이 걸리는 작업이라면 기본값으로 얻는 게 아니라 직접 입력하고 서명하게 해야 한다. 만료가 지나면 Overdue 상태로 넘기고, 그 Bypass가 억제한 알람과 같은 우선순위로 알람을 낸다. 낮은 우선순위의 관리성 메시지로 내면 안 된다. 사람들이 정확히 그런 걸 걸러 내기 때문이다.

반대로 만료 시 자동 해제는 하지 않는다. 정비 기사가 계기를 뜯어 놓은 상태에서 Trip 경로가 예고 없이 복구되는 건 오래된 Bypass보다 나쁜 결과다. 조치하지 말고 escalate한다.

타이머와 함께 우회 대상 기능, 요청자, 절차상 필요하면 승인자, 사유, 시작 시간, 현재 상태, 해제자와 해제 시간을 남긴다. 작은 설비면 구조화된 Comment로도 대부분 커버된다. Bypass가 몇 개를 넘어가는 시스템이면 건별 Record가 필요한데, 이유는 아래에 나온다.

알람 동작은 시운전 전에 정한다

Bypass와 알람은 지저분하게 얽히고, 그 지저분함 때문에 Operator가 화면을 믿지 않게 된다. 다음 중 하나를 의식적으로 고른다.

  • 원래 알람은 Suppress하고 그 자리에 별도 BYPASS ACTIVE 알람을 낸다.
  • 알람은 계속 띄우되 Bypass 상태임을 표기해 Trip이 걸리지 않는다는 걸 알린다.
  • Trip 동작만 막고 계기 진단 알람은 살려 둔다. 계기 작업에서는 보통 이걸 쓴다.
  • Enable과 Clear 양쪽에 Operator Acknowledge를 요구한다.

피할 것은 Banner에서 조용히 사라지는 방식이다. Transmitter가 Bad Quality를 내면서 Trip까지 Bypass 상태라면, 그건 별개의 두 사실이고 Operator는 둘 다 알아야 한다.

Audit은 제어 명령 수준으로 남긴다

Bypass Enable은 플랜트의 보호 방식을 바꾼다. 화면 옵션이 아니라 제어 동작이고, IEC 62443-3-3도 그렇게 다룬다. 권한 시행은 SR 2.1, 감사 가능 이벤트는 SR 2.8, 그 이벤트의 Timestamp는 SR 2.11이다.

실무로 옮기면 이렇다. Enable과 Clear 모두 Login을 요구한다. "운전 가능"과 "Trip Bypass 가능" 권한을 Role로 나눈다. 성공한 쓰기뿐 아니라 실패한 시도도 남긴다. 사유 Text는 다음 사람이 덮어쓸 수 있는 HMI Tag가 아니라 Event와 함께 저장한다.

PLC가 Bypass Bit를 소유한다면, HMI Audit Event와 Controller Event를 실제로 대응시킬 수 있는지 확인한다. 공통 Tag 이름과 서로 맞는 시계가 필요하다. 같은 NTP Source를 보게 하고, 맞겠거니 하지 말고 실제 Offset을 본다. 한 번은 Controller가 Historian보다 40초 앞서 있어서, 모든 Bypass Event가 설명해야 할 Trip의 반대편 시각에 찍힌 걸 찾느라 오후를 다 썼다.

자주 생기는 네 가지

작업 지시가 닫혔는데 Bit가 아직 켜져 있다. 기강 문제가 아니라 거의 항상 표시 문제다. Area Summary와 Overdue 표시를 만들고, Standing Alarm을 확인하듯 인수인계 때 Active Bypass 목록을 확인하는 단계를 넣는다.

HMI는 BYPASSED인데 실제로는 Trip된다. 표시 Bit와 Logic Bit가 다른 Source다. 시운전 때 Bypass를 강제로 걸고 측정값을 Trip Point 너머로 몰아 본다. Faceplate 색이 아니라 실제 Permissive를 본다.

알람이 사라졌는데 이유를 모른다. Bypass Bit가 Suppression에 바로 물려 있고 대체 표시가 없는 경우다. Bypass Active 알람을 만들고, Suppressed Alarm 이력을 조회할 수 있게 한다.

사유 Text가 다른 Bypass의 것이다. 시스템 전체 Bypass가 Global String Tag 하나를 공유할 때 나오는 전형적인 증상이다. Enable하는 순간에 사유를 Audit Event 안에 써 넣는다. 거기서는 덮이지 않는다.

설계를 인수하기 전에

권한 있는 계정과 없는 계정 양쪽으로 각 Bypass를 Enable하고 Clear해 본다. Faceplate, Area Summary, Interlock Detail이 서로 어긋날 수 있는 사본 셋이 아니라 같은 Source를 읽는지 확인한다. PLC의 실제 Permissive, Trip, Alarm 동작을 확인한다. Audit Record에 User, Station, Time, Old Value, New Value, Reason이 들어가는지 본다. HMI Client를 재시작하고도 Active Bypass가 보이는지 확인한다. Client Session 안에만 있는 Bypass 목록은 Bypass 목록이 아니다. Overdue 조건을 강제로 만들어 Escalation이 뜨는지 본다. 마지막으로 교대 책임자가 실제로 쓸 Active Bypass Report를 뽑아 본다.

그 전에 던져 볼 질문이 하나 있다. 이 현장은 "지금 몇 개의 Bypass가, 무엇에 걸려 있는가"에 1분 안에 답할 수 있는가? 답이 아니라면 화면 색 논의는 뒤로 미뤄도 된다.