ECID 하나를 물었는데 값이 두 개 온다 — S2F29와 S2F13으로 equipment constant 읽기
S2F29로 ECID 목록을 받고 S2F13으로 값을 읽는다. 요청과 응답이 위치로만 묶이는 구조와 없는 ECID, S2F0이 오는 두 경우를 실제 byte로 확인한다.
글
HMI/SCADA, 산업 통신, 알람, 태그, 히스토리언을 현장 업무 흐름에 맞춰 정리한 노트입니다.
S2F29로 ECID 목록을 받고 S2F13으로 값을 읽는다. 요청과 응답이 위치로만 묶이는 구조와 없는 ECID, S2F0이 오는 두 경우를 실제 byte로 확인한다.
정의하지 않은 RPTID를 link하면 설비마다 답이 다르다. S2F33/S2F35/S2F37 순서와 LRACK 5, DRACK 3, ERACK 0을 두 설비의 실제 byte로 확인한다.
설비 시계가 밀리면 link는 멀쩡한데 MES의 run 재구성이 어긋난다. S2F17로 읽고 S2F31로 맞추는 절차와 TIACK 0의 함정을 실제 capture로 본다.
설비 화면은 ONLINE인데 S2F41 START가 HCACK 2로 거절될 때. E30의 통신 상태와 제어 상태를 구분하고, HCACK이 2에서 0으로 바뀌는 자리를 실제 HSMS capture의 byte로 짚는다.
설비 없이 host driver를 검증하는 법. S1F13부터 S2F31까지 E30 startup 10단계를 npx 한 줄로 돌리고, 그 실행의 설비 쪽 wire capture와 함께 PASS가 증명하는 것, Select가 거절됐을 때 실제로 찍히는 것을 정리했다.
없는 Stream, 없는 Function, 깨진 본문을 실제 리스너에 던진 캡처. 돌아온 건 S9 하나와 SxF0 abort였다. E5 stream 9의 의미와 MHEAD 읽는 법.
장비는 SystemBytes를 검사하지 않고 그대로 돌려준다. 같은 값으로 요청 두 개를 동시에 띄운 실제 캡처와, 호스트가 지켜야 할 SystemBytes 할당 규칙.
호스트 로그에 timeout 한 줄만 남았을 때 T3와 T6를 실제 HSMS 캡처로 가른다. SEMI E37 기본값(T3 45초, T6 5초, T7 10초, T8 5초)과 장비가 지켜주지 않는 타이머까지.
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 두 번에 하나, 길이 필드보다 모자란 바디, 1 MiB를 부르는 길이 접두어까지 실제로 보내 본 캡처.
호스트를 내렸는데 장비는 아직 SELECTED다. Separate.req로 끝낸 세션과 소켓만 닫은 세션을 실제 캡처로 나란히 놓고 무엇이 다른지 본다.
HSMS에서 살아 있음과 연결됨은 다른 상태다. Select를 보내기도 전에 Linktest와 S1F13을 던져본 실제 캡처, E37이 그 자리에서 요구하는 Reject.req reason 4, 그리고 먼저 터지는 타이머가 T7이 아닌 이유.
실제 소켓으로 받은 Select.rsp 캡처. 수락, SEMI E37 Select Status 1·2·3 거절, 다른 SessionID로 온 응답. select failed 한 줄이 버리는 정보가 어느 바이트에 있는지.
Select 타임아웃 한 줄 뒤에는 진짜 무응답, SystemBytes 불일치, SessionID 불일치가 섞여 있다. 2026-09-17에 소켓에서 직접 잡은 패킷과 SEMI E37의 T5·T6·T7로 셋을 구분한다.
장비는 응답했는데 호스트는 타임아웃을 낸다. 2026-09-18에 127.0.0.1:5501에서 잡은 wrongSystemBytes 캡처로 요청과 응답 헤더를 바이트 단위로 맞춰 보고, pending reply 테이블이 왜 그 프레임을 버리는지, 그리고 왜 T3가 아니라 T6인지까지.
이중화 hot-standby PLC 쌍은 전환이 증명되고 동기화 상실에 알람이 걸려야 값을 한다. CPU 이중화가 커버하는 것과 못 하는 것, 그리고 양방향 전환을 시운전에서 시험하는 법.
Modbus RTU를 실어 나르는 serial-to-Ethernet 디바이스 서버를 시운전할 때 동작 모드, packing timer, TCP framing, idle timeout, half-duplex 제어를 정리한 실무 노트.
PLC나 HMI가 재시작된 뒤 오래된 명령이 다시 실행되지 않도록 command bit, 응답, startup 복구를 설계하고 시험하는 방법.
대부분의 alarm help text는 rationalization 때 한 번 쓰이고 다시 읽히지 않는다. 야간 근무 운전원이 실제로 행동할 수 있는 cause/consequence/response를 쓰는 방법과, 거의 모든 알람 DB가 조용히 빠뜨리는 ISA-18.2 항목.
HMI 화면에서 색상, 형태, 텍스트, 상태 우선순위를 정해 비정상 상태를 현장에서 잘 보이게 만드는 실무 기준.
운전원이 지금 어느 설비를 조작하는지 화면이 스스로 밝히게 만드는 방법. 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를 잡는 방법입니다.
RSTP, MRP, PRP 링 시운전에서 운전자가 실제로 겪는 것을 재는 순서. 복구 시간, 끊어진 OPC UA subscription, 반쯤 열린 Modbus socket, alternate path에서 빠진 VLAN까지.
Host가 EC를 썼고 장비는 EAC = 0을 돌려줬는데도 아홉 lot이 이전 값으로 돌았다. SEMI E5 EAC code, 실제 socket에서 뜬 S2F13 readback byte, S2F29 namelist, SAT에서 돌릴 EC test matrix.
SEMI E30 spooling은 host가 S2F43으로 허용한 stream만 대상이다. SPOOL LOAD/UNLOAD 상태, S2F44 RSPACK과 STRACK, S6F24 RSDA, 그리고 S2F43 bytes를 실제 socket에 흘려본 capture.
Register map을 건드리기 전에 극성, 종단, bias, grounding부터 증명하는 Modbus RTU over RS-485 시운전 방법. 실제로 중요한 숫자까지 정리했다.
녹색 redundancy 아이콘은 heartbeat가 살아 있다는 것만 증명한다. SCADA server를 실제로 전환할 때 client, alarm, historian, background job에서 무엇을 확인해야 하는지 정리했다.
오래된 공정 데이터를 평균 내면 trip이 사라지고 peak가 낮아지고 적산값이 틀어진다. 태그를 분류하고, 종류별 다운샘플 방법을 고르고, 값과 함께 품질을 남기고, purge를 운영에 걸기 전에 시험하는 법.
레시피 다운로드에서 선택값·다운로드값·운전값을 태그로 나누고, PLC가 인정한 값을 echo로 대조하는 방법. 거부 사유를 파라미터 단위로 남기는 설계까지.
복원 리허설 설계법. 백업 세트에서 빠지는 항목, OPC UA 인증서와 service account 함정, 항목별 RPO와 보관 개수, 합격 기준이 붙은 검증표, 구간별 실측 RTO와 목표 대비 여유.
사람이 외우지 않는 계정에 90일 주기는 맞는 트리거가 아니다. IEC 62443-3-3 SR 1.2가 service account를 어디로 넣는지, credential이 숨어 있는 위치, 교체가 조용히 깨지는 지점.
acknowledge와 reset이 비트 하나를 공유하면 고장이 남아 있는데도 알람이 사라진다. active, latch, ack, return-to-normal, reset을 ISA-18.2를 염두에 두고 분리하는 HMI/SCADA 설계법.
faceplate 여는 데 5초 걸리는 화면의 원인을 first-load와 update 지연으로 나눠 재고, 태그 수·scan class·trend 조회·PLC 부하 순으로 좁혀가는 방법.
SEMI E5 HCACK/CPACK code를 실제 S2F41 wire capture와 함께 읽는다. HCACK=4가 있는 이유, E30 control state gating, T3 만료 후 START를 두 번 쏘지 않는 retry.
Modbus TCP write 응답은 transaction이 접수됐다는 의미일 뿐, 설비가 실제로 동작했다는 뜻이 아니다. Function code, permissive, readback, retry 함정까지 Modbus write에 command discipline을 붙이는 방법.
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 숫자 포함.
알람 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와 맞는지 증명하는 방법.
OPC UA 이중화 서버 failover 시운전 절차: ServiceLevel, subscription 복구, 인증서, 그리고 운전자보다 먼저 stale 데이터를 잡아내는 방법.
보안을 끄면 browse가 되는데 secure channel을 켜면 끊기는 OPC UA 연결을, SCADA 현장에서 trust store와 인증서 이름, endpoint로 잡아나가는 방법.
HMI에서 퍼미시브, 인터록, inhibit, bypass, 명령 가능 상태, first-out 원인을 현장 운전에 맞게 보여주는 방법입니다.
Modbus 예외 응답을 프레임 단위로 읽고, 통신 불량과 요청 거절을 구분하며, 잘못된 주소·게이트웨이·폴링 부하 원인을 좁히는 방법.
알람 합리화 워크숍에서 알람을 줄이는 기준, 우선순위 조정, 조치 문구 정리 방법을 다룹니다.
MES 비가동 사유 코드를 현장에서 제대로 선택되게 만드는 법. 입력 프롬프트 타이밍, PackML 상태 기반 자동 분류, 리포트에 실제로 필요한 필드까지 정리했습니다.
OPC UA 인증서 만료로 통신이 끊기지 않도록 갱신 절차와 확인 항목을 정리합니다.
모드는 누가 명령할 수 있는가, 상태는 지금 뭘 하고 있는가다. SEMI E30 GEM 제어 상태 모델에 맞춰 HMI 표시 칸을 나누는 방법과 커미셔닝 확인 항목.
소켓은 열리고 unit ID도 응답하고 폴도 정상인데 화면 값만 틀린 경우. SCADA와 히스토리안이 신뢰하기 전에 레지스터 맵을 검증하는 방법.
SCADA 화면은 장비가 멈춘 뒤에도 그럴듯한 숫자를 태연히 보여준다. 하트비트, 와치독, stale-data 태그로 데이터의 신선도를 눈에 보이게 만드는 방법 — 실제 프로토콜 품질, 현실적인 타임아웃, 그리고 그걸 증명하는 시운전 절차까지.
HMI/SCADA 프로젝트에서 반복해서 문제가 되는 태그, 알람, 화면, 문서화 기준을 정리합니다.
SCADA 네트워크 장애를 장비, 케이블, IP, 포트, 프로토콜 순서로 좁혀 가는 점검 절차입니다.
S5F1은 ALCD, ALID, ALTX 세 항목이다. ALCD 8번 비트가 set/clear를 정하고, 이걸 놓치면 MES 알람 목록이 영영 안 꺼진다. 재시작 후 S5F5/S5F6로 복구하는 방법까지.
OPC UA 클라이언트 시운전에서 엔드포인트, 보안 정책, 인증서, 구독 품질을 확인하는 절차입니다.
모터, 밸브, 인버터 같은 반복 장비를 일관된 방식으로 조작하기 위한 페이스플레이트 설계 기준입니다.
산업용 이더넷 스위치 시운전에서 IP, 포트, VLAN, 링 이중화, 로그를 확인하는 순서입니다.
ISA-18.2가 나누는 보류·설계 억제·운영 제외·인터록 바이패스의 차이와, 숨긴 알람마다 담당자와 기록이 남게 설정하는 방법.
SCADA 시운전에서 태그, 화면, 알람, 트렌드, 권한, 장애 상황을 확인하는 실무 체크리스트입니다.