CIP 시퀀스가 7단계에서 멈춰 있다. HMI에서 이송 밸브는 초록색 닫힘이고, 단계 퍼미시브도 만족인데, 하류 유량계는 여전히 4 m³/h를 읽고 있다. 운전자는 유량계 고장이라고 부른다. 아니다. 계장 공기압이 3.5 bar까지 떨어져서 액추에이터가 라인 압력을 이기지 못했고, 밸브 스템은 닫힘 리밋 스위치를 만들 만큼만 움직이다 멈춘 것이다.
화면이 스위치에 대해 거짓말을 한 건 아니다. 누군가 ZSC를 그대로 초록 박스에 물리고 "닫힘"이라고 불렀기 때문에, 밸브에 대해 거짓말을 한 것이다.
스위치 두 개는 두 가지가 아니라 네 가지 상태를 만든다
리밋을 양쪽 다 단 on/off 밸브 — ISA-5.1 계기 식별 문자 기준으로 ZSO 열림, ZSC 닫힘 — 는 네 가지 원시 조합을 만든다. 그중 정지 위치는 둘뿐이다.
| ZSC | ZSO | 의미 |
|---|---|---|
| 1 | 0 | 닫힘 스톱에 착좌 |
| 0 | 1 | 열림 스톱 도달 |
| 0 | 0 | 이동 중 — 또는 스위치 고장, 또는 단선 |
| 1 | 1 | 물리적으로 불가능. 배선 오류, 스위치 조정 불량, 또는 한 쌍이 뒤바뀜 |
사람들이 틀리는 건 세 번째 줄이다. 0 0은 유효한 과도 상태이면서 무효한 정상 상태다. 이게 정상인지 아닌지는 오로지 얼마나 오래 지속됐는지, 그리고 미처리 명령이 있는지에 달려 있다. 원시 조합을 밸브에 대한 주장으로 바꾸는 것, 그게 이송 타이머의 존재 이유다.
1 1은 타이머 없이 즉시 별도 알람을 받아야 한다. 밸브가 동시에 완전히 열리고 완전히 닫히는 물리적 배치란 없다. 시운전 중에 이 조합을 보면 열림 스위치 브래킷이 너무 헐거워 미리 붙었거나, 두 필드 배선이 입력 단자에 서로 바뀌어 결선된 경우가 대부분이다. 배선 뒤바뀜부터 확인하자 — 밸브를 수동으로 움직이면 2분이면 끝나는 시험이다.
명령은 피드백이 아니고, 솔레노이드는 밸브가 아니다
많은 화면에서 서로 다른 세 가지가 뒤섞인다.
- SCADA/PLC가 솔레노이드로 내보내는 출력 (
XV101.CmdOpen) - 솔레노이드가 실제로 여자되는 것
- 밸브 본체가 실제로 움직이는 것
출력 카드 퓨즈가 나가면 2가 죽어도 1은 멀쩡해 보인다. 액추에이터 커플링이 부러지면 3이 죽어도 1과 2는 멀쩡해 보인다. 세 번째를 대변하는 건 리밋 스위치뿐이므로, 파생 상태 태그는 스위치 입력으로만 만들어야 한다. 명령을 되받아 만들면 안 된다. 명령이 세팅될 때 HMI 페이스플레이트가 초록으로 바뀐다면, 아주 비싼 램프 테스트를 만든 셈이다.
명령도 여전히 중요하다. 밸브가 어느 방향으로 가야 하는지를 알려주고, 그래야 0 0을 해석할 수 있다. 둘을 하나의 파생 상태 태그로 합치고, 판정은 딱 한 곳에서만 하자.
| 파생 상태 | 조건 |
|---|---|
Closed | ZSC이고 ZSO 아님 |
Open | ZSO이고 ZSC 아님 |
Opening | 열림 명령, 어느 스위치도 안 붙음, 이송 타이머 동작 중 |
Closing | 닫힘 명령, 어느 스위치도 안 붙음, 이송 타이머 동작 중 |
FaultTimeout | 명령한 리밋에 도달하지 못한 채 이송 타이머 만료 |
FaultDiscrepancy | 두 스위치 동시 성립, 또는 명령 변화 없이 리밋이 풀림 |
Unknown | 통신 불량 또는 I/O 모듈 고장 |
모든 페이스플레이트, 인터록, 시퀀스 단계, 알람이 이 태그 하나를 읽는다. 같은 조건을 다섯 군데에서 인라인으로 다시 만드는 것이야말로, 개요 화면에서는 초록인데 상세 팝업에서는 고장으로 뜨는 밸브가 생기는 경로다.
마지막 상태는 보기보다 중요하다. 열려 있던 밸브에서 아무 명령도 없는데 ZSO가 떨어졌다면, 움직이면 안 되는 무언가가 움직인 것이다 — 수동 핸들, 스프링 리턴 밸브의 공기압 상실, 미끄러진 브래킷. 이걸 "Closing"에 묻어버리면 안 된다.
타임아웃을 정하기 전에 스트로크 시간을 측정하라
이송 타이머는 IEC 61131-3의 평범한 TON을 명령에 건 것이고, 유혹은 플랜트의 모든 밸브에 딱 떨어지는 10초를 넣는 것이다. 하지 말자. 시운전 때 실제로 밸브를 방향당 세 번씩 스트로크하고 측정값을 적어두자.
여기서 두 가지가 나온다. 첫째, 열림과 닫힘 시간은 대개 다르다. 스프링 리턴 밸브는 1초도 안 되어 닫히고 스프링을 이기며 여는 데 3초가 걸린다. 큰 버터플라이의 복동 액추에이터는 양방향 모두 12초가 걸리기도 한다. 양방향에 하나의 타임아웃을 쓰면 빠른 쪽에서 오알람이 나거나 느린 쪽의 고장을 놓치거나 둘 중 하나다. 타이머를 두 개 쓰자.
둘째, 여유다. 나는 측정된 최악값의 대략 두 배로 타임아웃을 잡고, 짧은 스트로크가 예민해지지 않도록 2초 정도의 하한을 둔다. 두 배가 후해 보이는데, 의도적이다. 이송 시간은 라인 압력, 공기 헤더 압력, 온도에 따라 변하고, 살짝 느려진 밸브를 잡을 만큼 빡빡한 타임아웃은 계장 공기 압축기가 아직 따라오지 못한 추운 월요일 아침에도 그대로 동작한다. 점진적 열화를 잡는 일은 트립이 아니라 트렌드의 몫이다.
실제 이송 시간을 트렌드하라 — 공짜 진단이다
대부분의 시스템이 건너뛰는 부분이고, 밸브에서 가장 값어치 있는 태그다. 매 스트로크마다 명령부터 리밋 성립까지의 경과 시간을 아날로그 태그에 래치하자.
XV101.LastOpenTime— 열림 명령부터ZSO까지의 초XV101.LastCloseTime— 닫힘 명령부터ZSC까지의 초
둘 다 작은 데드밴드로 히스토리언에 저장한다. 인수인계 때 2.1초에 열리던 밸브가 지금 3.4초 걸린다면 패킹 마찰이 쌓이고 있거나, 공기 배관이 부분적으로 막혔거나, 포지셔너가 공급압을 잃고 있는 것이다. 누설 수리 후 기술자가 패킹을 과하게 조였을 때 생기는 계단식 변화는 트렌드에서 확연히 보인다. 그리고 밸브가 아예 리밋에 도달하지 못하게 되기 몇 달 전에 알 수 있다. IEC 61511 셧다운 밸브의 부분 스트로크 시험과 같은 논리인데, 비용이 없다. 스트로크가 이미 말해주고 있는 걸 기록만 하는 것이다.
주의 하나. 반대쪽 리밋에서 출발해 실제로 완주한 스트로크에만 시간을 기록하자. 명령이 뒤집힐 때 이미 반쯤 열린 상태였던 밸브는 의미 없이 짧은 값을 주고, 그 값이 트렌드를 오염시킨다.
이동 중에는 알람을 내지 마라
불일치 알람은 반드시 이송 타이머로 게이트해야 한다. 그러지 않으면 모든 밸브의 모든 스트로크가 스템이 스톱 사이에 있는 동안 잠깐씩 "위치 불일치"를 만들어낸다. 밸브 200대에 이걸 적용하면 아무것도 아닌 일에서 알람 홍수를 제조하게 된다 — ISA-18.2 합리화가 걷어내려는 바로 그 성가신 부하다.
동작하는 규칙은 이렇다.
- 이송 타이머가 도는 동안에는 불일치 알람 없음. 상태 태그가
Opening/Closing이고 HMI는 이동 중을 표시한다. - 목표 리밋 없이 타이머가 만료되면
밸브 열림 실패/밸브 닫힘 실패를 발생시키고, 래치로 만든다. 5초 늦게 리밋에 도달한 밸브가 스스로 알람을 해제하고 증거를 지워버리면 안 된다. 운전자가 확인하고 의도적으로 리셋해야 한다. 1 1은 타이머 없이 즉시 알람.- 미처리 명령 없이 리밋이 풀린 경우는 스위치 채터링을 넘기기 위해 짧은 필터(200~500 ms면 충분) 후에 알람.
알람 이름은 두루뭉술하게 말고 고장 방향으로 짓자. "XV101 위치 불일치"는 새벽 3시의 운전자에게 아무것도 알려주지 않는다. "XV101 닫힘 실패 (이송 8.0초)"는 어디로 걸어가서 무엇을 볼지 알려준다.
스위치가 하나뿐일 때
ZSC만 달렸거나 아예 없는 밸브도 흔하다. 무엇을 증명할 수 있는지 모델에서 정직하게 다루자.
- 닫힘 스위치만 있음. 닫힘은 증명할 수 있다. 열림은 증명할 수 없다. 증명 가능한 건 닫히지 않았다는 것뿐이고, 열림 명령과 이송 시간이 지난 뒤라면 퍼미시브로는 대개 충분하지만 안전 기능으로는 충분하지 않다.
- 스위치 없음. 명령이 가진 유일한 "상태"다. 이때 밸브의 실제 피드백은 프로세스다. 열림 후의 유량, 닫힘 후의 압력 감쇠. 넉넉한 지연을 두고 그 위에 확인 로직을 만들고, HMI에는 확인된 것이 아니라 추정된 상태임을 분명히 표시하자. 증명되지 않은 밸브를 증명된 밸브와 같은 초록으로 칠하는 것이, 이 글 첫머리의 CIP 단계 이야기가 시작되는 방식이다.
일찍 정해둘 것이 하나 더 있다. 근접식 스위치의 오픈 고장이나 필드 배선 단선은 "안 붙음"과 정확히 똑같이 읽힌다. 중요한 밸브에서 흔히 쓰는 요령은 리밋 하나를 a접점, 다른 하나를 b접점으로 결선해서, 단선이 그럴듯해 보이는 0 0 대신 불가능한 1 1이나 앞뒤가 안 맞는 조합을 만들게 하는 것이다. 배선 단계에서는 비용이 0이고, 나중에 깔끔하게 개조하기는 거의 불가능하다.
밸브를 승인하기 전에
- 두 스위치 모두 실제 스트로크로 물리적 스톱에서 확인 — 마샬링 패널에서 점퍼로 때우지 말 것.
- 열림/닫힘 이송 시간을 방향당 세 번씩 측정해 루프 시트에 기록.
- 그 측정값으로 방향별 타임아웃 설정. 템플릿에서 복사하지 말 것.
-
1 1을 수동으로 만들어(두 입력 점퍼) 즉시 알람이 나오는지 확인. - 스트로크 도중 공기 공급 수동 차단으로 열림 실패/닫힘 실패 확인.
- 실패 알람이 래치인지, 리셋에 운전자 조작이 필요한지 확인.
- 이동 중 상태가 페이스플레이트에 보이고, 이동 중에 멈춘 밸브가 HMI 어디에서도 열림이나 닫힘으로 읽히지 않는지 확인.
-
LastOpenTime/LastCloseTime히스토리언 저장 및 시운전 값을 기준선으로 기록.
리밋 스위치는 스템 위치를 증명한다. 시트가 밀폐됐음을 증명하지는 않고, 어떤 로직으로도 그렇게 만들 수 없다. 수년간 교축에 시달려 와이어드로잉이 진행된 시트는 몇 m³/h를 흘리면서도 닫힘 스위치를 멀쩡히 만든다. 닫힌 밸브에서 하류 유량이 계속 보이는데 이송 시간이 인수인계 때와 같다면, SCADA 디버깅을 멈추고 시트를 보러 가자.