

FOCASはプログラムの知識がなければ使えない、と思っていませんか?実は、正しい手順を踏めば初心者でも数ステップでCNCとの通信が始められます。
FOCAS(FANUC Open CNC API Specifications)は、FANUC製CNC(コンピュータ数値制御)装置と外部のコンピュータやシステムとをつなぐための、FANUCが公式に提供する通信ライブラリです。ひと言で言えば、CNCの中身をソフトウェアから読み書きするための「鍵束」のようなものです。
このライブラリはDLL(Dynamic-link Library)ファイルの集合体として提供されており、開発者はこれらのファイルをアプリケーションに組み込むことで、CNCの内部データへアクセスできるようになります。つまり、FOCASを使えばCNCが今どんな状態にあるかをリアルタイムで外部のPCやサーバーから確認することが可能になるということです。
取得できるデータは非常に豊富です。具体的には、以下のようなデータが読み取れます。
- CNCの稼働状態(加工中・アイドル中・アラーム発生中)
- 加工プログラム名・番号・サイズ・更新日時
- 工具補正値・ワーク座標オフセット
- アラーム番号とアラームテキスト
- フィードオーバーライド値(送り速度の倍率)
- サーボ軸の位置データ・主軸回転数
- カスタムマクロ変数の値
- PMC(Programmable Machine Controller)データ
これが基本です。FANUCはCNC装置において国内シェア約70%、世界シェア約50%を誇るトップメーカーであり、多くの工作機械メーカーがFANUC製CNCを採用しています。そのため、FOCASは製造業のIoT化において事実上の標準プロトコルとなっています。
FOCASを使いこなせると、たとえばCNCが1日に何時間加工しているかを自動集計したり、工具の摩耗状況をリモートで確認したりすることが可能になります。これは製造現場の生産性を劇的に改善するポテンシャルを持っています。
ファナック公式:FIELD system Basic Package(CNCデータ活用プラットフォームの詳細)
FOCASには「FOCAS1」と「FOCAS2」の2世代があります。どちらを使うかは、接続するCNCの機種とPCのOSによって決まります。ここは見落としがちな重要ポイントです。
FOCAS1 は主に旧世代のCNC向けのライブラリです。FS30i/31i/32i/35i、FS0i-D/F、PMi-Aといった比較的新しいシリーズを除くCNCに対応しており、32ビット版のみが提供されています。対応OSはWindows XP Professional、Vista Business、Windows 7 Professionalなど、やや古いバージョンまでです。
FOCAS2 は新世代向けで、FS30i/31i/32i/35i、FS0i-D/F、PMi-Aに対応した32ビット・64ビット両対応のライブラリです。Windows 8 Pro、Windows 10 Pro/IoTにも対応しており、現在の主流はこちらになります。
意外なのはここです。C#のコードでは、FOCAS2のライブラリを使っていてもクラス名が「Focas1」と命名されているケースがあります。これはFANUCが公式に配布しているDot NET向けのサンプルコードの仕様であり、バージョン名とクラス名が一致しないため、初めて使う人が混乱するポイントとして知られています。32ビット用のfwlib32.csを使う場合、クラス名は「Focas1」と記述するのが正解です。
利用するためのDLLファイルは、FANUCの代理店または正規ルートから取得するのが原則です。FOCAS2 LibraryにはDLLファイル、サンプルコード、仕様書(ドキュメント)が同梱されており、これらを使って開発を進めます。
大まかにまとめると、新しいCNC(FS30i系、FS0i-D/F系)を使うならFOCAS2一択、古い機種ならFOCAS1という選び方が基本です。
FANUC CNCとイーサネット通信してカスタムマクロ変数値を読み出すC#プログラムの解説(実装手順の参考に)
FOCASを使ってCNCに接続する方法は大きく2つあります。「イーサネット(Ethernet)接続」と「HSSB(High-Speed Serial Bus:高速シリアルバス)接続」です。この2つは性格がかなり異なるため、目的と環境に合った方を選ぶことが重要です。
イーサネット接続は、一般的なLANケーブルを使ってCNCとPCをネットワーク経由でつなぐ方式です。CNC側にIPアドレスを設定し、PC側からそのIPアドレスに向けてTCP接続(ポート番号は通常8193番)を行います。この方式のメリットは、既存のネットワークインフラをそのまま流用できる点と、長距離の配線が比較的容易な点です。工場内のLANに複数のCNCをぶら下げて、1台のサーバーで一元管理するといった構成がしやすいのもイーサネット接続の強みです。
HSSB接続は光ファイバーケーブルを使った専用接続方式です。電気ノイズの影響を受けにくく、通信の信頼性と速度に優れているのが特徴です。ただし、接続するPCにHSSBボードを増設する必要があるため、導入コストがイーサネット接続よりも高くなる傾向があります。
注意が必要な点があります。たとえばFANUC Series 0i-MODEL CはHSSB機能をサポートしていません。この機種ではイーサネット接続一択となります。CNCの機種と搭載オプションによって接続方式の選択肢が限られることがあるため、事前に仕様を確認することが必須です。
🔧 接続に必要な主な準備事項は次のとおりです。
- CNC側のIPアドレス・ポート番号の設定
- PC側へのFOCASライブラリ(DLLファイル)の配置
- ファイアウォールのポート開放(イーサネット接続の場合)
- HSSBボードの取り付けとドライバインストール(HSSB接続の場合)
接続方式の選択が条件です。まず機種の仕様書で対応接続方式を確認してから、環境に適した方を選びましょう。
実際にFOCASを使ってCNCからデータを取得するには、主に3つのAPIを順番に呼び出す流れで実装します。C#環境での基本的な実装ステップを見ていきましょう。
ステップ1:ライブラリハンドルの取得(接続)
まず `cnc_allclibhndl3()` 関数を呼び出して、CNCへのイーサネット接続を確立し「ライブラリハンドル」を取得します。このハンドルは以降のすべてのAPI呼び出しで必要となる「接続の証明書」のようなものです。引数にはCNCのIPアドレス、ポート番号(通常8193)、タイムアウト秒数を指定します。
```c
FWLIBAPI short WINAPI cnc_allclibhndl3(
const char *ipaddr, // CNCのIPアドレス
unsigned short port, // ポート番号(例:8193)
long timeout, // タイムアウト秒数
unsigned short *FlibHndl // ハンドルの格納先
);
```
ステップ2:データの読み取り
ハンドルを取得したら、目的のデータを読み取るAPIを呼び出します。たとえばカスタムマクロ変数を読み取るには `cnc_rdmacro()` を使います。返り値はODBM構造体で返ってきており、変数値(整数部)と小数点以下桁数が格納されています。
戻り値が `EW_OK` であれば成功です。それ以外の場合は接続不良、オプションなし、番号誤りなどのエラーが区別されて返ってきます。エラーコードを適切にハンドリングすることが、安定した通信アプリケーション開発の要です。
ステップ3:ライブラリハンドルの解放(切断)
データ取得が完了したら必ず `cnc_freelibhndl()` を呼び出してハンドルを解放します。解放し忘れると接続リソースが枯渇し、次回の接続に失敗する可能性があります。これは必須です。
💡 開発環境を用意する際は、Visual Studio 2022などのIDEと、FANUCから入手したFOCAS2 Libraryを使います。DLLファイル(Fwlib32.dll、fwlib1.dll)は最終的な実行ファイル(.exe)と同じフォルダに配置するのがポイントです。依存関係のプロジェクト参照では追加できないため、手動でコピーする必要があります。これも見落としがちなポイントですね。
FANUC America:FOCAS2 Library公式ページ(取得できるデータ種別や概要の確認に)
FOCASはライブラリとして提供されているだけでなく、FANUCがそのライブラリを活用したすぐに使える公式ソリューション群(FASシリーズ)も用意しています。独自開発なしにFOCASの恩恵を受けたい場合には、これらを検討するのが近道です。
| ソリューション名 | 概要 |
|---|---|
| MT-LINKi | FANUCの稼働管理ソフト。FANUC製・非FANUC製機器の稼働状況をPCで可視化。OPC-UA・MTConnectにも対応。 |
| FASData | プラグアンドプレイ型のデータ収集ソフト。イーサネット・HSSB接続のCNCに手軽に繋がる。 |
| FASConnect | CNCとPC間のプログラムファイル・パラメータ・マクロ変数などを双方向転送。 |
| FASBacCNC | CNCファイルの自動バックアップソリューション。FASConnectのアドオン。 |
| FASMTC | FOCASデータをMTConnect標準のXML形式に変換するアダプタ。 |
| FASOPC | OPCサーバーとしてCNCデータを提供するソリューション。 |
これらのソリューションを活用することで、製造現場のIoT化が大きく加速します。特にMT-LINKiは、工場内の複数のCNCの稼働状況をカラーコードで一覧表示できるため、「どの機械が止まっているか」「なぜ止まっているか」を直感的に把握するのに役立ちます。
スマートファクトリーの観点では、FOCASから収集したデータを分析することで、生産ラインのボトルネック特定や予防保全(壊れる前にメンテナンスする)の実現につながります。工作機械の稼働率を数%向上させるだけで、製造コストの大幅な削減に直結します。感覚的な管理から数値に基づくデータドリブンな管理への移行が、FOCASを入口として実現できるのです。これは使えそうです。
NTTデータとFANUCが協力して取り組んでいるOT(現場制御系)とIT(情報系)の融合事例でも、FOCASを起点にした工場データの収集・分析が中核を担っています。FOCASはもはや一社のライブラリにとどまらず、製造業DXの標準インフラとして機能しています。
Edgecrossコンソーシアム:FOCASデータコレクタの活用事例(Edgecross基本S/Wとの連携方法の参考に)
FOCASを使った開発プロジェクトを長期的に運用するうえで、見落とされがちなのが「ライブラリファイルと関連ドキュメントの整理・管理」です。収納や整理整頓に関心がある方なら共感できると思いますが、乱雑な環境では作業効率が下がり、トラブルのリスクが高まります。FOCAS開発環境も同じです。
FOCAS2 Libraryには多数のファイルが含まれており、主なものを整理すると次のとおりです。
- FWLIB32.DLL:CNC/PMCデータウィンドウ統轄ライブラリ本体(32ビット版)
- FWLIBE1.DLL:機種別DLL(機種によって複数存在)
- fwlib32.cs:C#向けのラッパーコード(.NET用サンプル同梱)
- 仕様書PDF:各API関数の詳細ドキュメント
これらのファイルを「プロジェクトフォルダ」「バイナリ出力先フォルダ(Debug/Release)」「ドキュメントフォルダ」の3か所に適切に振り分けることが、安定した開発環境の維持には不可欠です。
特に重要なのは、DLLファイルをEXEと同じフォルダに必ず置くというルールです。FANUCのDLLは.NETのプロジェクト参照機能で管理できないため、ビルド後に出力先フォルダ(例:`\bin\Debug\net8.0-windows`)にDLLを手動でコピーする作業が必要になります。「コピーし忘れた」は初心者が最も多くハマるミスの一つです。
この課題への対策として、Visual Studioのビルドイベント(Post-build event)でDLLを自動コピーするコマンドを設定しておくと、手作業ミスを根絶できます。環境整備はDX推進の土台です。
💡 バージョン管理の観点では、FOCAS2 Libraryのバージョンと対応CNCシリーズの対応表をプロジェクトのREADMEに記録しておくことを強くおすすめします。数年後に別担当者がメンテナンスする際に、どのDLLを使うべきかの手がかりになります。
FOCAS周りのファイルを整理すると、開発・保守の両面で大きなメリットを得られます。これが原則です。
📌 まとめ:focas fanucで押さえておくべきポイント
- FOCASはFANUC製CNCのデータを外部システムから読み書きするための公式ライブラリ
- CNCの機種とPCのOSに応じて「FOCAS1」か「FOCAS2」を選択する
- 接続方式は「イーサネット」と「HSSB」の2種類、機種によって使えない方式がある
- 実装の基本は「接続→データ取得→切断」の3ステップで、ハンドルの解放忘れに注意
- MT-LINKiなどのFASソリューションを活用すれば独自開発なしでデータ可視化が可能
- DLLファイルはEXEと同じフォルダに配置するルールを厳守し、ライブラリ環境を整理しておく