G91インクレメンタルとM98サブプログラムを使ってスマートなNCプログラムの作成を紹介します。
(ヘッダー部分とフッター部分は省略して加工のプログラムだけ書いていきます。)

G91インクレメンタル指令
現在位置をプログラム原点として、現在位置からの移動量で指令します、

M98サブプログラム呼び出し
メインプログラムからサブプログラムへ移行し、M99(サブプログラム終了)でメインプログラムへ復帰します。


加工内容の確認

穴加工図面、溝加工図面

Φ8.0のエンドミルを使って20.0mmの穴加工と20.0mmの溝加工をします。
(Φ10.0スタートホールの加工は省略します)

穴加工に必要な2点と溝加工に必要な6点
緑点は始点と終点
赤点は加工点になります。

G90アブソリュートのみで作成したNCプログラム

穴加工に必要な位置
X20.0 Y-20.0
X26.0 Y-20.0

X120.0 Y-60.0
X126.0 Y-60.0

穴加工位置

穴加工プログラム
X20.0 Y-20.0
Z1.0
G01 Z-0.1 F500
X26.0 F300
G03 I-6.0
G01 X20.0
G00 Z30.0

X120.0 Y-60.0
Z1.0
G01 Z-0.1 F500
X126.0 F300
G03 I-6.0
G01 X120.0
G00 Z30.0

穴加工プログラムは123文字の14ブロックになります。
加工深さが18mmなので
6mm×3回の加工プログラムは373文字42ブロック
4.5mm×4回の加工プログラムは496文字56ブロック

溝加工に必要な位置
X20.0 Y-54.0
X20.0 Y-66.0
X40.0 Y-54.0
X40.0 Y-60.0
X40.0 Y-66.0
X46.0 Y-60.0

X100.0 Y-14.0
X100.0 Y-26.0
X120.0 Y-14.0
X120.0 Y-20.0
X120.0 Y-26.0
X126.0 Y-20.0

溝加工位置

溝加工プログラム
X40.0 Y-60.0
Z1.0
G01 Z-0.1 F500
X46.0 F300
G03 X40.0 Y-54.0 R6.0
G01 X20.0
G03 Y-66.0 R6.0
G01 X40.0
G03 X46.0 Y-60.0 R6.0
G01 X40.0
G00 Z30.0

X120.0 Y-20.0
Z1.0
G01 Z-0.1 F500
X126.0 F300
G03 X120.0 Y-14.0 R6.0
G01 X100.0
G03 Y-26.0 R6.0
G01 X120.0
G03 X126.0 Y-20.0 R6.0
G01 X120.0
G00 Z30.0

溝加工プログラムは241文字の22ブロックになります。
加工深さが18mmなので
6mm×3回の加工プログラムは725文字66ブロック
4.5mm×4回の加工プログラムは968文字88ブロック

G90アブソリュートとM98サブプログラムで作成したNCプログラム

穴加工メインプログラム
X20.0 Y-20.0
Z1.0
G01 Z-0.1 F500
M98 P11
G00 Z30.0

X120.0 Y-60.0
Z1.0
G01 Z-0.1 F500
M98 P12
G00 Z30.0

穴加工サブプログラム
O11
X26.0 F300
G03 I-6.0
G01 X20.0
G00 Z30.0
M99

O12
X126.0 F300
G03 I-6.0
G01 X120.0
G00 Z30.0
M99

穴加工メインプログラムは83文字の10ブロック
穴加工サブ(O11)プログラムは36文字の5ブロック
穴加工サブ(O12)プログラムは38文字の5ブロックになります。

加工深さが18mmなので
6mm×3回の加工メインプログラムは251文字30ブロック
4.5mm×4回の加工メインプログラムは336文字40ブロック

溝加工メインプログラム
X40.0 Y-60.0
Z1.0
G01 Z-0.1 F500
M98 P13
G00 Z30.0

X120.0 Y-20.0
Z1.0
G01 Z-0.1 F500
M98 P14
G00 Z30.0

溝加工サブプログラム
O0013
X46.0 F300
G03 X40.0 Y-54.0 R6.0
G01 X20.0
G03 Y-66.0 R6.0
G01 X40.0
G03 X46.0 Y-60.0 R6.0
G01 X40.0
G00 Z30.0
M99

O0014
X126.0 F300
G03 X120.0 Y-14.0 R6.0
G01 X100.0
G03 Y-26.0 R6.0
G01 X120.0
G03 X126.0 Y-20.0 R6.0
G01 X120.0
G00 Z30.0
M99

溝加工メインプログラムは83文字の10ブロック
溝加工サブ(O13)プログラムは93文字の9ブロック
溝加工サブ(O14)プログラムは99文字の9ブロックになります。

加工深さが18mmなので
6mm×3回の加工メインプログラムは251文字30ブロック
4.5mm×4回の加工メインプログラムは336文字40ブロック

G91インクレメンタルとM98サブプログラムで作成したNCプログラム

穴加工メインプログラム
X20.0 Y-20.0
Z1.0
G01 Z-0.1 F500
M98 P11
G90 G00 Z30.0

X120.0 Y-60.0
Z1.0
G01 Z-0.1 F500
M98 P11
G90 G00 Z30.0

穴加工サブプログラム
O11
G91 G01 X6.0 F300
G03 I-6.0
G01 X-6.0
G90 G00 Z30.0
M99

穴加工メインプログラムは101文字の10ブロック
穴加工サブ(O11)プログラムは44文字の5ブロックになります。

加工深さが18mmなので
6mm×3回の加工メインプログラムは271文字30ブロック
4.5mm×4回の加工メインプログラムは360文字40ブロック

溝加工メインプログラム
X40.0 Y-60.0
Z1.0
G01 Z-0.1 F500
M98 P12
G90 G00 Z30.0

X120.0 Y-20.0
Z1.0
G01 Z-0.1 F500
M98 P12
G90 G00 Z30.0

溝加工サブプログラム
O12
G91 G01 X6.0 F300
G03 X-6.0 Y6.0 R6.0
G01 X-20.0
G03 Y-12.0 R6.0
G01 X20.0
G03 X6.0 Y6.0 R6.0
G01 X-6.0
G90 G00 Z30.0
M99

溝加工メインプログラムは89文字の10ブロック
溝加工サブ(O12)プログラムは97文字の9ブロックになります。

加工深さが18mmなので
6mm×3回の加工メインプログラムは271文字30ブロック
4.5mm×4回の加工メインプログラムは360文字40ブロック

各NCプログラムの比較

加工深さ1回で加工するNCプログラムの比較

NCプログラムの種類 穴プログラム文字数 穴プログラムブロック数 溝プログラム文字数 溝プログラムブロック数 プログラム本数
G90のみで作成 123文字 14ブロック 241文字 22ブロック 1
G90とM98で作成 83+36+38文字 10+5+5ブロック 83+93+99文字 10+9+9ブロック 5
G91とM98で作成 101+44文字 10+5ブロック 89+97文字 10+9ブロック 3

加工深さ3回で加工するNCプログラムの比較

NCプログラムの種類 穴プログラム文字数 穴プログラムブロック数 溝プログラム文字数 溝プログラムブロック数 プログラム本数
G90のみで作成 373文字 42ブロック 725文字 66ブロック 1
G90とM98で作成 251+36+38文字 30+5+5ブロック 251+93+99文字 30+9+9ブロック 5
G91とM98で作成 271+44文字 30+5ブロック 271+97文字 30+9ブロック 3

加工深さ4回で加工するNCプログラムの比較

NCプログラムの種類 穴プログラム文字数 穴プログラムブロック数 溝プログラム文字数 溝プログラムブロック数 プログラム本数
G90のみで作成 496文字 56ブロック 968文字 88ブロック 1
G90とM98で作成 336+36+38文字 40+5+5ブロック 336+93+99文字 40+9+9ブロック 5
G91とM98で作成 360+44文字 40+5ブロック 360+97文字 40+9ブロック 3

最後に

比較を見ると加工回数が多くなるにつれて差が出てくるのが分かります。
プログラムの文字数もそうですが編集箇所数にも影響が出てくるので、加工の状況によってG91やM98の使い分けが必要になってきます。