TCP/IP에 의한 SECS 통신
HSMS(High-Speed SECS Message Service)는 ****반도체 장비가 수 많은 공정 데이터를 주고 받아야하기 때문에 속도와 신뢰성이 중요성이 강조됨에따라 기존 SECS-I(시리얼 통신) 기반의 구조에서 TCP/IP로 변경 되었습니다.
TCP/IP 연결 설정 → Entity간 선택 프로토콜 수행 → 양방향 메시지 교환 → 통신 종료시 프토토콜에 따라 종료 처리
기계판 소개팅 프로토콜
TCP/IP통신은 아래 단계를 거쳐 안전하게 데이터를 주고 받습니다.
| 연결상태 | 내용 |
|---|---|
| NOT CONNECTED | 아무 연결도 안 되어있음 |
| CONNECTING | TCP/IP 소켓 연결을 시도 중 |
| 연결이 성사되면 다음 단계로, 실패하면 NOT CONNECTED로 떨어짐 | |
| CONNECTED | 연결은 됐는데, 아직 “누구냐 넌?” 하는 상황 |
| 실제 통신은 아직 시작되지 않음. 통성명만 한 셈 | |
| SELECTING | 통신 참여자끼리 서로 확인 중 |
SELECT REQUEST / REPLY 메시지 주고 받음
여기서 문제 생기면 다시 연결 끊고 처음부터 |
| SELECTED | 통신 준비 완료 상태
양방향 메시지 송·수신 가능
실질적 데이터 통신 시작 |
| 순서 | 이름 | 설명 |
|---|---|---|
| ① | TCP/IP 연결 | 가장 기초적인 연결로 두 Entity(장비/호스트)는 먼저 TCP/IP 소켓을 통해 접속합니다. |
| ② | 선택(Select) 절차 | 통신할 준비가 됐는지 확인하는 단계. |
HSMS는 Select.req 와 Select.rsp 메시지로 이 단계 수행
제대로 응답이 오면 통신 승인. 응답 실패 시 연결 종료 |
| ③ | 메시지 교환 시작 | 메시지 주고 받을 수 있는 상태
메시지 종류에는 Data Message 와 Control Message가 있음
연결 상태를 관리하는 Control Message , 실제 내용 전달하는 Data Message로 구분
메시지 헤더는 총 10byte로 구성되어 있습니다.
| Byte | 이름 | 내용 |
|---|---|---|
| 0~1 | SessionID | 이 메시지가 어떤 연결(Session)에 속하는지 |
| 2 | Header Byte2 | Stream (상위 7bit) + W-bit *Stream 전송일 때 1byte = 8bit 8개의 비트 중 가장 앞의 비트가 1일 경우 Wait bit 임을 나타냄 0 → Control Message |
| 3 | Header Byte3 | Function 0 → Control Message |
| 4 | Ptype | 0 : SECS-II 메시지 인코딩 |
| 5 | Stype | 0 : Data Message. 데이터 전송 0 이외의 값 : Control Mesasge. 현 상태를 결정 (1~9) 1: Select.req 2: Select.rsp 3: Deselect.req 4: Deselect.rsp 5: Linktest.req 6: Linktest.rsp 7: Reject.req 8: not used 9: Separate.req |
| 6~9 | SystemByte | 통신 고유 ID값으로 통신할 때마다 고유값 전송 |
HSMS은 Control Message 와 Data Message로 구분됩니다.
SType으로 구분되며
Stype = 0 → Date Message
Stype ≠ 0 → Control Message
구조를 가지고 있습니다.
통신상태를 주고 받기 위한 최소 메시지(연결/ 해제 /유지 …)
Control Message 예시 - 16진수 적용
✅ 예시:
00 00 00 0A 00 00 00 00 00 01 00 00 00 01
SType = 1 → Select.req
통신상태에 대한 언어로, 주요 Message가 정해져있기 때문에 HSMS 메시지 구조에서 C영역이 빠져있습니다. → SECS-Ⅱ 데이터가 포함되지 않음.
| S Type | 메시지 이름 | 내용 |
|---|---|---|
| 1 | Select.req | 연결 요청(Host→장비) |
| 2 | Select.rsp | 연결 응답(장비→Host) |
| 3 | Deselect.req | 연결 해제 요청 |
| 4 | Deselect.rsp | 연결 해제 응답 |
| 5 | Linktest.req | 통신 확인 ping(상태체크) |
| 6 | Linktest.rsp | ping 응답 |
| 7 | Reject.req | 메시지 거부 요청(장비가 떨처낸다.) |
| 9 | Separate.req | 강제 연결 종료(TCP Connection까지 끊김) |
Data Message 예시 - 16진수 적용
✅ 예시:
00 00 00 2E 00 00 06 0B 00 00 00 00 00 11 [SECS-II Body...]
→ S6F11 메시지, CEID 이벤트 보고
실제 장비와 Host(서버) 간 업무용 데이터 를 주고 받기 위한 메시지
- SECS-Ⅱ 메시지를 담고있습니다. (장비 상태 보고, 명령 수행, 데이터 수집…)
- Header Byte2 의 상위 1비트 (W-Bit)가 응답 필요 여부를 표시합니다.
1 → 이 메시지에 대해 응답이 필요함.
0 → 이 메시지에 대해 응답이 필요 없음.
예:
Stream 2, Function 17 : 특정 명령 전송
Stream 3, Function 1 : 상태 요청
| 구분 | Control Message | Data Message |
|---|---|---|
| 목적 | 통신 제어 관리 | 업무 데이터 전송 |
| SType | 1~9 | 0 |
| Header Byte 2 | 보통 0 | W-Bit + Stream Number |
| Header Byte 3 | Control Type | Function Number |
| SECS-II | 거의 없음 | 포함 |