Fanuc、Siemens、Mitsubishiの入れ子状サブプログラム完全ガイド
Fanuc、Siemens、Mitsubishiにおける入れ子状サブプログラムのプログラミング解説。ネスト制限やFanucのパラメータ3457、SiemensのSAVE属性、Mitsubishiの#8876を検証。ロット間での寸法ばらつきを防ぎ繰り返し精度を高めるアラーム対策。
はじめに
入れ子状のサブプログラム(ネストされたサブプログラム)の階層間で、モーダル状態の制御を誤り、呼び出し元の絶対座標系(G90)に復帰しないままサブプログラム終了(M99やM17)を迎えることは、加工中にツールタレットがチャックやバイスジョー、クランプなどの物理的治具に猛烈な速度で突入する工作機械の破壊事故(ハードクラッシュ)の直接的な引き金となる。特に、サブプログラム内で増分指令(G91)や座標系シフト、送り速度の変更を行った後、それを明示的にキャンセルまたは復元しないままメインプログラムに制御を戻すと、座標の「にじみ(座標値の意図しない累積ズレ)」が発生する。この状態で運転を再開した瞬間、物理軸はプログラムされた本来の軌跡から大幅に逸脱し、高価な回転工具スピンドルの物理的破壊やワークの致命的な損傷(不良品発生)をもたらす。
このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見される。段取り前にFanucの3457番パラメータやMitsubishiの#8876番パラメータ、SiemensのSAVE属性などのパラメータや設定を確認することで、このコマンドで最も多い非計画停止を防ぐことができる。このような段取り工程における検証不足は、ロット間における再現性の低下と不良品発生に直結するため、各制御盤でのネスト制限や検索パラメータの構成を深く理解し、座標の独立性を厳格に確保することは、生産現場における最優先の安全対策である。
技術概要
| 技術仕様 | 詳細 |
|---|---|
| 指令コード | Fanuc: M98, M198, M99Siemens: 英数字名, PROC, M17, RETMitsubishi: M98, M198, M99 |
| モーダルグループ / モーダル特性 | サブプログラム呼び出しおよび復帰制御 / Modal-Code |
| 対象ブランド | Fanuc, Siemens, Mitsubishi |
| 重要パラメータ | Fanuc: 3457 (検索パス), 0010#4 (PRG9)Siemens: SAVE 属性, VAR キーワードMitsubishi: #8876 (M198デバイス), #8129 (検索優先順位) |
| 主な制約事項 | ネスト深さ: 最大4レベル (Fanuc)、最大8/16レベル (Siemens)、最大8/10レベル (Mitsubishi)。外部の M198/EXTCALL のネスト呼び出しは不可。 |
クイックリード
- モーダル状態の復元: 座標のにじみを防ぐため、サブプログラムの復帰ブロックの直前で、絶対座標(G90)を明示的に復元し、各種補正をキャンセルします。
- ネスト制限の境界: ネストされた呼び出しは、ハードウェアで定義された厳格な深さ制限(Fanucは4レベル、Siemensは8〜16レベル、Mitsubishiは8〜10レベル)の範囲内に収めてください。
- サブプログラムパラメータのロック: Fanucパラメータ 0389#2 (PRG8) および 0010#4 (PRG9) を 1 に設定し、O8000およびO9000シリーズのマクロプログラムの編集権限をロックします。
- 外部メディア呼び出し: 内部メモリ容量の制限を回避するため、M198 (Fanuc/Mitsubishi) または EXTCALL (Siemens) を使用して、メモリカードやデータサーバから大容量ファイルを直接実行します。
- 直接ストレージルーティング: 呼び出しブロック内のローカルな ,D アドレス (0〜4) を使用して、Mitsubishiのサブプログラムを特定のハードウェアストレージメディアにルーティングします。
- 自動モーダル保存: Siemensの PROC ヘッダーで SAVE 属性を宣言し、座標系(フレーム)およびモーダル G-code を自動的に保存および復元します。
基本概念
ネストされたサブプログラムの実用的なプログラミング効果は、サブルーチンを相互に入れ子状に重ねることで、複雑で繰り返しの多いツールパスを大幅に圧縮し、メモリ消費を劇的に削減して、格子状 of 穴パターンや荒加工パスなどの形状に対する編集を大幅に簡素化できることです。メインプログラム内で同じ形状のブロックを繰り返す代わりに、開発者はこれらのルーチンをスタンドアロンのファイルとして一度記述すれば、それらを順次呼び出すことができます。
このモジュール構造によりプログラムサイズを小さく抑えることができ、プログラマーはマスタファイル全体を編集することなく、特定の加工セクションを更新できます。サブプログラムを初めて扱う場合は、基本を理解するために私たちのサブプログラムの作成と呼び出しのガイドを確認してください。
制御盤のブランドによって、これらの下位レベルのファイルの検索、呼び出し、および実行の方法は異なります。レガシーなプラットフォームでは厳格な数値の O-number 命名規則が必要ですが、現代の制御盤では説明的な英数字名を使用できます。サブプログラムは、異なる座標系にわたってモーダルのように実行することも、外部のハードウェアインターフェースから動的にストリーミングして内部メモリ制限を完全にバイパスすることもできます。サブプログラムは呼び出し元プログラムのアクティブな拡張として実行されるため、送り速度(feedrate)や位置決め座標などのモーダル状態が階層間で流動的に伝達されます。そのため、座標のにじみを防ぐための厳格なプログラミング手法が必要となります。関連するサイクル技術については、G83深穴ペックドリルサイクルおよびG84リジッドタップサイクルを参照してください。
コマンド構造
ネストされたサブプログラム呼び出しの構文と構造では、制御盤のインタープリタが対象プログラムの名前または番号、開始ブロック、および繰り返し回数を解析する必要があります。従来の環境では、M98 コマンドによってジャンプが開始され、実行が CNC メモリに格納されたサブプログラムにリダイレクトされます。インタープリタはサブプログラムを読み取ると、ブロックを順番に実行します。サブプログラムの末尾に達すると、復帰ブロックによって実行ポインタが呼び出し元のプログラムにリダイレクトされます。繰り返し回数が指定されている場合、インタープリタはメインプログラムのシーケンスを再開する前に、指令された回数だけサブルーチンをループ実行します。
Siemens制御盤は、英数字による非常に高度な命名システムを実装しており、サブプログラムをファイル名で直接呼び出すことができます。Siemensのサブルーチンは、硬直的な O-number に依存する代わりに、PROC ヘッダーで宣言された、値渡しまたは参照渡しによるパラメータを受け取ることができます。Siemensサブルーチンからの復帰は、M17 または RET を使用して終了します。対照的に、Fanuc と Mitsubishi はレガシーなレジスタアーキテクチャを使用しており、値の転送に G65 や G66 などのマクロオプションを使用するか、プログラマーが揮発性のコモン変数やグローバル変数に依存することを強制されます。これらのパラメータと構文アドレスが、制御盤がこれらのルーチンをどのように検索、繰り返し、および復帰するかを規定します。
コマンド構文アドレス:
- Fanuc標準呼び出し:
M98 P_ L_ ; - Fanuc外部呼び出し:
M198 P_ ; - Fanuc復帰:
M99 ; - Siemens定義:
PROC <プログラム名> (<パラメータ型> <パラメータ名>, VAR <パラメータ型> <パラメータ名>) [SAVE] - Siemens呼び出し:
<プログラム名> (<引数1>, <引数2>)またはMCALL <プログラム名> - Siemens復帰:
M17またはRET - Mitsubishi標準呼び出し:
M98 P__ H__ L__ ,D__ ;またはM98 <ファイル名> H__ L__ ,D__ ; - Mitsubishi外部呼び出し:
M198 P__ L__ ;またはM198 <ファイル名> L__ ; - Mitsubishi復帰:
M99 P__ ;
| パラメータ / アドレス | 制御盤ブランド | 説明 | 設定範囲 / 設定値 |
|---|---|---|---|
P | Fanuc / Mitsubishi | 呼び出すサブプログラムのプログラム番号識別子。 | 最大8桁 |
L | Fanuc / Mitsubishi | サブルーチンの繰り返し実行回数。 | 1 〜 9999 |
H | Mitsubishi | 呼び出されたサブプログラム内で実行を開始するシーケンス番号(N番号)。 | 有効なN番号 |
,D | Mitsubishi | ファイルを検索するための明示的なデバイス番号ルーティング。 | 0 〜 4 |
<ファイル名> | Mitsubishi | サブプログラムファイルの英数字名による直接呼び出し。 | 最大32文字 |
PROC パラメータ型 | Siemens | サブルーチンが受け取るデータ型(例: REAL, INT, CHAR, BOOL)。 | 標準変数型 |
VAR | Siemens | パラメータが参照渡しされることを宣言するキーワード。 | キーワード |
SAVE | Siemens | アクティブなモーダル設定およびフレームを保存および復元する属性。 | 属性フラグ |
ブランド別応用
Fanuc CNCの統合
Fanucのネストされたサブプログラム環境は、アクセスと安全性を管理するためにパラメータ駆動のメカニズムを使用します。このシステムでは、パラメータ 0010#4 (PRG9) が9000シリーズのマクロプログラムへのアクセスを制限し、パラメータ 0389#2 (PRG8) が8000シリーズのプログラムに対して同様の機能を実行します。
標準のネストされたサブルーチンを起動するには、プログラム内で M98 P1000 L5 ; のようにプログラム番号と繰り返し回数を指定した M98 ブロックを指令します。外部ルーチンは M198 P50 ; を使用してストリーミングされ、サブプログラムは M99 ; で終了します。
| Type | Name / Code | Description and Settings |
|---|---|---|
| Parameter | 0010#4 (PRG9) | 1 に設定すると、サブプログラム 09000 から 09999 の編集を禁止します(0 の場合は禁止されません)。 |
| Parameter | 0389#2 (PRG8) | 1 に設定すると、サブプログラム 08000 から 08999 の編集を禁止します(0 の場合は禁止されません)。 |
| Parameter | 3404#2 (SBP) | M198 におけるアドレス P が、ファイル番号(0)かプログラム番号(1)のどちらを指すかを指定します。 |
| Parameter | 6005#0 (SQC) | サブプログラムのシーケンス番号呼び出しを使用しない(0)か使用する(1)かを決定します。 |
| Parameter | 3457 | ファイルを検索するためのフォルダ階層検索パス(LIB, MC1/MC2, SYS フォルダ)を構成します。 |
| Alarm | 0077 | TOO MANY SUB, MACRO NESTING: ネスト制限を超えたか、または M198 がネスト呼び出しされました。 |
| Alarm | 1080 | DUPLICATE DEVICE SUB PROGRAM CALL: アクティブな M198 プログラムの内部から、M198 のネスト呼び出しを試みました。 |
| Alarm | 1091 | 同一ブロック内に複数の呼び出しワードが検出されました。 |
| Alarm | 0076 | PROGRAM NOT FOUND: 呼び出されたサブプログラム番号がメモリまたはフォルダパス内に見つかりません。 |
| Version | 0001#1 (FCV) | レガシーテープ互換性。1 に設定すると、Pコードを解析して繰り返し回数とプログラム番号を統合します。 |
Warning: M99 コマンドの実行前に、増分位置決め(増分指令)から絶対位置決め(絶対指令)へ切り替えることを怠ると、座標オフセットのずれが発生し、深刻な衝突事故(ハードクラッシュ)の原因となります。
Siemens SINUMERIKの統合
Siemens SINUMERIKシステムは、数値の O-number を使用せず、代わりに英数字名でサブルーチンを直接呼び出します。サブルーチン宣言の PROC コマンドを使用して、サブルーチンにプログラムパラメータを渡すことができます。
英数字名でサブプログラムを呼び出すには、サブプログラム名(パラメータ) を使用します。復帰ブロックは M17 または RET と記述し、RET は RET("N200", 2) ; のように複数レベルのジャンプ(リターンジャンプ)が可能です。
| Type | Name / Code | Description and Settings |
|---|---|---|
| Parameter | PROC Param Types | サブプログラムが受け取る仮パラメータのデータ型(例: REAL, INT, CHAR, BOOL)。 |
| Parameter | VAR | 仮パラメータが値ではなく参照によって渡されることを宣言するキーワード。 |
| Parameter | SAVE | 復帰時にモーダル G-code および座標系(フレーム)を自動的に保存および復元する属性。 |
| Alarm | 14012 | Maximum subroutine level exceeded: ネスト深さ制限を超えました(808Dは8レベル、828D/840Dは16レベル)。 |
| Alarm | 14011 | Program not existing or will be edited: サブプログラムファイルが存在しないか、または HMI エディタで現在開かれています。 |
| Alarm | 14013 | Number of subroutine passes invalid: サブプログラムの繰り返し回数が無効または範囲外です。 |
| Version | 808D vs 828D/840D sl | SINUMERIK 808D はネストを最大8レベルに制限しますが、828D および 840D sl は最大16レベルまでサポートします。 |
Warning: HMI で現在編集中のアクティブなサブプログラムファイルを呼び出すと、即座にアラーム 14011 がトリガーされ、機械が停止します。
Mitsubishi CNCの統合
Mitsubishiの制御盤は、呼び出しブロック内で直接物理ストレージメディアを指定するルーティングをサポートしています。プログラマーはパラメータ #8876 および #8880 を構成して、デバイスの宛先をローカルの ,D アドレスにマッピングします。
シーケンス開始ブロック N100 を使用してカードリーダーからサブプログラムを呼び出すには、M98 <PATTERN.PRG> H100 ,D1 ; と記述します。呼び出し元プログラムへの復帰は、M99 ; で終了します。
| Type | Name / Code | Description and Settings |
|---|---|---|
| Parameter | #8876 | M198 外部サブプログラム呼び出し用ストレージデバイスの構成(G=HD、R=Mカード、D=サーバー、N=USBメモリ)。 |
| Parameter | #8880 to #8884 | デバイスの宛先をアドレス ,D0 から ,D4 にマッピングします(M=メモリ、E=メモリ2、G=HD、R=Mカード、D=サーバー)。 |
| Parameter | #8129 | サブプログラムの検索優先順位(0=指令されたプログラム番号、1=4桁の O-number、2=8桁の O-number)。 |
| Alarm | P230 | Subprogram nesting over: ネスト深さ制限を超えたか、またはデータサーバプログラム内で M198 が呼び出されました。 |
| Alarm | P231 | No sequence No.: 復帰ブロックで指定されたシーケンス番号(M99 P)が呼び出し元プログラム内に見つかりません。 |
| Alarm | P232 | No program No.: 指令されたプログラム番号または山括弧(<>)付きのファイル名が、指定されたデバイス内に見つかりません。 |
| Version | M70V vs M80V | M70V/M700V シリーズは最大8レベルのネスト深さをサポートしますが、現代の M80V/M800V は最大10レベルまでサポートします。 |
| Version | M800VW vs M800VS | パラメータ #8876 が空白の場合、M800VW/M80VW はデフォルトでデータサーバーを検索し、M800VS/M80V はデフォルトで前面SDカードを検索します。 |
Warning: 実行中に外部ストレージとの接続を切断すると、P232 アラームが発生し、加工サイクルの途中で危険な非常停止を引き起こします。
ブランド比較
以下の表は、Fanuc、Siemens、およびMitsubishiの各制御盤におけるネストされたサブプログラム呼び出しコマンド、復帰構文、英数字ファイル命名サポート、およびネストレベルを比較したものです。
| 比較項目 | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| サブプログラム呼び出しコマンド | M98 (内部), M198 (外部) | 英数字プログラム名 または CALL / PCALL / MCALL | M98 (内部/外部), M198 (外部) |
| 復帰コマンド | M99 | M17 または RET | M99 |
| 英数字名のサポート | — (ソースなし) | 対応 (直接の名前指定) | 対応 (<ファイル名> 構文を使用) |
| 最大ネスト深さ | 4レベル (マクロ併用時は8レベル) | 8レベル (808D), 16レベル (840D sl / 828D) | 8レベル (M70V), 10レベル (M80V) |
| パラメータ受け渡し | 非対応 (代わりに G65/G66 マクロ呼び出しでサポート) | 対応 (PROC 内で宣言されたローカルパラメータ) | 非対応 (代わりに G65/G66 マクロ呼び出しでサポート) |
| 呼び出し時の記憶媒体選択 | グローバル検索フォルダパラメータ (3457) | パス検索 / メモリ | 対応 (ブロック内の ,D デバイスアドレス経由) |
| 復帰時のモード保持 | 手動復元 | 自動 (PROC の SAVE 属性経由) | 手動復元 |
技術解析
これら3つの CNC アーキテクチャを分析的に検討すると、サブプログラムの実行、メモリのスコープ範囲、およびパラメータ転送に対するアプローチの明確な違いが浮き彫りになります。Siemensは、高水準の PC プログラミング言語をモデルとした実行形態を採用しており、プログラマーはサブプログラムのヘッダー内でローカルスコープやパラメータの受け渡し方法を直接定義できます。PROC 行で VAR キーワードを使用することで、Siemensは参照渡しによる実行を可能にし、サブプログラムが計算結果を変更して親プログラムに返すことができます。Fanuc と Mitsubishi は、レガシーなレジスタアーキテクチャを採用しており、値の転送に G65 や G66 などのマクロオプションを使用するか、プログラマーが揮発性のコモン変数やグローバル変数に依存することを強制されるため、モーダルデータの破損リスクが伴います。
ネストの階層構造も、異なるハードウェア設計思想を反映しています。Fanucの最大4レベルというネスト制限は、プログラマーに対してシンプルで浅い呼び出しツリーを維持することを要求します。Siemensは最大16レベルのネストを提供しますが、これらのレベルはユーザーのサブプログラム、標準の固定サイクル(canned cycle)、およびメーカー(OEM)のバックグラウンドルーチン(主軸速度制限クランプやタレット制御マクロなど)の間で動的に共有されるため、この割当量は急速に消費される可能性があります。Mitsubishiはその中間に位置し、従来の M70V シリーズで8レベル、新しい M80V 制御盤で10レベルを提供しています。どの制御盤においても、これらの制限を超えると即座に実行が停止するため、すべてのアクティブなシステムにおいて呼び出し深さを追跡しておく重要性が実証されています。
ディレクトリのルーティングおよび安全制御においても、これらのプラットフォームは一線を画しています。Fanucはパラメータ 3457 を使用して厳格で自動化されたフォルダ階層を検索しますが、Mitsubishiは ,D アドレスや山括弧付きのファイル名(例: <PART.PRG>)を介した直接的な物理ルーティングを可能にしています。Siemensは、EXTERN 宣言が定義されていない限り、サブプログラムの呼び出しをローカルのワークピースディレクトリに隔離します。また、Siemensは HMI 編集安全ロック(バージョン5以降)を強制し、呼び出されたファイルが画面上で開かれていると NC スタート(NC Start)を防止します。この機能は、Fanuc や Mitsubishi のシステムにはネイティブでは存在しません。
プログラム例
Fanuc Nested Subprogramの例
この例は、メインプログラム(O0001)が入れ子状のサブプログラム(O1000)を5回呼び出し、座標をシフトさせた繰り返しの加工を実行する手順を示しています。
O0001 (メインプログラム) ; " "G90 G54 G00 X0 Y0 Z10.0 ; ワークの絶対原点に各軸を事前位置決め " "M98 P1000 L5 ; サブプログラム O1000 を順次5回呼び出す " "G00 Z50.0 M30 ; Z軸を退避させ、メインプログラムを終了 ;
" "O1000 (サブプログラム) ; " "G91 G01 Z-2.0 F150 ; 増分値モードに切り替え、Z軸を2.0 mm切り込み " "G90 G01 X50.0 F300 ; 絶対位置決めに切り替え、X軸を50.0 mmまで加工 " "G91 G01 Z2.0 ; Z軸を増分値で2.0 mm退避 " "G90 G01 X0 ; X軸を絶対値で0へ戻す " "M99 ; 呼び出し元プログラムに制御を戻す
空運転 (dry run)
空運転での検証時、Fanucコントローラは絶対位置決めモードで機械の軸を X0, Y0, Z10.0 へ移動させます。M98 P1000 L5 を読み取ると、サブルーチン O1000 にジャンプします。O1000 では、コントローラは増分モード(G91)に切り替えて Z軸を 2.0 mm 切り込み、絶対モード(G90)に戻して X50.0 まで加工します。Z軸を増分値で 2.0 mm 退避させた後、工具は絶対モードで X0 に戻ります。コントローラはこのサブプログラムのループ全体を計5回実行し、Z軸の増分方向の深さは合計で 10.0 mm に達します。その後、メインプログラムに戻り、Z50.0 まで後退して M30 で加工サイクルを終了します。
Siemens Alphanumeric Subprogramの例
このプログラムは、PROC ヘッダーでパラメータを受け渡す Siemens の英数字呼び出し規則を利用しており、SAVE 属性を使用して座標系を自動的に保護します。
; メインプログラム (MAIN_PROG.MPF) " "N10 G90 G54 G00 X0 Y0 Z10.0 ; 工具を絶対原点へ事前位置決め " "N20 MCALL CUT_POCKET(3.0, 150.0) ; サブプログラム CUT_POCKET をモーダルとして登録 " "N30 X50.0 Y50.0 ; 座標1でサブプログラムを自動実行 " "N40 X100.0 Y50.0 ; 座標2でサブプログラムを自動実行 " "N50 MCALL ; モーダルサブプログラム呼び出しの登録を解除 " "N60 G00 Z50.0 M30 ; Z軸を退避させ、メインプログラムを終了 ;
" "; サブプログラム CUT_POCKET.SPF (SPFディレクトリに格納) " "PROC CUT_POCKET(REAL DEPTH, REAL FEED) SAVE DISPLOF ; " "G91 G01 Z=-DEPTH F=FEED ; DEPTHパラメータに基づく増分値での切り込み " "G90 G01 G41 X0 Y0 ; 工具径補正を有効にして絶対値位置決め " "G03 X0 Y0 CR=25.0 ; 円形ポケット形状を円弧補間 " "G40 G01 X0 Y0 ; 工具径補正をキャンセル " "G91 G01 Z=DEPTH ; Z軸を増分値で退避 " "M17 ; サブプログラムを終了して制御を戻す
空運転
空運転での検証時、Siemensプログラムでは、コントローラはまず X0, Y0, Z10.0 への絶対位置決めを実行します。ブロック N20 の MCALL コマンドは、CUT_POCKET をモーダルサブルーチンとして登録します。N30 (X50.0 Y50.0) に移動すると軸が位置決めされ、一時停止した後にパラメータ値 3.0 および 150.0 でサブルーチンが呼びされます。サブルーチンは、親プログラムのアクティブな絶対位置状態をキャプチャする SAVE 属性のもとで実行を開始します。サブルーチンは増分移動を使用してポケット加工を実行し、退避した後に M17 で戻ります。制御装置は自動的に絶対指令(G90)状態を復元し、N40 (X100.0 Y50.0) へ進んでプロセスを繰り返します。最後に、ブロック N50 がモーダルルーチン呼び出しをキャンセルし、Z軸が 50.0 mm まで後退して M30 で終了します。
Mitsubishi Alphanumeric Subprogramの例
このプログラムは、,D パラメータアドレスを使用して特定のストレージデバイスから英数字ファイル名を呼び出す Mitsubishi の機能を示しています。
O0002 (メインプログラム) ; " "G90 G54 G00 X0 Y0 Z10.0 ; ワーク座標系の絶対原点に工具を事前位置決め " "M98 <ROUGH-CUT.PRG> H200 L3 ,D1 ; デバイス1からシーケンス N200 で始まるファイル ROUGH-CUT.PRG を呼び出す " "G00 Z50.0 M30 ; 退避してメインプログラムを終了 ;
" "; ROUGH-CUT.PRG (CFカード - デバイス1に格納) " "O2000 (サブプログラム) ; " "N100 G01 Z-5.0 F100 ; このブロックはシーケンス検索ブロック H200 のためバイパスされます " "N200 G91 G01 Z-2.0 F120 ; サブプログラムの実行はここから開始されます(増分値送り) " "N300 G90 G01 X30.0 Y30.0 F250 ; 絶対位置決めによるツールパス加工 " "N400 G91 G01 Z2.0 ; 増分値による Z軸 2.0 mm 退避 " "N500 G90 G01 X0 Y0 ; 絶対座標 X0 Y0 位置へ復帰 " "M99 ; 呼び出し元のメインプログラムに制御を戻す
空運転
空運転での検証時、Mitsubishiシステムでは、工具は X0, Y0, Z10.0 に事前位置決めされます。M98 ブロックを実行すると、コントローラはデバイス1(CFカード)にアクセスしてファイル ROUGH-CUT.PRG を開きます。アドレス H200 で指定されたサブルーチン内のブロック N200 を検索します。ブロック N100 は完全にスキップされます。実行は N200 から Z軸の増分移動で開始され、その後に絶対値によるプロファイル切削が続きます。その後、工具は退避して絶対座標に戻り、M99 ブロックに達します。コントローラはこのループを3回繰り返した後にメインプログラムに戻り、Z軸を退避させて M30 で終了します。
エラー解析
| ブランド | アラームコード | トリガー条件 | オペレータの確認症状 | 根本原因 / 対策 |
|---|---|---|---|---|
| Fanuc | 0076 | 呼び出されたプログラム番号がメモリまたは検索フォルダ内に見つかりません。 | 機械が即座に停止し、画面に「PROGRAM NOT FOUND」のエラーメッセージが表示されます。 | パラメータ 3457 のフォルダパスを確認し、対象の O-number ファイルがメモリ内に存在するか検証します。 |
| Fanuc | 0077 | サブプログラムまたはマクロのネスト深さが許容最大制限を超えました。 | CNC がサイクル途中で停止し、「TOO MANY SUB, MACRO NESTING」エラーが表示されます。 | 実行ネストレベルが 4(マクロ呼び出しを含める場合は 8)を超えていないか検証します。 |
| Fanuc | 1080 | アクティブな M198 サブプログラム内から、ネストされた M198 外部デバイス呼び出しが実行されました。 | 制御盤の実行がフリーズし、「DUPLICATE DEVICE SUB PROGRAM CALL」エラーが表示されます。 | M198 のネスト呼び出しを回避します。セカンダリサブルーチンは内部 SRAM に転送してください。 |
| Fanuc | 1091 | 同一のブロック内に複数のサブプログラム呼び出し命令が指定されました。 | インタープリタが停止し、「DUPLICATE SUB-CALL WORD」エラーを出力します。 | 各サブプログラム呼び出しコマンドをそれぞれ独立した単一のブロックに分割します。 |
| Siemens | 14011 | 呼び出されたサブルーチンが存在しないか、リリース(公開)されていないか、または編集用に開かれています。 | 制御盤が実行を停止し、「program not existing or will be edited」というメッセージが表示されます。 | HMI 上でファイルを閉じて編集ロックを解除します。また、_N_SPF_DIR 内のパスを検証します。 |
| Siemens | 14012 | プログラムレベルのネスト深さ制限を超えました。 | システムが停止し、「maximum subroutine level exceeded」というメッセージが表示されます。 | ネストレベルを確認します。Siemensの固定サイクルは最大 3 レベルを消費するため、呼び出しはレベル 12 以下の浅い階層で構成してください。 |
| Siemens | 14013 | サブルーチンの繰り返し回数の指定が正しくないか、または範囲外です。 | 制御盤が実行を拒否し、「Number of subroutine passes invalid」と表示されます。 | サブルーチン呼び出しにおける繰り返し回数の値を確認して修正します。 |
| Mitsubishi | P230 | サブプログラムのネスト深さ制限を超えたか、またはデータサーバープログラム内で M198 呼び出しが行われました。 | 制御盤が停止し、「Subprogram nesting over」のエラーが表示されます。 | ネストレベルが 8(M70V)または 10(M80V)を超えていないか検証します。また、M198 呼び出しの構造を見直します。 |
| Mitsubishi | P231 | 復帰先の宛先として指定されたシーケンス番号が呼び出し元プログラム内に見つかりません。 | インタープリタが異常終了し、「No sequence No.」エラーが表示されます。 | M99 ブロック内の P の後にプログラムされたシーケンス番号が、呼び出し元プログラム内に存在することを確認します。 |
| Mitsubishi | P232 | 指定されたプログラム番号またはファイル名が、指定されたデバイス内に見つかりません。 | 実行が停止し、「No program No.」エラーが表示されます。 | デバイスの挿入状態、アドレスのパラメータマッピング、およびファイル名が32文字未満であることを確認します。 |
実務応用ノウハウ
ワークピースの寸法精度やロット間での繰り返し精度を維持し、段取り段階での重大な衝突事故を防ぐには、ネストされたサブプログラムの呼び出しにおけるパラメータ設定と制御の整合性が極めて重要である。Fanucにおいて、編集保護用のパラメータ0010#4(PRG9)や0389#2(PRG8)が未検証のまま放置されると、オペレータによる不用意なマクロ編集や誤消去が引き起こされ、ツールタレットとチャックの衝突といった重大な物的損害と不良品発生に直結する。また、外部メモリーカードやデータサーバーからの外部呼び出し(M198)を実行する際、アクティブなM198プログラム内からさらにM198を二重に呼び出すと、即座にFanucアラーム1080(DUPLICATE DEVICE SUB PROGRAM CALL)またはアラーム0077を誘発し、非計画停止を招く。
Mitsubishiシステムにおいても、CFカードやUSBメモリなどの外部メディアとの接続不良が発生すると、ネストされたファイルの検索が途中で中断され、P232アラームをトリガーして自動運転が非計画停止し、ワークにツールマークが残ることで不良品発生となる。Siemens SINUMERIKでは、PROCヘッダーにSAVE属性を書き忘れると、サブプログラム内の増分座標(G91)やフレーム変更が呼び出し元にそのまま引き継がれてしまい、2ロット目以降で寸法のばらつきや座標シフトが発生し、最終的に治具(バイスジョーやクランプ)への大破事故(ハードクラッシュ)を招く。これらの制御盤ごとの特性に応じたパラメータとmodal状態の検証を段取り前に徹底することが、再現性の低下を防ぎ、高品質な量産体制を維持するための要諦である。
関連コマンド
- writing-and-calling-subprograms: 単一プログラムからモジュール呼び出しへの移行を示し、サブルーチン編成の基礎的論理を確立します。
- g83-deep-hole-peck-drilling-cycle: 深穴グリッドパターンの処理など、カスタムサブプログラム内にネスト可能なペックドリル固定サイクルを起動します。
- g84-g74-rigid-tapping: 複数の座標位置における内径ねじ立てを自動化するため、ネストされたサブルーチン内でリジッドタップサイクルを呼び出します。
G65単一マクロ呼び出し: サブプログラム呼び出しに類似していますが、引数パラメータの受け渡しをサポートし、単一ブロックでローカル変数をマクロレジスタに渡してマクロプログラムを実行します。G66モーダルマクロ呼び出し: キャンセルされるまで、その後のすべての移動ブロックの後にマクロサブルーチンをモーダル実行するよう制御盤に指示します。
おわりに
CNC加工におけるロット間での寸法ばらつきを防ぎ、高い繰り返し精度を維持するためには、ネストされたサブプログラムの実行前および復帰時の挙動を管理する標準的なプログラミングチェックリストの導入が不可欠である。サブプログラムの復帰コマンド(M99やM17)の直前に、絶対座標モード(G90)への復帰や各種補正キャンセル(G40、G49)を必ず明示的に記述することで、呼び出し元のプログラムに意図しない座標シフトが持ち込まれるリスクを根本から排除する。さらに、各機械のネスト制限やメモリ割り当てパラメータの確認を段取り工程の一部として制度化し、不用意なパラメータ変更をパラメータ保護ビットの有効化によって防止することは、不測の非計画停止や衝突事故を未然に防ぎ、再現性の高い精密な自動化ラインを安定稼働させるための確実な防壁となる。
よくある質問
ネストされたサブプログラムを実行した際、2ロット目以降で寸法ばらつきが発生するのはなぜですか?
主な原因は、サブプログラム内で変更された増分指令(G91)や工具径・工具長補正、座標系シフト(G54〜G59やG92)などのモーダル情報が、呼び出し元のメインプログラムに戻る際に正しくリセットされていないことです。これにより、ロット間で微小な座標ずれが累積し、再現性の低下を引き起こします。実務的対策:サブプログラムの最終ブロックにあるM99やM17の直前に、必ずG90(絶対指令)および補正キャンセルコード(G40、G49など)を明示的に宣言し、復帰直前のモーダル状態をリセットしてください。
FanucでM98とM198を併用してサブプログラムをネストする際、アラーム0077や1080を防ぐパラメータ確認方法は?
Fanucでは、内部メモリからのM98呼び出しは最大4レベル(マクロを含めると8レベル)までネスト可能ですが、外部メディアやデータサーバーを使用するM198呼び出し中のネストには厳格な制限があります。M198プログラム内からさらに別のM198を呼び出そうとするとアラーム1080が発生し、ネスト制限を超えるとアラーム0077が発生します。実務的対策:段取り前にパラメータ3404#2(SBP)の値を確認し、M198のアドレスPがファイル番号かプログラム番号のどちらに紐づいているかを検証し、さらに外部メディアに格納するサブプログラムの階層数を最大1階層に収める構造へプログラムを修正してください。
Mitsubishiでサブプログラム呼び出し時にP232アラーム(プログラムなし)が発生した場合、どのパラメータと設定を確認すべきですか?
P232エラーは、指定されたファイル名やプログラム番号が接続デバイス内に存在しないか、デバイスのマッピングが間違っている場合に発生します。特に、ブロック内で直接メディアを指定するアドレス「,D」の値が、制御盤のパラメータ#8880〜#8884(デバイスマッピング)と一致していないことが多く、これがロット切り替え時の通信エラーや非計画停止を引き起こします。実務的対策:段取り前に、パラメータ#8880(D0)〜#8884(D4)の割り当て設定(M=メモリ、R=メモリカード、G=HDDなど)を確認し、プログラムで使用している「,D」のアドレスと接続中の物理メディアが正しく対応しているか検証してください。
まだ解決しませんか?
このトピックについて、AIアシスタントに自然言語で質問できます。検証済みの情報源に基づいており、ハルシネーションはありません。

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)
CNC工作機械業界のあらゆる分野で25年以上の経験を持ち、ブランドに依存しないコンサルティング、エンジニアリング、純正部品サービスを提供するCNC CAREの共同創業者として活動を続けています。
関連記事
このトピックに関する他の記事
Fanuc 3D干渉チェックの設定手順と干渉回避パラメータ
Fanucの3D干渉チェックパラメータ設定手順を解説。パラメータ10930#0や10930#5の検証、アラームPS0492への対処、PMC信号TDICHGによる変更反映手順を解説し、ロット加工における激しい衝突事故や不良品発生を防ぐ実務技術。
Fanucカスタムマクロ有効化パラメータ(0932/8135)の設定と衝突回避ガイド
Fanucカスタムマクロ有効化パラメータ0932および8135の設定手順、共通変数拡張、工具補正マッピング(V15)について解説。ロット間での再現性低下やアラーム123による非計画停止、チャックやバイスジョーへの激しい機械衝突(ハードクラッシュ)を防ぐ段取り実務。
Fanucの工具寿命管理パラメータ設定方法と衝突を防止する段取り手順
Fanucの工具寿命管理パラメータ(6800#2、6810)の正しい設定方法を解説。登録時のエラーアラーム156や159の発生原因と対策を提示し、量産時の工具折損に伴うspindleやturretの衝突事故(ハードクラッシュ)を防ぎ、ロット間の加工精度と高い再現性を維持します。
Fanucリジッドタッピング加減速パラメータ:設定手順と衝突防止ガイド
Fanuc CNCにおけるリジッドタッピング用の最適なトルク加減速パラメータ(11420#0や5214番など)の設定手順を徹底解説。ギア固有の加減速調整やアラームSP0741、衝突事故を防止してロット生産の繰り返し精度と加工品質を高める実務ノウハウを紹介。