S2F23에 S2F0이 돌아왔다 — 기능 미구현인지 통신 게이트인지 바이트로는 못 가린다
같은 세션에서 S2F23이 두 번 S2F0으로 돌아온 캡처. 원인은 E30 통신 게이트와 기능 미구현으로 서로 다른데 응답 바이트는 SystemBytes만 빼고 같다.
글
HMI/SCADA, 산업 통신, 알람, 태그, 히스토리언을 현장 업무 흐름에 맞춰 정리한 노트입니다.
같은 세션에서 S2F23이 두 번 S2F0으로 돌아온 캡처. 원인은 E30 통신 게이트와 기능 미구현으로 서로 다른데 응답 바이트는 SystemBytes만 빼고 같다.
Select.rsp와 Linktest.rsp는 장비가 고른 Session ID로 온다. 데이터 메시지 응답만 보낸 값을 그대로 돌려준다. 캡처 세 판.
알람 연동 테스트는 통과하는데 현장에서 알람이 안 온다. 호스트가 보낸 S5F1에 ACKC5 0이 왔고, 정작 호스트 몫인 S10F3은 abort였다.
한 소켓에 S1F13, S3F17, S14F1, S16F11을 던진 캡처. GEM은 답하고 GEM300이 쓰는 stream 셋은 SxF0으로 끊겼다.
S2F29로 ECID 목록을 받고 S2F13으로 값을 읽는다. 요청과 응답이 위치로만 묶이는 구조와 없는 ECID, S2F0이 오는 두 경우를 실제 byte로 확인한다.
정의하지 않은 RPTID를 link하면 설비마다 답이 다르다. S2F33/35/37 순서와 LRACK 5, DRACK 3, ERACK 0을 실제 byte로 본다.
설비 시계가 밀리면 link는 멀쩡한데 MES의 run 재구성이 어긋난다. S2F17로 읽고 S2F31로 맞추는 절차와 TIACK 0의 함정을 실제 capture로 본다.
화면은 ONLINE인데 S2F41 START가 HCACK 2로 거절된다. E30 통신 상태와 제어 상태를 나누고 HCACK이 0이 되는 자리를 capture로 짚는다.
설비 없이 host driver 검증: S1F13부터 S2F31까지 E30 startup 10단계를 npx 한 줄로 돌린다. PASS가 증명하는 것과 wire capture.
없는 Stream, 없는 Function, 깨진 본문을 리스너에 보낸 캡처. 돌아온 건 S9 하나와 SxF0 abort다. E5 stream 9와 MHEAD 읽기.
장비는 SystemBytes를 검사하지 않고 그대로 돌려준다. 같은 값으로 요청 두 개를 동시에 띄운 실제 캡처와, 호스트가 지켜야 할 SystemBytes 할당 규칙.
호스트 로그에 timeout 한 줄만 있을 때 T3와 T6를 실제 캡처로 가른다. 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, 먼저 터지는 타이머.
실제 소켓에서 받은 Select.rsp 캡처. 수락, E37 Select Status 1·2·3 거절, 다른 SessionID 응답. select failed가 버리는 바이트.
Select 타임아웃 한 줄 뒤에는 무응답, SystemBytes 불일치, SessionID 불일치가 섞여 있다. 실제 패킷과 E37 T5·T6·T7로 구분한다.
장비는 응답했는데 호스트는 타임아웃을 낸다. 실제 캡처로 SystemBytes 불일치를 바이트 단위로 맞춰 보고, 프레임이 버려지는 이유와 T3가 아니라 T6인 이유까지.
Hot-standby PLC는 전환이 증명되고 동기화 상실에 알람이 있어야 값을 한다. CPU 이중화가 막는 것과 못 막는 것, 양방향 전환 시험.
Modbus RTU용 디바이스 서버 시운전: 동작 모드, packing timer, TCP framing, idle timeout, half-duplex 제어.
PLC나 HMI가 재시작된 뒤 오래된 명령이 다시 실행되지 않도록 command bit, 응답, startup 복구를 설계하고 시험하는 방법.
Alarm help text는 한 번 쓰이고 안 읽힌다. 야간 운전원이 바로 행동할 cause/consequence/response 쓰는 법과 빠지기 쉬운 ISA-18.2 항목.
HMI 화면에서 색상, 형태, 텍스트, 상태 우선순위를 정해 비정상 상태를 현장에서 잘 보이게 만드는 실무 기준.
운전원이 지금 어느 설비를 조작하는지 화면이 스스로 밝히게 만드는 방법. ISA-101.01 display hierarchy, 범위가 보이는 버튼 label, 복사 화면 검증까지.
시퀀스 화면에 step number만 있으면 운전원은 화면 네 개를 뒤진다. State, step, hold reason을 나누고 hold reason을 latch한다.
느린 시리얼 장비가 응답할 수 있게 Modbus RTU baud rate, silent interval(t3.5), turnaround delay를 잡는 법.
RSTP, MRP, PRP 링 시운전: 복구 시간, 끊어진 OPC UA subscription, 반쯤 열린 Modbus socket, alternate path의 빠진 VLAN.
EC 쓰기에 EAC 0이 왔는데 아홉 lot이 이전 값으로 돌았다. E5 EAC code, S2F13 readback, S2F29 namelist, SAT용 EC 시험표.
E30 spooling은 S2F43으로 허용한 stream만 대상이다. SPOOL LOAD/UNLOAD, S2F44 RSPACK/STRACK, S6F24 RSDA 캡처.
Register map보다 먼저 극성, 종단, bias, grounding을 증명하는 Modbus RTU over RS-485 시운전. 실제로 중요한 숫자까지.
녹색 redundancy 아이콘은 heartbeat만 증명한다. 서버 전환 때 client, alarm, historian, background job에서 확인할 것.
오래된 데이터를 평균 내면 trip이 사라지고 peak와 적산값이 틀어진다. 태그 분류, 종류별 다운샘플, 품질 보존, purge 전 시험.
레시피 다운로드에서 선택값·다운로드값·운전값을 태그로 나누고, PLC가 인정한 값을 echo로 대조하는 방법. 거부 사유를 파라미터 단위로 남기는 설계까지.
HMI/SCADA 복원 리허설: 백업에서 빠지는 항목, OPC UA 인증서와 service account 함정, 항목별 RPO, 합격 기준, 실측 RTO.
사람이 안 외우는 계정에 90일 주기는 맞지 않다. IEC 62443-3-3 SR 1.2의 service account 위치, 숨은 credential, 교체가 깨지는 곳.
ack와 reset이 비트 하나를 쓰면 고장이 남아도 알람이 사라진다. active, latch, ack, return-to-normal, reset을 나누는 법.
faceplate가 5초 걸려 열리는 화면. first-load와 update 지연을 나눠 재고 태그 수·scan class·trend 조회·PLC 부하 순으로 좁힌다.
E5 HCACK/CPACK을 실제 S2F41 capture로 읽는다. HCACK=4, E30 control state, T3 만료 후 START 중복을 막는 retry.
Modbus write 응답은 접수일 뿐 설비 동작이 아니다. Function code, permissive, readback, retry 함정으로 write를 명령답게 다룬다.
Alarm banner filter는 suppression이 아니다. ISA-18.2가 둘을 나누는 이유, 기본 view, hidden alarm count, flood 시험.
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로 collection event를 define, link, enable하는 순서, restart 후 report가 비는 이유, S6F11 검증법.
OPC UA 이중화 서버 failover 시운전 절차: ServiceLevel, subscription 복구, 인증서, 그리고 운전자보다 먼저 stale 데이터를 잡아내는 방법.
보안을 끄면 되고 켜면 끊기는 OPC UA 연결을 trust store, 인증서 이름, endpoint 순서로 잡는 법.
HMI에서 퍼미시브, 인터록, inhibit, bypass, 명령 가능 상태, first-out 원인을 현장 운전에 맞게 보여주는 방법입니다.
Modbus 예외 응답을 프레임 단위로 읽고, 통신 불량과 요청 거절을 구분하며, 잘못된 주소·게이트웨이·폴링 부하 원인을 좁히는 방법.
알람 합리화 워크숍에서 알람을 줄이는 기준, 우선순위 조정, 조치 문구 정리 방법을 다룹니다.
MES 비가동 사유 코드를 현장에서 제대로 선택되게 만드는 법. 입력 프롬프트 타이밍, PackML 상태 기반 자동 분류, 리포트에 실제로 필요한 필드까지 정리했습니다.
OPC UA 인증서 만료로 통신이 끊기지 않도록 갱신 절차와 확인 항목을 정리합니다.
모드는 누가 명령할 수 있는가, 상태는 지금 뭘 하고 있는가다. SEMI E30 GEM 제어 상태 모델에 맞춰 HMI 표시 칸을 나누는 방법과 커미셔닝 확인 항목.
소켓은 열리고 unit ID도 응답하고 폴도 정상인데 화면 값만 틀린 경우. SCADA와 히스토리안이 신뢰하기 전에 레지스터 맵을 검증하는 방법.
장비가 멈춰도 SCADA 화면은 그럴듯한 숫자를 보여준다. 하트비트, 와치독, stale-data 태그로 데이터 신선도를 보이게 하는 법과 시운전.
태그 이름, 알람 개수, 화면 계층, 단선 처리, 재시작 후 명령 상태. 프로젝트 후반에 고치면 비싼 다섯 가지 결정과 ISA-18.2, ISA-101.01, NAMUR NE 43이 정해 놓은 기준.
SCADA 네트워크 장애를 장비, 케이블, IP, 포트, 프로토콜 순서로 좁혀 가는 점검 절차입니다.
S5F1은 ALCD, ALID, ALTX다. ALCD 8번 비트가 set/clear를 정하고, 놓치면 MES 알람이 안 꺼진다. 재시작 후 S5F5/S5F6 복구까지.
OPC UA 클라이언트 시운전에서 엔드포인트, 보안 정책, 인증서, 구독 품질을 확인하는 절차입니다.
모터, 밸브, 인버터 같은 반복 장비를 일관된 방식으로 조작하기 위한 페이스플레이트 설계 기준입니다.
산업용 이더넷 스위치 시운전에서 숫자로 확인할 것. IGMP querier와 260초, auto-negotiation 반이중 함정, RSTP 20초와 IEC 62439-2 링 복구 등급, 프로토콜별 실제 포트 번호.
ISA-18.2가 나누는 보류·설계 억제·운영 제외·인터록 바이패스의 차이와, 숨긴 알람마다 담당자와 기록이 남게 설정하는 방법.
SCADA 시운전에서 태그, 화면, 알람, 트렌드, 권한, 장애 상황을 확인하는 실무 체크리스트입니다.