WirelessHART 데이터를 SCADA로 가져올 때 멈춘 값에 속지 않는 법
WirelessHART 게이트웨이 데이터를 SCADA에 올리는 법. 업데이트 주기와 폴링, stale 값 검출, Modbus 매핑 함정, join 문제, 네트워크 점검.
글
HMI/SCADA, 산업 통신, 알람, 태그, 히스토리언을 현장 업무 흐름에 맞춰 정리한 노트입니다.
WirelessHART 게이트웨이 데이터를 SCADA에 올리는 법. 업데이트 주기와 폴링, stale 값 검출, Modbus 매핑 함정, join 문제, 네트워크 점검.
SCADA에서 가스 유량의 압력·온도 보정을 다룹니다. 어떤 유량계에 필요한지, 절대압 함정, 계산을 어디에 둘지, 압력 트랜스미터가 죽으면 어떻게 할지.
strapping table을 SCADA에 넣는 실무 — 원형 세그먼트 기하, 보간 간격, 계산을 어느 계층에 둘지, 그리고 정수압 레벨이 재고를 속이는 밀도 함정까지.
리밋 스위치 두 개와 이송 타이머로 SCADA에서 정직한 밸브 상태를 만드는 법 — 이동 중 처리, 불일치 알람, 그리고 느려지는 액추에이터를 몇 달 먼저 잡아내는 방법.
오리피스 DP는 유량의 제곱에 비례하므로 누군가는 제곱근을 취해야 한다 — 트랜스미터, PLC, 아니면 SCADA. 두 번 취하거나 저유량 컷오프를 빼먹으면 값이 거짓말을 한다.
센서와 SCADA 태그 사이 어디에서 온도 선형화와 냉접점 보상이 실제로 일어나는지, 그리고 엉뚱한 곳에서 처리하면 왜 믿고 쓰는 값이 조용히 편향되는지.
떨리는 4-20 mA 값을 1차 필터와 이동 평균으로 다듬는 법, 필터를 어디에 둘지, 그리고 엉뚱한 태그를 필터링하면 왜 정작 필요한 알람이 늦어지는지.
SCADA가 BACnet 장치를 찾고 present-value를 읽고 쓰는 법. 객체 식별자, 16슬롯 우선순위 배열, COV 대 폴링, BBMD.
BRCB와 URCB가 변전소 데이터를 SCADA로 보내는 방식. 데이터셋, 트리거 옵션, 버퍼 시간, ConfRev, 클라이언트를 굶기는 reservation 다툼.
DNP3 double-bit input(group 3·4)은 52a/52b 접점을 네 상태로 인코딩해 동작 중 OPEN/CLOSED 깜빡임을 없앤다. 매핑·시운전·경보 설정.
PLC UDT가 OPC UA 클라이언트에서 ByteString으로 보인다. ExtensionObject 안에 든 것과 구조화 DataType 디코딩법.
SCADA 드라이버가 EtherNet/IP로 Logix 태그를 읽는 방식. connected와 unconnected CIP, RPI, 연결 예산, 배열 읽기가 나은 이유.
멀티플렉서, HART 지원 I/O, WirelessHART 게이트웨이로 4-20 mA 루프 너머의 HART 보조 변수와 진단 정보를 SCADA로 끌어오는 방법.
SCADA에서 lead/lag/standby 펌프 순환 구성: 듀티 분배, standby failover, 역할 교체가 예측 가능하고 운전자 눈에 보이게.
VFD control word나 status word를 하나만 잘못 매핑해도 기동이 안 되거나 고장이 latch된다. bit 단위 해석과 전이 증명법.
데드밴드는 아날로그 변화를 이벤트로 만들지 정하고, Group 32 변형은 형식을 정한다. 이벤트 버퍼 넘침과 쓸모없는 타임스탬프를 막는 튜닝.
현장 계기에서 PLC를 거쳐 SCADA까지 모든 4-20 mA 포인트를 처음부터 끝까지 검증하고, 뒤바뀐 두 트랜스미터를 시운전 후가 아니라 전에 잡아내는 방법.
랩어라운드 카운터에서 가짜 유량 없이 사용량을 계산하는 법. 레지스터 폭, 델타 보정 한 곳에 두기, 롤오버와 리셋 구분, 음수 적산 막기.
단선, 포화, 얼어붙은 입력도 그럴듯한 숫자가 된다. 과범위·저범위·정지된 4-20 mA 신호를 운전원과 제어 루프 전에 감지하는 법.
DNP3 Class 0/1/2/3 배정, 아날로그 데드밴드, 비요청 응답, 이벤트 버퍼, 통신 두절 때 마스터 판단을 바꾸는 IIN 비트까지.
멈추는 DNP3 회선, 흘린 프레임, CRC 오류는 데이터 링크 계층에서 잡는다. 주소, 확인 서비스, 재시도·타임아웃, keep-alive 튜닝.
DNP3 outstation이 이벤트에 직접 타임스탬프를 찍는 이유, Need Time(IIN1.4)과 지연 보정 시각 쓰기, 시각 동기 불량이 SOE를 망치는 과정.
PLC나 HMI가 재시작된 뒤 오래된 명령이 다시 실행되지 않도록 command bit, 응답, startup 복구를 설계하고 시험하는 방법.
Report-by-exception 쓰는 법: DNP3 이벤트, deadband, heartbeat, integrity poll로 짧은 이벤트와 stale 값을 잡는다.
Browse는 성공했는데 태그 일부만 들어온다. Part 4의 continuation point 규칙과 MaxBrowseContinuationPoints로 원인을 잡는다.
쓰기 가능해 보이는 setpoint가 BadUserAccessDenied로 거부되는 이유. UserAccessLevel, WriteMask, 운영 계정 시험.
정비 Bypass는 Comment가 아니라 운전 상태다. Tag 이름, ISA-18.2 Out of Service, 만료 규칙, 임시 우회가 영구가 되지 않게 막는 Audit.
SCADA 히스토리언이 통신 공백을 보간선과 마지막 값으로 감추는 방식, 그리고 bad 데이터가 교대조 리포트까지 흘러가지 않게 막는 품질 규칙.
HMI 버튼 조건을 권한, 모드, 퍼미시브, 인터록, 품질로 나누고 실제 차단 사유를 운전원에게 보여주는 설계 방법.
재사용 페이스플레이트 팝업의 컨텍스트 전달 설계. 설비 키, 명령 바인딩 검증, OPC UA StatusCode로 본 품질 처리, ISA-101 화면 계층 기준으로 정리했다.
NodeId는 재생성되고 browse path는 깨지고 DisplayName은 라벨이다. 펌웨어 업데이트에도 버티는 참조를 HMI·히스토리언에 고르는 기준.
OPC UA DataChangeFilter 정하기: 절대와 퍼센트 데드밴드, DataChangeTrigger, 큐 크기로 노이즈만 거르고 공정 변화는 남긴다.
트렌드 축을 0~100%로 clamp하면 NAMUR NE 43 고장 전류(−2.5%, 106.25%)가 사라진다. EURange, 알람선, 다중 축, 시운전 확인.
MQTT client ID는 23바이트만 보장된다. 중복 ID, 넓은 wildcard, retained command, 소리 없이 거부되는 publish까지.
값만 보는 HMI가 숨기는 frozen data, gateway cache, clock drift를 StatusCode와 Source/ServerTimestamp로 잡는다.
일괄 1초 scan이 PLC와 gateway를 누르는 이유. 부하 때도 판단에 쓰는 데이터는 빠르게 두는 scan class와 load shedding 설계.
Exception과 periodic 수집은 서로 다른 사실을 저장한다. 300 ms interlock을 잃지 않게 tag별로 고르고 시운전에서 증명하는 법.
Modbus는 32-bit 값의 endianness를 정하지 않아 register 두 개가 엉뚱하게 디코딩된다. byte/word order를 현장에서 증명하는 법.
히스토리언이 point ID와 이름 중 무엇으로 이력을 잡는지, rename 한 번에 이력이 쪼개지는 이유, cutover에서 확인할 것.
20 ms reject pulse는 250 ms 폴링으로 못 잡는다. PLC scan time, driver, historian에 맞춰 polling rate를 정하는 법.
야간 교대 report의 good count가 4개 어긋난다. PLC counter, historian delta, S6F11 시각, spool drain 중 먼저 볼 곳.
HMI setpoint는 입력이 아니라 응답 경로에서 깨진다. 표시 범위와 PLC hard limit 분리, 조용한 반올림과 무시된 write 잡는 시험 10가지.
OPC DA quality, OPC UA StatusCode, DNP3 flag가 실제로 하는 일과, 죽은 신호가 정상 값처럼 보이지 않게 표시·알람·저장하는 법.
레시피 다운로드에서 선택값·다운로드값·운전값을 태그로 나누고, PLC가 인정한 값을 echo로 대조하는 방법. 거부 사유를 파라미터 단위로 남기는 설계까지.
OPC UA monitored item queue, discard policy, Overflow 비트가 클라이언트가 모든 변화를 받을지 최신 값만 받을지 정한다.
faceplate가 5초 걸려 열리는 화면. first-load와 update 지연을 나눠 재고 태그 수·scan class·trend 조회·PLC 부하 순으로 좁힌다.
Event frame과 batch segment는 경계가 맞아야 쓸모 있다. 시작·종료 트리거 위치, 캡처할 속성, 닫히지 않은 frame 처리.
설비 event로 lot 이력을 만들 때 깨지는 곳: lot context, GEM clock, spool replay 순서, split/merge, correction.
OPC UA method call은 Good을 돌려주고도 장비가 안 움직일 수 있다. HMI에 접수, 실행, 실패 사유를 보여주는 method call 설계.
Calculated tag는 어느 순간 공식 숫자가 된다. 리포트와 MES가 쓰기 전에 수식, quality, 기간 경계, counter reset을 실제 sample로 확인한다.
한 화면은 stopped, 다른 리포트는 faulted라고 한다. Raw signal을 하나의 derived status tag로 정리하고 판정 순서를 문서에 남기는 방법.
화면 상태를 command bit가 아닌 feedback으로 몰고, timeout을 실제 actuator 행정으로 잡고, 왜 reject됐는지 운전자에게 보여주는 방법.
범위, 공학 단위, word order, NAMUR 고장 임계값, quality를 확인해 PLC·SCADA·히스토리언이 같은 값을 보게 하는 스케일링 시운전.
장치 한 대가 멈추거나 RTU 게이트웨이가 포화돼도 SCADA 드라이버 전체가 같이 느려지지 않도록 Modbus TCP 폴링 주기, 타임아웃, 재시도, 스캔 그룹을 정하는 법.
SCADA와 산업용 텔레메트리에서 MQTT QoS, retained message, 세션, 중복 메시지, 명령 토픽을 어떻게 나눠 볼지 정리한 현장 노트.
OPC UA 샘플링·퍼블리싱 주기, 큐 크기, deadband, KeepAlive/Lifetime이 SCADA와 히스토리언이 공정을 제대로 보는지 정한다.
PLC 다운로드나 서버 교체 후 세션은 정상인데 Bad_NodeIdUnknown이 온다. namespace index, identifier, 클라이언트 캐시를 본다.
MES 비가동 사유 코드를 현장에서 제대로 선택되게 만드는 법. 입력 프롬프트 타이밍, PackML 상태 기반 자동 분류, 리포트에 실제로 필요한 필드까지 정리했습니다.
MQTT Last Will, Birth, retain 메시지로 SCADA 화면에서 오프라인·데이터 정지·정상을 서로 다른 상태로 표시하는 방법입니다.
히스토리언 데드밴드와 압축을 HMI 소수점이 아니라 계기 정확도와 공정 기준으로 정해, 노이즈는 저장하지 않으면서 실제 움직임은 트렌드에 남기는 방법.
소켓은 열리고 unit ID도 응답하고 폴도 정상인데 화면 값만 틀린 경우. SCADA와 히스토리안이 신뢰하기 전에 레지스터 맵을 검증하는 방법.
장비가 멈춰도 SCADA 화면은 그럴듯한 숫자를 보여준다. 하트비트, 와치독, stale-data 태그로 데이터 신선도를 보이게 하는 법과 시운전.
이름 변경 하나로 구독과 히스토리언 포인트가 깨지지 않게 group_id·edge_node_id·device_id를 잡는 법. birth, alias, STATE까지.
히스토리언을 단순 저장소가 아니라 문제 추적과 운전 개선을 위한 시간 데이터 기반으로 설명합니다.
개별 태그 값을 작업자가 이해할 수 있는 설비 운영 상태로 묶는 방법을 설명합니다.
SCADA 태그 이름을 설비, 신호 의미, 데이터 성격이 드러나도록 정리하는 실무 기준입니다.
SCADA 태그가 단순 변수명이 아니라 통신 주소, 단위, 품질, 알람, 이력 설정을 연결하는 기준점임을 설명합니다.