HMI 숫자는 모든 계층에서 동시에 틀릴 수 있다
운전자 화면은 47.3 bar를 보여준다. trend도 맞고, 알람도 조용하다. 그런데 현장 transmitter는 실제로 74 bar를 읽고 있다. PLC에서 span을 거꾸로 넣었기 때문이다. 용기가 이상해지기 전까지는 어디에도 이상이 안 보인다. 이것이 아날로그 스케일링의 함정이다. 잘못된 범위여도 PLC, SCADA, HMI, 히스토리언 각 계층이 그럴듯한 숫자를 만들어 내기 때문에, 어느 한 화면도 잡아내지 못한다.
아날로그 태그는 HMI에 숫자가 뜬다고 끝난 게 아니다. 이 숫자는 현장 계기부터 알람 로직과 히스토리언까지 하나의 약속을 들고 넘어가고, 넘어가는 지점마다 그 약속이 조용히 깨질 수 있다.
아날로그 포인트마다 다음을 적어 둔다.
- 원시 입력 범위 — 4–20 mA, 0–10 V, pulse rate, 또는 raw register 값.
- PLC 스케일 범위와 엔지니어링 단위.
- SCADA 태그 형식, 소수점, 표시 형식.
- 알람 설정값이 공정 단위 기준인지 raw count 기준인지.
- 히스토리언 저장 단위와 compression deadband.
- MES, 리포트, 대시보드에서 쓰는 하위 단위 변환.
스케일링 오류는 하나만 보면 대개 사소하다. 여섯 계층이 각각 그럴듯한 숫자를 보여 주기 때문에 비싸진다.
raw·스케일·화면 값을 따로 시험한다
시운전 표에 raw 값, 스케일된 공정 값, 화면 표시 값 세 칸을 두고 loop를 그 칸들로 통과시킨다.
| 확인 항목 | 예시 | 잡아내는 문제 |
|---|---|---|
| 낮은 신호 | 4 mA가 0.0 bar | zero 설정 오류, live zero 처리, 범위 오입력 |
| 중간 신호 | 12 mA가 50.0 bar | span 반전, 정수 절삭 |
| 높은 신호 | 20 mA가 100.0 bar | full scale 오류, 화면 clamp |
| overrange | 21 mA에서 100 bar가 아니라 bad quality | 계기 이상을 숨기는 강제 clamp |
| underrange | 3.6 mA에서 0 bar가 아니라 bad quality | 단선 감지와 알람 동작 |
운전점 하나만 보고 통과시키지 않는다. 30 bar에서 딱 맞아도 span이 틀리면 양 끝에서만 드러난다. loop를 low, mid, high, 그리고 양쪽 끝을 넘겨서 걸어 본다.
고장 지점은 감으로 잡지 말고 실제 임계값을 쓴다. NAMUR NE43은 4–20 mA loop의 표준 고장 신호를 정의한다. 유효 측정 범위는 3.8–20.5 mA, downscale(하향) 고장은 ≤ 3.6 mA, upscale(상향) 고장은 ≥ 21 mA다. 아날로그 입력 카드가 이 값들을 범위 안으로 clamp하지 말고 bad quality로 세우게 설정한다. clamp는 계기 고장을 정상처럼 보이는 값으로 세탁하는 바로 그 경로다.
단위 변환의 주인을 정한다
프로젝트에는 모르는 사이에 단위가 섞인다. °C와 °F, bar와 kPa, L/min와 m³/h, mm와 inch. 변환에는 주인이 하나 있어야 한다. 아니면 두 번 변환돼서 상쇄되거나, 더 나쁘게는 두 번 변환됐는데 상쇄가 안 된다.
변환이 살 수 있는 곳은 사실상 세 군데다.
- PLC가 공정 단위를 책임진다. SCADA는 이미 스케일된 엔지니어링 값을 읽는다. 제어와 알람이 깔끔하다.
- SCADA가 화면 단위를 바꾼다. PLC는 장비 기본값을 유지하고 HMI에서 운전자용으로 바꾼다. 감시 전용에는 괜찮지만 알람이 그 값에 걸리는 순간 위험해진다.
- 히스토리언이나 리포트가 생산 단위로 바꾼다. 공정 단위로 저장한 뒤 리포트에서 변환한다. 제어 로직을 건드리지 않고 보고서를 바꿀 수 있다.
내 기본값은 첫 번째다. PLC가 엔지니어링 단위를 쥐고 아래는 전부 그걸 읽는다. 그러면 제어와 알람이 하나의 숫자로 돌고, 언젠가 서로 어긋날 bar-to-kPa 계수를 세 도구에서 관리하지 않아도 된다. 값이 감시 전용일 때만 화면에서 변환하고, 알람이 걸리는 값은 절대 그렇게 하지 않는다. 그리고 태그가 TankLevel_m이라면 화면에서 아무 표시 없이 ft로 그리게 두지 않는다.
스케일링 문제는 대개 데이터 타입 문제다
transmitter를 의심하기 전에 바이트를 의심한다.
- PLC register가 signed인가 unsigned인가? 40000 count 값은 signed 16-bit로 읽는 순간 음수로 감긴다.
- Modbus 값이 16-bit, 32-bit, float, 아니면 VFD 속도 지령 같은 scaled integer인가?
- 32-bit float는 전부 word order를 확인한다. Modbus는 float를 두 register에 어떻게 나눌지 표준을 정한 적이 없어서 big-endian(ABCD), little-endian(DCBA), 그리고 바이트가 뒤바뀐 middle-endian 두 변형(BADC, CDAB)을 다 만난다. Schneider/Modicon과 Enron/Daniel 관례는 대놓고 다르다. 순서가 틀리면 작은 offset이 아니라 터무니없이 큰 값이나 0 근처에 붙은 값으로 나타난다.
- PLC 로직과 gateway 식에서 정수 나눗셈을 뒤진다. 정수 연산의
raw / 100은 스케일하기도 전에 소수부를 버린다.
소수점이 많다고 데이터가 좋아지지 않는다. ±0.5% 압력 transmitter에 소수 세 자리를 보여주는 건 거짓말이다. 마지막 두 자리는 운전자가 쫓아다닐 노이즈일 뿐이다. 계기가 실제로 분해할 수 있는 만큼만 보여주고, 분석에 필요한 만큼만 저장하고, 고해상도 값을 integer 히스토리 태그에 넣지 않는다.
정상 0과 죽은 신호는 다르다
공정 0과 신호 실패는 둘 다 0.0으로 읽힌다. 이 둘을 헷갈리면 멈춘 유량계가 빈 배관처럼 보인다. 실제로 0 근처가 나올 수 있는 탱크, 유량, 압력, 온도에서 가장 아프다.
다음 상태를 일부러 만들고, 각각이 깨끗한 값이 아니라 bad quality로 뜨는지 확인한다.
- 계기 분리.
- 입력 모듈 underrange 또는 overrange.
- PLC scaling block fault.
- PLC와 SCADA 사이 통신 끊김.
- gateway가 오래된 값을 계속 반환.
- manual override 또는 simulation 사용 중.
HMI는 값만이 아니라 quality를 보여줘야 하고, 히스토리언은 나중에 trend가 왜 평평하거나 비었거나 pin됐는지 설명할 만큼 quality를 남겨야 한다.
알람은 스케일링을 증명한 뒤에 손댄다
알람은 스케일링을 증명한 뒤에 맞춘다. 먼저 맞추면 틀린 신호를 기준으로 튜닝하는 것이고, 스케일링을 고치는 순간 전부 다시 맞춰야 한다.
그다음 확인한다.
- 설정값이 운전자가 보는 단위와 같다.
- deadband가 raw count가 아니라 스케일된 신호의 노이즈에 맞다.
- rate-of-change 알람의 시간 기준이 맞다.
- High-high, Low-low 한계가 계기 유효 범위 안에 있다 — 20 mA 위의 HH는 절대 안 걸린다.
- 문구에 숫자가 들어간 알람은 단위도 같이 나온다.
- bypass나 maintenance mode가 bad quality 표시까지 숨기지 않는다.
PLC가 raw count로 알람을 만들면 알람 목록에 엔지니어링 단위 환산값도 같이 적는다. 새벽 2시에 대응하는 사람이 register count를 압력으로 역산하게 만들면 안 된다.
loop test 때 trend로 확인한다 — 히스토리언은 스케일링 오류를 숨긴다
히스토리언은 스케일링 오류를 정상처럼 보이게 한다. 틀렸지만 일관된 스케일도 매끄러운 선을 그리기 때문이다. 그래서 loop test 때 신호를 일부러 움직이고 history를 본다.
- loop를 스트로크하는 동안 raw와 스케일을 나란히 trend한다.
- 히스토리언 단위가 HMI 단위와 같은지 확인한다.
- compression deadband는 raw가 아니라 스케일된 값 기준으로 잡는다 — deadband 0.5 mA는 스케일 뒤에 전혀 다른 의미가 된다.
- backfill·store-and-forward 값에도 같은 스케일 버전이 적용됐는지 본다.
- 범위 변경의 effective date를 남긴다.
기동 후 range를 바꾸는 건 HMI 수정이 아니다. 예전 데이터와 새 데이터의 비교 기준이 바뀐다. 생산이나 품질 기록에 들어가는 값이면 effective date만이 변경 전후로 trend를 이어서 읽게 해 준다.
실제로 만나는 고장 패턴
- 0–10 V 입력을 4–20 mA loop로 설정.
- transmitter는 0–16 bar인데 SCADA는 0–10 bar로 가정.
- word order가 반대인 32-bit float.
- bad 값을 0으로 clamp하면서 bad quality를 안 세우는 gateway.
- HMI는 percent를 보여주는데 알람은 엔지니어링 단위로 도는 상황.
- 단위 변환 뒤에도 예전 폭 그대로 둔 compression deadband.
- 태그명에 단위가 없어 리포트에서 한 번 더 변환.
태그별로 남길 것
중요한 신호마다 짧은 기록 하나를 남긴다. 태그명과 설명, 계기 range와 교정일, raw 신호 또는 register 형식, PLC scaling 식 또는 block 번호, 엔지니어링 단위와 표시 소수점, 알람 한계와 deadband, 히스토리언 태그·단위·compression, low·mid·high·underrange·overrange 시험값, 그리고 누가 언제 입회했는지.
transmitter를 교체하거나 HMI를 이관하거나 생산 리포트가 화면값과 안 맞는다는 질문이 나오는 날, 그 기록이 원래 약속이 남아 있는 유일한 곳이다.