アブソリュート指令とインクレメンタル指令の違いと現場での使い分け
G91のインクレメンタル指令は、たった1か所の入力ミスで、それ以降の全座標がずれて不良品になります。
アブソリュート指令(G90)とは:NCプログラムの絶対値指令の基本
アブソリュート指令(G90)とは、あらかじめ設定したワーク座標系の原点(ゼロ点)から見た絶対的な座標値で、工具の移動先を指令する方法です。「絶対値指令」とも呼ばれます。
わかりやすいたとえで言うと、カーナビで目的地を「北緯35度、東経139度」と指定するのと同じイメージです。今どこにいるかではなく、目的地そのものの位置を直接指定する方法が、G90の考え方です。
たとえば、G54というワーク座標系が設定されているとします。現在の工具位置が(X-50.0, Y-50.0)にあり、そこから(X-40.0, Y-40.0)の位置に移動したい場合、アブソリュート指令では次のように記述します。
“`gcode
G90 G54 G00 X-40.0 Y-40.0
“`
現在位置がどこにあろうと、「G90」と打った瞬間に、X-40.0・Y-40.0という座標が「ワーク原点から見た絶対位置」として処理されます。これが重要な点です。
アブソリュート指令の最大の利点は、工具の現在位置に関係なく、同じ座標を指令すれば常に同じ場所に移動できることです。これにより、プログラムを読んだだけで工具がどこにいるのかが把握しやすくなります。つまり、可読性が高い指令方法ということですね。
また、万が一プログラムに座標の入力ミスがあった場合も、該当のブロック(1行)だけを修正すれば済むという点が大きな強みです。修正の範囲が限定されるため、ミスの影響が広がりにくく、現場での対応がしやすいです。
複雑な形状を加工するとき、高精度な仕上げ加工が求められるとき、そして複数のオペレーターが同じプログラムを扱う現場では、アブソリュート指令が特に有効です。HILLTOPのような5軸加工機を使う現場でも、ほぼすべてのNCプログラムをアブソリュート指令で作成しているという事実からも、その汎用性の高さがわかります。
一方で、インクレメンタル指令と比べるとプログラムのコード量(記述量)が増えやすい点がデメリットとして挙げられます。すべての座標を絶対値で記述するため、繰り返し同じ形状を加工する場合は、同じ数値の羅列が続いてコードが冗長になることがあります。
📌 アブソリュート指令は「原点固定・位置絶対」が原則です。
参考:モノタロウによるNC工作機械の基礎解説(マシニングセンタのNCプログラムにおけるアブソリュートとインクレメンタルの違いを具体的に解説)
NCプログラム(インクレメンタルとアブソリュート)|モノタロウ
インクレメンタル指令(G91)とは:NCプログラムの増分値指令の特徴
インクレメンタル指令(G91)とは、今いる工具の位置を基準点として、そこからどれだけ移動するかという「移動量と方向」を指令する方法です。「増分値指令」または「相対座標指令」とも呼ばれます。
先ほどのカーナビのたとえを続けると、「今いる場所から北に500m、東に300m進め」という経路案内のような指定方法がG91です。目的地の絶対的な緯度・経度ではなく、今の位置からの相対的な移動量で表現するイメージです。
同じ状況(X-50.0, Y-50.0から、X方向に+10mm、Y方向に+10mm移動したい)をインクレメンタル指令で書くと次のようになります。
“`gcode
G91 G00 X10.0 Y10.0
“`
G91を使うと、ワーク座標系がどこにあるかは関係ありません。今いる場所から「X軸方向に10mm、Y軸方向に10mm進む」という命令です。シンプルですね。
インクレメンタル指令が特に威力を発揮するのは、同じ形状を複数箇所に加工するケースです。たとえば、まったく同じポケット形状を4か所に加工したい場合、サブプログラムをG91で作成しておき、メインプログラム側でアブソリュート指令を使って各加工位置に移動してからサブプログラムを呼び出す構成にすれば、プログラムが非常にスマートになります。
“`gcode
(メインプログラム)
G90 G00 X30. Y30. ← 1か所目の加工位置へ
M98 P1001 ← G91のサブプログラムを呼出し
G90 G00 X-30. Y30. ← 2か所目
M98 P1001
G90 G00 X-30. Y-30. ← 3か所目
M98 P1001
“`
繰り返し加工に適しているのが強みです。また、ドリルサイクルやポケット加工など、固定サイクルとの相性も良い指令方法です。
ただし、G91の重大なデメリットがあります。それは「1か所でも座標の入力ミスがあると、それ以降の全ての工具位置がずれてしまう」という点です。チェーンのように前のブロックの結果が次のブロックの基準になるため、ミスの連鎖が避けられません。これは使い方を誤ると大きな加工不良につながるリスクを持っています。
また、Z軸の動きに関しては、座標値を見ただけでは工具が材料の中に食い込んでいる状態かどうかが判断しにくいという現場的なデメリットもあります。G91のみでプログラムを作成するケースでは、この点を特に意識する必要があります。
プログラムが簡潔になる一方、後から読み返したときに動きを追うのが難しくなりやすい。これがG91の両面性です。
参考:NCプログラミング基礎テキスト(アブレ訓練校によるG90・G91の実習教材。インクレメンタル指令のデメリットについて具体的に記載)
アブソリュート指令とインクレメンタル指令の使い分け:現場の判断基準
アブソリュート指令とインクレメンタル指令、どちらを使うべきかは「加工内容」と「プログラムの運用方法」の2つで決まります。この2点を押さえておくだけで、現場の判断は大きく変わります。
まず、加工内容による使い分けです。複雑な形状の加工・高精度な仕上げ加工・設計変更が発生しやすい部品加工にはアブソリュート指令(G90)が向いています。一方、繰り返し加工・穴あけのパターン配置・ポケット形状の複数個所加工・試作品の微調整が多い場面にはインクレメンタル指令(G91)が力を発揮します。
| 場面 | 推奨する指令 |
|---|---|
| 複雑な形状の加工 | アブソリュート(G90) |
| 高精度な仕上げ加工 | アブソリュート(G90) |
| 繰り返し・同一形状の多数配置 | インクレメンタル(G91) |
| サブプログラムによる汎用化 | インクレメンタル(G91) |
| 設計変更が想定される部品 | アブソリュート(G90) |
| 試作・微調整が多い加工 | インクレメンタル(G91) |
次に、プログラムの運用方法による使い分けです。そのロットだけで使い捨てるプログラムであれば、G91で短くシンプルに作る選択肢もあります。しかし、長期にわたって繰り返し使う汎用プログラムや、複数のオペレーターが読むプログラムの場合は、アブソリュート指令で作る方が圧倒的に安全です。
現場では「ハイブリッドアプローチ」が主流です。メインプログラムはG90で記述し、サブプログラムや繰り返しブロックのみG91で作成する方法です。この組み合わせが最もリスクを抑えつつ、効率的なプログラムを実現できます。G90が原則です。
注意が必要なのが「G91でプログラムを組んで後から修正する」ケースです。インクレメンタル指令はある座標ブロックを修正した場合、それ以降のブロックの座標値もすべて見直さなければならないケースが発生します。修正の手間が連鎖する点は、プログラムの長期運用において非常に大きなコストになり得ます。これは時間の損失に直結します。
プログラム作成段階では短くて簡単に見えても、後からのメンテナンスでかえって時間を浪費しやすい——これがG91のインクレメンタル指令だけで長いプログラムを組んだときの落とし穴です。意外ですね。
参考:NCプログラム専門サイト(G90とG91の使い分けと、汎用性の高いプログラム設計の考え方について解説)
アブソリュート指令(G90)とインクレメンタル指令(G91)|NCプログラムコラム
アブソリュート指令・インクレメンタル指令とGコードの関係:G90・G91の動作を理解する
NCプログラムを扱う上で、G90とG91がどのように動作するのかを正確に理解することは非常に重要です。この2つのコードは「モーダル指令」という性質を持っています。
モーダル指令とは、「一度書いたら次のブロックでもその設定が継続される指令」のことです。つまり、プログラムの途中でG90を1回書けば、その後のブロックはG91が出てくるまでずっとアブソリュート指令として動作します。逆に、G91を書けばG90が来るまでインクレメンタル指令が続きます。
モーダルが原則です。だからこそ、プログラムの途中でG90とG91を切り替えるときは、切り替えのブロックを明確に意識する必要があります。
具体的な動きで確認してみましょう。工具が現在「X100.0, Y100.0」にいるとします。
“`gcode
G90 G01 X200.0 Y200.0 F100 ← アブソリュート:原点からX200,Y200の絶対位置へ移動
G91 G01 X200.0 Y200.0 F100 ← インクレメンタル:今の位置からX+200,Y+200移動(結果X400,Y400になる)
“`
同じ「X200.0 Y200.0」という数値でも、G90かG91かによって工具が最終的に止まる位置がまったく異なることが確認できます。プログラムの中でG90/G91の設定を取り違えると、同じ数値なのに工具が全く違う場所に動いてしまう——これが現場でも起こりやすいミスのパターンです。
また、ファナックをはじめ多くのCNC制御装置では、電源を入れた直後やリセット操作後の初期状態がG90(アブソリュート指令)になっていることが一般的です。そのため、プログラムを途中から実行したり、手動介入後に再開したりする際には、現在G90なのかG91なのかを必ず確認する習慣が必要です。
G90とG91の組み合わせを活用した実践的な使い方として、「メイン+サブプログラム構成」があります。メインプログラムはG90で各加工位置に移動し、そのつどG91のサブプログラムを呼び出すことで、サブプログラム内では位置に依存しない汎用的な動作が実現できます。この構成は、同じ形状を10か所・20か所と繰り返し加工するような量産ラインで特に有効です。
参考:イプロス製造業ネットワークによるNCコード解説(アブソリュート方式・インクレメンタル方式の図解と各特徴の比較)
インクレメンタル指令をG91のサブプログラムで活かす:現場で使える応用テクニック
ここまでG90・G91それぞれの特性を解説してきましたが、実際の現場で最も実用性が高いのは「両者を組み合わせた設計」です。その中でも特に有効なのが、G91をサブプログラムとして活用する方法です。
金属加工の現場では、「まったく同じ形状・同じ加工を、ワーク上の異なる位置に複数回行う」というケースが頻繁にあります。たとえば、フランジ部品の4か所の穴加工、ベースプレートの8か所のポケット加工などです。このようなとき、G91で作ったサブプログラムを活用すると、プログラムが劇的に整理されます。
手順としては次のように進めます。まず、1か所分の加工内容をG91でサブプログラムとして作成します(スタート位置はサブ内でG90のZ軸移動を使うなど、安全を確保します)。次に、メインプログラムでG90を使って各加工位置に工具を移動し、M98命令でサブプログラムを呼び出します。加工位置を追加したい場合は、メインプログラムにG90の座標行とM98行を1セット追加するだけです。
これは使えそうです。加工箇所が5か所から10か所に増えても、メインプログラムに5行追加するだけで対応できます。CAMで全座標を再計算する手間が省けるため、段取り時間の短縮に直接つながります。
さらに発展させると、FANUCのマクロ機能(G66:モーダル呼出し)を使えば、より簡潔なプログラムが組めます。
“`gcode
G90 G00
G66 P1001 ← サブプログラム1001をモーダル呼出し設定
X30. Y30. ← 1か所目:ここに移動してP1001を実行
X-30. Y30. ← 2か所目:ここに移動してP1001を実行
X-30. Y-30. ← 3か所目:ここに移動してP1001を実行
X30. Y-30. ← 4か所目:ここに移動してP1001を実行
G67 ← モーダル呼出し解除
“`
この構成では、座標行に移動するだけで自動的にサブプログラムが実行されるため、M98行さえ省略できます。非常にスマートな構成です。
一方、注意点もあります。G91のサブプログラムでは、サブプログラムの終わりでZ軸を必ずスタート高さに戻す(G00 Z○○.など)ことを忘れないようにしてください。サブ終了時のZ軸位置が不定になると、次の加工位置へのメイン移動時にワークや治具への干渉リスクが生まれます。安全面での確認は必須です。
NCプログラムの作成効率を上げたい方には、CAMソフトを使いつつ、生成されたG90プログラムを必要に応じてG91に変換するフリーソフトを活用するという手もあります。ファナック系のプログラムであれば、G90→G91変換ツールが公開されており、手作業での変換ミスを防げます。
参考:「じじぃの引出し」ブログによるG91活用事例(メイン・サブプログラム構成やG66モーダル呼出しの実例コード付き解説)
アブソリュート指令とインクレメンタル指令の混同を防ぐ:プログラムミスの典型パターンと対策
G90とG91の理解が浅いまま現場に立つと、知らず知らずのうちに深刻なプログラムミスを起こすリスクがあります。ここでは、実際によくある混同パターンと、それを防ぐための具体的な対策を整理します。
まず最も多いミスは、「G91モードで作業を中断し、その後G91のままプログラムを再開してしまう」パターンです。加工途中でアラームが出て機械を止めた後、G91が有効な状態で再起動すると、工具は現在の位置から相対移動で動き始めます。電源投入後・リセット後は必ずG90を確認する習慣が大切です。これが条件です。
次に、インクレメンタル指令(G91)のみで長いプログラムを組んでいるときの「途中1行の入力ミス」による連鎖エラーです。たとえば、G91で動いているプログラムの10行目でX値を「X10.0」と書くべきところを「X100.0」と書いてしまった場合、10行目以降の全工具経路が90mm分ずれた状態で動き続けます。アブソリュート指令(G90)なら、その行だけを修正すれば他の行への影響はゼロです。G90なら問題ありません。
特に問題になるのがZ軸方向のミスです。G91でZ軸を操作するとき、座標値がプラスかマイナスかだけで「工具が上に退避するのか、ワークに食い込むのか」が変わります。G90なら現在の座標を見れば工具の絶対高さがわかりますが、G91では「今いる位置がどの高さなのか」を常に追跡していなければならないため、Z軸の食い込みリスクが上がります。痛いですね。
これらのミスを防ぐための対策は主に3つあります。
- プログラム先頭にG90を明記する:プログラムの最初のブロックに必ずG90を入れることで、電源投入後・リセット後の初期状態と揃えておく。
- G91の使用範囲をサブプログラムに限定する:G91が有効な区間をサブプログラム内に閉じ込め、M99でサブを抜けると同時にG90に戻る構成にする。
- ドライランと工具経路シミュレーションを必ず実施する:初めて使うプログラムや修正後のプログラムは、必ず機械上でドライランを行うか、CAMやNCシミュレーションソフトで工具経路を視覚確認してから実加工に入る。
NCシミュレーションには、フリーウェアの「CAM13」などが職業訓練でも活用されています。加工前の確認ツールとして、日常的に導入しておくと不良品リスクを大きく下げられます。
G90とG91の混同による加工ミスは、材料費・加工時間・機械停止のロスがまとめて発生します。特に高価な金属素材を加工しているケースでは、1回の不良品でも数万円単位の損失につながる場合があります。正しい理解と運用ルールの徹底が、現場のコスト管理に直結しています。
金属加工の現場でNCプログラムを扱う以上、アブソリュート指令(G90)とインクレメンタル指令(G91)の違いは、絶対に押さえておかなければならない基礎知識です。まとめると次のとおりです。
- G90(アブソリュート):ワーク原点からの絶対値で指令。複雑形状・高精度加工・長期運用プログラムに向く。ミス修正が1か所で完結する。
- G91(インクレメンタル):現在位置からの移動量で指令。繰り返し加工・サブプログラム化・同形状の多数配置に強い。ただし1か所のミスが全体に波及する。
- 現場の定石:メインプログラムはG90で組み、G91はサブプログラムや繰り返しブロックに限定して使う。
この使い分けを身につけることで、プログラム品質の向上・修正コストの削減・不良品リスクの低減という3つのメリットが同時に得られます。結論はG90を軸にG91を活用する、です。