FanucカスタムマクロBプログラミング基礎と安全対策ガイド
FanucカスタムマクロBプログラミングの完全ガイド。パラメータ6001#6および6001#7の設定による変数リセット方法や、ブラケットネスト制限、ゼロ除算によるアラーム112・118の回避とタレット衝突を防ぐ安全対策を徹底解説。
はじめに
マクロ実行中のリセットや予期せぬプログラム停止に伴う変数メモリの残留を放置することは、ワークチャック (chuck) や治具クランプ (clamp) への工具の異常進入、そして刃物台タレット (turret) がバイスジョー (vise jaw) に激突する致命的な機械衝突事故(ハードクラッシュ)の直接的な引き金となる。加工オペレーターがプログラムを途中でリセットした際、CNC内のすべての変数データが消去されたと錯覚しがちだが、パラメータ設定で変数の揮発性が無効化されていると、メモリ内に残留した以前の古い座標データや共通変数値が引き継がれ、サイクルの再開とともに工具が規定外の軌道を描き始める。このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されるという最悪のシナリオをたどる。このような再現性の低下による不良品発生を防ぎ、量産現場での安定した加工精度を保証するためには、リセット時の変数クリアパラメータを適正に調整し、安全第一のプログラミング規則を徹底することが極めて重要である。
技術概要
| 技術仕様 | 詳細 |
|---|---|
| コマンドコード | G65, G66, G66.1, G67 |
| モーダルグループ / モーダル性 | モーダル / 非モーダル (G65は非モーダル、G66/G66.1はモーダル、G67はキャンセル) |
| 対象ブランド | Fanuc |
| 重要パラメータ | 6000#5 (SBM), 6000#3 (V15), 6001#5 (TCS), 6001#6 (CCV), 6001#7 (CLV) |
| 主な制約事項 | 小数点以下8桁の演算精度;ブラケット入れ子最大5レベル;ループ深さ最大3レベル;変数範囲 ±10-29 〜 ±1047。 |
クイックリード
- リセット時のメモリパージ: パラメータ 6001#6 (CCV) および 6001#7 (CLV) を 0 に設定し、機械リセット時にローカル変数と共通変数を自動的に空(vacant)にクリアすることで、座標データの破損を防ぎます。
- 実行停止制御: パラメータ 6000#5 (SBM) を 1 に設定することで、マクロ文の実行中におけるシングルブロック停止を有効にし、安全なプログラムのステップ送り検証を可能にします。
- Tコード自動化: パラメータ 6001#5 (TCS) を 1 に設定し、Tコード指令でマクロ O9000 を自動的に呼び出し、工具番号を変数 #149 に引数として受け渡します。
- 入れ子とループの制限: フォーマットアラームの即座の発生を防ぐため、ループの入れ子深さ (DO-END) を3レベルに、ブラケットのネストを最大5レベルに制限します。
- オフセットの後方互換性: パラメータ 6000#3 (V15) を 1 に設定することで、最新の Series 16/18 制御盤でレガシーな Series 15 の工具オフセット変数アドレスを使用します。
- 除算の安全確認: 加工サイクル途中の停止を引き起こすゼロ除算アラーム (PS0112) を回避するため、すべての算術除算ルーチンで除数がゼロでないことを事前に検証します。
基本概念
Fanuc Custom Macro Bの実務的なプログラミング効果は、静的なGコードを高度に動的で数学的なプログラミング言語へと変革することにあります。すべての部品寸法に対して個別のプログラムを作成する代わりに、プログラマーは変数がX、Y、Z座標を決定するパラメータ式ルーチンを記述できます。オペレーターが単一の G65 マクロ呼び出しブロックに必要な寸法を入力するだけで、CNCが稼働中に必要なツールパスを即座に計算します。さらに、マクロはシステム変数(機械座標の #5021 やスキップ信号位置の #5061 など)を読み取ることができるため、機械がロジックに基づく決定を下し、独自の計測結果を検査し、オペレーターの介入なしに工具摩耗補正を自動的に再計算することが可能になります。
このパラメータ制御は標準的なサブプログラム呼び出しと似ていますが、数学演算や論理演算という付加価値が加わっています。一般的な工場では、静的な経路を繰り返すために サブプログラムの作成と呼び出し に依存する場合がありますが、Custom Macro Bでは変数を用いて座標を動的に計算することができます。これは、変数によって送り速度、深さ、繰り返し回数をその場で変更できるため、従来の G84/G74リジッドタップ や M98入れ子(ネスト)サブプログラム のような固定サイクルをはるかに超えた自動化への大きな飛躍を意味します。
コマンド構造
Custom Macro Bのコマンド構造は、メインプログラムからマクロサブプログラムにデータを引き渡すための系統的な構文に基づいています。G65 を使用して単純マクロ呼び出しを実行すると、制御盤は対象プログラムを開き、呼び出しブロックで渡された引数をローカル変数(通常は #1 〜 #33)に入力します。構文は、特定のアルファベットのアドレスを対応するローカル変数にマッピングします。たとえば、アドレス A は変数 #1、B は #2、C は #3 にマッピングされ、プログラマーはワークの寸法や加工公差を直接渡すことができます。マクロに入ると、インタープリターは制御を戻す前に数学的ロジックと座標シフトを実行します。
繰り返しまたは連続する加工の場合、G66 または G66.1 を使用してモーダルマクロ呼び出しを初期化できます。G66 の下では、制御盤はすべての移動指令ブロック of 直後にマクロプログラムを実行し、G66.1 はすべてのプログラムブロックの後にマクロをトリガーします。このモーダル動作は、制御盤が G67 キャンセルコマンドを読み取るまでアクティブのまま維持され、更新された変数を引き渡します。パラメータマッピングを介してGコードおよびMコードをエイリアス化することで、これらのマクロをバックグラウンドで実行できます。CNCインタープリターは、バックグラウンドで変数を引き渡しながら、標準コードを O9000シリーズのサブプログラム実行へと変換します。
コマンド構文アドレス:
- 単純マクロ呼び出し:
G65 P_ L_ <引数> - モーダルマクロ呼び出し(移動後):
G66 P_ L_ <引数> - モーダルマクロ呼び出し(毎ブロック):
G66.1 P_ L_ <引数> - モーダルマクロ呼び出しキャンセル:
G67 - 条件分岐:
IF [<条件式>] GOTO n - 条件ループ:
WHILE [<条件式>] DO n...END n
| パラメータ / 変数 | 説明 | 設定値 / 範囲 |
|---|---|---|
#1 to #33 | アルファベットアドレスにマッピングされたローカル変数(例:Aは#1、Bは#2にマッピング)。パラメータ 6001#7 に基づきリセット時にクリア。 | ±10-29 to ±1047 |
#100 to #149 | 共通変数。パラメータ 6001#6 に基づきリセット時にクリアまたは保持。 | ±10-29 to ±1047 |
#500 to #531 | 共通変数。リセット時も常に保持。 | ±10-29 to ±1047 |
Parameter 6000#5 (SBM) | マクロ文実行中のシングルブロック停止。 1: 有効, 0: 無効。 | 0 or 1 |
Parameter 6000#3 (V15) | 工具補正変数のマッピング。 1: レガシー FS15 仕様, 0: 標準 FS16 仕様。 | 0 or 1 |
Parameter 6001#5 (TCS) | Tコードによるカスタムマクロ O9000 の呼び出し。Tコード値は変数 #149 に引き渡される。1: 有効, 0: 無効。 | 0 or 1 |
Parameter 6001#6 (CCV) | リセット時における共通変数 #100 〜 #149 のクリア。 0: 空(vacant)にクリア, 1: 保持。 | 0 or 1 |
Parameter 6001#7 (CLV) | リセット時におけるローカル変数 #1 〜 #33 のクリア。 0: 空(vacant)にクリア, 1: 保持。 | 0 or 1 |
ブランド別応用
Fanuc
Fanucは、シームレスなエイリアス統合と埋め込み型の診断フィードバックにより、そのマクロアーキテクチャを他の制御ブランドから大きく差別化しています。第一に、Fanucは機械メーカーやプログラマーが標準のG、M、S、Tコードをカスタムマクロに直接エイリアス(関連付け)することを可能にしています。パラメータ(Gコード用のパラメータ6050など、あるいはTコード用のTCSの有効化など)を設定するだけで、オペレーターが標準のタレットインデックスを指令した際、制御盤はバックグラウンドで複雑な O9000シリーズのマクロを密かに実行し、工具番号を変数 #149 に自動的に引き渡します。第二に、Fanucはアラームやメッセージのカスタムマクロ生成をネイティブに統合しています。システム変数 #3000 に値を設定することで、マクロは意図的に機械を停止させ、CNCのアラーム画面に非常に具体的なカスタムテキスト文字列を表示して、オペレーターにワーク寸法の異常などを警告することができます。最後に、Fanucはパラメータ V15 を通じて強力な後方互換性を提供しており、最新の制御盤に対して数十年前の Series 15 アーキテクチャと同一の変数マッピングを行うよう指示し、レガシーマクロを新しい機械で問題なく動作させることができます。
ブランド比較
| 機能 / バージョン | Fanuc Series 15 / レガシー制御盤 | Fanuc Series 16 / 18 / 21 / 0i (モダン) |
|---|---|---|
| 工具補正システム変数 | レガシーな工具オフセット変数マッピングを使用します。 | マシニングセンタ用にはモダンな標準変数マッピングである #2001〜#2200 を使用しますが、パラメータ 6000#3 (V15) を 1 に設定することでレガシーエミュレーションをトグルできます。 |
| 旋盤とマシニングセンタのマッピング | 補正用にレガシーな専用アドレスを必要とします。 | Mシリーズは連続した変数 #2001〜#2200 を使用します。Tシリーズはオフセットを #2001〜#2064 (X摩耗)、#2101〜#2164 (Z摩耗)、および #2201〜#2264 (工具ノーズ摩耗) に分割します。 |
| 変数リセット挙動 | 揮発性変数は機械リセット時に自動的にクリアされます。 | 変数保持の設定を可能にします。パラメータ 6001#6 (CCV) および 6001#7 (CLV) が、リセット時に #100〜#149 および #1〜#33 を空 (0) にクリアするか保持 (1) するかを規定します。 |
技術解析
FanucのCustom Macro Bアーキテクチャの解析により、後方互換性と安全設定に焦点を当てた設計が明らかになります。旋盤(Tシリーズ)とマシニングセンタ(Mシリーズ)のアプリケーション間の主な違いは、システム変数オフセットマッピングにあります。Mシリーズは、#2001 から #2200 までの統一された連続アレイを使用します。Tシリーズは、多軸旋盤のジオメトリに対応するためにオフセットを分離しています。X摩耗(#2001〜#2064)、Z摩耗(#2101〜#2164)、および工具ノーズR摩耗(#2201〜#2264)に分割します。この分離は、旋盤加工中の座標衝突を防ぎますが、プログラマーは機械タイプに応じて軸に特化したマクロを記述する必要があります。
後方互換性はパラメータ 6000#3 (V15) を通じて維持されます。このパラメータを 1 に切り替えることで、最新の Series 16 または 18 コントローラーに対し、変数アドレスをレガシーな Series 15 ハードウェアと一致するように変換するよう指示します。これにより、加工現場はプログラムを書き直すことなく、数十年前のマクロプログラムを実行できます。
さらに、メモリのクリア動作はパラメータによって駆動されます。標準設定では、ローカル変数と共通変数はリセット時にパージされ、古いデータの実行を防ぎます。しかし、パラメータ 6001#6 (CCV) を 1 に設定すると共通変数が保持されます。同様に、パラメータ 6001#7 (CLV) を 1 に設定するとローカル変数が保持され、プログラムの途中でサイクルが再起動された場合に座標シフトにつながる可能性があります。
プログラム例
Fanuc G-Code Example
O9010 (FANUC CUSTOM MACRO B EXAMPLE) ;
#100 = #1 + #2 ;
IF [#100 GT 10.0] GOTO 5 ;
#1 = 1.0 ;
WHILE [#1 LT 5.0] DO 1 ;
G91 G01 Z-2.0 F150 ;
G90 G01 X#100 F300 ;
G00 Z2.0 ;
G00 X0 ;
#1 = #1 + 1.0 ;
END 1 ;
GOTO 10 ;
N5 #3000 = 1 (SUM EXCEEDS LIMIT) ;
N10 M99 ;
空運転 (dry run)の実行
G65マクロプログラムの空運転中、制御盤はコマンド G65 P9010 A1.0 B2.0 を受信します。アドレス A はローカル変数 #1 (1.0) に、B は #2 (2.0) にマッピングされます。インタープリターは #1 と #2 の合計を計算し、共通変数 #100 に 3.0 を格納します。続いて条件 IF [#100 GT 10.0] をチェックします。3.0 は 10.0 より大きくないため、ブロック N5 への分岐はバイパスされます。その後、変数 #1 がループカウンターとして 1.0 に初期化されます。WHILE [#1 LT 5.0] DO 1 ループが始まります。工具は Z 軸方向に 2.0 mm のインクリメンタル切込みを実行し、絶対位置 X3.0 に移動し、逃げてから X0 に戻ります。変数 #1 は 1.0 ずつインクリメントされます。このループは、#1 が 5.0 に達するまで4回(#1 = 1.0、2.0、3.0、4.0のとき)繰り返されます。その時点でループが終了します。インタープリターは GOTO 10 によりブロック N10 にジャンプし、M99 を実行してメインプログラムに制御を戻します。
エラー解析
| ブランド名 | アラームコード | トリガー条件 | オペレーターの症状 | 根本原因 / 対策 |
|---|---|---|---|---|
| Fanuc | 112 (PS0112) | ZERO DIVIDE: マクロ演算式内でゼロ除算が指定されました。 | CNC制御盤がサイクル途中で瞬時に緊急停止し、「ZERO DIVIDE」アラーム画面を表示します。 | 除数変数がゼロでないことを確認してください。除算の前に条件チェックを追加します。 |
| Fanuc | 114 (PS0114) | FORMAT ERROR IN MACRO: G65ブロックで未定義のHコードが使用されたか、式に不正なフォーマットが含まれています。 | インタープリターが実行を停止し、「FORMAT ERROR IN MACRO」メッセージを表示します。 | 数式のフォーマットを確認し、ブラケットのペアが一致しているか確認し、G65アドレスコードが有効であることを検証してください。 |
| Fanuc | 116 (PS0116) | WRITE PROTECTED VARIABLE: 書込み禁止(読取り専用)の変数が代入文の左辺に配置されました。 | 機械がロックし、軸移動を停止して「WRITE PROTECTED VARIABLE」エラーを表示します。 | 読取り専用のシステム変数(座標ステータスやスキップ信号など)にデータを書き込まないでください。 |
| Fanuc | 118 (PS0118) | TOO MANY BRACKET NESTING: ブラケットのネスト [] が5レベル制限(5重ネスト)を超えました。 | 制御盤がブロックを解析できず、「TOO MANY BRACKET NESTING」を発生させて停止します。 | 数式内のネストされたブラケットの深さを5レベル以下に減らしてください。 |
| Fanuc | 124 (PS0124) | MISSING END STATEMENT: DOコマンドが対応するENDコマンドなしでプログラミングされました。 | ループを開始する前に、NCの実行が「MISSING END STATEMENT」アラームで停止します。 | すべての DO ブロックに、一致するインデックスを持つ END ステートメント(例:DO 1 と END 1)があることを確認してください。 |
実務応用ノウハウ
段取り前に6001#6や6001#7番パラメータを確認することで、このコマンドで最も多い非計画停止を防げる。このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見される。特に、機械リセット時に共通変数 #100 〜 #149 をクリアする 6001#6 (CCV) およびローカル変数 #1 〜 #33 をクリアする 6001#7 (CLV) を 0(クリア)に構成することは、割り込み停止後の再起動に伴うタレットとチャックの激突を防止する絶対的な防壁となる。これらの変数保持設定が 1 のまま放置されると、メモリに残留した座標ズレが蓄積し、結果として再現性の低下による重大な不良品発生を引き起こす。さらに、マクロ計算式内でのゼロ除算(除数に 0 が指定されること)は即座にゼロ除算アラーム 112 (PS0112) をトリガーし、サイクル途中の切削加工を強制中断させる。また、複雑なネスト構造を記述する際、ブラケット [] のネストが5レベル制限を超えるとブラケットネストエラー 118 (PS0118) が発生し、加工プログラムが始動すらできなくなる。オペレーターは量産に入る前に、SBMパラメータ(6000#5)を 1 に設定してシングルブロック停止を有効にし、初品で変数への実数値の代入と分岐ロジックが安全に動作するかをステップ実行で目視検証する必要がある。
関連コマンド
M98(サブプログラム呼び出し): ローカル変数の受け渡しや算術論理演算の評価を行うことなく、標準的な静的サブプログラムを実行します。G65呼び出しに代わるシンプルな代替手段を提供します。詳細は M98入れ子(ネスト)サブプログラム のガイドを参照してください。M198(外部機器サブプログラム呼び出し): CFカードやサーバーパスなどの外部メディアに保存されたサブプログラムを呼び出し、内部メモリに収まらない大きなプログラムファイルを機械で実行できるようにします。サブプログラムのワークフローについては、 サブプログラムの作成と呼び出し のガイドを参照してください。BPRNT/DPRNT(外部データ出力): 変数値とフォーマットされたテキストを外部コンピュータやシリアル機器に出力し、プログラマーが計測データやサイクルメトリクスをログ記録できるようにします。
おわりに
量産プロセスにおけるロット間ばらつきをゼロに抑え、高価なCNCタレットやワークチャックの破損事故を回避するためには、Custom Macro Bの変数管理と構文上の安全限界の順守が欠かせない。パラメータ 6001#6 および 6001#7 を 0 に設定して変数をリセット時にパージする仕様を標準化し、除数判定チェックをすべてのマクロ式に埋め込むことは、再現性の低下や不要な不良品発生を排除するための不可欠な実務である。加工現場での段取り工程において、これらの安全設定をチェックリストに組み込み、パラメータ検証をルーチン化することを強く推奨する。
よくある質問
カスタムマクロBの加工途中でリセットをかけた後、プログラムを再スタートした際にロット間で寸法ばらつきが発生するのはなぜですか?
機械リセット時にローカル変数(#1〜#33)や共通変数(#100〜#149)をクリアするパラメータ(6001#7や6001#6)が1(保持)になっていると、古い変数データがメモリに残り、座標計算が狂って再現性の低下を招くためです。実務アクション:段取り前にパラメータ 6001#6 (CCV) と 6001#7 (CLV) を 0 に変更し、リセット時に変数が空(vacant)になるよう強制設定してください。
Fanuc制御盤でマクロ実行中にアラーム112(ZERO DIVIDE)が発生して非計画停止するのを防ぐ方法は?
マクロプログラム内で変数による除算(例:#100 = #1 / #2)を実行する際、除数となる変数(#2)に 0 が入力されるとトリガーされます。特に角度計算などで正接(TAN 90°)が発生した際も同様です。実務アクション:除算コマンドの手前に「IF [#2 EQ 0] GOTO 999」のような条件分岐を追加し、除数が 0 の場合はアラーム処理(#3000)へジャンプする安全コードを記述してください。
マクロプログラムでアラーム118(TOO MANY BRACKET NESTING)がトリガーされる原因と、その解消手順は?
FanucのCustom Macro Bでは、数式や論理判定内の大括弧(ブラケット)「[]」のネストが最大5レベルに制限されており、これを超えた複雑な演算式を記述するとインタープリターが解析不能となります。実務アクション:1ブロックに詰め込んだ複雑な計算式を、中間変数(#100や#101など)を用いて複数の単純な代入ブロックに分割して記述し直してください。
まだ解決しませんか?
このトピックについて、AIアシスタントに自然言語で質問できます。検証済みの情報源に基づいており、ハルシネーションはありません。

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)
CNC工作機械業界のあらゆる分野で25年以上の経験を持ち、ブランドに依存しないコンサルティング、エンジニアリング、純正部品サービスを提供するCNC CAREの共同創業者として活動を続けています。
関連記事
このトピックに関する他の記事
Fanuc 3D干渉チェックの設定手順と干渉回避パラメータ
Fanucの3D干渉チェックパラメータ設定手順を解説。パラメータ10930#0や10930#5の検証、アラームPS0492への対処、PMC信号TDICHGによる変更反映手順を解説し、ロット加工における激しい衝突事故や不良品発生を防ぐ実務技術。
Fanucカスタムマクロ有効化パラメータ(0932/8135)の設定と衝突回避ガイド
Fanucカスタムマクロ有効化パラメータ0932および8135の設定手順、共通変数拡張、工具補正マッピング(V15)について解説。ロット間での再現性低下やアラーム123による非計画停止、チャックやバイスジョーへの激しい機械衝突(ハードクラッシュ)を防ぐ段取り実務。
Fanucの工具寿命管理パラメータ設定方法と衝突を防止する段取り手順
Fanucの工具寿命管理パラメータ(6800#2、6810)の正しい設定方法を解説。登録時のエラーアラーム156や159の発生原因と対策を提示し、量産時の工具折損に伴うspindleやturretの衝突事故(ハードクラッシュ)を防ぎ、ロット間の加工精度と高い再現性を維持します。
Fanucリジッドタッピング加減速パラメータ:設定手順と衝突防止ガイド
Fanuc CNCにおけるリジッドタッピング用の最適なトルク加減速パラメータ(11420#0や5214番など)の設定手順を徹底解説。ギア固有の加減速調整やアラームSP0741、衝突事故を防止してロット生産の繰り返し精度と加工品質を高める実務ノウハウを紹介。