화면은 ONLINE인데 S2F41이 HCACK 2로 튕긴다 — E30 제어 상태 세 가지
설비 화면은 ONLINE인데 S2F41 START가 HCACK 2로 거절될 때. E30의 통신 상태와 제어 상태를 구분하고, OFF-LINE·ON-LINE LOCAL·ON-LINE REMOTE를 명령 하나로 확인하는 법.
글
HMI/SCADA, 산업 통신, 알람, 태그, 히스토리언을 현장 업무 흐름에 맞춰 정리한 노트입니다.
설비 화면은 ONLINE인데 S2F41 START가 HCACK 2로 거절될 때. E30의 통신 상태와 제어 상태를 구분하고, OFF-LINE·ON-LINE LOCAL·ON-LINE REMOTE를 명령 하나로 확인하는 법.
설비 없이 host driver를 검증하는 법. S1F13부터 S2F31까지 E30 startup 10단계를 npx 한 줄로 돌리고, PASS가 증명하는 것과 FAIL이 현장에서 뜻하는 것을 정리했다.
잘못된 스트림과 없는 SessionID를 실제 리스너에 던진 캡처. S9는 하나도 오지 않았다. E5 stream 9의 의미와 MHEAD 읽는 법.
장비는 SystemBytes를 검사하지 않고 그대로 돌려준다. 같은 값으로 요청 두 개를 동시에 띄운 실제 캡처와, 호스트가 지켜야 할 SystemBytes 할당 규칙.
호스트 로그에 timeout 한 줄만 남았을 때, T3·T6·T7·T8 중 무엇이 터졌는지 실제 HSMS 캡처로 가르고 장비가 지켜주지 않는 타이머를 짚는다.
PPBODY 300바이트가 와이어에서는 330바이트가 된다. S7F1/S7F2 승인 단계를 건너뛴 호스트가 무엇을 잃는지 실제 S7F1·S7F3 캡처로 본다.
3ms 만에 떨어지는 connection refused와, TCP는 붙었는데 아무도 Select를 걸지 않는 경우. HSMS Active/Passive 짝을 실제 캡처로 구분한다.
HSMS는 SELECTED인데 S1F13은 조용히 T3만 태운다. 같은 소켓에서 Linktest는 0ms에 답하는 실제 캡처와, 상태 기계가 두 개인 이유.
S1F3 본문을 실제 소켓에 실어 본 캡처. 아이템 헤더 한 바이트가 포맷 코드와 길이 바이트 수를 어떻게 나눠 갖는지, 길이가 1 틀리면 무슨 일이 나는지.
HSMS 리스너에 Deselect.req, Reject.req, 미할당 SType 두 개를 보내 잡은 캡처. 전부 무응답인데 Linktest는 돌아오고 세션은 SELECTED로 남는다.
패시브 HSMS 리스너 하나에 호스트 둘을 붙인 실제 캡처. 둘 다 Select Status 0을 받고, 먼저 붙은 쪽은 두 번째가 붙은 걸 끝까지 모른다.
S1F1에 S1F2가 안 오고 T3만 터진다면 헤더 바이트 2를 먼저 본다. W-bit과 Stream이 한 바이트에 같이 사는 탓에 생기는 두 가지 버그를 실제 캡처로.
부하가 걸릴 때만 응답을 놓치는 호스트 파서는 대부분 TCP 읽기 단위를 메시지 단위로 착각한 것이다. 한 번의 write에 두 개, 두 번의 write에 하나를 실제로 보내 본 캡처.
호스트를 내렸는데 장비는 아직 SELECTED다. Separate.req로 끝낸 세션과 소켓만 닫은 세션을 실제 캡처로 나란히 놓고 무엇이 다른지 본다.
HSMS에서 살아 있음과 연결됨은 다른 상태다. Linktest만 통과하고 SELECTED로 못 가는 세션과 그 반대 세션을 실제 캡처로 비교하고, 어느 타이머가 터지는지 정리한다.
실제 소켓으로 받은 Select.rsp 캡처. 수락, SEMI E37 Select Status 1·2·3 거절, 다른 SessionID로 온 응답. select failed 한 줄이 버리는 정보가 어느 바이트에 있는지.
Select 타임아웃 한 줄 뒤에는 진짜 무응답, System Bytes 불일치, Session ID 불일치가 섞여 있습니다. 실제로 뜬 패킷을 잡아 셋을 구분하는 방법.
장비는 분명히 응답했는데 호스트는 타임아웃을 낸다. Select.rsp의 SystemBytes가 어긋난 실제 캡처를 정상 세션과 나란히 놓고, 침묵과 무시를 구분하는 법.
WirelessHART 게이트웨이 데이터를 SCADA에 안전하게 올리는 법 — 업데이트 주기와 폴링, stale 값 검출, Modbus 매핑 함정, join 문제, 네트워크 상태 점검.
원격 알람 통보는 전달 경로일 뿐 알람 시스템이 아니다. 무엇을 호출로 내보낼지, 사람의 반응 속도에 맞는 에스컬레이션 시간, 그리고 전달 여부를 증명하는 방법.
SCADA에서 가스 유량의 압력·온도 보정을 다룹니다. 어떤 유량계에 필요한지, 절대압 함정, 계산을 어디에 둘지, 압력 트랜스미터가 죽으면 어떻게 할지.
strapping table을 SCADA에 넣는 실무 — 원형 세그먼트 기하, 보간 간격, 계산을 어느 계층에 둘지, 그리고 정수압 레벨이 재고를 속이는 밀도 함정까지.
두 번 재튜닝하고도 계속 사이클링하는 레벨 루프는 대개 튜닝이 아니라 밸브 문제다. PV/OP 트렌드에서 스틱션을 읽어내고, 스텝 테스트로 증명하고, SCADA에서 감시하는 방법.
리밋 스위치 두 개와 이송 타이머로 SCADA에서 정직한 밸브 상태를 만드는 법 — 이동 중 처리, 불일치 알람, 그리고 느려지는 액추에이터를 몇 달 먼저 잡아내는 방법.
LTE 위의 SCADA에서 poll 주기·timeout·keepalive를 정하는 방법 — 바이트 계산, 통신사 NAT timeout, report-by-exception, 그리고 RTU로 접속해 들어가면 안 되는 이유.
비율 제어에서는 한 스트림이 속도를 정하고 나머지 하나를 거기에 맞춰 조정한다. 곱셈기를 어디에 둘지, 실제 비율이 설정값에서 벗어나는 이유, 규격 이탈 제품을 쏟지 않고 기동하는 방법.
하나의 PID로 가열 밸브와 냉각 밸브를 함께 구동하는 건 단순해 보이지만, 전환 지점 근처에서 루프가 멈추거나 헌팅한다. 스플릿 지점 설정, 오버랩 제거, 두 구간 사이의 게인 점프를 다루는 방법.
캐스케이드 제어는 두 루프를 잘못된 순서로 튜닝하거나 슬레이브의 한계를 마스터로 되먹임하지 않으면 실패한다. 마스터/슬레이브 PID 루프가 서로 싸우지 않고 외란을 제거하도록 시운전하는 방법.
IEC 62439-3 PRP와 HSR이 SCADA와 IEC 61850에 무손실 네트워크 이중화를 주는 원리, 한쪽 LAN 장애가 왜 아무도 모르게 지나가는지, 시운전 때 무엇을 감시해야 하는지 정리한다.
오리피스 DP는 유량의 제곱에 비례하므로 누군가는 제곱근을 취해야 한다 — 트랜스미터, PLC, 아니면 SCADA. 두 번 취하거나 저유량 컷오프를 빼먹으면 값이 거짓말을 한다.
NTP는 대부분의 SCADA 시계를 몇 밀리초 안에 맞춰주고, 그 정도면 차고 넘친다 — 변전소 간 1 ms 이벤트 순서(SOE)가 필요해지기 전까지는. PTP가 값을 하는 곳과 과잉인 곳을 짚는다.
센서와 SCADA 태그 사이 어디에서 온도 선형화와 냉접점 보상이 실제로 일어나는지, 그리고 엉뚱한 곳에서 처리하면 왜 믿고 쓰는 값이 조용히 편향되는지.
떨리는 4-20 mA 값을 1차 필터와 이동 평균으로 다듬는 법, 필터를 어디에 둘지, 그리고 엉뚱한 태그를 필터링하면 왜 정작 필요한 알람이 늦어지는지.
SCADA에서 rate-of-rise, rate-of-fall 알람 설계하기 — window 길이, 노이즈 필터링, 공학 단위, 그리고 comms 복구 때 알람이 비명 지르지 않게 하는 quality gating.
가동 중인 PLC의 래더 로직을 안전하게 바꾸는 법. 온라인 편집과 다운로드의 차이, 스캔 순서 함정, 실인(seal-in) 글리치, 포스, 출력이 떨어지지 않게 하는 사전 점검표를 정리한다.
SCADA 드라이버가 BACnet 장치를 검색하고 present-value를 읽고 명령 가능 객체에 쓰는 방법 — 객체 식별자, 16슬롯 우선순위 배열, COV 대 폴링, BBMD 라우팅.
GOOSE의 stNum/sqNum 카운터, allowedToLive 타임아웃, VLAN 우선순위, ConfRev가 차단기 트립을 SCADA가 밀리초 만에 볼지 영영 못 볼지를 결정한다 — 그리고 구독이 정말 살아 있는지 증명하는 법.
BRCB와 URCB 리포트 컨트롤 블록이 변전소 데이터를 SCADA로 보내는 방식 — 데이터셋, 트리거 옵션, 버퍼 시간, ConfRev, 그리고 클라이언트를 조용히 굶기는 예약(reservation) 다툼까지.
DNP3 double-bit binary input(object group 3·4)은 52a/52b 차단기 접점을 네 가지 상태로 인코딩해, single-bit 상태가 동작 중에 보여주는 OPEN/CLOSED 깜빡임을 없앤다 — 매핑·시운전·경보 설정법.
DNP3 보안 인증(SAv5, IEEE 1815-2012) 시운전: 어떤 기능을 critical로 지정하나, 느린 회선에서의 challenge-response 대 aggressive mode, update key와 session key의 차이, 그리고 제어를 조용히 망가뜨리는 불일치들.
포화, 수동→자동 전환, 기동 램프 뒤에 잘 튜닝된 루프가 오버슈트하는 원인이 reset windup이다. anti-windup, external reset, bumpless transfer가 PLC에서 실제로 이 문제를 어떻게 잡는가.
OPC Classic(DA/HDA) 연결이 DCOM에서 깨지는 이유 — 포트 135의 RPC endpoint mapper, 동적 포트 범위, 서버 identity, 방화벽 — 과 레거시 서버를 SCADA에 가장 빨리 연결하는 방법.
PLC가 UDT를 OPC UA로 노출했는데 SCADA 클라이언트에는 ByteString으로 보인다. ExtensionObject 안에 실제로 무엇이 들어 있고 구조화 DataType을 어떻게 디코딩하는지 정리한다.
SCADA 드라이버가 EtherNet/IP로 ControlLogix·CompactLogix 태그를 읽는 방식 — connected와 unconnected CIP, RPI, 연결 예산, 그리고 원자 태그보다 배열 읽기가 나은 이유.
포트 2404로 TCP가 붙었고 RTU도 살아 있는데 SCADA의 모든 포인트가 여전히 정지 상태다. 해답은 대개 보내지 않은 STARTDT와 총괄 심문(GI)이다.
모든 DNP3 응답에 붙는 두 옥텟의 IIN은 재시작, 잃어버린 이벤트, 없는 시간, 로컬 제어를 알려준다. 이 비트를 읽는 법과 사라지지 않는 비트를 지우는 법을 정리한다.
멀티플렉서, HART 지원 I/O, WirelessHART 게이트웨이로 4-20 mA 루프 너머의 HART 보조 변수와 진단 정보를 SCADA로 끌어오는 방법.
듀티 분배, standby failover, 역할 교체가 예측 가능하게 동작하고 새벽 3시에도 운전자 눈에 보이도록 SCADA에서 lead/lag/standby 펌프 순환을 구성하는 법.
인버터(VFD)는 packed control word로 명령을 받고 status word로 상태를 보고한다. 둘 중 하나만 잘못 매핑해도 드라이브가 기동하지 않거나, HMI가 계속 latch하는 고장을 만든다. 둘 다 bit 단위로 해석하고 모든 전이를 증명하는 법.
데드밴드는 아날로그 변화가 이벤트가 될지를 결정하고, Group 32 변형은 그 형식과 크기를 결정한다. 둘을 잘못 잡으면 이벤트 버퍼를 흘러넘치게 하거나 쓸모없는 타임스탬프를 보낸다. 튜닝하는 법을 정리한다.
이중화 hot-standby PLC 쌍은 전환이 증명되고 동기화 상실에 알람이 걸려야 값을 한다. CPU 이중화가 커버하는 것과 못 하는 것, 그리고 양방향 전환을 시운전에서 시험하는 법.
Modbus RTU를 실어 나르는 serial-to-Ethernet 디바이스 서버를 시운전할 때 동작 모드, packing timer, TCP framing, idle timeout, half-duplex 제어를 정리한 실무 노트.
현장 계기에서 PLC를 거쳐 SCADA까지 모든 4-20 mA 포인트를 처음부터 끝까지 검증하고, 뒤바뀐 두 트랜스미터를 시운전 후가 아니라 전에 잡아내는 방법.
랩어라운드하는 카운터에서 가짜 유량을 만들지 않고 사용량을 계산하는 법. 레지스터 폭 정하기, 델타 보정을 한 곳에 두기, 롤오버와 리셋 구분하기, 그리고 적산이 절대 음수가 되지 않게 하기.
SCADA 드라이버가 Modbus 레지스터를 블록 읽기로 묶는 방식, gap tolerance와 블록 크기가 중요한 이유, 그리고 매핑 안 된 주소 하나가 어떻게 블록 안 모든 태그를 한꺼번에 무너뜨리는지.
OPC UA sequence number와 Republish 서비스는 놓친 notification을 데이터 손실 없이 되살릴 수 있다. 단, 클라이언트가 번호를 감시하고 재전송 큐 크기가 맞을 때만 그렇다. Gap을 감지하고 복구하는 법.
단선, 포화된 루프, 얼어붙은 입력도 그럴듯한 숫자를 만들어 믿을 만한 값으로 스케일된다. 잘못된 값이 운전원이나 제어 루프에 닿기 전에 과범위·저범위·정지된 4-20 mA 신호를 SCADA에서 감지하는 방법.
Class 0/1/2/3 배정, 아날로그 데드밴드, 비요청 응답, 이벤트 버퍼, 그리고 통신 두절 중에 마스터가 outstation 상태를 계속 유지할지 결정하는 IIN 비트까지 정리한다.
회선이 멈추거나 프레임을 흘리거나 CRC 오류를 남기는 DNP3 문제는 한 계층 아래에서 잡는다. 소스·목적지 주소, 확인/비확인 서비스, 재시도와 타임아웃 튜닝, keep-alive, 느린 무선·시리얼 회선의 프레이밍 오류.
DNP3 제어 시운전: select-before-operate와 direct operate를 언제 쓰나, CROB의 trip/close 코드·on/off 시간·count 읽기, 느린 회선에서 물어뜯는 select 타임아웃, 그리고 Operate 응답을 믿는 대신 피드백을 검증하는 법.
DNP3 outstation이 이벤트에 스스로 타임스탬프를 찍는 이유, Need Time(IIN1.4) 비트와 지연 보정 시각 쓰기가 동작하는 방식, 그리고 시각 동기화 불량이 SOE 로그를 허구로 만드는 과정.
PLC나 HMI가 재시작된 뒤 오래된 명령이 다시 실행되지 않도록 command bit, 응답, startup 복구를 설계하고 시험하는 방법.
SCADA에서 report-by-exception과 change-of-state를 쓰는 법 — DNP3 이벤트, deadband, heartbeat, integrity poll로 짧은 이벤트와 stale 값을 놓치지 않기.
대부분의 alarm help text는 rationalization 때 한 번 쓰이고 다시 읽히지 않는다. 야간 근무 운전원이 실제로 행동할 수 있는 cause/consequence/response를 쓰는 방법과, 거의 모든 알람 DB가 조용히 빠뜨리는 ISA-18.2 항목.
최신순 정렬과 조용히 걸려 있던 Area Filter가 Alarm Summary에서 알람을 지운다. ISA-18.2 상태 모델과 flood 기준으로 정렬, 필터, 숨김 개수를 정하는 법.
HMI 화면에서 색상, 형태, 텍스트, 상태 우선순위를 정해 비정상 상태를 현장에서 잘 보이게 만드는 실무 기준.
마지막 값 유지, 버려진 quality code, 도착 시간에 찍힌 지연 샘플. 장애 후 트렌드가 거짓말하는 세 가지 원인과 어느 쪽인지 가려내는 방법.
간헐적인 bad quality는 대개 스위치 포트에서 시작된다. 어떤 SNMP object를 polling할지, counter를 왜 증가율로 봐야 하는지, trap이 어디서 조용히 실패하는지 정리한다.
Modbus TCP-RTU 게이트웨이는 Ping이 되면서도 요청을 버릴 수 있다. Stale 값 뒤에 숨은 큐 포화를 찾고, 배선 탓 대신 SCADA 드라이버를 먼저 손보는 방법.
Browse는 성공했는데 태그 일부만 들어온다. OPC UA Part 4 v1.05의 continuation point 규칙과 MaxBrowseContinuationPoints로 원인을 잡는 방법.
OPC UA PubSub(Part 14, UADP over UDP)을 시운전할 때 오래된 값을 Live처럼 내보내지 않으려면 — Dataset 계약, Multicast·VLAN 확인, Subscriber 진단, Timing, 그리고 Reboot 때만 드러나는 장애 모드.
운전원이 지금 어느 설비를 조작하는지 화면이 스스로 밝히게 만드는 방법. ISA-101.01 display hierarchy, 범위가 보이는 버튼 label, 복사 화면 검증까지.
시퀀스 화면에 step number만 있으면 운전원은 화면을 네 개 뒤진다. State, step, hold reason을 나눠 보여 주고 hold reason은 latch해 두는 방법.
느린 시리얼 장비가 응답할 기회를 갖도록 SCADA 링크에서 Modbus RTU baud rate, silent interval(t3.5), turnaround delay를 잡는 방법입니다.
MQTT 도착 순서는 공정 순서가 아니다. DUP flag가 중복을 못 잡는 이유, Sparkplug seq의 8-bit wrap, MQTT 5.0 retained 만료 처리까지 실무 기준으로 정리한다.
Shared Subscription은 MQTT Edge 스트림을 여러 Worker로 나눠 처리하게 해 준다. 하지만 같은 구조가 잘못된 Consumer를 향하면 Historian 피드가 조용히 반토막 나고 Trend 순서가 뒤섞인다. 어디에 쓰고 어디에 쓰면 안 되는지 정리했다.
site/# 구독의 부하를 승인 전에 계산하는 방법. MQTT 5.0 Retain Handling, Shared Subscription, Receive Maximum, SUBACK reason code로 실제로 막는 법까지.
OPC UA의 AccessLevel, UserAccessLevel, WriteMask 차이 — 브라우저에서 쓰기 가능해 보이는 setpoint가 런타임에서 BadUserAccessDenied로 거부되는 이유와 실제 운영 계정으로 write를 시험하는 방법.
정비 Bypass는 Comment 한 줄이 아니라 운전 상태다. Tag 이름, ISA-18.2의 Out of Service 처리, 만료 규칙, 그리고 임시 우회가 영구가 되지 않게 막는 Audit.
SCADA 히스토리언이 통신 공백을 보간선과 마지막 값으로 감추는 방식, 그리고 bad 데이터가 교대조 리포트까지 흘러가지 않게 막는 품질 규칙.
혼 정지를 확인(ack) 태그에 묶으면 HMI 이벤트 로그가 첫날부터 거짓말을 한다. 혼 정지, 확인, 리셋, shelve를 나누는 방법을 ISA-18.2 알람 상태와 시운전 테스트와 함께 정리한다.
HMI 버튼 조건을 권한, 모드, 퍼미시브, 인터록, 품질로 나누고 실제 차단 사유를 운전원에게 보여주는 설계 방법.
재사용 페이스플레이트 팝업의 컨텍스트 전달 설계. 설비 키, 명령 바인딩 검증, OPC UA StatusCode로 본 품질 처리, ISA-101 화면 계층 기준으로 정리했다.
NodeId는 재생성되고, browse path는 설비 이동에 깨지고, DisplayName은 그냥 라벨이다. 펌웨어 업데이트 한 번에 화면 절반이 비지 않게 HMI·히스토리언·알람이 저장할 참조를 고르는 기준.
OPC UA DataChangeFilter를 정하는 법 — 절대 vs 퍼센트 데드밴드, DataChangeTrigger, 큐 크기를 어떻게 잡아야 노이즈만 걸러내고 실제 공정 변화는 남기는지.
OPC UA HistoryRead로 SCADA·히스토리언 누락 구간을 복구하는 법. 구간을 정확히 잡고, returnBounds로 경계 샘플을 처리하고, Bad 품질을 보존하며, continuation point로 서버 부하 없이 페이징한다.
트렌드 축 기본값은 OPC UA EURange에서 가져온다. 0~100%로 clamp하면 NAMUR NE 43 고장 전류가 −2.5%와 106.25%에서 잘려 사라진다. 알람선, 다중 축, 시운전 확인까지.
히스토리언에서 calibration, manual 전환, bypass를 sampled stream과 분리된 event record로 남기고 asset ID와 시간 구간으로 다시 붙이는 방법. 21 CFR 11, Annex 11, OPC UA Part 11 기준.
RSTP, MRP, PRP 링 시운전에서 운전자가 실제로 겪는 것을 재는 순서. 복구 시간, 끊어진 OPC UA subscription, 반쯤 열린 Modbus socket, alternate path에서 빠진 VLAN까지.
Modbus TCP 장비의 동시 연결 수는 생각보다 적다. Client를 미리 세고, 실제 socket 동작을 확인하고, historian이 HMI를 밀어내지 않게 하는 법.
잘못 처리된 transaction ID 때문에 Modbus TCP 게이트웨이가 SCADA 드라이버에 엉뚱한 register 값을 넘겨주는 과정과, capture로 이를 증명하는 방법.
MQTT client ID는 23바이트만 보장된다. 중복 ID, 너무 넓은 wildcard, retained command, 소리 없이 거부되는 publish까지 SCADA edge에서 실제로 터지는 것들.
OPC UA에서는 secure channel, session, subscription이 각자의 시계로 만료된다. 어느 쪽이 죽었는지 알면 firewall, server 부하, keepalive count 중 무엇을 봐야 하는지 정해진다.
값만 보는 HMI가 숨기는 frozen data, gateway cache 값, clock drift를 OPC UA StatusCode severity 비트와 SourceTimestamp, ServerTimestamp로 잡아내는 방법.
평평한 1초 scan이 PLC와 gateway를 왜 밀어붙이는지, 그리고 부하가 걸려도 operator가 실제로 판단에 쓰는 데이터는 빠르게 유지되도록 scan class와 load shedding을 설계하는 법.
SCADA와 HMI 프로젝트에서 알람 priority를 결과 영향과 운전자 대응 시간으로 등급 매기는 방법. High priority를 드물게 유지하는 EEMUA 191, ISA-18.2 목표치까지 정리한다.
Exception과 periodic 수집은 서로 다른 사실을 저장한다. Tag별로 어떻게 고르면 300 ms interlock을 잃지 않는지, 그리고 시운전 때 어떻게 증명하는지 정리했다.
MES route에 rework loop가 들어가면 WIP와 수율이 조용히 틀어진다. Visit number, disposition, 설비 event를 올바른 route step instance에 묶는 방법.
Modbus는 32-bit 값의 endianness를 표준으로 정하지 않는다. 그래서 16-bit register 두 개가 엉뚱한 값으로 디코딩된다. Driver에서 추측하지 말고 현장에서 byte/word order를 증명하는 방법.
SCADA edge MQTT 페이로드를 변경할 때 HMI, 히스토리언, MES connector, 분석 시스템이 조용히 깨지지 않도록 schema version을 관리하는 실무 노트.
ping도 되고 4840 port도 열려 있는데 OPC UA client가 접속에 실패한다면, 대개 tag가 아니라 endpoint URL, hostname SAN, ApplicationUri 불일치다. status code를 읽고 고치는 방법.
Standing alarm은 acknowledge됐지만 아직 active인 알람이다. ISA-18.2 stale alarm 기준에 맞춰 검토해서 alarm summary 배경 소음으로 만들지 않는 방법.
히스토리언이 archive 데이터를 point ID로 잡는지 이름 문자열로 잡는지, rename 한 번에 이력이 왜 둘로 쪼개지는지, cutover에서 무엇을 확인해야 operator보다 먼저 구멍을 찾는지.
HMI, PLC, OPC UA, Modbus TCP 통신이 끊겼다가 아무도 못 보는 사이 복구될 때, 어디서 잡고 무엇을 필터하고 첫 30초를 어떻게 읽을 것인가.
Host가 EC를 썼고 장비는 EAC = 0을 돌려줬는데도 아홉 lot이 이전 값으로 돌았다. SEMI E5 EAC code, 실제 socket에서 뜬 S2F13 readback byte, S2F29 namelist, SAT에서 돌릴 EC test matrix.
계기 고장으로 태그가 11시간 동안 full scale에 붙어 있었다. 품질 검토를 견디는 audit trail을 남기면서 이 구간을 보정하는 방법과, raw sample을 반드시 남겨야 하는 이유.
한 scan만 켜지는 reject pulse는 20 ms 만에 사라진다. 250 ms로 폴링하면 rate를 아무리 올려도 SCADA는 그 pulse를 못 본다. 감으로 정하지 말고 PLC scan time, driver, historian에 맞춰 polling rate를 정하는 법.
SEMI E30 spooling은 host가 S2F43으로 허용한 stream만 대상이다. SPOOL LOAD/UNLOAD 상태, S2F44 RSPACK과 STRACK, S6F24 RSDA, 그리고 clock variable이 빠진 report가 event 시간 없이 돌아오는 이유.
HMI cursor, historian archive, PLC event log, alarm list는 같은 사건을 서로 몇 초씩 다르게 찍을 수 있다. Trend를 장애 분석의 증거로 믿기 전에 SourceTimestamp와 ServerTimestamp, NTP와 PTP, UTC와 local 중 어디서 시각이 찍히는지 확인하는 법.
야간 교대 report에서 good count가 4개 어긋난다. PLC counter, historian delta, S6F11 event time, spool drain 중 어디를 먼저 봐야 하는지 정리한다.
Register map을 건드리기 전에 극성, 종단, bias, grounding부터 증명하는 Modbus RTU over RS-485 시운전 방법. 실제로 중요한 숫자까지 정리했다.
SCADA에서 OPC UA Alarm & Condition subscription을 시운전할 때 event filter, Retain flag, ConditionRefresh method, acknowledge 경로, timestamp, 그리고 reconnect 뒤에야 드러나는 문제를 짚는다.
녹색 redundancy 아이콘은 heartbeat가 살아 있다는 것만 증명한다. SCADA server를 실제로 전환할 때 client, alarm, historian, background job에서 무엇을 확인해야 하는지 정리했다.
오래된 공정 데이터를 평균 내면 trip이 사라지고 peak가 낮아지고 적산값이 틀어진다. 태그를 분류하고, 종류별 다운샘플 방법을 고르고, 값과 함께 품질을 남기고, purge를 운영에 걸기 전에 시험하는 법.
HMI setpoint 입력이 깨지는 지점은 입력이 아니라 응답 경로다. 표시 범위와 PLC hard limit을 나누는 방법, 조용한 반올림과 무시된 write를 잡아내는 시운전 시험 10가지.
SCADA edge에서 broker, client, CA 인증서를 단계적으로 교체해 publish, store-and-forward queue, Sparkplug birth 순서를 깨지 않는 절차.
OPC UA가 인증서 신뢰, 사용자 identity, Part 18 role mapping을 어떻게 나누는지, 그리고 엉뚱한 session이 setpoint를 못 바꾸도록 write 권한을 시운전하는 방법.
Valve를 강제로 여는 것과 유량값을 대체하는 것은 다른 override인데 `Manual` bit 하나로는 구분이 안 된다. HMI override의 표시, 권한, 시간 제한, 로그를 서버 재기동 후에도 남게 설계하는 방법.
Modbus unit identifier는 TCP에서는 '쓸모없다'고 하지만, gateway가 끼면 얘기가 달라진다. Serial gateway 뒤에서 unit ID routing이 어떻게 동작하는지, 그리고 내가 부른 slave가 아니라 다른 slave가 대답했을 때 원인을 찾는 법.
OPC UA reverse connect가 cell 방화벽을 통과하도록 TCP 방향을 뒤집는 원리와, 그 뒤에 여전히 발목을 잡는 certificate·endpoint·진단 함정.
SCADA tag quality가 실제로 어떻게 동작하는지 — OPC DA quality word, OPC UA StatusCode, DNP3 flag — 그리고 죽은 신호가 정상 공정 값처럼 보이지 않게 표시·알람·저장하는 방법.
레시피 다운로드에서 선택값·다운로드값·운전값을 태그로 나누고, PLC가 인정한 값을 echo로 대조하는 방법. 거부 사유를 파라미터 단위로 남기는 설계까지.
복원 리허설 설계법. 백업 세트에서 빠지는 항목, OPC UA 인증서와 service account, license 재적용, 항목별 RPO 정하는 법, 구간별 실측 RTO까지.
OPC UA monitored item queue, discard policy, Overflow 상태 비트가 SCADA 클라이언트가 모든 빠른 변화를 받을지 최신 값만 받을지를 어떻게 정하는지.
Service account는 IT 뒷단 항목이 아니라 runtime 설정이다. SCADA 제품이 credential을 숨겨 두는 위치, gMSA가 Excel 목록보다 나은 이유, 그리고 새벽 2시에만 나타나는 profile 관련 실패.
acknowledge와 reset이 비트 하나를 공유하면 고장이 남아 있는데도 알람이 사라진다. active, latch, ack, return-to-normal, reset을 ISA-18.2를 염두에 두고 분리하는 HMI/SCADA 설계법.
faceplate 여는 데 5초 걸리는 화면의 원인을 first-load와 update 지연으로 나눠 재고, 태그 수·scan class·trend 조회·PLC 부하 순으로 좁혀가는 방법.
WAN 장애 중 MQTT edge gateway가 데이터를 잃는 이유와, source timestamp·Sparkplug 방식 sequence number·replay 정책으로 historian의 공백을 막는 방법.
SEMI E5 HCACK/CPACK code를 실제 S2F41 wire capture와 함께 읽는다. HCACK=4가 있는 이유, E30 control state gating, T3 만료 후 START를 두 번 쏘지 않는 retry.
event frame과 batch segment는 경계가 버텨줘야 값어치를 한다. 시작과 종료 트리거를 어디서 잡을지, 무엇을 속성으로 캡처할지, 닫히지 않은 frame을 어떻게 처리할지 정리했다.
설비 event로 MES lot traceability를 만들 때 실제로 깨지는 지점 — event에 빠진 lot context, GEM clock과 event time, spool replay 순서, split/merge genealogy, 그리고 정직한 correction 설계.
Modbus TCP write 응답은 transaction이 접수됐다는 의미일 뿐, 설비가 실제로 동작했다는 뜻이 아니다. Function code, permissive, readback, retry 함정까지 Modbus write에 command discipline을 붙이는 방법.
OPC UA method call은 Good을 반환하고도 장비가 안 움직일 수 있다. HMI에서 접수, 실행, 실패 사유를 작업자가 제대로 보도록 method call을 설계하는 법.
Calculated tag는 어느 순간 공식 숫자가 된다. 리포트나 MES가 가져다 쓰기 전에 수식, quality 규칙, 기간 경계, counter reset을 실제 sample로 확인하는 방법.
Alarm banner의 filter는 suppression이 아니다. ISA-18.2가 둘을 구분하는 이유, 기본 view에 무엇을 띄워야 하는지, hidden alarm count가 왜 안전 논리의 전부인지, 그리고 flood 상황에서 banner를 어떻게 시험하는지.
IEC 62443-3-3 SR 5.2와 SR 1.13 기준으로 SCADA 원격 지원 경로를 설계하고, 시운전에서 막히는 쪽까지 시험하는 방법. 포트와 timeout 숫자 포함.
한 화면은 stopped, 다른 리포트는 faulted라고 한다. Raw signal을 하나의 derived status tag로 정리하고 판정 순서를 문서에 남기는 방법.
알람 on-delay, off-delay, debounce, deadband를 공정 동작과 ISA-18.2 기준으로 정하기 — 첫 실제 경고를 숨기지 않으면서 nuisance alarm만 거른다.
알람 flood는 시작 원인을 묻어 버린다. First-out을 지키고, SOE timestamp를 신뢰하고, 통신 장애가 nuisance flood로 번지지 않게 하는 방법.
화면 상태를 command bit가 아닌 feedback으로 몰고, timeout을 실제 actuator 행정으로 잡고, 왜 reject됐는지 운전자에게 보여주는 방법.
S2F33/S2F35/S2F37로 SECS/GEM collection event를 define, link, enable하는 순서와 tool restart 후 report가 비는 이유, S6F11이 실제 설비 sequence와 맞는지 증명하는 방법.
SCADA, PLC, HMI, 히스토리언, OPC UA, Modbus TCP, MQTT 방화벽 룰을 데이터 흐름에서 시작해 시운전하는 법 — 커트오버 때 터지는 보조 서비스 경로를 잡고, 각 룰을 실제 애플리케이션 시험으로 증명하는 방법.
OPC UA 이중화 서버 failover 시운전 절차: ServiceLevel, subscription 복구, 인증서, 그리고 운전자보다 먼저 stale 데이터를 잡아내는 방법.
보안을 끄면 browse가 되는데 secure channel을 켜면 끊기는 OPC UA 연결을, SCADA 현장에서 trust store와 인증서 이름, endpoint로 잡아나가는 방법.
범위, 엔지니어링 단위, Modbus word order, NAMUR 고장 임계값, quality까지 확인해서 PLC·SCADA·HMI·히스토리언이 같은 값을 보게 만드는 아날로그 스케일링 시운전 실무.
SCADA 히스토리언 타임스탬프가 틀어지는 원인 — 클록 드리프트, NTP와 PTP, OPC UA 소스 시간, 지연 데이터, 서머타임 — 을 보고서 분쟁 전에 잡는 법.
장치 한 대가 멈추거나 RTU 게이트웨이가 포화돼도 SCADA 드라이버 전체가 같이 느려지지 않도록 Modbus TCP 폴링 주기, 타임아웃, 재시도, 스캔 그룹을 정하는 법.
SCADA와 산업용 텔레메트리에서 MQTT QoS, retained message, 세션, 중복 메시지, 명령 토픽을 어떻게 나눠 볼지 정리한 현장 노트.
OPC UA 샘플링 주기, 퍼블리싱 주기, 큐 크기, deadband, KeepAlive/Lifetime 관계가 SCADA 클라이언트와 히스토리언이 공정을 제대로 보는지를 어떻게 결정하는지.
Store-and-forward 버퍼는 회선이 살아나는 순간 몇 시간 지난 값을 한꺼번에 밀어 넣습니다. 어떤 타임스탬프를 기준으로 할지, 늦게 온 값이 무엇을 덮어써도 되는지, 어떻게 표시할지, 이미 배포한 숫자를 바꿔도 되는지를 정하는 이야기.
HMI에서 퍼미시브, 인터록, inhibit, bypass, 명령 가능 상태, first-out 원인을 현장 운전에 맞게 보여주는 방법입니다.
Modbus 예외 응답을 프레임 단위로 읽고, 통신 불량과 요청 거절을 구분하며, 잘못된 주소·게이트웨이·폴링 부하 원인을 좁히는 방법.
PLC 다운로드나 서버 교체 후 세션은 정상인데 monitored item마다 Bad_NodeIdUnknown이 돌아옵니다. namespace index와 identifier, 클라이언트 캐시가 실제로 어떻게 바뀌는지, 정지 시간이 끝나기 전에 무엇을 확인해야 하는지 정리했습니다.
알람 합리화 워크숍에서 알람을 줄이는 기준, 우선순위 조정, 조치 문구 정리 방법을 다룹니다.
MES 비가동 사유 코드를 현장에서 제대로 선택되게 만드는 법. 입력 프롬프트 타이밍, PackML 상태 기반 자동 분류, 리포트에 실제로 필요한 필드까지 정리했습니다.
MQTT Last Will, Birth, retain 메시지로 SCADA 화면에서 오프라인·데이터 정지·정상을 서로 다른 상태로 표시하는 방법입니다.
OPC UA 인증서 만료로 통신이 끊기지 않도록 갱신 절차와 확인 항목을 정리합니다.
히스토리언 데드밴드와 압축을 HMI 소수점이 아니라 계기 정확도와 공정 기준으로 정해, 노이즈는 저장하지 않으면서 실제 움직임은 트렌드에 남기는 방법.
모드는 누가 명령할 수 있는가, 상태는 지금 뭘 하고 있는가다. SEMI E30 GEM 제어 상태 모델에 맞춰 HMI 표시 칸을 나누는 방법과 커미셔닝 확인 항목.
소켓은 열리고 unit ID도 응답하고 폴도 정상인데 화면 값만 틀린 경우. SCADA와 히스토리안이 신뢰하기 전에 레지스터 맵을 검증하는 방법.
SCADA 화면은 장비가 멈춘 뒤에도 그럴듯한 숫자를 태연히 보여준다. 하트비트, 와치독, stale-data 태그로 데이터의 신선도를 눈에 보이게 만드는 방법 — 실제 프로토콜 품질, 현실적인 타임아웃, 그리고 그걸 증명하는 시운전 절차까지.
HMI/SCADA 프로젝트에서 반복해서 문제가 되는 태그, 알람, 화면, 문서화 기준을 정리합니다.
group_id·edge_node_id·device_id를 어떻게 잡아야 이름 변경 하나로 모든 구독과 히스토리언 포인트가 깨지지 않는지, 그리고 birth 인증서·alias·STATE를 실무 기준으로 정리합니다.
SCADA 네트워크 장애를 장비, 케이블, IP, 포트, 프로토콜 순서로 좁혀 가는 점검 절차입니다.
S5F1은 ALCD, ALID, ALTX 세 항목이다. ALCD 8번 비트가 set/clear를 정하고, 이걸 놓치면 MES 알람 목록이 영영 안 꺼진다. 재시작 후 S5F5/S5F6로 복구하는 방법까지.
히스토리언을 단순 저장소가 아니라 문제 추적과 운전 개선을 위한 시간 데이터 기반으로 설명합니다.
OPC UA 클라이언트 시운전에서 엔드포인트, 보안 정책, 인증서, 구독 품질을 확인하는 절차입니다.
이상 상황에서 운전자가 실제로 던지는 질문에 답하는 SCADA·HMI 트렌드 화면을 만드는 법 — 루프 단위 묶기, 스케일 선택, 그리고 통신 끊김 구간을 매끄러운 선으로 덮지 않고 불량 데이터를 드러내기.
개별 태그 값을 작업자가 이해할 수 있는 설비 운영 상태로 묶는 방법을 설명합니다.
모터, 밸브, 인버터 같은 반복 장비를 일관된 방식으로 조작하기 위한 페이스플레이트 설계 기준입니다.
산업용 이더넷 스위치 시운전에서 IP, 포트, VLAN, 링 이중화, 로그를 확인하는 순서입니다.
ISA-18.2가 나누는 보류·설계 억제·운영 제외·인터록 바이패스의 차이와, 숨긴 알람마다 담당자와 기록이 남게 설정하는 방법.
SCADA 시운전에서 태그, 화면, 알람, 트렌드, 권한, 장애 상황을 확인하는 실무 체크리스트입니다.
SCADA 태그 이름을 설비, 신호 의미, 데이터 성격이 드러나도록 정리하는 실무 기준입니다.
태그 값이 화면의 운영 상태로 바뀌는 과정을 직접 따라가며 확인하는 튜토리얼입니다.
알람을 많이 만드는 것보다 작업자가 조치할 수 있는 알람만 남기는 것이 왜 중요한지 설명합니다.
OPC UA와 MQTT를 어느 쪽이 더 좋은가가 아니라, 현장 통합 목적에 따라 어떻게 나눠 쓸지 설명합니다.
Modbus TCP를 처음 붙일 때 주소, 레지스터 타입, 워드 순서, 폴링 주기에서 자주 틀리는 지점을 정리합니다.
SCADA 태그가 단순 변수명이 아니라 통신 주소, 단위, 품질, 알람, 이력 설정을 연결하는 기준점임을 설명합니다.
HMI, SCADA, MES, 히스토리언을 역할 기준으로 구분하고 현장 아키텍처에서 어디까지 책임져야 하는지 정리합니다.
SCADA를 PLC 위의 단순 화면이 아니라, 설비 상태를 모으고 작업자가 판단할 수 있게 만드는 운영 계층으로 설명합니다.