メインコンテンツまでスキップ

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 ライブラリを配布します。 つまり Java 側から 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 側 / サードパーティが既に標準ブリッジを提供しています。PlantPulse はブリッジの 出力インターフェース (HTTP / OPC UA) を受け取るだけで済みます。

オプション 1. MTConnect Adapter / Agent (推奨)

現代の工作機械 / Fanuc CNC の多くは MTConnect (ANSI/MTC1.4) を第一の統合経路として採用しています。 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 SuiteMatrikon 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 プロトコル (サードパーティ)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": []
}'