SECS/GEM 배경 지식
SECS/GEM은 반도체 공장(fab)에서 장비(equipment)와 호스트(host)가 대화하는 방법을 정한 SEMI 표준 묶음입니다. 이 절은 PDComm SDK를 쓰기 전에 알아야 할 개념을 설명합니다. 각 개념이 어느 표준의 어느 주제에 해당하는지 함께 적으므로, 자세한 내용은 표준 원문에서 찾아볼 수 있습니다.
SECS/GEM이 쓰이는 곳
섹션 제목: “SECS/GEM이 쓰이는 곳”반도체 공장에는 노광기, 식각기, 계측기 같은 공정 장비가 수백 대 있습니다. 공장의 생산 관리 시스템(MES, Manufacturing Execution System)이나 셀 컨트롤러(cell controller)는 장비의 상태를 읽고, 공정 프로그램을 내려 보내고, 이벤트와 알람을 받아야 합니다. SECS/GEM은 이 대화의 공통 언어입니다. 장비 제조사가 SECS/GEM 인터페이스를 제공하면 공장은 장비마다 다른 프로토콜을 배우지 않고 같은 방식으로 장비를 연결합니다.
+---------------------------+ +---------------------------+| MES / fab host | | Cell controller |+-------------+-------------+ +-------------+-------------+ | HSMS (TCP/IP) | HSMS or SECS-I +-------+--------+ +-------+--------+ | Equipment A | | Equipment B | | (GEM) | | (GEM) | +----------------+ +----------------+같은 표준은 디스플레이 패널, LED, 태양광 셀, 전자 부품 조립처럼 반도체와 비슷한 자동화 공장에서도 쓰입니다.
표준 구성
섹션 제목: “표준 구성”SECS/GEM이라는 이름은 여러 SEMI 표준을 함께 부르는 말입니다.
| 표준 | 이름 | 다루는 내용 | 설명 페이지 |
|---|---|---|---|
| SEMI E5 | SECS-II | 메시지(message)와 데이터 아이템(item)의 구조, 스트림(stream)과 펑션(function)의 의미 | SECS-II 메시지 |
| SEMI E37, E37.1 | HSMS, HSMS-SS | TCP/IP 위에서 SECS-II 메시지를 주고받는 방법과 연결 관리 | HSMS |
| SEMI E4 | SECS-I | RS-232 직렬 회선에서 메시지를 블록(block)으로 나눠 보내는 방법 | SECS-I |
| SEMI E30 | GEM | 통신·제어 상태 모델, 데이터 수집, 알람, 원격 명령 같은 장비의 표준 동작 | GEM 상태 모델, GEM 기능 |
| SEMI E39, E40, E87, E90, E94 외 | GEM300 | 300 mm 공장의 캐리어, 공정 작업, 기판 추적 같은 추가 표준 | GEM300 |
표준 문서는 SEMI에서 구입할 수 있습니다. 이 사이트는 표준 문서 이름과 주제를 인용할 뿐 본문을 옮기지 않습니다.
계층 구조
섹션 제목: “계층 구조”SECS/GEM은 계층으로 나눠 이해하면 쉽습니다. 아래 계층은 바이트를 운반하고, 위 계층은 그 바이트의 의미를 정합니다.
+--------------------------------------------------+| Your application (host or equipment) |+--------------------------------------------------+| GEM (SEMI E30) || state models, data collection, alarms, || remote commands, process programs, spooling |+--------------------------------------------------+| SECS-II (SEMI E5) || stream/function messages and data items |+------------------------+-------------------------+| HSMS (SEMI E37) | SECS-I (SEMI E4) || TCP/IP | RS-232 serial line |+------------------------+-------------------------+- 전송 계층: HSMS 또는 SECS-I가 메시지를 상대에게 전달합니다. 오늘날 새 장비는 대부분 HSMS를 씁니다.
- 메시지 계층: SECS-II가
S1F3같은 메시지 이름과 리스트·정수·문자열 같은 데이터 형식을 정합니다. - 동작 계층: GEM이 어떤 메시지를 언제 보내고, 받은 쪽이 어떻게 반응해야 하는지 정합니다.
호스트와 장비, Active와 Passive
섹션 제목: “호스트와 장비, Active와 Passive”모든 연결에는 두 가지 독립된 설정이 있습니다.
- 역할(role): 호스트(host)는 장비를 관리하는 쪽이고, 장비(equipment)는 관리받는 쪽입니다. GEM 동작은 역할에 따라 다릅니다. 예를 들어 이벤트 보고서(event report)는 장비가 보내고 호스트가 받습니다.
- 연결 모드(connection mode): Active 쪽이 TCP 연결을 시작하고, Passive 쪽이 포트를 열고 기다립니다.
역할과 연결 모드는 서로 관계가 없습니다. 흔히 호스트가 Active, 장비가 Passive이지만 반대 구성도 정상입니다.
| 프로그램 A | 프로그램 B | 결과 |
|---|---|---|
| Host, Active | Equipment, Passive | 가장 흔한 구성입니다. |
| Host, Passive | Equipment, Active | 장비가 연결을 시작합니다. 정상 구성입니다. |
| Host, Active | Equipment, Active | 기다리는 쪽이 없어 연결되지 않습니다. |
| Host, Passive | Equipment, Passive | 연결을 시작하는 쪽이 없어 연결되지 않습니다. |
PDComm이 제공하는 것
섹션 제목: “PDComm이 제공하는 것”PDComm SECS/GEM SDK는 HSMS, SECS-I, SECS-II와 GEM을 호스트와 장비 양쪽에서 구현합니다.
| 구성 요소 | 내용 |
|---|---|
| C ABI | pdcomm.h(SECS-II 아이템), pdcomm_tcp.h(HSMS), pdcomm_secs1.h(SECS-I), pdcomm_gem*.h(GEM), pdcomm_gem300.h(GEM300 기능 카탈로그) |
| C++ 래퍼(wrapper) | 같은 이름의 .hpp 헤더입니다. C++14 이상에서 RAII로 핸들의 수명을 관리합니다. |
| .NET 바인딩(binding) | PDComm.dll(.NET 10)입니다. PDComm 네임스페이스에 GemHost, GemEquipment, 비동기 작업자(worker) 클래스가 있습니다. |
| GUI 시뮬레이터 | pdcomm-simulator는 장비나 호스트 역할을 하는 Qt 프로그램입니다. 실제 장비 없이 통신을 시험합니다. |
| headless 시뮬레이터 | pdcomm-simulator-headless는 화면 없이 정해진 시나리오(scenario)를 실행하고 JSON으로 결과를 출력합니다. |
| MCP 서버 | pdcomm-simulator-mcp는 시뮬레이터를 MCP(Model Context Protocol) 도구로 노출합니다. AI 도구나 자동화 스크립트가 시뮬레이터를 조작합니다. |
C ABI는 내부 스레드(thread)나 콜백(callback)을 만들지 않습니다. 애플리케이션이 poll을 호출해 진행시키고, 이벤트 큐(event queue)에서 결과를 꺼냅니다. .NET의 작업자 클래스는 이 반복을 전용 스레드에서 대신 실행합니다. 함수와 타입의 전체 목록은 API 레퍼런스를 참고합니다.
읽는 순서
섹션 제목: “읽는 순서”처음이라면 다음 순서로 읽습니다.
- SECS-II 메시지: 메시지와 아이템을 읽는 법
- HSMS: TCP 연결, Select, 타이머
- GEM 상태 모델: 통신 상태와 제어 상태
- GEM 기능: 데이터 수집, 이벤트, 알람, 원격 명령
- 직렬 회선을 쓴다면 SECS-I, 300 mm 공장 표준이 궁금하다면 GEM300
개념을 익혔다면 빠른 시작에서 첫 HSMS 연결을 만들어 봅니다.