화면은 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가 어긋난 실제 캡처를 정상 세션과 나란히 놓고, 침묵과 무시를 구분하는 법.
MES route에 rework loop가 들어가면 WIP와 수율이 조용히 틀어진다. Visit number, disposition, 설비 event를 올바른 route step instance에 묶는 방법.
SCADA edge MQTT 페이로드를 변경할 때 HMI, 히스토리언, MES connector, 분석 시스템이 조용히 깨지지 않도록 schema version을 관리하는 실무 노트.
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을 반드시 남겨야 하는 이유.
SEMI E30 spooling은 host가 S2F43으로 허용한 stream만 대상이다. SPOOL LOAD/UNLOAD 상태, S2F44 RSPACK과 STRACK, S6F24 RSDA, 그리고 clock variable이 빠진 report가 event 시간 없이 돌아오는 이유.
야간 교대 report에서 good count가 4개 어긋난다. PLC counter, historian delta, S6F11 event time, spool drain 중 어디를 먼저 봐야 하는지 정리한다.
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 설계.
S2F33/S2F35/S2F37로 SECS/GEM collection event를 define, link, enable하는 순서와 tool restart 후 report가 비는 이유, S6F11이 실제 설비 sequence와 맞는지 증명하는 방법.
MES 비가동 사유 코드를 현장에서 제대로 선택되게 만드는 법. 입력 프롬프트 타이밍, PackML 상태 기반 자동 분류, 리포트에 실제로 필요한 필드까지 정리했습니다.
S5F1은 ALCD, ALID, ALTX 세 항목이다. ALCD 8번 비트가 set/clear를 정하고, 이걸 놓치면 MES 알람 목록이 영영 안 꺼진다. 재시작 후 S5F5/S5F6로 복구하는 방법까지.
HMI, SCADA, MES, 히스토리언을 역할 기준으로 구분하고 현장 아키텍처에서 어디까지 책임져야 하는지 정리합니다.