SECS-II

김원중·2025년 5월 20일

SECS

목록 보기
3/3
post-thumbnail

장비와 HOST가 어떤 형식으로 데이터를 주고받을지 규정하는 표준
Stream 이라는 그룹과 Stream 내에 Function 세부 메시지로 구분

HSMS 메시지 구조의 C영역(데이터 필드)은 SECS-II 포맷에 따라 구성됩니다.

이 영역에는 Stream/Function, 포맷 코드, Length, 데이터 값(Value)

등의 정보가 SECS-II 표준에 맞춰 들어갑니다.


1. Data Structures

SECS-II 메시지는 계층적 구조(Tree 구조)로 되어 있습니다.

  • Message(SxFy) : 하나의 논리적 단위(Ex:S1F1).
    메시지마다 고유의 기능과 의미를 갖습니다.(요청/응답 구조)

  • Block : 물리적인 전송단위(실제 전송 단위)

  • List : 데이터 그룹 (다른 리스트 포함 가능)

  • Item : 실제 데이터 단위(정수, 문자열 ···)

  • Format : 데이터 타입(A,I4,F8···)

  • Length : 데이터 길이(바이트 수)

  • Data : 실제 값

    →  Item
           ㄴ Format + Length + Data 구조

예시 메시지

S6F11: Alarm 발생 알림
└─ L, 3
    ├─ A, "ALARM01"
    ├─ U2, 100
    └─ A, "Overheat detected"
    
- 리스트 안에 문자열, 정수, 문자열 순으로 데이터가 포함됨

2. Stream 구성 예시

Stream : 회의 주제
Function : 회의에서 하는말

✔ Stream 구성 예시

SxFy
= Stream x, Function y
  • S: Stream 번호 (대화의 큰 주제)

  • F: Function 번호 (그 주제에서의 세부 명령)

    → 보통 홀수 Function은 요청(Request) / 짝수 Function은 응답(Response)

✔ 자주 사용되는 SECS - II 메시지

메시지의미설명
S1F1Are You There?장비 상태 확인 요청(ping 느낌)
S1F2On Line Now응답 : “나 살아있음”
S1F3Selected Equipment Status Request장비의 상태값 요청
S1F4Selected Equipment Status Send상태값 응답
  • 장비 상태 관련
메시지의미설명
S1F13Establish Communication Request통신 요청 설정
S1F14Establish Communication Accept통신 요청 수락 설정
S1F15Request OFF-LINE오프라인 요청
S1F16Request ON-LINE온라인 요청
S1F17Request ONLINE by Host호스트가 온라인으로 요청
S1F18Reply ONLINE Transition Accepted답변 온라인 전환 수락
  • 알람 관련
메시지의미설명
S5F1Alarm Report Send(장비 → 호스트) 알람 보고서 전송
S5F2Alarm Report Acknowledge(호스트 → 장비) 알람 보고서 확인
S5F3Alarm Set Request알람 설정 요청
S5F4Alarm Set Response알람 설정 응답
S5F5Alarm Clear Request알람 해제 요청
S5F6Alarm Clear Response알람 해제 응답
  • 이벤트 & 데이터 보고
메시지의미설명
S6F11Event Report Send장비가 이벤트 발생 알려줌
S6F12Event Report Acknowledge호스트가 확인
S6F1Establish Report Request보고 요청 수립
S6F2Establish Report Response보고 응답 설정
S6F13/F14Link Report Response링크 보고 요청/ 응답
S6F15/F16Enable / DisAble Report보고 활성화/ 비활성화
S6F19/F20Triggered Report보고 강제 실행 요청/응답
  • 변수 수집(Data Collection)
메시지의미설명
S7F1/F2Recipe Directory Request/ Send레시피 디렉토리 요청/ 보내기
S7F3/F4Recipe Body Request/ Send레시피 본문 요청/ 전송
S7F5/F6Recipe Delete Request/ Response레시피 요청 / 응답 삭제
S7F17/F18Recipe ID Check레시피 ID 확인
  • 트레이스 상태 보고
메시지의미
S9F1~S9F11Error 메시지 관련 (Bad Message 등)
S10F3/F4Terminal Display Message
S10F5/F6Operator Command Request/ Response

3. SECS-II Item Header

Item and List Header

SECS-II 에서 장비랑 HOST가 데이터를 주고 받을 때 , Header에 주고 받는 “데이터”가 어떤 종류고, 얼마나 들어있는지 정보를 담아서 전달합니다.
여기서 Header는 1바이트짜리 코드로 두 가지 정보를 포함하고있습니다.

  • 상위 6비트 → 데이터의 타입(Format) (예: 정수냐, 문자열이냐, 실수냐)
  • 하위 2비트 → 뒤에 딸아올 길이 정보(Length Field)가 몇 바이트인지

예 : 0xA1 = 1010_0001
101000 = ASCII (A) ,

  → `01` = Length는 1바이트

Item Format

SECE 표준

SECS-II 메시지는 데이터를 효율적으로 주고받기 위해 특정 구조와 규칙을 따릅니다.
Item은 SECS-II 데이터의 기본 단위이며, Item Header 와 Item Data로 구성됩니다.
Item Header는 데이터 타입(Format Code)과 길이를 나타냅니다.

예시 시나리오 :

“온도 : 25.5℃ , 상태 : 정상” 이라는 정보를 SECS-II 메시지로 보낸다고 가정해 보겠습니다.

1. 데이터 타입 결정:

  • 온도 25.54-byte Floating Point(F4) 타입으로 표현
  • 상태 “정상”은 ASCII String(A) 타입으로 표현
  • 이 두 정보를 묶어서 보내기 위해 LIST(L)타입을 사용합니다.

2. Format Code 확인:

  • LIST(L) : Binary 000000
  • 4-byte Floating Point(F4): Binary 100100
  • ASCII(A) : Binary 010000

3. SECS 코드 표현:

<L, 2
		<F4, 4 25.5>
		<A, 6 "정상">
>
  • <L, 2> : 루트 아이템은 2개의 아이템(<F4><A>)을 포함하는 LIST 입니다.
    Length는 포함된 아이템의 수를 나타냅니다.
  • <F4, 4 25.5>: 4-byte Floating Point 타입으로, 데이터의 길이는 4바이트이며, 실제 값은 25.5입니다.
  • <A, 6 "정상">: ASCII String 타입으로, 데이터의 길이는 6바이트이며, 실제값은 “정상”입니다.

4. 16진수 변환:

  • <L, 2> :
    • Format Code(LIST, 1-LB): 0x00
    • Length (아이템/항목 수): 0x02
    • 16진수: 00 02
  • <F4, 4 25.5> :
    • Format Code(F4, 1-LB): 0xA4
    • Length (바이트 수): 0x04
    • 25.5의 16진수 표현(IEEE 754): 41 CC CC CD(바이트 순서에 따라 다를 수 있음)
    • 16진수: A4 04 41 CC CC CD
  • <A, 6 "정상"> :
    • Format Code(ASCII, 1-LB): 0x40
    • Length (바이트 수): 0x06
    • 값 “정상”의 ASCII 16진수 표현 (UTF-8): EC A0 95 EC 83 81
    • 16진수: 40 06 EC A0 95 EC 83 81

5. 최종 16진수 메시지 (예시):

**00 02 A4 04 41 CC CC CD 40 06 EC A0 95 EC 83 81**

해설 :

  • 00 02: 최상위 List는 2개의 Item을 포함합니다.
  • A4 04 41 CC CC CD: 첫 번째 Item은 4-byte Floating Point 값 25.5입니다.
  • 40 06 EC A0 95 EC 83 81: 두 번째 Item은 ASCII 문자열 "정상"입니다.

다른 예시: 단일 정수 값 전송

온도 값 25 (정수)를 1-byte unsigned integer로 전송하는 경우:

  • SECS 코드: <U1, 1 25>
  • 6진수 변환:
    • Format Code (U1, 1-LB): 0xC4
    • Length: 0x01
    • 25의 16진수 표현: 19
    • 16진수: C4 01 19

핵심 이해:

  • SECS-II 메시지는 Item들의 계층 구조로 이루어질 수 있습니다 (List 안에 다른 Item 포함).
  • 각 Item은 Format Code를 통해 데이터 타입을 명시합니다.
  • Length Byte는 데이터의 길이를 나타냅니다. Length Byte의 개수는 Format Code의 하위 비트에 따라 결정될 수 있지만, 하단의 표에서는 데이터 길이에 따라 1-LB, 2-LB, 3-LB 컬럼으로 표현하고 있습니다.
  • 실제 데이터는 Format Code와 Length 뒤에 바이트 스트림으로 위치합니다.
profile
while(life) { keep_growing() };

0개의 댓글