インクリメンタル指令とはGコードG91の基本と使い分け

インクリメンタル指令とはGコードG91の基本と使い分け

G91だけで書いたプログラムは、1か所のミスで以降のブロックが全てずれてワークが廃棄になります。

この記事でわかること
📐

インクリメンタル指令の基本

G91(増分値指令)は「今いる位置から何mm動くか」を指令する方法です。アブソリュート指令(G90)との根本的な違いを理解しましょう。

⚠️

G91の致命的なリスク

座標値を1か所でも間違えると、それ以降の全ブロックの工具位置がずれます。アブソリュート指令との違いを知らないと加工不良に直結します。

🔧

G91が真価を発揮する場面

サブプログラム(M98)と組み合わせると、繰り返し加工のプログラムを大幅に短縮できます。使い方次第で生産効率が劇的に変わります。

インクリメンタル指令とはNCプログラムにおける「現在位置基準」の指令方法

インクリメンタル指令(増分値指令)は、NCプログラムの中で工具の移動先を「今いる位置からの距離と方向」で指定する方法です。Gコードでは G91 がこれに該当します。対になる概念として、あらかじめ決めた原点(ワーク座標系の原点)からの絶対位置で指令する G90(アブソリュート指令) があります。

インクリメンタルという言葉は英語の “increment”(増加・増分)に由来します。そのため「増分値指令」とも呼ばれます。マシニングセンタやNC旋盤、NCフライス盤など、ほぼすべてのNC工作機械で使用されており、FANUCや三菱電機の制御装置でも同じG91コードが共通で使われているケースがほとんどです。

なぜ「増分値」と呼ぶのか?
G91では、現在の工具位置を新たな基準点(仮の原点)として扱い、そこからの移動量(増分量)を数値で指令します。例えば「G91 G01 X30. Y10.」と指令した場合、現在の工具位置から X方向に+30mm、Y方向に+10mm の位置に工具が移動します。このとき、ワーク座標系の原点がどこにあるかは関係ありません。
これに対してG90(アブソリュート指令)で「G90 G01 X30. Y10.」と書いた場合は、工具がどこにいてもワーク座標原点からX30mm、Y10mmの絶対位置に移動します。同じ数値でも、G90とG91では意味がまったく異なります。これが基本です。

つまりG91とG90の違いは「原点をどこに置くか」の違いです。

指令方式 Gコード 別名 原点
インクリメンタル指令 G91 増分値指令・相対座標指令 現在の工具位置
アブソリュート指令 G90 絶対値指令 ワーク座標系原点(G54など)

また、G90とG91はどちらもモーダル指令です。モーダルとは「一度指令すると、別の指令で切り換えるまで有効な状態が続く」という意味です。G91を1行書くと、以降のすべてのブロックがインクリメンタル指令として解釈されます。G90が現れるまで解除されません。この性質が現場でのミスにつながりやすい点でもあります。

参考:Gコードの基礎と一覧(FANUCや三菱向け)を整理したNCプログラム学習サイト。G91の詳細仕様やモーダルグループについて確認できます。

G90, G91(アブソリュート指令、インクレメンタル指令)- NCプログラムの部屋

インクリメンタル指令の具体的な動きをNC旋盤とマシニングで理解する

概念だけ読んでも、現場で活かすのは難しいです。具体的な数値で動きを確認しましょう。

【例:マシニングセンタでの穴あけ移動】

現在の工具位置が、ワーク座標原点(G54)から「X100. Y100.」にあるとします。

  • G90(アブソリュート)で「G90 G00 X200. Y100.」と指令した場合
    → ワーク原点から見てX200の絶対位置に移動。つまり工具はX方向に100mm移動する。
  • G91(インクリメンタル)で「G91 G00 X200. Y100.」と指令した場合
    → 現在地から X200mm、Y100mm 追加移動する。つまり最終位置はX300. Y200.になる。

同じ「X200. Y100.」という数値でも、G90かG91かでまったく別の位置に動きます。現場でG90とG91を混同すると、工具がワークに予想外の方向から突っ込む危険があります。

【NC旋盤での例】

NC旋盤でも同様に、チャックのバイト位置(Z軸方向など)の制御に使われます。Z軸方向に繰り返し同じ切込み量で加工するケースでは、G91で「Z-5.」と書くことで「現在地から5mm切り込む」という指令が一定量の切削に有効です。毎回絶対座標を計算する手間が省けます。

【重要なポイント:G91はモーダルなので切り忘れに注意】
G91を使った後にG90への切り換えを忘れると、次の加工ブロックでも引き続きインクリメンタル指令として解釈されます。これが工具の意図しない移動につながります。G91を使った後は、必ず使用範囲が終わったタイミングで G90 に戻すことが原則です。

G91がモーダルであることを知らないと危ないです。

また、円弧補間(G02・G03)の中心点を指定する I・J・K は、G90モードでもG91モードでも常にインクリメンタル(現在位置からの増分値)として扱われます。これはFANUCなどの主要NC装置で広く採用されているルールで、意外に知られていない仕様のひとつです。

参考:マシニングセンタ基礎講座(モノタロウ)。芝浦工業大学の先生が執筆した解説ページで、G91の動作を図解入りで確認できます。

3-1 NCプログラム(インクレメンタルとアブソリュート)- モノタロウ

インクリメンタル指令のデメリットと現場でのミスを防ぐポイント

G91(インクリメンタル指令)には便利な面もありますが、使い方を誤ると深刻な加工不良につながる特性を持っています。現場でよく起きるミスのパターンを整理しておきましょう。
①座標値を1か所でも間違えると、以降の全ブロックがずれる
G90(アブソリュート指令)では、1か所の座標ミスがあっても、その1ブロックだけが誤った位置に動き、次のブロックは正しい絶対座標に戻ります。ところがG91(インクリメンタル指令)では、ミスした位置が「新しい現在地」になってしまうため、それ以降の全ブロックの工具位置がずれ続けます。加工が進めば進むほど、ミスが蓄積されてワーク全体が不良品になります。

座標ミスが連鎖する。これがG91最大のリスクです。

例えば10か所の穴あけを行うプログラムで、3か所目の座標を0.5mm誤入力したとします。G91では4か所目以降すべての穴が0.5mmずれた位置に開きます。ワークの材料によっては廃棄になります。

②Z軸の状態が座標値からわかりにくい
Z軸移動のとき、G91では現在地からの相対移動量しか書かれていないため、工具が材料に食い込んでいるかどうかを座標値だけで判断するのが難しいです。G90であればZ値がワーク表面を基準にした絶対値なので、「Z-5.」なら材料5mm内部、「Z5.」なら材料上方5mmと即座にわかります。G91でこれをやると、ひとつ前のブロックでの工具位置を把握していないと判断できません。
③プログラムの後からのチェック・修正が難しい
G91で書かれたプログラムは、他人が後から見たときに非常に読みにくいです。ブロックの座標値が「前のブロックを知っていないと意味がわからない」という構造になっているためです。設計変更や部分修正が生じた場合、G91では修正箇所の後ろにあるすべての座標値を再計算して書き直す必要があります。G90なら変更したいブロックの座標値だけを直せばOKです。

  • ✅ G90(アブソリュート):ミスは1ブロックだけに影響、プログラムの確認がしやすい
  • ⚠️ G91(インクリメンタル):ミスが全体に波及、プログラムの後からのチェックが難しい

これらのリスクを踏まえ、一般的には主プログラムをG90で作成し、繰り返し加工の部分だけをG91で補うのが現場での基本的な使い方です。プログラムのメインをG91だけで書くことは、プロの現場ではほぼ行われません。

参考:NCプログラミング基礎テキスト(職業訓練用)。インクリメンタル指令のデメリットとして「1か所のミスで以降全てがずれる」「Z軸の状態が把握しにくい」と明記されています。

NCプログラミング基礎(穴名川情報ビジネス専門学校)PDF

インクリメンタル指令がG90より優れるサブプログラムと繰り返し加工での活用法

G91(インクリメンタル指令)が本当に力を発揮するのは、M98サブプログラム呼び出しと組み合わせた繰り返し加工の場面です。ここでは他のサイトではあまり語られない「G91×M98の効果」を、具体的な数値で示します。
【なぜG91×M98が有効なのか?】

同じ形状の加工を複数箇所に行う場合(例:均等ピッチで並ぶ穴加工、複数パターンの溝加工など)、G90のみでプログラムを書くと、場所の数だけほぼ同じ記述が繰り返されます。G91でサブプログラム化すると、「各加工位置への移動はG90でメインプログラムが担当し、各位置での加工動作はG91のサブプログラムが担当する」という役割分担ができます。

これは使えそうです。

【実際のプログラム文字数比較】

あるサイトが公開した実測データによると、同じ穴・溝加工を行う場合のプログラム文字数は以下のとおりです(加工深さ3回の場合)。

プログラム種別 穴加工(文字数) 溝加工(文字数) 必要プログラム本数
G90のみで作成 373文字 725文字 1本
G90+M98で作成 251+36+38文字 251+93+99文字 5本
G91+M98で作成 271+44文字 271+97文字 3本

G91+M98の場合は、プログラム本数が最も少なく、加工回数が増えるほど差が広がります。繰り返し加工が多い工程ほど、G91のサブプログラム化による恩恵が大きくなります。プログラムの本数が少ない分、修正・管理の手間も減ります。

【G91サブプログラムの基本構造】

メインプログラムでG90を使って各加工位置に移動し、そこからM98でサブプログラムを呼び出します。サブプログラム内はG91で書くことで、スタート位置が変わっても同じ動作が再現できます。

(メインプログラム)

G90 G00 X30. Y30. ← 1か所目へ移動(絶対値指令)

M98 P1001 ← サブプログラムを呼び出す

G90 G00 X80. Y30. ← 2か所目へ移動

M98 P1001 ← 同じサブを再利用

(サブプログラム O1001)

G91 G01 X6. F300 ← 現在地から相対移動で加工

G03 I-6.

G01 X-6.

G90 G00 Z30. ← 終了後はG90に戻す

M99 ← メインに復帰

サブプログラム終了後に G90 を明示的に書いて絶対値指令に戻すのがポイントです。書き忘れると次のメインプログラムのブロックがG91として解釈されてしまいます。G90への復帰が条件です。

参考:G91とM98を組み合わせたスマートなNCプログラム作成の実例(文字数比較表あり)。

G91インクレメンタルとM98サブプログラムを使ってスマートなNCプログラム作成 – ポン押し卒業265

インクリメンタル指令の使い分け判断フローとアブソリュートとの混用ルール

G90とG91のどちらを使うかは、「加工内容」と「プログラムの再利用性」の2点で判断するのが基本です。現場ではどちらか一方だけに固執せず、適切な場面で使い分けることが重要です
【G90(アブソリュート指令)が向いている場面】

  • 🔵 図面の寸法を見ながら直接プログラムを書く場合
  • 🔵 複雑な形状で工具位置を常に把握したい場合
  • 🔵 他のオペレーターや後からの担当者がプログラムを確認する場合
  • 🔵 設計変や修正が発生しやすい製品の加工
  • 🔵 5軸加工などの複雑なツールパスを扱う場合

【G91(インクリメンタル指令)が向いている場面】

  • 🟡 同一パターンの加工を複数箇所に行う繰り返し加工
  • 🟡 工具位置が変わっても同じ動きをさせたいサブプログラム
  • 🟡 均等ピッチで並ぶ穴加工(例:50mmピッチで10個並ぶ穴)
  • 🟡 ロールフィーダや一定量の繰り返し位置決め
  • 🟡 使い捨ての短いプログラムで素早く対応したい場面

【G90とG91を混用する際の鉄則】

G90とG91は1つのプログラム内で混用できます。ただし、以下のルールを守らないと事故につながります。

  1. G91を使い終わったら、必ずG90に戻す(同じブロック内か、次のブロックの先頭に記述)
  2. G91のサブプログラムはM99(サブプログラム終了)の前にG90を書く
  3. G91の有効範囲を明確にコメントで記載する(後からプログラムを見る人への配慮)
  4. G91使用後は必ずシミュレーションで工具パスを確認する

判断フローを簡単にまとめると次のようになります。

条件 推奨指令
プログラムを使い回す・繰り返す G91(M98と組み合わせ)
複雑な形状・5軸加工 G90
他人が後から読む可能性がある G90
図面の寸法値をそのまま入力したい G90
短時間で使い捨てプログラムを作る G91(リスク理解の上で)

G90が原則、G91は目的を絞って使うのが正解です。

プログラムのシミュレーションには、職業訓練教材として開発されたフリーソフト「CAM13」のようなツールが活用されています。初学者の段階からシミュレーション確認の習慣をつけると、現場でのトラブルを減らせます。

参考:HILLTOP株式会社の技術コラム。5軸加工を行う現場では「ほぼすべてG90(アブソリュート指令)を使用している」と明記されており、実際の現場での使い方の実態を確認できます。

アブソリュート指令/インクリメンタル指令とは? – HILLTOP株式会社

インクリメンタル指令を現場で安全に使うためのチェックリストと独自視点のすり合わせ

最後に、現場でG91(インクリメンタル指令)を使う際に実践してほしい確認事項をまとめます。他のサイトではほぼ触れられていませんが、「G91を使い終わった後の状態確認」こそが最も事故を防ぐポイントです。
【G91を使う前・使った後のチェックリスト】

  • ☑️ 現在のモードがG90かG91か、画面の座標表示で確認する
  • ☑️ G91の使用範囲(開始~終了ブロック)をプログラムコメントで明示する
  • ☑️ G91使用後のブロックに必ずG90を記述している
  • ☑️ サブプログラム(M99)の直前にG90を書いている
  • ☑️ シングルブロックで動作確認し、工具パスを目視チェックしている
  • ☑️ 最初のワークはドライラン(空動き)で確認した

【独自視点:G91はプログラマーとオペレーターの分業体制に影響する】

現場でプログラマーとオペレーターが分業している場合、G91で書かれたプログラムはオペレーター側での修正・確認が非常に難しくなります。プログラマーがその場にいなければ、ちょっとした座標修正も「前後のブロックとの関係を理解した人でないとできない」という状況が生まれます。

これは時間の損失です。

HILLTOPのような精密部品加工の現場では、「他人のプログラムの把握がしやすい」という理由でG90をほぼ全面採用しています。プログラマーとオペレーターが完全分業の職場ほど、G90主体のほうが組織としての加工効率と品質安定性が高まります。G91を多用するプログラムは「一人親方向き」とも言えます。

G91でサブプログラム化する場合でも、サブプログラム内のコメント行に「G91モード使用中・G90への切り換え済み確認済」といった記述を残す習慣をつけると、後から見た人が誤解しにくくなります。シンプルな一行が、現場の無駄な確認作業を減らします。
【まとめ:G91を使うなら「目的を決めてから使う」が鉄則】

インクリメンタル指令(G91)は、使う場面を選べば強力なツールです。繰り返し加工のサブプログラム化、均等ピッチ加工の効率化など、G90だけでは煩雑になる場面を整理できます。しかし、「なんとなく書きやすいから」という理由で全体をG91で書くのは危険です。1か所のミスがワーク全体の廃棄につながるリスクを、常に念頭に置いてください。

G90が原則、G91は目的限定が基本です。

参考:ファナック系NCプログラムのG91活用事例とG90→G91変換フリーソフトの紹介。サブプログラムとの組み合わせ方を実際のコードで確認できます。

NCプログラム/G91は意外と便利 – じじぃの引出し