CNC Path Analyzer

M98・M99サブプログラム:繰り返す形状を1回だけ書いて何度も呼び出す

M98でサブプログラムを呼び出しM99で戻る構造、P番号と繰り返し回数L、インクリメンタルのサブプログラムで同じ溝を複数の位置に加工する方法、呼び出しエラーの種類を例で説明します。

なぜサブプログラムを使うのか

同じ溝を5か所に削ったり、同じ輪郭を深さだけ変えて何度も削ったりすることはよくあります。そのたびに同じブロックをコピーして貼り付けるとプログラムが長くなり、寸法を1つ直すときに5か所すべてを直さなければなりません。1つでも漏れると、5つのうち1つだけ寸法の違う不良になります。

サブプログラムは、繰り返す部分を別のプログラムに切り出しておき、メインプログラムから必要なときに呼び出して使う構造です。形状は1か所だけで管理され、メインプログラムは「どこで、何回」だけを指示すればよくなります。

呼び出しと復帰

指令意味例
M98 P_P番号(O番号)のプログラムを呼び出すM98 P3100
L_またはPの上位桁繰り返し回数L3 → 3回
M99呼び出したブロックの次の行へ戻るO3100の最後の行
M99 P_戻るが、指定したシーケンス番号へ移る分岐・繰り返し構造に使う

例:インクリメンタルのサブプログラムで溝を3本

サブプログラムO3100はG91のインクリメンタルで書かれています。現在位置から6mm下がってXに30mmの溝を削り、6mm上がってから始点のXへ戻りながらYに10mm移動します。終わった位置が次の繰り返しの始点になるので、同じ呼び出しを3回繰り返すだけで10mm間隔の溝が3本できます。

サブプログラムO3100をL3で3回呼び出し、10mm間隔の溝を3本加工

O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99
サブプログラムO3100をL3で3回呼び出し、10mm間隔の溝を3本加工 — XY 経路XY
破線の淡い青はG00早送り、オレンジの実線は切削移動です。円弧は計算した曲線として静的に表示します。

上図はこのプログラムをCNC Path Analyzerで解析した結果です (早送り 8 区間, 直線切削 6 区間).

メインプログラムで守るルール

  • モードを戻す:サブプログラムはG91の状態で終わるので、復帰直後にメインでG90を指令し直します。例のG90 G00 Z50.がその役割です。G90なしでZ50.だけを書くと、「高さ50」ではなく「現在より50mm上」と解釈されます。今回は上へ向かう移動なので大きな問題はありませんが、次の工具のアプローチブロックだったら干渉につながる可能性があります。
  • 開始位置:インクリメンタルのサブプログラムは、呼び出したときの位置によって結果が変わります。呼び出しの直前にアブソリュート座標で開始位置をはっきり指令します。
  • 補正とサイクルの状態:工具径補正や固定サイクルが有効なまま呼び出すと、サブプログラム内の移動が予想と違って解釈されることがあります。呼び出しの前後でモーダル状態を意識して整理します。
  • M30の位置:同じファイルにサブプログラムを置くときは、メインプログラムのM30の後ろに置きます。メインはM30で終わるので、サブプログラムが誤って実行されることはありません。

繰り返し回数とサイクルタイムの計算

サブプログラム1回分の切削移動は、Z 6mm(F100)とX 30mm(F300)です。それぞれ3.6秒と6秒で、1回に9.6秒、3回なら約29秒が正味の切削時間です。繰り返し回数をL5に変えれば、メインプログラムの1文字を直すだけで溝が5本、切削は約48秒になります。繰り返し構造がプログラムの修正と時間の見積もりをともに単純にすることが分かります。計算方法は加工時間の計算でさらに詳しく扱います。

呼び出しエラーの種類

ツールでは、メインプログラムと別ファイルの呼び出しプログラムを一緒に読み込むことができ、P番号はファイル名ではなくファイル内のO番号に結び付けられます。

エラー原因CNC Path Analyzerの表示
呼び出し先がないP番号と同じO番号のプログラムがない呼び出し行と見つからなかった番号
O番号の重複同じ番号のプログラムが2つ以上どちらを使うか確定できないという警告
M99の欠落サブプログラムが終わらずに次のプログラムへ続く復帰欠落の警告
無限呼び出し互いに呼び出し続ける、または自分自身を呼び出す再帰・実行上限の超過で計算を中断

よくある質問

サブプログラムの中からさらにサブプログラムを呼び出せますか?
はい。これを多重呼び出しといい、許される段数(通常4段以上)は制御装置ごとに異なります。段数が深くなるほどモーダル状態の追跡が難しくなるので、2段以内で使うことをおすすめします。
M98とG65のマクロ呼び出しは何が違いますか?
G65は引数(A、B、C…)を変数として渡して呼び出すマクロ呼び出しです。同じ形状を寸法だけ変えて呼び出すときに使い、M98は引数なしで同じ動作を繰り返します。

次のステップ

CNC Path Analyzerで経路を確認