← 전체 글
HMI/약 15분 읽기/— 조회

시작 버튼이 회색인 이유를 화면이 말하게 하는 법

퍼미시브, 인터록, bypass, first-out을 ISA-101.01, ISA-18.2, OPC UA Part 4 StatusCode, NAMUR NE 43 기준으로 HMI에 표시하는 방법.

HMISCADA알람문제 해결체크리스트

새벽 2시 10분, 펌프가 기동하지 않는다. START 버튼은 회색이고 faceplate에는 "Not Ready" 한 줄뿐이다. 운전자는 정비팀을 호출했고, 정비 담당은 노트북으로 PLC에 붙어 14개짜리 인터록 rung에서 false bit 하나를 찾느라 40분을 썼다. 범인은 흡입 압력 트랜스미터였다. 출력이 3.4 mA였다. NAMUR NE 43 기준으로 3.8~20.5 mA가 유효 신호 구간이고 3.6 mA 이하는 fault low다. 즉 센서가 고장이라고 말하고 있었는데, 퍼미시브 비교 로직은 그 값을 공학 단위로 환산해서 "압력 낮음"으로 읽었다. 화면은 센서 고장과 실제 저압을 구분하지 못했다.

하나의 퍼미시브 조건이 가질 수 있는 다섯 가지 표시 상태. Satisfied, Not satisfied, Tripped, Out of service, 그리고 bad quality에서 나오는 Unknown ONE CONDITION SOURCE Satisfied Not satisfied Tripped Out of service Unknown TRUE / Good FALSE / Good SR latch + R_TRIG ISA-18.2 bypass Uncertain_LastUsableValue

퍼미시브 미만족은 알람이 아니다

여기서 설계가 처음 갈린다. ISA-18.2-2016은 알람을 "적시 대응이 필요한(requiring a timely response) 이상 상태를 알리는 수단"으로 정의한다. 아직 만족되지 않은 시작 퍼미시브는 대응이 필요한 상태가 아니다. 후단 설비가 준비되기를 기다리는 중일 뿐이다. 그걸 알람으로 올리면 운전자는 아무 조치도 필요 없는 항목을 하루에 수백 개 받는다.

EEMUA 191(3판, 2013)이 장기 평균으로 제시하는 관리 가능한 수준은 운전자 1인당 하루 약 150건이다. 퍼미시브 상태 변화만으로도 이 숫자를 넘기는 설비를 여러 번 봤다. 퍼미시브는 알람 목록이 아니라 faceplate의 상태 표시로 가야 한다. 이건 취향 문제가 아니고 알람 철학 문서에 한 줄로 못박을 항목이다.

용어를 ISA-18.2 상태에 매핑한다

프로젝트마다 bypass, inhibit, disable을 섞어 쓴다. 섞어 쓰면 "누가 왜 껐는가"를 추적할 수 없다. ISA-18.2-2016은 억제 상태를 세 가지로 구분해 두었고, 현장 용어를 거기에 붙이면 권한과 기록 요건이 자동으로 따라온다.

현장 용어ISA-18.2 상태누가 만드는가
정비용 bypass, MOSOut-of-service정비, 권한 필요
운전 중 숨기는 시작 퍼미시브Suppressed by design로직, 사람 개입 없음
한시적으로 치워둔 항목Shelved운전자, 자동 복귀 시각 포함

나머지 용어는 제어 개념이고 억제와 무관하다. 퍼미시브는 명령 수락 전에 만족해야 하는 조건, 인터록은 운전을 막거나 멈추는 보호 조건, trip은 인터록이 실제로 멈춘 사건, Ready는 그 전부를 합친 결과다. 시작 전 퍼미시브 미만족과 운전 중 저압 trip을 같은 빨간 램프로 보여주는 화면은 두 사건을 같은 긴급도로 만든다. 운전 의미가 완전히 다르다.

원인은 Level 3에 있어야 한다

ISA-101.01-2015는 화면을 4단계 계층으로 본다. Level 1 공정 구역 개요, Level 2 단위 제어, Level 3 단위 상세, Level 4 진단 및 보조 화면이다. 실제 프로젝트에서 제일 흔한 실수는 개별 인터록 조건과 first-out을 Level 4 엔지니어링 화면에만 두는 것이다. 새벽에 Level 4 경로를 아는 사람은 그 화면을 만든 사람뿐이다.

faceplate(Level 3)에 최소한 이만큼은 올려야 한다.

  • 종합 상태 한 줄: Ready, Not Ready, Running, Tripped, Local, Maintenance, Disabled.
  • 명령별 가용 여부: start, stop, reset 각각.
  • 현재 시작을 막는 조건 목록, 조건 문구 그대로.
  • 현재 활성 trip 조건.
  • bypass 또는 out-of-service 항목과 그 개수.
  • first-out 원인과 시각.

"Interlock 12"는 정비 단서다. "토출 밸브 열림 확인 안 됨"이 운전자 메시지다. 알람 데이터베이스, 히스토리언 태그, faceplate 문구가 글자까지 같아야 한다. 다르면 사후 분석에서 같은 사건이 두 개로 보인다.

First-out의 정밀도는 scan time이 결정한다

시퀀스가 멈추면 조건 여러 개가 동시에 나빠진다. 밸브가 닫히고, 압력이 떨어지고, 유량이 0이 되고, 모터 feedback이 사라진다. first-out 없이는 빨간 항목 무더기만 남는다.

캡처는 컨트롤러에서 한다. IEC 61131-3의 R_TRIG으로 각 조건의 상승 에지를 잡고, 같은 규격의 bistable로 latch한다. 여기서 SR(set 우세)과 RS(reset 우세) 선택이 실제로 갈린다. reset 입력을 계속 누르고 있는 운전자가 있으면 RS는 캡처를 지운다. 원인이 아직 남아 있는데 기록이 사라진다. first-out에는 SR을 쓴다.

정밀도는 솔직하게 말해야 한다. PLC가 조건을 보는 주기는 보통 scan time, 현장에서 10~50 ms다. 같은 scan 안에서 나빠진 두 조건은 순서를 구분할 수 없고, 우선순위 로직이 그 순서를 정한다. 그러니 우선순위를 문서에 적어야 한다. 반대로 OPC UA의 DateTime은 Part 6 인코딩에서 1601-01-01 기준 100 ns 단위 64비트 정수다. 즉 20 ms 해상도의 사건을 100 ns처럼 보이는 timestamp로 표시한다. 화면의 자릿수를 근거로 원인 순서를 판단하면 안 된다.

ms 단위 순서가 정말 필요하면 장치가 timestamp를 찍는 경로를 쓴다. DNP3(IEEE 1815)의 Object Group 2 Variation 2는 48비트 절대 시각이 붙은 binary input change event이고, 시각은 outstation에서 찍힌다. SCADA 수신 시각이 아니다.

Bad quality를 만족으로 접지 않는다

인터록 신호가 끊긴 상태는 인터록이 들어온 상태만큼 위험하다. OPC UA Part 4의 StatusCode는 32비트이고 상위 2비트가 심각도를 나타낸다. 00이 Good, 01이 Uncertain, 10이 Bad다. 이 세 가지를 두 가지 램프로 접으면 정보가 사라진다.

faceplate에 따로 보여줄 값이 있는 코드들이다.

  • Bad_NoCommunication — 서버나 장치까지 경로가 끊겼다.
  • Bad_OutOfService — 항목이 갱신되지 않고 있다.
  • Uncertain_LastUsableValue — 마지막으로 쓸 수 있었던 값이다. stale이다.
  • Uncertain_SubstituteValue — 대체값이다. 실측이 아니다.
  • Uncertain_SensorNotAccurate — 센서가 범위를 벗어났다. NE 43 fault 구간이 여기로 온다.
  • Bad_NotWritable, Bad_UserAccessDenied — 버튼이 회색인 이유가 로직이 아니라 권한이다.

Uncertain_*는 전부 Unknown으로 표시한다. 녹색도 황색도 아니다. 맨 앞의 3.4 mA 사례가 정확히 이 지점이다. 아날로그 퍼미시브는 임계값 비교 전에 NE 43 구간 판정을 먼저 해야 한다. 3.6 mA 이하와 21.0 mA 이상은 값이 아니라 센서 상태다.

아날로그 퍼미시브에는 히스테리시스도 필요하다. 12비트 입력 카드는 1 count가 span의 1/4096, 즉 0.0244%다. 노이즈 몇 count는 아무 의미가 없지만, 맨 비교 연산은 초당 수십 번 상태를 뒤집는다. 나는 span의 2% deadband에 1 s on-delay를 기본으로 잡는다. 1%는 화면이 떨린다.

Bypass는 권한과 기록이 붙은 상태다

bypass는 시운전과 정비에 필요하다. 동시에 잊히는 항목 1위다. IEC 62443-3-3:2013이 요구 사항을 나눠 둔 덕에 뭘 구현해야 하는지는 분명하다. SR 2.1 authorization enforcement는 역할 기반 권한, SR 2.8 auditable events는 누가 언제 바꿨는지의 기록, SR 2.11 timestamps는 그 기록이 믿을 만한 시각을 갖도록 하는 조항이다. 키 스위치 하나로 끝내는 설계는 SR 2.8을 만족하지 못한다. 누가 돌렸는지가 남지 않는다.

안전 계통이 걸리면 HMI 표시 문제가 아니다. IEC 61511-1:2016은 safety instrumented function의 bypass와 override를 운전 절차의 통제 아래 두고 그 상태를 운전자에게 표시하도록 요구한다. 세부 조항 번호는 사내 문서에 쓸 때 보유한 판본에서 직접 확인하기를 권한다. 판본마다 번호가 다르다.

실무에서 지키는 선은 이렇다.

  • faceplate에 bypass 개수 요약, 상세 목록은 한 번의 클릭 안에.
  • 화면 이동과 클라이언트 재시작 후에도 표시 유지.
  • 정비 override는 1교대(8시간) 상한을 걸고 만료 시 재통보.
  • 운전 중인 설비의 bypass는 Level 1 개요에서도 보이게.

저유량 인터록을 우회한 펌프가 돌고 있는데 그 사실이 엔지니어링 화면에만 있다면, 그건 숨긴 것이다.

색은 보조 수단이다

IEC 60073:2002이 정한 의미를 따른다. 빨강은 위험과 비상, 황색은 이상과 주의, 녹색은 정상, 파랑은 필수 조치, 흰색은 특정 의미 없음이다. ISA-101.01-2015은 색만으로 상태를 전달하지 말라고 못박는다. 이유는 간단하다. 북유럽계 남성의 약 8%가 적록 색약이다. 여성은 약 0.5%다. 운전실 조명, 원격 접속 모니터, 출력된 화면도 색을 바꿔 놓는다.

그래서 색에는 항상 문구나 형태를 같이 붙인다. Unknown에는 색 대신 물음표나 사선 해칭을 쓰는 쪽이 낫다. 황색을 하나 더 만들면 운전자는 두 가지 황색을 구분하는 일을 추가로 배워야 한다.

시운전에서 흔들어 본다

화면을 보는 것으로는 검증이 안 된다. 로직을 실제로 바꿔야 한다.

  • 퍼미시브를 하나씩 false로 만들고 faceplate 문구가 정확히 그 조건을 가리키는지 확인.
  • 운전 중 인터록을 발생시키고 trip 문구와 first-out을 확인.
  • reset을 누른 상태로 유지한 채 trip을 발생시켜 first-out이 지워지지 않는지 확인. RS를 쓴 설계는 여기서 걸린다.
  • 아날로그 퍼미시브 입력에 3.4 mA와 21.5 mA를 주입하고 Unknown이 나오는지 확인. 만족 또는 미만족이 나오면 NE 43 판정이 없는 것이다.
  • 통신을 끊고 StatusCode가 Unknown으로 번역되는지 확인.
  • bypass 변경 기록에 사용자 ID와 시각이 남는지 확인.
  • 알람 데이터베이스, 히스토리언, faceplate의 조건 문구를 글자 단위로 비교.

반복 설비가 많으면 이 규칙을 HMI 템플릿 표준에 넣고 인스턴스마다 같은 항목으로 검사한다.

새 현장에 들어가면 내가 제일 먼저 뽑아 보는 숫자가 있다. 지난 한 달 알람 기록에서 아무 조치도 필요 없었던 퍼미시브 항목이 몇 건인지다. 그 숫자가 화면 설계 검토가 필요한지 아닌지를 바로 말해 준다.