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 ライブラリを配布します。 つまり Java 側から 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 側 / サードパーティが既に標準ブリッジを提供しています。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 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 プロトコル (サードパーティ) | 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": []
}'