アブソリュート指令とインクレメンタル指令の違いと使い分け

アブソリュート指令とインクレメンタル指令の違いと現場での使い分け

インクレメンタル指令(G91)だけでプログラムを書くと、1箇所の修正で後続の座標値を全行書き直すハメになります。

🔑 この記事の3つのポイント
📍

アブソリュート指令(G90)とは

プログラム原点(ワーク座標系)を基準として、工具の移動先を絶対座標で指令する方法。どこにいても同じ座標値を入力すれば同じ位置に移動できる。

📏

インクレメンタル指令(G91)とは

現在の工具位置を起点として、そこからの移動量(増分値)を指令する方法。同じ動きをくり返す加工やサブプログラムで特に効力を発揮する。

⚠️

現場でよくある落とし穴

インクレメンタル指令中に1点だけ座標を変更すると、後続ブロックの移動量がすべてズレる。プログラム修正のたびに大幅な手戻りが発生するリスクがある。

アブソリュート指令(G90)とインクレメンタル指令(G91)の基本的な意味

NCプログラムとは、マシニングセンタやNC旋盤に対して「工具をどこに動かすか」を数値で指示するプログラムです。その指示の方法が2種類あり、それがアブソリュート指令(G90)とインクレメンタル指令(G91)です。

まず「どこを基準にするか」が最大の違いです。

アブソリュート指令(G90)は、あらかじめ設定したワーク座標系の原点(プログラム原点)を基準とします。工具がどの位置にいようとも、指定した座標値(絶対座標)に向かって移動します。「絶対値指令」とも呼ばれ、GコードではG90で宣言します。

たとえば、現在工具が座標(X-50, Y-50)にあるとき、「G90 G01 X-40.0 Y-40.0」と指令すると、原点から見て(X-40, Y-40)の位置へ移動します。現在地は関係ありません。地図上の目的地を「北緯35度・東経139度」と緯度経度で伝えるイメージです。

インクレメンタル指令(G91)は、今いる位置を起点として「そこからどれだけ動くか」を指令します。「増分値指令」とも呼ばれ、G91で宣言します。

同じ状況で「G91 G01 X10.0 Y10.0」と指令すると、現在地から+X方向に10mm・+Y方向に10mm移動します。まさに「いまいる本屋からカフェまで2km北へ」という道案内の感覚です。

つまり基本はここです。

  • G90(アブソリュート):ワーク原点から見た絶対的な位置を指令する
  • G91(インクレメンタル):今いる位置からの相対的な移動量を指令する

マシニングセンタではG90・G91のGコードで切り替えるのが標準ですが、NC旋盤(ファナック制御の場合)はGコードではなくアドレスの種類で区別します。アブソリュートはXとZのアドレス、インクレメンタルはUとWのアドレスを使います。しかもファナックのNC旋盤では同一ブロック内でXとUを混在させることができ、「X方向はアブソリュート、Z方向はインクレメンタル」という柔軟な指令が可能です。これはオークマ(OSP制御)では使えない便利機能で、機械やコントローラのメーカーによって仕様が変わる点は要注意です。

どちらの指令もモーダルGコード(一度宣言すると次のGコードで上書きされるまで有効)として機能します。これが原則です。

参考リンク(アブソリュート指令とインクレメンタル指令の基本):

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

アブソリュート指令とインクレメンタル指令それぞれのメリット・デメリット

2つの指令方法はどちらが「優れている」ということではなく、それぞれに向いている場面が明確に分かれています。

アブソリュート指令(G90)のメリットは、工具の現在位置がひと目で把握できることです。座標値そのものが「原点からの距離」を示しているため、プログラムのどの行を見ても工具がどこにあるかを直感的に確認できます。

もう一つの強みはミスの局所化です。座標値に入力ミスがあった場合、その1行だけを修正すれば済みます。前後の行への影響がありません。複数人でプログラムを管理するような現場でも、他人のプログラムが読みやすいというメリットがあります。

デメリットはNCプログラムの行数が長くなりやすい点です。「同じ動きを10回繰り返す」という加工でも、毎回異なる座標値を記述しなければならないため、プログラムが冗長になります。

インクレメンタル指令(G91)のメリットは、繰り返し動作の記述がシンプルになる点です。「今いる位置から+10mmのところへ」という同じ移動を繰り返す場合は、同一のコードをコピー&ペーストするだけで対応できます。サブプログラムとして使い回しも効くため、同一ピッチで穴を10個空けるような加工に非常に向いています。

これは使えそうです。

デメリットは、プログラム修正の際に影響範囲が広がることです。中間の1点を変更すると、それ以降のすべてのブロックで移動量がズレます。たとえば20行あるプログラムの5行目を修正した場合、6〜20行目の座標値をすべて計算し直す必要が生じることがあります。これが意外と大きな落とし穴で、現場でのミスや手戻りの原因になりやすい点です。

また、インクレメンタル指令で書かれたプログラムは、後から見たときに「この工具は今どこにいるのか」が一目ではわかりません。累積して計算しなければ把握できないため、他人のプログラムを引き継いだ際のデバッグに時間がかかります。厳しいところですね。

比較項目 アブソリュート(G90) インクレメンタル(G91)
基準点 ワーク座標原点 現在の工具位置
位置の把握しやすさ ◎ 常に把握できる △ 計算が必要
ミス修正の手間 ◎ 該当行だけ直せばOK × 後続行も全て見直し
繰り返し加工 △ 全座標を書き直す ◎ コピペで使い回せる
プログラムの長さ △ 長くなりやすい ◎ 短くまとめやすい
設計変への対応 ◎ 1箇所の修正で完結 × 全体の再計算が必要

参考リンク(G90とG91の詳細比較):

NCプログラム基礎知識|アブソリュート指令(G90)とインクレメンタル指令(G91)

アブソリュート指令とインクレメンタル指令の現場での正しい使い分け方

一般的な現場では「基本はアブソリュート指令(G90)、必要に応じてインクレメンタル指令(G91)を補助的に使う」という考え方が主流です。HILLTOPのような5軸加工を手がける企業でも、複雑形状の加工では基本的にアブソリュート指令でNCプログラムを作成しています。

ただし、場面に応じた使い分けを覚えておくと、プログラミングの効率が大幅に上がります。

アブソリュート指令(G90)が向いている場面

  • 複雑な輪郭形状の加工(座標値が都度変わる)
  • 高精度な加工で座標値をすぐに確認・検証したいとき
  • 複数人で管理・引き継ぎが発生するプログラム
  • 設計変更が発生しやすい試作品や量産初期段階

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

  • 同じピッチで穴を複数個空ける繰り返し加工(例:ボルト穴12個を20mm間隔で加工)
  • 工具位置が変わっても全く同じ動きをさせたいとき
  • サブプログラムとして呼び出して使い回す動作ブロックの記述
  • 使い捨ての短いプログラムを素早く作りたいとき

使い分けの基本はシンプルです。

インクレメンタル指令が有効なのは「座標を変えずに同じ動きを複数回させる」ときです。逆に言えば、それ以外の場面では原則アブソリュート指令で書いておく方が後々のトラブルを防げます。インクレメンタル指令でプログラムを書いてしまうと、メンテナンス性が悪くなり「後から自分が困る」ことが多いです。

また、同一ブロック内にG90とG91を混在させることは制御装置の仕様によって可能な場合もありますが、可読性が下がりミスの温床になります。混在させる場合は、コメント文で明示するなどの工夫が必要です。プログラマーと機械オペレーターが分業している職場では特に、明快なルールを設けることが重要です。

参考リンク(現場でのG90・G91の使い分け):

インクリメンタル vs アブソリュート – どちらを選ぶべき?(複雑形状・繰り返し加工・高精度の判断基準まとめ)

アブソリュート指令とインクレメンタル指令でよくある現場ミスと防止策

NCプログラムのミスは、加工不良や工具衝突(クラッシュ)に直結するため、現場における大きなリスクです。特にアブソリュート指令とインクレメンタル指令の「混同」や「切り替え忘れ」が重大事故につながるケースがあります。

よくあるミスその1:G91モードのまま次の工程を実行してしまう

G91はモーダルコードであるため、一度宣言するとプログラム内で明示的にG90へ戻すまでインクレメンタル指令が有効であり続けます。途中でプログラムを一時停止してから再開した場合などに、現在がG90なのかG91なのかをオペレーターが把握できていないままスタートしてしまうことがあります。これが原因で工具が意図しない方向へ大きく移動し、ワークや機械にダメージを与えるケースが現場では発生しています。対策としては、各工程の冒頭に必ずG90を明記する習慣をつけることです。

よくあるミスその2:インクレメンタル指令中の座標変更で後続行がすべてズレる

インクレメンタル指令のプログラムを後から修正する際に起こりやすいミスです。例えば5行目の移動量を変更すると、6行目以降の全ての移動量が元の計算値とズレます。見た目はプログラムが正しそうに見えても、実際に動かすと形状が0.5mm〜数mmずれた加工になってしまうことがあります。加工後の寸法検査で発見されれば良いですが、不良品として廃棄・再加工になるケースも少なくありません。

よくあるミスその3:NC旋盤でのX/U、Z/Wアドレスの取り違え

ファナック系のNC旋盤では、XとZがアブソリュート、UとWがインクレメンタルに対応しています。同一ブロック内での混在は便利な反面、入力ミスが起きやすい箇所でもあります。特に旋盤経験者がマシニングセンタのプログラムを書く際、UやWの感覚でG91を使おうとして混乱するケースがあります。機械の種類が変わったらコードの書き方も変わる、と意識しておくことが必要です。

これらのミスを防ぐためには、シミュレーションソフトや機械のドライラン(空運転)で動きを確認することが基本です。プログラム作成後は、必ず①G90/G91の状態確認、②途中起動時のモード確認、③修正した際の後続行の再チェックという3つのポイントを習慣として押さえておきましょう。

参考リンク(NCプログラムのミスを防ぐ現場の知恵):

NCプログラム基礎知識|ミスを減らすためにすること(プログラムミス防止の考え方)

アブソリュート指令とインクレメンタル指令を現場プログラマー目線で見た独自考察

ここまでの内容を整理すると、アブソリュート指令とインクレメンタル指令の選択は「短期的な書きやすさ」と「長期的なメンテナンス性」のトレードオフだと言えます。これが核心です。

インクレメンタル指令は確かに書きやすく、繰り返し加工では強力です。しかし「書いた本人が後日読み返す」「別のオペレーターが引き継ぐ」「設計変更で1点だけ座標を修正する」という場面に来た途端、大きな時間ロスを生む性質を持っています。

加工現場では「使い捨てプログラム」が増えるほど、プログラムの資産価値が下がります。同一形状の量産品であれば1本のプログラムを数百回・数千回使い回すことになりますが、そのプログラムがインクレメンタル主体で書かれていた場合、担当者が変わった瞬間にブラックボックス化します。

一方で、アブソリュート指令だけに固執する必要もありません。G91をサブプログラム内で限定的に使い、呼び出し元のメインプログラムはG90で管理するという二層構造が、実用性とメンテナンス性のバランスが最も優れたアプローチです。

具体的なイメージとして、「等間隔に10個の穴を空ける」加工を例に挙げます。

  • メインプログラム(G90):1個目の穴の絶対座標を指定してサブプログラムを呼び出す
  • サブプログラム(G91):穴1個分の加工動作(Z軸の上下移動)をインクレメンタルで記述
  • ピッチ移動(G91):次の穴へのX軸移動量をインクレメンタルで繰り返す

この組み合わせにより、穴位置の変更はメインプログラムの1行を直すだけで済み、加工動作そのものはサブプログラムを再利用できます。

プログラムを「財産として積み上げる」視点を持つことが、ベテランNCプログラマーと初心者の大きな差につながります。目先の書きやすさで全てをG91で書いてしまうのではなく、「後で誰が見てもわかるプログラム」を意識することが長い目で見た生産性向上につながります。

また、現場でのCAMソフト活用も重要な選択肢です。複雑形状の加工ではCAD/CAMでNCプログラムを自動生成するケースが増えており、その場合はCAM側がほぼアブソリュート指令で出力します。CAMを導入することで、プログラミングの手間とミスを同時に減らせるメリットがあります。ただしCAMで出力したプログラムをオペレーターが手動修正する場合は、アブソリュート・インクレメンタルの概念を理解していないと修正ミスが発生しやすくなります。基礎を抑えておくことが不可欠です。

参考リンク(NC旋盤メーカーによるG90/G91の仕様の違い):

職人転職|【NC旋盤】オークマのプログラムはファナックとどこが違う?(アブソリュートとインクリメンタルの使い分けを含む比較解説)