マクロを使いこなせていないと、1日あたり最大2時間の段取りロスが発生することがあります。
CNC加工の現場では、同じ形状を寸法違いで大量に加工するケースが日常的に発生します。その際、通常のGコードプログラムを毎回書き直すのは非効率であり、プログラムミスのリスクも高まります。そこで活躍するのが「マクロプログラミング」です。
マクロプログラミングとは、変数・演算・条件分岐・繰り返し処理などのプログラミング的要素をNCプログラムに組み込む技術です。ファナック製コントローラーでは「カスタムマクロB」として広く知られており、日本の金属加工現場の大半で使われているファナック系のCNCに標準的に搭載されています。
変数は「#1」「#100」などの記号で表され、「#1 = 50.0」のように数値を代入して使います。たとえば穴あけ加工のサイクルを組む際に、ピッチ間隔や穴数を変数として定義しておけば、品番が変わっても変数の数値を変えるだけで全体のプログラムが自動的に対応します。つまり1本のプログラムで複数品番に対応できるということです。
演算も重要な要素です。加算・減算・乗算・除算のほか、三角関数(SIN、COS)や平方根(SQRT)も使えます。円弧補間を複数点で近似する際や、テーパー面の座標計算を自動化する場面で特に威力を発揮します。
| 変数の種類 | 番号の範囲 | 用途 |
|---|---|---|
| ローカル変数 | #1~#33 | マクロ呼び出し時の引数受け渡し |
| コモン変数 | #100~#149(一時)/ #500~#999(保持) | プログラム間での値の共有・保持 |
| システム変数 | #1000番台以降 | 機械座標・工具補正値・アラーム情報など |
コモン変数の中でも#500番台以降は電源を切っても値が保持されます。段取り替え後に前回の補正値が残っていて誤加工につながるケースがあるため、使用後のクリアを習慣化することが基本です。
マクロプログラミングを現場で活用するには、使用しているコントローラーの種類と対応仕様を正確に把握しておく必要があります。コントローラーが違えば、同じ処理でも記述方法が異なる場合があるためです。
国内の金属加工現場で最も多く使われているのはファナック(FANUC)製のコントローラーで、シェアは国内CNC市場の50〜60%を占めるとされています。ファナックのカスタムマクロBは最も情報が多く、書籍や社内資料が充実しているのが強みです。
次いで多いのが三菱電機のMELDAS(メルダス)シリーズです。三菱のマクロは「ユーザマクロ」と呼ばれ、基本的な変数・演算・条件分岐の考え方はファナックと共通しています。ただし命令語の一部(例:GOTO文の書き方やシステム変数の番号体系)が異なるため、ファナックで覚えた知識をそのまま転用すると文法エラーが出ることがあります。意外ですね。
ヤマザキマザックの「MAZATROL」やオークマの「OSP」は、それぞれ独自のCNC言語体系を持っています。特にMAZATROLは会話型プログラミングを主体としており、マクロプログラミングの概念がやや異なります。OSPはファナック互換のモードを持つ機種もありますが、完全互換ではない点に注意が必要です。
| コントローラー | マクロの名称 | 互換性の目安 |
|---|---|---|
| FANUC(ファナック) | カスタムマクロB | 業界標準・情報豊富 |
| 三菱電機 MELDASMAGIC | ユーザマクロ | 基本互換・細部差異あり |
| オークマ OSP | ユーザタスク2 | 部分互換・要確認 |
| ヤマザキマザック MAZATROL | 独自言語 | 互換なし・別途習得必要 |
複数の機械を扱う現場では、機械ごとのコントローラーの仕様差を一覧表で管理しておくと転記ミスを防げます。これが条件です。
マクロプログラミングの真価が発揮されるのは、条件分岐(IF文)と繰り返し処理(WHILE文またはGOTO文)を組み合わせた自動化サイクルの構築です。
条件分岐は「IF 条件 GOTO n」または「IF 条件 THEN 〇〇」の形式で記述します。たとえば「穴数が設定値を超えたらサイクルを終了する」「加工深さが特定値に達したら送り速度を変える」といった制御が可能になります。どういうことでしょうか?具体的には、穴あけサイクルで10個の穴を等ピッチで加工する場合、カウンター変数(例:#1)を使ってGOTO文で繰り返し処理を組むと、穴数を変数#2に入力するだけで5個でも20個でも対応できるプログラムになります。
繰り返し処理にはGOTO文のほかにWHILE〜DO〜END構文も使えます(ファナック16i以降で対応)。WHILE構文のほうがネストの管理が明確になりやすく、複雑な加工ロジックを組む際には推奨されます。
```
#1 = 1 ; カウンター初期化
#2 = 10 ; 穴数設定
#3 = 20.0 ; ピッチ(mm)
WHILE #1 LE #2 DO1
G81 X#3*#1 Y0 Z-10.0 R2.0 F100 ;
#1 = #1 + 1
END1
```
上記の例では、X方向に20mmピッチで10個の穴あけを自動で実行します。#2の値を変えるだけで穴数を変更でき、プログラムの書き換えは最小限です。これは使えそうです。
実際の現場では、条件分岐ミスによる「加工が止まらない無限ループ」や「座標計算の符号ミスで工具が逆方向に移動する」事故も報告されています。繰り返し処理を組む際には、必ず終了条件を確認し、シミュレーションを先行させることが基本です。
マクロプログラミングの誤設定は、加工不良・機械停止・最悪の場合は工具や ワークの破損につながります。現場でよく発生するエラーパターンを知っておくことが、コスト損失を防ぐ最短ルートです。
最も多いエラーのひとつが「未定義変数の参照」です。ファナック系コントローラーでは、値が代入されていない変数を参照すると「空値(ヌル)」として扱われ、計算結果が予期しない値になります。#1に値が入っていない状態で「X#1」を実行すると、X軸が0またはヌル位置に移動しようとしてアラームが出ることがあります。
次に多いのが「システム変数への不正書き込み」です。システム変数の一部は読み取り専用で、誤って書き込もうとするとP/Sアラーム(プログラムエラー)が発生します。特に初学者が混乱しやすいのは、工具補正値を格納するシステム変数(例:#2001以降)で、読み書き可能ですが値の変更が実際の補正に即時反映される点です。
不良品が1件発生した場合のロスは、材料費・工具費・段取り工数を合算すると数万円規模になることも少なくありません。エラー対策が原則です。
マクロプログラムを本番投入する前には、機械の「ドライラン」機能と「シングルブロック実行」を組み合わせて動作確認を行うことが推奨されます。また、ファナック製コントローラーであればプログラムチェック画面で変数の値をリアルタイムに確認できるため、段階的な検証が可能です。
マクロエラーの体系的な情報は、ファナック公式の技術資料やサービスマニュアルに詳しく記載されています。以下のリンクも参考になります。
ファナック株式会社 CNC製品情報ページ(コントローラー仕様・マクロ対応機種の確認に有用)
マクロプログラミングを実際に導入した製造現場では、段取り時間や加工プログラム作成工数の大幅削減が報告されています。ここでは、汎用的な応用事例をもとに具体的な効果を整理します。
ある中小の旋盤加工業者では、直径・長さ・ねじピッチが異なる同系統のボルト類を月産500〜800本加工していました。以前は品番ごとに個別プログラムを作成しており、段取りエンジニアが1品番あたり平均30〜40分をプログラム作成・確認に費やしていました。マクロ化後は変数の数値入力のみで対応できるようになり、作成時間が平均5〜7分に短縮。月間の段取り工数削減は約30%に達したとされています。
別の事例では、フライス加工のポケット加工サイクルをマクロで汎用化した結果、形状ごとのNCプログラムデータ管理が大幅に整理されました。以前は200本以上のプログラムファイルを管理していたのが、マクロ化によって20本程度の汎用プログラムに集約できたケースもあります。管理コストと誤選択リスクが同時に下がるということですね。
コントローラー側の設定最適化も重要な要素です。ファナック系コントローラーでは「パラメータ番号6001〜6009」などでマクロの動作オプションを制御できます。たとえばパラメータ6001のビット設定によって、マクロ実行中の単一ブロック停止の有効・無効を切り替えることができ、量産時には無効化することで加工サイクルを途切れなく実行できます。
これらの事例で共通するのは「最初に変数の設計図(どの変数に何を入れるか)を整理してからプログラムを組む」というアプローチです。変数設計が基本です。設計段階で手を抜くと、後から仕様追加が発生したときに変数が衝突するトラブルが起きやすくなります。
マクロプログラミングの高度な活用は生産性向上に直結しますが、一方で「属人化」という現場リスクを生み出す側面があります。この点は、加工現場でほとんど語られない盲点です。
マクロプログラムは通常のGコードよりも複雑な構造を持つため、作成者以外が内容を読み解くのに時間がかかります。熟練した担当者が1人でマクロを整備・管理している現場では、その担当者が異動・退職した際に誰もプログラムを修正できなくなるケースが実際に起きています。あるメーカーでは、マクロ担当者の突然の退職により、既存の汎用プログラムが変更できなくなり、3か月間は手書きの個別プログラムに戻したという事例もあります。これは痛いですね。
属人化を防ぐには、マクロプログラム内にコメント文(「;」以降に記述するメモ)を充実させることが有効です。「#1 = ワーク直径(mm)」「#3 = 穴数(最大20)」などを明記するだけで、第三者の理解度が大幅に向上します。
さらに、社内での「マクロプログラム仕様書」の整備も推奨されます。仕様書には変数一覧・想定加工範囲・コントローラーの機種・作成日と更新日を最低限記載します。A4用紙1枚程度でも十分に機能します。
マクロプログラムの属人化は、1人の退職・異動で数十万円規模の再整備コストを生む可能性があります。技術資産として組織で管理することが、長期的には最も大きなコスト削減につながります。つまり、マクロスキルの組織化が本当の生産性向上です。
三菱電機のCNCコントローラー技術情報については以下も参考になります。
三菱電機 FAサイト CNCコントローラー製品情報(MELDASシリーズの仕様・マクロ対応確認に有用)