본문으로 건너뛰기

Fanuc FOCAS (CNC) 드라이버

개요

FOCAS = Fanuc Open CNC API Specification. Fanuc CNC (Computer Numerical Control) 컨트롤러에서 스핀들 부하 / 축 위치 / 가공 프로그램 / 알람 / OEE 지표를 읽기 위한 사실상의 표준 API 입니다. Mazak, DMG MORI, Doosan 같은 공작기계 OEM 도 컨트롤러로 Fanuc 을 채택하면 같은 인터페이스가 노출됩니다.

항목
opc_typeFOCAS
구현 클래스plantpulse.driver.protocol.focas.FOCASDriver
라이브러리(없음 — stub)
대상 컨트롤러Fanuc 0i / 30i / 31i / 32i / 35i, Power Mate, FS18i 등
통신 매체Ethernet (TCP, 기본 port 8193) — HSSB 광 카드는 별도
readstub ("" 반환)
writestub
현재 상태: 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:1Linux 커널 모듈 필요
라이선스 키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 드라이버페이지
OPCUAOPC-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 로드
사이드카 + gRPCFwLib 는 사이드카에만, 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": []
}'