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의 통신 상태
섹션 제목: “PDComm의 통신 상태”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(.NETGemEndpoint.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: 이미 온라인 |
PDComm의 제어 상태
섹션 제목: “PDComm의 제어 상태”장비 끝점의 제어 상태 값은 다음과 같습니다(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 기능에서 설명합니다.