Fanuc FOCAS (CNC) 드라이버
개요
FOCAS = Fanuc Open CNC API Specification. Fanuc CNC (Computer Numerical Control) 컨트롤러에서 스핀들 부하 / 축 위치 / 가공 프로그램 / 알람 / OEE 지표를 읽기 위한 사실상의 표준 API 입니다. Mazak, DMG MORI, Doosan 같은 공작기계 OEM 도 컨트롤러로 Fanuc 을 채택하면 같은 인터페이스가 노출됩니다.
| 항목 | 값 |
|---|---|
opc_type | FOCAS |
| 구현 클래스 | plantpulse.driver.protocol.focas.FOCASDriver |
| 라이브러리 | (없음 — stub) |
| 대상 컨트롤러 | Fanuc 0i / 30i / 31i / 32i / 35i, Power Mate, FS18i 등 |
| 통신 매체 | Ethernet (TCP, 기본 port 8193) — HSSB 광 카드는 별도 |
| read | stub ("" 반환) |
| write | stub |
FOCAS 는 stub 만 존재합니다. 실제 Fanuc 컨트롤러와 통신하려면 아래의
대안 운영 방법 의 브릿지 패턴 중 하나를 사용하세요.
PlantPulse 본 코드 베이스 단일 jar 안에 native FwLib 를 임베드할 계획은 없습니다.
왜 native 구현이 어려운가
FOCAS 의 wire 프로토콜은 비공개 입니다. Fanuc 은 wire 스펙을 공개하지 않고, 대신 라이선스 가입자에게 FwLib (Focas Library) 라는 C 라이브러리를 배포합니다. 즉 자바 측에서 FOCAS 를 직접 말하려면 다음 중 하나가 필요합니다.
| 의존 요소 | 설명 | 배포 영향 |
|---|---|---|
Fwlib32.dll (Windows) | 32-bit DLL — Fanuc 라이선스 필수 | x86 JVM 또는 IPC 분리 필요 |
libfwlib32.so (Linux) | x86-64 / ARM 빌드 — 라이선스별 별개 | OS / glibc 버전 매칭 |
| HSSB 카드 드라이버 | 광 통신용 PCI 카드 — 컨트롤러와 1:1 | Linux 커널 모듈 필요 |
| 라이선스 키 | FwLib 사용 가능 회원사 등록 | 재배포 불가 |
| JNI 바인딩 | Java <-> C 메모리 모델 / thread | 호출 실패 시 JVM 크래시 가능 |
ROS 2 / DALI / IO-Link 와 동일하게, 단일 jar 배포 + 다양한 OS / ARCH 지원 을 추구하는 PlantPulse Edge 의 정책상 native 라이브러리 임베드는 cost > benefit 입니다. 또한 라이선스 정책상 FwLib 는 PlantPulse 가 자유 재배포할 수 있는 컴포넌트가 아닙니다.
대안 운영 방법
다행히 Fanuc 측 / 3rd-party 가 이미 표준 브릿지를 제공합니다. PlantPulse 는 브릿지의 출력 인터페이스 (HTTP / OPC UA) 만 받으면 됩니다.
옵션 1. MTConnect Adapter / Agent (권장)
대부분의 현대 공작기계 / Fanuc CNC 는 MTConnect (ANSI/MTC1.4) 를 1차 통합 경로로 채택합니다. Fanuc 은 자체 FOCAS-MTConnect Adapter 를 무료 제공하며, OEM (Okuma, DMG MORI, Mazak SmartBox) 들도 같은 표준을 따릅니다.
| 사용할 PlantPulse 드라이버 | 페이지 |
|---|---|
HTTP (REST polling, XML 파싱은 계산식 / 수신 파이프라인에서 처리) | HTTP |
옵션 2. OPC UA (Fanuc CNC OPC UA 옵션 또는 KEPServer)
Fanuc 신형 컨트롤러는 추가 옵션으로 OPC UA Server 를 노출합니다. 구형 컨트롤러는 Kepware KEPServerEX Fanuc Suite 또는 Matrikon FOCAS OPC Server 같은 상용 게이트웨이로 변환합니다.
| 사용할 PlantPulse 드라이버 | 페이지 |
|---|---|
OPCUA | OPC-UA |
옵션 3. Direct FwLib JNI (사이드카)
FwLib 라이선스를 보유한 곳에서는 자체 JNI 모듈을 별도 jar (motorsensor.jar 패턴) 또는
사이드카 프로세스 (예: focas-grpc-server) 로 띄우고, PlantPulse 가 그 출력을 폴링하는 형태가 가능합니다.
이 경우에도 PlantPulse 본 jar 는 그대로이고, FOCAS 드라이버는 stub 으로 남겨도 됩니다.
어떤 옵션을 골라야 하나
| 상황 | 권장 |
|---|---|
| OEM (Mazak SmartBox / DMG MORI Celos / Okuma) 가 이미 MTConnect Agent 운영 중 | MTConnect → HTTP |
| Fanuc 30i 신형, OPC UA 옵션 추가 가능 | Fanuc OPC UA → OPCUA |
| Fanuc 0i 구형, 라이선스 SI 보유 | KEPServerEX Fanuc Suite → OPCUA |
| 자체 FwLib 라이선스 / 커스텀 데이터 필요 | focas-grpc 사이드카 → HTTP |
| 단순 가동률 (0/1) 지표만 필요 | 컨트롤러 디지털 출력 → Modbus/Ethernet IO 모듈 |
추후 native 구현 시 고려 사항
| 옵션 | 의존성 | 난이도 |
|---|---|---|
| FwLib JNI 직접 임베드 | x86 / x64 / ARM 빌드 모두 필요, 라이선스 | 매우 상 |
별도 plantpulse-edge-driver-focas.jar (motorsensor.jar 패턴) | 라이브러리 reflection 로드 | 상 |
| 사이드카 + gRPC | FwLib 는 사이드카에만, PlantPulse 는 HTTP/gRPC 클라이언트 | 중 |
| RE 된 wire 프로토콜 (3rd-party) | Fanuc 라이선스 위반 위험 | 권장하지 않음 |
PlantPulse Edge 가 권장하는 공식 통합 경로는 MTConnect (HTTP 드라이버) 입니다. OEM 이 이미 MTConnect Adapter 를 제공하고, 라이선스 / 배포 / OS 호환성 문제 모두 회피됩니다. Fanuc OPC UA 옵션이 있다면 OPCUA 드라이버 로 직접 접속하는 경로가 가장 깔끔합니다.
stub 등록 (테스트 전용)
curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_FOCAS_STUB",
"opc_type": "FOCAS",
"opc_name": "FANUC FOCAS stub",
"opc_agent_ip": "192.168.0.0",
"opc_agent_port": "8193",
"site_id": "SITE_00001",
"auto_collect": false,
"timecycle": 5000,
"tag_list": []
}'