콘텐츠로 이동
무료 평가 시작

GEM 상태 모델

GEM(Generic Equipment Model, SEMI E30)은 장비가 SECS-II 메시지에 어떻게 반응해야 하는지 정합니다. 그 중심에는 두 개의 상태 모델(state model)이 있습니다. 통신 상태 모델은 호스트와 장비가 SECS-II로 대화할 준비가 됐는지를, 제어 상태 모델은 호스트가 장비를 원격으로 제어할 수 있는지를 나타냅니다.

HSMS 연결 상태와 GEM 상태는 별개입니다. HSMS가 Selected여도 GEM 통신은 아직 수립되지 않았을 수 있고, GEM 통신이 수립돼도 장비는 오프라인일 수 있습니다.

SEMI E30의 통신 상태 모델(Communications State Model)은 다음과 같습니다.

DISABLED ENABLED
+-----------------------------------------------+
| NOT COMMUNICATING |
| +-------------+ +----------------+ |
| | WAIT CRA | ------> | WAIT DELAY | |
| | (S1F13 sent)| <------ | (retry later) | |
| +------+------+ +----------------+ |
| | S1F14 COMMACK=0 |
| v |
| COMMUNICATING |
+-----------------------------------------------+
  • 통신 수립(establish communications)은 S1F13 요청과 S1F14 응답으로 이뤄집니다. 호스트와 장비 어느 쪽이든 S1F13을 보낼 수 있습니다.
  • S1F14의 COMMACK가 0이면 수락, 1이면 거부입니다.
  • 장비가 보낸 S1F13에 응답이 없거나 거부되면, 장비는 일정 시간을 기다린 뒤(WAIT DELAY) 다시 시도합니다.
  • NOT COMMUNICATING 상태에서는 통신 수립 메시지 말고 다른 메시지를 주고받지 않습니다.

PDComm은 통신 상태를 다음 값으로 알려 줍니다(C PDCOMM_GEM_*, .NET GemCommunicationState).

값 C 상수 .NET 이름 의미
0 PDCOMM_GEM_DISCONNECTED Disconnected HSMS 연결이 Selected가 아닙니다.
1 PDCOMM_GEM_NOT_COMMUNICATING NotCommunicating 연결은 Selected지만 통신이 수립되지 않았습니다.
2 PDCOMM_GEM_WAITING_ACK WaitingAck S1F13을 보내고 S1F14를 기다립니다(E30의 WAIT CRA).
3 PDCOMM_GEM_COMMUNICATING Communicating 통신이 수립됐습니다.

튜토리얼 예제의 state 명령이 gem=3을 출력하면 COMMUNICATING 상태입니다.

PDComm은 통신 수립을 자동으로 시작하지 않습니다. 내부 스레드나 재시도 타이머도 없습니다.

  • 통신을 시작하려면 애플리케이션이 pdcomm_gem_begin_communication(.NET GemEndpoint.BeginCommunication)을 호출합니다. 호스트는 빈 리스트를, 장비는 모델 이름과 소프트웨어 버전을 담아 S1F13을 보냅니다.
  • S1F14의 COMMACK가 0이면 결과가 CommunicationEstablished, 0이 아니면 CommunicationRejected이고 상태는 NOT COMMUNICATING으로 돌아갑니다. T3 안에 응답이 없어도 NOT COMMUNICATING으로 돌아갑니다.
  • WAIT DELAY 뒤의 재시도는 애플리케이션이 정한 간격으로 직접 호출합니다.
  • 상대가 보낸 S1F13은 PDComm이 COMMACK 0으로 자동 응답하고 COMMUNICATING으로 바꿉니다.
  • 장비는 통신이 수립되기 전에 받은 다른 1차 메시지를 처리하지 않습니다. 이때 결과의 오류 코드는 상태 오류(PDCOMM_GEM_ERROR_STATE)입니다.

SEMI E30의 제어 상태 모델(Control State Model)은 호스트가 장비를 얼마나 제어할 수 있는지 정합니다.

OFF-LINE ON-LINE
+----------------------------------+ +--------------------------+
| EQUIPMENT OFF-LINE | | LOCAL |
| | operator: go on-line | | ^ |
| v | | | operator switch |
| ATTEMPT ON-LINE --(S1F1/S1F2)----------->| v |
| | no answer | | REMOTE |
| v | | |
| HOST OFF-LINE <----- S1F15 --------------- |
| | | | |
| +-------- S1F17 -------------------> (LOCAL or REMOTE) |
+----------------------------------+ +--------------------------+
  • EQUIPMENT OFF-LINE: 운영자가 장비를 오프라인으로 둔 상태입니다. 호스트의 온라인 요청을 거부합니다. 운영자는 ON-LINE과 HOST OFF-LINE 어느 쪽에서든 OFF-LINE 스위치로 이 상태로 돌아올 수 있습니다. 그림에서는 이 화살표를 생략했습니다.
  • ATTEMPT ON-LINE: 운영자가 온라인을 선택하면 장비가 S1F1을 보내 호스트를 확인합니다. S1F2를 받으면 ON-LINE이 됩니다.
  • HOST OFF-LINE: 장비는 온라인을 원하지만 호스트가 오프라인으로 둔 상태입니다. 호스트가 S1F17을 보내면 ON-LINE이 됩니다.
  • ON-LINE LOCAL: 호스트는 상태를 읽고 데이터를 받을 수 있지만, 장비를 움직이는 원격 명령은 제한됩니다.
  • ON-LINE REMOTE: 호스트가 원격 명령으로 장비를 제어할 수 있습니다. 운영자의 REMOTE/LOCAL 스위치로 LOCAL과 REMOTE를 바로 오갑니다.

호스트가 보내는 요청과 응답 코드는 다음과 같습니다.

요청 응답 응답 코드
S1F15 Request OFF-LINE S1F16 OFLACK 0: 수락
S1F17 Request ON-LINE S1F18 ONLACK 0: 수락, 1: 허용 안 됨, 2: 이미 온라인

장비 끝점의 제어 상태 값은 다음과 같습니다(C PDCOMM_GEM_*, .NET GemControlState). 호스트 끝점에는 제어 상태가 없으며 PDCOMM_GEM_CONTROL_UNAVAILABLE로 표시됩니다.

값 C 상수 .NET 이름
0 PDCOMM_GEM_EQUIPMENT_OFFLINE EquipmentOffline
1 PDCOMM_GEM_ATTEMPT_ONLINE AttemptOnline
2 PDCOMM_GEM_HOST_OFFLINE HostOffline
3 PDCOMM_GEM_ONLINE_LOCAL OnlineLocal
4 PDCOMM_GEM_ONLINE_REMOTE OnlineRemote

PDComm 장비 끝점은 다음처럼 전이합니다.

계기 전이 응답
시작 옵션의 초기 제어 상태. AttemptOnline은 초기값으로 쓸 수 없습니다.
운영자 온라인(OperatorOnline) EQUIPMENT OFF-LINE → ATTEMPT ON-LINE, S1F1 송신 S1F2를 받으면 온라인 모드에 따라 LOCAL 또는 REMOTE
S1F1 실패, 또는 시도 중 연결 끊김 ATTEMPT ON-LINE → HOST OFF-LINE
운영자 오프라인(OperatorOffline) ON-LINE 또는 HOST OFF-LINE → EQUIPMENT OFF-LINE. 메시지를 보내지 않고 연결이 없어도 됩니다. ATTEMPT ON-LINE에서는 쓸 수 없습니다.
운영자 REMOTE/LOCAL 스위치(SetOnlineMode) ON-LINE이면 LOCAL과 REMOTE 사이를 바로 전환합니다. OFF-LINE 상태에서는 다음에 ON-LINE이 될 때 들어갈 상태만 정합니다.
S1F15 수신 ON-LINE → HOST OFF-LINE OFLACK 0
S1F17 수신, HOST OFF-LINE일 때 → ON-LINE(LOCAL 또는 REMOTE) ONLACK 0
S1F17 수신, 이미 ON-LINE일 때 변화 없음 ONLACK 2
S1F17 수신, EQUIPMENT OFF-LINE 또는 ATTEMPT ON-LINE일 때 변화 없음 ONLACK 1

온라인 모드(LOCAL 또는 REMOTE)는 GemEquipment.SetOnlineMode로 어느 제어 상태에서나 바꿀 수 있습니다. 운영자의 로컬 조작이므로 호스트에 메시지를 보내지 않습니다. 튜토리얼 예제의 장비는 HOST OFF-LINE과 REMOTE 모드로 시작하므로, 호스트가 online 명령으로 S1F17을 보내면 ON-LINE REMOTE가 됩니다.

현재 상태는 pdcomm_gem_state(.NET GemEndpoint.GetState)으로 읽습니다. 상태 구조체에는 역할, 통신 상태, 제어 상태, 온라인 모드, 연결 세대가 들어 있습니다.

상태 모델 위에서 동작하는 데이터 수집, 이벤트, 알람, 원격 명령은 GEM 기능에서 설명합니다.