HSMS 통신의 구성
MES 직무로 일하면서 MES가 전체 시스템 관리자 느낌으로 다양한 통신으로 설비 데이터를 받아서 로직으로 처리하였다.
(설비부터 MES까지 오는 메세지 단계에 대해서는 아래의 링크로 이전 포스팅 참고:
https://think9072.tistory.com/15 )
그러면서 설비와의 통신은 HSMS와 PLC와 나뉘었는데 그중에 HSMS를 다뤄보도록 하자.
사실 통신은 기본적으로 편지 보내기와 같다.
우리가 우편을 보낼 때, 발신자 정보, 수신자 정보가 들어있고, 각 정보들이 어디에 위치해 있어야 되고,
우편이 붙여진 플래그를 받아서 우편을 보낸다.
거기에 하나 더 붙여서 HSMS는 메세지 성격별로 또 카테고리를 나누어놓았다.
S는 Stream, F는 Function으로 S-F로 나누어서 부르게 된다.
S6F11이면 '6에 11'로 줄여서 불렀다.
S는 주로 메세지의 성격에 따라서 나누어두었다.
S6는 데이터를 담아 보내는 걸로, S1은 연결 관련 메세지 이렇게 말이다.
F뒤에 숫자가 홀수이면 보낸 메세지, 뒤에 짝수이면 받는 메세지로 홀짝으로 하나의 짝을 이루는 게 일반적이다.
S - Stream
S1: Host Command
S3: Material Command
S5: Alarm
S6: Collection Event(CEID), 설비 Event
S7: Eq's Recipe Control
S9: HSMS Error
으로 일반적으로 카테고리를 나뉘어 있고 여기에 맞춰서 쓰게 된다.
Stream 종류는 엄청 많고 더 좋게 정리된 게 있어서 남겨놓았다.
SECS Message Code Generation Tool
www.hume.com
HSMS 메세지 예시
예시로 설비 모델을 받는 메세지를 예시로 보자
S1 F13 CEID0010이라고 예시를 보자.
S1F13 W
<L [2]
<A [6] "A001"> * 설비 모델명 (Model Name)
<A [5] "V1.0"> * 소프트웨어 버전 (Software Revision)
>
S1이니까 연결 관련 메세지를 예시로 했다.
그리고 일반적으로 트리구조로 보는 게 직관적으로 보이게 된다.
S1F13 (W)
└── <L [2]> (루트 노드: 2개의 자식을 가진 리스트)
├── <A "MDLN"> (자식 1: 설비 모델명, ASCII 타입)
└── <A "SOFTREV"> (자식 2: 소프트웨어 버전, ASCII 타입)
메세지 HSMS로 오면 배열로 담았고 S1F13.[0][0]은 설비 모델명 이렇게 넣고 뽑아서 썼다.
다른 예시로 하면 하위 그룹에 대한 개수 작성의 예시까지 알 수 있다.
S2F41 W
<L [2]
<A [5] "START"> * Remote Command (RCMD)
<L [2] * Parameter List
<L [2] * 1번째 파라미터 (Name-Value Pair)
<A [4] "PPID"> * Parameter Name (CPNAME)
<A [9] "RECIPE_01"> * Parameter Value (CPVAL)
>
<L [2] * 2번째 파라미터 (Name-Value Pair)
<A [5] "LOTID"> * Parameter Name (CPNAME)
<A [9] "LOT_A2026"> * Parameter Value (CPVAL)
>
>
>
처음 L[2] 안에 ASCII로 구성되어 있는 한 덩어리와 L(루트노드)로 하위 그룹해서 2개가 있다고 볼 수 있다.
잘 이해가 되지 않으면 우리 PC에서 폴더를 여는 걸로 상상해 보면 좋다

이런 느낌으로 파일 하나 폴더 하나로 보면 덩어리로 2개인 점을 알 수 있다.
그래서 직관적으로 처음 L옆에 숫자는 2로 L[2]가 적히게 된다.
S2F41 (W)
└── <L [2]> (루트 노드)
├── <A "START"> (명령어: START)
└── <L [2]> (파라미터 리스트를 담은 자식 노드)
├── <L [2]> (첫 번째 파라미터 쌍)
│ ├── <A "PPID"> (이름: 레시피 ID)
│ └── <A "RECIPE_01"> (값: RECIPE_01)
└── <L [2]> (두 번째 파라미터 쌍)
├── <A "LOTID"> (이름: 공정 롯트 ID)
└── <A "LOT_A2026"> (값: LOT_A2026)
결국 통신이라는 게 메세지 형식에 맞춰서 보내기라서
형식이라는 규칙만 알면 접근성이 쉬워진다.
'배터리' 카테고리의 다른 글
| CAN 통신 간략 정리 (0) | 2026.06.01 |
|---|---|
| PLC Address Map 읽기 (0) | 2026.05.29 |
| MES 메세지 통신 구성과 단계 (0) | 2026.05.25 |
| 온도 측정 방법 Thermistor - 원리 (0) | 2026.05.22 |
| BMS (Battery Management System) 간략 정리 (0) | 2026.05.19 |