インクリメンタル指令とはGコードで使う増分値指令の仕組みと実践
G91に切り替えただけで、工具が材料に食い込んで高額ワークを1個廃棄した事例があります。
インクリメンタル指令とはどんな動きをするのか:G91の基本概念
インクリメンタル指令(G91)とは、NCプログラムにおいて「今いる位置から、どの方向にどれだけ動くか」を数値で伝える方式です。別名「増分値指令」とも呼ばれ、現在の工具位置を基準(ゼロ)として移動量を指令します。
対になる概念がアブソリュート指令(G90)で、こちらはあらかじめ決めたワーク座標の原点を基準にした絶対座標を指令します。つまり、どこに工具がいても同じ座標値を入力すれば必ず同じ位置に移動します。
わかりやすい例で整理しましょう。工具が現在X50の位置にいて、X80の位置に移動したいとします。
- アブソリュート指令(G90)の場合 :`G90 G00 X80.` → ワーク原点からX80の「場所」を指定
- インクリメンタル指令(G91)の場合 :`G91 G00 X30.` → 今いる位置から「+30mm動く量」を指定
結果的に工具は同じ位置に到達しますが、座標の捉え方が全く異なります。これが根本的な違いです。
G90とG91はどちらもモーダルなGコードです。つまり、一度書いたら次の行でも有効であり続けます。G90を書くまでG91の状態が維持されるため、プログラム内でG90とG91が混在している場合は特に注意が必要です。
| 項目 | インクリメンタル指令(G91) | アブソリュート指令(G90) |
|---|---|---|
| 基準点 | 現在の工具位置 | ワーク座標の原点(G54など) |
| 入力する値 | 移動量(増分値) | 移動先の座標値(絶対値) |
| Gコード | G91 | G90 |
| 別名 | 増分値指令・相対座標指令 | 絶対値指令 |
| 主な用途 | 繰り返し加工・サブプログラム | 複雑形状の加工・通常加工 |
座標の考え方が違うだけです。しかし、この違いが現場のミスに直結します。
インクリメンタル指令とアブソリュート指令の違い:座標系の決定的な差
G90とG91の違いは「地図の使い方」の違いに例えると理解しやすくなります。目的地の「住所(緯度・経度)」を伝えるのがアブソリュート指令で、「今いる場所から北に200m、東に100m」と伝えるのがインクリメンタル指令です。
具体的な数値で確認してみましょう。工具が現在「X100、Y100」の位置にいて、そこから「X30、Y10」という指令を与えたとします。
- G90(アブソリュート) の場合:工具は座標「X30、Y10」の位置に移動する
- G91(インクリメンタル) の場合:工具は現在位置から+X30、+Y10だけ動き、座標「X130、Y110」に移動する
同じ数値「X30、Y10」でも、G90とG91では全く異なる場所に工具が移動します。これは重大な誤差を生む原因になります。
アブソリュート指令の最大のメリットは「工具がどこにいても、同じ座標を指令すれば必ず同じ場所に行く」という確実性です。設計変更や修正が発生したとき、その座標値1か所だけを書き換えれば済みます。
一方、インクリメンタル指令は「どこにいても、同じ移動量だけ動かせる」という柔軟性がメリットです。修正が必要になった場合は注意が必要で、ある座標を変更すると、それ以降の全ての行の座標値も連鎖的に計算し直す必要が生じます。
これは手間の問題だけではありません。修正が複数行にわたる場合、1か所の計算ミスがその後の全工程のズレにつながります。つまりG91でのプログラム修正は、連鎖修正リスクが高い作業だということです。
現場では「主プログラムはG90(アブソリュート)で組み、特定の場面でG91(インクリメンタル)を局所的に使う」という運用が一般的です。
参考:NCプログラムのアブソリュート指令とインクリメンタル指令についての解説(nc-program.s-projects.net)
アブソリュート指令(G90)とインクレメンタル指令(G91)の使い分け詳解 – NCプログラム解説サイト
インクリメンタル指令のデメリットと加工ミスを防ぐ注意点
G91には便利な面がある反面、見落としやすい重大なデメリットが2つあります。これを知らずに使うと、工具やワークを破損するリスクがあります。
デメリット①:1か所のミスが全行に連鎖する
アブソリュート指令でミスがあった場合、影響はそのブロック1か所だけです。しかしインクリメンタル指令では、ある座標値を1mm間違えると、それ以降の全ての工具位置が1mmずつズレていきます。10ブロック後にも、30ブロック後にも、同じズレが引きずられます。
たとえば、10か所に等間隔で穴を開けるプログラムを組んでいて、3か所目の移動量を「X20.0」のところ「X2.0」と入力したとします。3か所目以降は全て「-18mmずれた位置」に工具が移動し、ワークが全滅するという事態になります。
デメリット②:Z軸の動きが「見てわからない」
アブソリュート指令でZ軸を指令する場合、座標値を見るだけで「今工具は材料の中にいるのか、外にいるのか」が一目でわかります。ところがインクリメンタル指令のZ軸移動では、指令値がプラスかマイナスかだけでは工具が材料の中に刺さっているかどうかを座標数値から直接判断できません。
これはシミュレーション確認が欠かせない理由の一つです。G91でプログラムを組んだ場合は、実機稼働前に必ずドライランやツールパスシミュレーションで動きを目視確認してください。
ミスを防ぐための実践的な対策として、以下の3点を意識することが重要です。
- 🔍 G90とG91の切り替えポイントに必ずコメントを入れる(例:「(G91 START)」「(G90 RETURN)」)
- 🖥️ CAMソフトのシミュレーション機能で実行前にパスを確認する
- 📋 G91ブロックはできる限り短くまとめ、G90への復帰を忘れない
参考:職業訓練用教材「NCプログラミング基礎」(穴吹学園)でもインクリメンタル指令の連鎖ズレについて明記されています。
NCプログラミング基礎 テキスト(穴吹学園 モノカレッジ) – インクレメンタル指令のデメリットを含む基礎解説PDF
G91は危険なコードではありません。正しい場面で正しく使えば強力なツールです。
インクリメンタル指令が活きる場面:サブプログラムと繰り返し加工への応用
G91(インクリメンタル指令)が本当に力を発揮するのは、「同じ動作を異なる位置で何度も繰り返す加工」です。これはサブプログラム(M98)との組み合わせで特に効果的です。
たとえば、ワーク上の2か所に全く同じ形状の穴加工と溝加工をする場合を考えてみましょう。G90(アブソリュート)だけで書くと、1回目の加工用と2回目の加工用で座標値がすべて異なるため、ほぼ同じプログラムを2セット書く必要があります。
実際の比較データがあります。加工深さ18mm・6mmずつ3回切削のプログラムを例にすると、以下のような差が生まれます。
| プログラムの種類 | 穴加工の文字数 | 溝加工の文字数 |
|---|---|---|
| G90のみで作成 | 373文字(42ブロック) | 725文字(66ブロック) |
| G91+M98で作成 | 271文字(メイン)+44文字(サブ) | 271文字(メイン)+97文字(サブ) |
G90だけの場合と比べ、G91とM98を組み合わせることで総文字数を概ね3割〜5割削減できます。加工回数が増えるほどこの差は拡大します。
これは使えそうです。仕組みを整理しましょう。
G91でサブプログラムを書いた場合、そのサブプログラムは「今いる位置からの相対的な動き」だけが記述されています。そのため、メインプログラムでどの座標に工具を配置してからサブプログラムを呼び出しても、全く同じ相対動作が実行されます。これが「ワーク座標に関係なく同じ動きができる」というG91の強みです。
ただし、サブプログラム内でG91を使ったらサブプログラム終了(M99)の直前に必ず「G90」でアブソリュート指令に戻すことを徹底してください。そうしないとメインプログラムに戻った後もG91モードが有効のまま継続し、次の工具移動が予期しない場所への移動になる可能性があります。
G90への復帰が条件です。この1行を忘れると工具衝突のリスクが高まります。
参考:G91インクレメンタルとM98サブプログラムを使ったNCプログラム作成の実例(pon-osi.com)
G91インクレメンタルとM98サブプログラムを使ってスマートなNCプログラム作成 – ポン押し卒業265
インクリメンタル指令とアブソリュート指令の使い分け:現場プロの判断基準と独自視点
「G91はG90に比べて難しい」という認識を持っている方も多いですが、実際には「どちらをいつ使うか」の判断軸を1つだけ持っておけば十分です。
判断の軸は「プログラムを使い捨てにするか、再利用するか」です。
1品だけの特注加工など、そのワークにしか使わないプログラムであれば、G91で短く書いた方が作成スピードは速くなります。一方、量産加工・繰り返し加工・汎用サブプログラムとして使い回すことを想定するなら、メインプログラムはG90で組み、G91はサブプログラム内の繰り返しブロックに限定するのが賢明です。
実際に多くの現場で採用されている基本的な運用ルールを整理すると次のとおりです。
- ✅ メインプログラムはG90(アブソリュート)で統一する
- ✅ 繰り返しブロックをサブプログラム化する場面でG91を活用する
- ✅ G91を使うブロックは短くまとめ、出口でG90に戻す
- ❌ G90とG91が何百行もごちゃ混ぜになった長大プログラムは作らない
ここに、あまり語られない重要な観点があります。それは「他人が見たときに読めるかどうか」という視点です。
NCプログラムは書いた本人だけが使うわけではありません。段取り担当者が変わったとき、あるいは数か月後に自分が見返したとき、G91が混在したプログラムは非常に読み解きにくくなります。G91の指令は「今どこにいるか」を頭の中で追い続けないと理解できないからです。
これに対してG90プログラムは、座標値を見るだけで工具の現在位置が直感的にわかります。工具の位置が把握しやすいということは、ミスの発見も早くなるということです。
多品種少量生産が増えている現代の金属加工現場では、「後任者でも読めるプログラム」の重要性が増しています。G91を多用することでプログラムが読みにくくなり、1本の修正に予想以上の時間がかかるというコスト損失は、現場では実は珍しくありません。
G90が原則です。G91はサブプログラムなど「繰り返しの場面」に絞って使うのが、現場レベルでのベストプラクティスといえます。
プログラムの保守性を高めたい場合は、CAD/CAMソフト側でサブプログラムの自動生成やシミュレーションが可能な環境を整えることも選択肢の一つです。たとえばFusion 360(旧Fusion 360 CAM)やMastercamといったCAMソフトでは、ポスト処理設定でG90/G91の出力ルールを統一管理することができます。
参考:HILLTOP株式会社の現場事例。5軸加工機を使う同社では、複雑形状のため全NCプログラムをCAD/CAMで作成し、原則G90(アブソリュート)を採用。プログラマーとオペレーターの分業を円滑にするためにも「他者が読める」G90主体の運用が有効と述べています。