이전 글들에서 스마트 팩토리에서 CIM과 통신하기 위해 사용되는 SEMI 표준들 중 SECS 프로토콜, 그 중에서 SECS-I, SECS-II 프로토콜에 대해 알아보았다.
오늘은 SECS 메시지들을 TCP 로 통신할때 필요한 전송 표준인 HSMS 에 대해 알아보겠다.
HSMS(High Speed SECS Message Service) 란?
기존에 SECS 통신은 RS-232라는 직렬 시리얼 통신 위에서 SECS-I를 통해 SECS-II 메시지들을 주고받으며 통신이 이루어졌다.

하지만 점점 이더넷 기술 규격이 발달하고 널리 퍼짐에 따라 TCP/IP 프로토콜을 사용해서 통신을 하는 시대가 됐다.
그래서 이러한 TCP/IP 위에서도 안정적으로 SECS-II 메시지들을 사용해서 통신을 주고받을 수 있도록 규약을 만든 것이 HSMS 프로토콜이다.

→ HSMS란? TCP/IP 네트워크 상에서 SECS-II 메시지를 안정적으로 주고받기 위한 전송 프로토콜 이다.
이제 HSMS 프로토콜의 구조를 살펴보자.
HSMS 프로토콜의 구조
기본적으로 SECS-I 프로토콜에서 크게 구조가 변하지 않았다.

- A 영역(Length) :
4 byte
, B 영역과 C 영역의 길이를 나타낸다.
- B 영역 (Header) :
10 byte
(Session Id, Heder Byte 2, Header Byte 3, Ptype, Stype, System Byte)
- C 영역 (Data) :
가변적
, SECS-II 메시지가 존재.
HSMS 메시지의 헤더는 크게 Session Id, Heder Byte 2, Header Byte 3, Ptype, Stype, System Byte 로 나뉘어져 있다.

- Session ID Device ID, Host ID 각 통신 객체간의 관계를 규정하는 영역
- Header Byte 2 HSMS 메시지는 크게 Data Message와 Control Message로 나뉜다. 메시지 유형은 SType 값으로 구분함 (0: Data Message, 그 외: Control Message)
-
Data Message (데이터 메시지)
실제 생산 장비와 호스트 간의 SECS-II 메시지를 전송할 때 사용
- 구성 요소
- W-Bit (MSB): 응답 필요 여부를 표시
- 1: 응답 필요
- 0: 응답 불필요
- Stream Number (하위 7비트): SECS-II 메시지의 Stream 번호
- 용도
- Control Message (제어 메시지)
- 특징
- 일반적으로 Header Byte 2는 0으로 설정
- 특수한 경우 상태 코드 포함 가능
- 용도
- Header Byte 3
- Data Message일 경우:
- Function Number (8비트 전체 사용) → SECS-II 메시지에서 사용하는
Function 코드
번호를 의미. → 즉, 특정 Stream 안에서 어떤 기능(명령/응답)인지를 구체적으로 지시하는 값.
- Control Message일 경우:
- Control Type (8비트 전체 사용) → 제어 메시지의 종류를 지정함. (예: 연결 요청, 연결 종료, 링크 테스트 등)
- PType (Protocol Type)
- 항상 0으로 설정 (Reserved)
- HSMS에서 통신 프로토콜 타입은 고정값을 가지며, 추가 정의 없이 0을 사용함.
- SType (Session Type)
- 이 메시지가
어떤 종류의 통신 세션 메시지인지
를 나타낸다.
- 대표적인 SType 예시:
- 0: Data Message (SECS-II 데이터 전송용)
- 1: Select.req (연결 요청)
- 2: Select.rsp (연결 응답)
- 5: Linktest.req (링크 상태 테스트 요청)
- 6: Linktest.rsp (링크 상태 테스트 응답)
- 9: Separate.req (연결 종료 요청)
- System Bytes (4 Byte)
- 송신자가 임의로 설정하고, 응답 시 동일하게 복사되어 돌아오는 값.
- 요청-응답을 매칭하기 위한 용도로 사용됨.
- 예를 들어, 송신자가 메시지를 보낼 때 System Byte를 1234로 설정했다면, 그 응답 메시지에도 1234가 붙어 와야 한다.
- 이렇게 해서 요청과 응답 쌍을 구분하고 관리할 수 있다.
Control Message 와 Data Message
1. Data Message (데이터 메시지)
- 목적: 실제 생산장비와 호스트(서버) 간에 업무용 데이터를 주고받기 위한 메시지.
- 특징:
- SType = 0.
- SECS-II 메시지를 담고 있음. (장비 상태 보고, 명령 수행, 데이터 수집 등)
- Header Byte 2의 상위 1비트(W-Bit)가 응답 필요 여부를 표시:
- 1 → 이 메시지에 대해 응답이 필요함.
- 0 → 이 메시지에 대해 응답이 필요 없음.
- Header Byte 2의 하위 7비트는 Stream Number (SECS-II Stream 번호).
- Header Byte 3는 Function Number (SECS-II Function 번호).
- 구성 예시:
- Stream 2, Function 17 : 특정 명령 전송
- Stream 3, Function 1 : 상태 요청
2. Control Message (제어 메시지)
- 목적: 통신 상태를 관리하기 위한 메시지. (연결, 해제, 유지 등)
- 특징:
- SType ≠ 0 (0이 아닌 값들: 1, 2, 5, 6, 9 등)
- SECS-II 데이터는 포함되지 않음 (C 영역이 없음 또는 아주 짧음).
- 통신 자체를 유지하거나 제어하기 위한 간단한 명령을 보내는 것.
- Header Byte 2는 보통 0으로 설정.
- Header Byte 3는 Control Type을 나타냄. (어떤 제어 명령인지를 지정)
- 주요 Control Message 종류 (SType 기준):
SType | 의미 | 설명 |
---|
1 | Select.req | 연결 요청 |
2 | Select.rsp | 연결 요청 응답 |
5 | Linktest.req | 링크 테스트 요청 |
6 | Linktest.rsp | 링크 테스트 응답 |
9 | Separate.req | 연결 해제 요청 |
- Control Message 구성 예시:
- Select.req: 장비와 호스트가 새 연결을 만들 때 보냄.
- Linktest.req: 통신이 정상인지 확인하고 싶을 때 보냄.
- Separate.req: 정상적으로 연결을 끊고 싶을 때 보냄.
즉 정리하자면 Control Message냐 Data 메시지냐는 아래에 따라 알 수 있다.
구분 | Data Message | Control Message |
---|
목적 | 업무 데이터 전송 | 통신 제어 관리 |
SType | 0 | 1, 2, 5, 6, 9 등 |
Header Byte 2 | W-Bit + Stream Number | 보통 0 |
Header Byte 3 | Function Number | Control Type |
SECS-II 메시지 포함 여부 | 포함 (C영역 사용) | 거의 없음 (C영역 비워짐) |