본문 바로가기
logistics

[SEMI] SECS-II란? 메세지 내용 표준 적용 방법

by Jayson Jeong 2022. 9. 20.

오늘은 SECS-II에 대해서 알아보겠다.

Stream, Function 등에 대한 내용이 아닌 실제 전송되는 byte를 해석하는 방법에 대해서 설명하겠다.

 

메세지 예시(좌)와 16진수로 표현한 예시(우)

현재 SECS를 공부하고 있거나 접해 본 사람들은 좌측의 메세지 형식을 많이 보았을 것이다. SEMI E Series 또는 Spec 문서에서 메세지를 메세지 형식을 표현하기 위해 사용한다.

 

우측의 그림은 해당 메세지를 실제 전송할 때 전송되는 byte를 16진수로 표현한 것이다.

SECS-II 메세지의 해석과 실제로 byte로 변환되는 과정까지 알아보도록 하겠다.

 

설명하기에 앞서 이해를 돕기 위해 데이터의 타입을 구분하는 영역을 data-type, 실제 데이터 값(내용)을 나타내는 영역을 data-value라고 지칭하도록 하겠다. 

 

다음은 16진수로 표현한 메세지를 data-type 영역과 data-value 영역으로 구분 표현한 그림이다.

빨간 영역은 data-type, 파란 영역은 data-value이다.

data-type 영역을 볼때 어떤 데이터 타입인지 알기 위해선 다음을 이해하고 있어야 한다.

 

Data Type

SECS-II의 데이터 타입과 16진수 표현

데이터 타입은 List 타입, String 타입, Numberic 타입으로 구분할 수 있다.

  • List 타입 : L(List)
  • String 타입 : A(ASCII), B(Binary)
  • Numberic 타입 : I1, I2, I4, I8, U1, U2, U4, U8, F4, F8, BOOLEAN

예시로 든 그림에서 A9는 LB가 1인 U2를 나타내고, 41은 LB가 1인 ASCII를 나타낸다.

 

 

Length-Byte

LB는 Length Byte의 약어이다. 

SECS-II 에서는 Length-byte를 통해 data-type을 나타내는 byte 영역과 data-value를 나타내는 byte 영역을 구분하고 있다.

 

데이터 타입을 나타내는 byte 바로 뒤에 나오는 byte는 data-value를 나타내는 byte의 개수(길이)를 정의한 Length-byte이다. Length-byte가 한 개일 경우 data-type의 기본값 + 1bit, Length-byte가 두 개일 경우 data-type의 기본값 + 2bit 이런 식이다.

 

List의 Length-byte가 한 개인 경우 예제

예제를 통해 더욱 자세히 설명하면 01은 List 타입이고 Length-byte가 한 개 있다고 알 수 있고, 01 바로 뒤에 나오는 한 개의 byte의 값이 data-value영역의 byte 개수를 의미한다. 

 

List의 Length-byte가 두 개인 경우 예제

data-type이 02 일 경우 List 타입이고 Length-byte가 2개 있으므로 02 바로 뒤부터 2개까지의 byte가 data-value 영역의 byte 개수를 나타내는 Length-byte이다.

 

※List 타입인 경우 Length-byte의 값은 포함하고 있는 Item의 개수를 나타내고 그 외의 타입인 경우에는 data-value를 나타내는 byte의 길이를 의미한다.

 

List의 Item이 2개인 경우와 3개인 경우의 Item 영역 표시

위 그림을 보면 Length-byte가 한 개이고 Length-byte의 값이 2인 경우 List안에 2개의 Item이 들어있는것과 Length-byte가 1개이고 Length-byte의 값이 3인 경우 3개의 Item이 들어있는 것을 알 수 있다.

List타입이 아닌 경우의 영역 표시

 

List 타입이 아닌 경우에도 규칙은 동일하다. A9는 Length-byte가 1개인 U2를 나타내고 41은 Length-byte가 1개인 ASCII를 나타낸다. Length-byte의 각각의 값은 2와 6이므로 data-value영역의 byte 개수가 2개, 6개가 있을 것을 확인할 수 있고 해당 영역의 byte를 변환하면

01C8 -> 456 ,

31 32 33 31 32 33 -> 123123,

E0F3 -> 123123,

31 32 33 34 35 36 -> 123456

인 것을 알 수 있다.

 

Example

예제

해당 예제의 data-type 영역만 나타내보면 다음과 같다.

 

Item이 4개인 List 안에

Length-byte가 1개인 U8,

Length-byte가 1개인 U2,

Length-byte가 1개인 ASCII,

Item이 2개인 List가 들어있고

두번째 List 안에는 

Length-byte가 1개인 ASCII,

Length-byte가 1개인 ASCII가 있다.

 

U8는 data-value영역의 길이가 8이고

U2는 data-value영역의 길이가 2,

A는 data-value영역의 길이가 4,

두 번째 List 안에 있는

A는 data-value영역의 길이가 10,

A는 data-value영역의 길이가 12이다.

 

이를 바탕으로 data-value를 변환하면 다음과 같다.

  • 0000125F5361D5AC   → 20200630113708 (16진수→10진수)
  • 1CB9   → 7353 (16진수→10진수)
  • 54 45 53 54   → TEST (ASCII)
  • 41 4C 41 52 4D 20 54 45 53 54  → ALARM TEST (ASCII)
  • 54 48 49 53 20 49 53 20 54 45 53 54  → THIS IS TEST (ASCII)

 

 

HSMS에 대해 궁긍하다면?

 

[SEMI] HSMS란?

이번 포스팅에선 SEMI Standard - E37인 HSMS에 대해서 설명하겠다. SEMI나 SECS가 무엇인지 아직 모르는 분은 해당 게시글을 참고하기 바란다. 2022.07.18 - [other] - [SEMI] SEMI와 SECS란? SECS 기본 개념 [SEMI] SEMI

jbground.tistory.com

 

 

SECS2