Skip to main content
CNC.wiki

Fanuc・Siemens・Mitsubishi CNCサブプログラム呼び出し完全ガイド

Fanuc、Siemens、MitsubishiのCNCサブプログラム(M98、MCALL)の作成・呼び出し方法を解説。3404番や#8876番等の重要パラメータ設定、Alarm 0077等のネスト制限エラー原因、座標ずれによる衝突を防ぐプログラミング手法を紹介。

Hakan Gündoğdu
Hakan Gündoğdu

CNC CARE 共同創業者

はじめに

サブプログラムの終了ブロック(M99やM17)を読み込む際、逃げやモーダル呼び出しの解除を誤ると、制御システムがインクリメンタル指令(G91)モードのままであると、アブソリュート座標(G90)への復帰が行われず、予期せぬ空間的な指令値のずれが発生します。この座標ずれにより、ツールがワークピースに食い込むばかりか、タレットがチャックやバイスジョー、クランプなどの工作物保持具へ激しく衝突し、主軸シャフトの曲がりやツールの破損といった致命的な機械衝突事故を引き起こします。量産工程においてこのパラメータ設定や指令モードの管理が未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されるという、再現性の低下と不良品発生のリスクを抱えることになります。段取り前にFanucの3404番(SBP)やMitsubishiの#8876番などの重要パラメータを確認することで、このコマンドに関連して最も発生しやすい非計画停止を防ぎ、機械の損傷やワークの廃棄を防ぐことができます。本稿では、Fanuc、Siemens、Mitsubishiの各制御盤におけるサブプログラム呼び出しの構造、パラメータロック、およびモーダル境界管理について詳細に解説します。

技術概要

技術仕様詳細
コマンドコードFanuc: M98, M99, M198
Siemens: L<番号>, <プログラム名>, MCALL, EXTCALL, M17, RET
Mitsubishi: M98, M99, M198
モーダルグループ / モーダル性サブプログラム呼び出しおよび復帰コマンド
対象ブランドFanuc, Siemens, Mitsubishi
重要パラメータFanuc: 3404#2 (SBP), 6001#5/7000#0 (TCS)
Siemens: P (INT), VAR キーワード
Mitsubishi: #8876 (M198用ストレージデバイス), #8129 (検索優先度)
主な制限事項ネスト制限:最大4レベル(Fanuc)、最大11/16レベル(Siemens)、最大8/10レベル(Mitsubishi)。外部ストレージメディア上のネストされたM198呼び出しは禁止。

クイックリード

  • モーダルリセットアクション: サブプログラムを終了する前に、アブソリュート指令(G90)を一貫して復帰させ、変更されたモーダル送り速度などをリセットすることで、壊滅的なツールパスのずれを防止します。
  • ネスト境界の制限: インタプリタのメモリオーバーフローを避けるため、サブプログラムのネストレベルをFanucでは最大4、Mitsubishiでは8〜10、Siemensでは11〜16に制限します。
  • 外部ストレージ呼び出し: 大容量のプログラムを外部メモリカードまたはデータサーバから直接実行するには、M198(Fanuc/Mitsubishi)またはEXTCALL(Siemens)をプログラムします。
  • パラメータロック保護: 意図しない改変を防ぐため、Fanucのパラメータ PRG8(0389#2)および PRG9(0010#4)を使用して、O8000およびO9000番台のマクロプログラムの編集権限をロックします。
  • エイリアス設定の決定: カスタムM、S、T、またはBコードを使用して、タレット旋回シーケンスなどのバックグラウンドサブルーチンを自動的にエイリアス呼び出しし、実行します。
  • SiemensモーダルMCALL: Siemensシステムにおいて MCALL を適用し、選択解除されるまで、以降のブロックに記述された各座標位置でサブプログラムを自動的に実行します。

基本概念

サブプログラムプログラミングの実用上のメリットは、反復的な加工シーケンスをモジュール化することで、プログラムファイルのサイズを大幅に削減し、将来の設計変更を簡素化できる点にあります。同一の粗加工パス、溝加工ルーチン、またはパレットチェンジシーケンスを1つの巨大なプログラム内に何度もコピー&ペーストする代わりに、開発者はこれらを独立した下位レベルのファイルとして保存します。メインプログラムは必要に応じてこれらのサブルーチンを呼び出すだけでよく、サブプログラムが終了すると即座にメインパスを再開するため、メモリ消費を最小限に抑えたクリーンで合理化されたプログラムを作成できます。

各制御装置メーカーは、これらの下位レベルファイルをどのように検索、呼び出し、実行するかにおいてそれぞれ異なるアプローチを採用しています。レガシーなプラットフォームでは厳格な数値による「O番号」の命名規則が求められますが、現代のシステムでは英数字を使用した分かりやすいファイル名を使用できます。また、サブプログラムを異なる座標間でモーダルに実行したり、内部メモリ制限を完全にバイパスするために外部ハードウェアインターフェースから動的にストリーミング実行したりすることも可能です。サブプログラムは呼び出し元プログラムのアクティブな拡張として実行されるため、送り速度や位置決め座標などのモーダル状態がレベル間を流動的に移行します。このため、座標のリーク( bleeding )を避けるための厳格なプログラミング手法が必要になります。

コマンド構造

サブプログラムを呼び出すために、CNCインタプリタはターゲットプログラムの識別子や繰り返し回数とともに、特定のコマンドコードを解析する必要があります。デザイン上の簡潔さを優先するならM98が基本です。標準的なFanucおよびMitsubishi環境では、M98 コードがこのジャンプを開始し、P アドレスによって指定されたプログラムに制御を移します。コントローラは、最終的な復帰シーケンスを実行する前に、繰り返しカウンタを使用してサブプログラムの各繰り返しを追跡します。サブプログラムの終端に達すると、復帰コードがサブルーチンの実行を停止し、プログラムポインタを元の呼び出しコマンドの直後のブロックに戻します。

Siemensの制御システムはより柔軟な構造をサポートしており、プログラム名または L アドレスでサブプログラムを直接呼び出すことができます。Siemensのサブプログラム定義には、プログラムレベル間で値を転送するためのパラメータの型と名前を定義する PROC ヘッダーを含めることができます。復帰は M17 または RET を介して実行されます。すべてのブランドにおいて、M198EXTCALL などの外部呼び出しにより、メモリカードやネットワークドライブからのストリーミング実行が可能です。パラメータと構文アドレスは、制御システムがこれらのルーチンをどのように検索、繰り返し、復帰するかを管理します。

コマンド構文アドレス:

  • Fanuc 標準呼び出し: M98 P_ L_ ;
  • Fanuc 外部呼び出し: M198 P_ ;
  • Fanuc 復帰: M99 ;
  • Siemens 定義: PROC <プログラム名> (<パラメータ型> <パラメータ名>, VAR <パラメータ型> <パラメータ名>) [SAVE] [DISPLOF] [SBLOF] [ACTBLOCNO]
  • Siemens 呼び出し: <プログラム名> (<引数1>, <引数2>) または L<番号> または MCALL <プログラム名>
  • Siemens 復帰: M17 または RET
  • Mitsubishi 標準呼び出し: M98 P__ H__ L__ ,D__ ; または M98 <ファイル名> H__ L__ ,D__ ;
  • Mitsubishi 外部呼び出し: M198 P__ L__ ; または M198 <ファイル名> L__ ;
  • Mitsubishi 復帰: M99 P__ ;
パラメータアドレス対象装置説明有効な設定範囲
PFanuc / Mitsubishi呼び出すターゲットプログラム番号を指定最大8桁
LFanuc / Mitsubishiサブプログラムの繰り返し回数を指定1 から 9999 (デフォルトは 1)
HMitsubishiサブプログラム内の開始シーケンスブロック番号を指定シーケンスコード(例: H100N100 に一致)
,DMitsubishi呼び出しを指定された物理ストレージデバイスに明示的にルーティング0 から 4 (パラメータでマッピング)
<file name>Mitsubishi山括弧(不等号)で囲まれた英数字のファイル名を指定最大32文字
P (呼び出し内)Siemensプログラムの繰り返し回数を制御1 から 9999 (例: P3
VARSiemensPROC ヘッダーでの参照渡しパラメータの受け渡しを宣言該当なし(キーワード)
SAVESiemensアクティブなモーダルG機能およびフレームを自動的に保存および復帰該当なし(属性)
DISPLOFSiemensサブプログラム実行中のHMI画面上でのブロック表示を抑制該当なし(属性)
SBLOFSiemens実行中のシングルブロックモードによるステップ実行を無効化該当なし(属性)

ブランド別応用

Fanuc CNCの統合

Fanuc制御装置は、サブプログラムを起動するためのパラメータ駆動型のエイリアス呼び出しをサポートしています。このシステムは、パラメータ6001#5 (TCS) を使用して工具呼び出しをプログラムO9000にマッピングすることで、バックグラウンドサブルーチンを実行できます。

標準的なサブプログラムは M98 で呼び出され、外部ストレージカードのファイルは M198 で呼び出され、M99 コマンドを使用して復帰します。

パラメータ / アラーム / バージョンタイプ説明設定 / 詳細
パラメータ 0010#4 (PRG9)パラメータサブプログラム O9000 から O9999 の編集を禁止するかどうかを指定。0 (禁止しない), 1 (禁止する)
パラメータ 0389#2 (PRG8)パラメータサブプログラム O8000 から O8999 の編集を禁止するかどうかを指定。0 (禁止しない), 1 (禁止する)
パラメータ 3404#2 (SBP)パラメータM198 におけるアドレス P がファイル番号を指定するのか、プログラム番号を指定するのかを決定。0 (ファイル番号), 1 (プログラム番号)
パラメータ 3457パラメータ検索フォルダ階層の構成(例:ユーザフォルダ、MTBフォルダ、システムフォルダなど)。ビット値
パラメータ 6071 から 6079パラメータ特定のMコードを割り当てて、サブプログラム O9001 から O9009 を自動的に呼び出す。3 から 99999999 (予約済みのMコードを除く)
アラーム 0076アラームPROGRAM NOT FOUND: 呼び出されたプログラムがメモリまたは検索フォルダ内に見つかりません。パラメータ 3457 を確認し、O番号が登録されているか確認します。
アラーム 0077アラームTOO MANY SUB, MACRO NESTING: ネストレベルが制限を超えています。サブプログラムは最大4ネスト(マクロ呼び出しを含めると8)。
アラーム 1080アラームDUPLICATE DEVICE SUB PROGRAM CALL: ネストされたM198呼び出し。アクティブなM198サブプログラムの内部からM198を呼び出すことは避けてください。
アラーム 1091アラームDUPLICATE SUB-CALL WORD: 同一ブロック内で重複した呼び出し。サブプログラム呼び出しは別々のブロックで指定してください。
パラメータ 0001#1 (FCV)バージョンFS0-TC/FS15-TA テープフォーマット用のレガシー互換モード。0 (標準フォーマット), 1 (Series 15フォーマットに戻り、繰り返し回数とPアドレスをマージ)

警告: M99復帰コマンドの前に座標オフセットやモーダル位置決め(G91)をリセットしないと、座標系のずれが生じ、タレットがバイスジョーへ激突する原因となります。

Siemens SINUMERIKの統合

Siemensは、ローカル変数のスコープ制限を持つ高度なサブプログラム定義をサポートしています。標準的な呼び出しではプログラム名またはL番号を使用し、PROCヘッダーを介してパラメータを直接渡します。

モーダルなサブプログラム呼び出しは MCALL を介して開始され、選択解除されるまで各座標ブロックの後にサブプログラムを実行します。復帰には M17 または RET を使用します。

パラメータ / アラーム / バージョンタイプ説明設定 / 詳細
P (INT)パラメータサブプログラムの繰り返し回数をプログラムするためのアドレス。1 から 9999
VARパラメータPROCヘッダーで参照渡しパラメータを宣言。該当なし(キーワード)
SAVE属性アクティブなモーダルG機能およびフレームを自動的に保存および復帰。該当なし
DISPLOF / SBLOF属性HMIでのブロック表示の抑制 / シングルブロックモードの無効化。該当なし
アラーム 14011アラームprogram not existing or will be edited: 呼び出されたファイルが存在しないか、HMI上で編集用に開かれています。HMIでファイルを閉じてロックを解除します。パス _N_SPF_DIR を確認してください。
アラーム 14012アラームmaximum subroutine level exceeded: 最大ネスト深度を超過しました。ネストレベルを確認してください。
アラーム 12720アラームprogram number for macro call (G65/G66) missing in ISO mode: ISOモードでのマクロ呼び出し用のプログラム番号が不足しています。アドレス P を使用してターゲットプログラム番号を指定してください。
SINUMERIK 808D vs 828D/840D slバージョンサブプログラムのネストレベルに関するハードウェア階層の違い。808D: 11レベル · 828D/840D sl: 16レベル(ASUB込みで18レベル)
ソフトウェアバージョン 5+バージョン編集用に開かれているプログラムの実行を防止する安全インターロック。HMI上で開かれているプログラムはNC Startで起動できません。

警告: PROCの行からSAVE属性を省略すると、モーダルなGコード設定(G91など)がメインプログラムにリークし、即座の軸衝突を引き起こします。

Mitsubishi CNCの統合

Mitsubishiは、Gコードブロック内で直接英数字によるサブプログラム呼び出しを行うことができます。検索優先度は、O番号フォーマットを決定するパラメータ #8129 を使用して構成されます。

サブプログラムは、山括弧(不等号)付きのM98を使用して呼び出され(例:<PART.PRG>)、M198または ,Dアドレスを使用して外部メディアにルーティングされます。

パラメータ / アラーム / バージョンタイプ説明設定 / 詳細
#8876 (M198 pro stor: dev)パラメータM198 で呼び出されるサブプログラムの検索対象ストレージデバイスを選択。G (ハードディスク), R (メモリカード), D (データサーバ), N (USBメモリ)
#8880 から #8888パラメータ,Dアドレス(0〜4)にマッピングされた具体的なハードウェアデバイスを設定。M (メモリ), G (ハードディスク), R (Mカード), D (データサーバ), T (イーサネット), F (FLD)
#8129 (Subpro No. select)パラメータサブプログラム番号を検索するための優先順位を決定。0 (指令された番号), 1 (Oから始まる4桁の番号), 2 (8桁の番号)
プログラムエラー (P230)アラームSubprogram nesting over: 最大ネスト深度を超えました。ネスト制限とデータサーバ構成を確認してください。
プログラムエラー (P231)アラームNo sequence No.: 復帰先のシーケンスブロックまたはジャンプ先が見つかりません。M99 Pの後に指定されたシーケンス番号がターゲットプログラムに存在することを確認してください。
プログラムエラー (P232)アラームNo program No.: ターゲットファイルが見つからないか、外部ドライブがマウントされていません。ドライブのマウント状態およびファイル名の長さ(最大32文字)を確認してください。
M70V/M700V vs M800V/M80VバージョンサブプログラムネストレベルのCNCシリーズによる制限の違い。M70V/M700V: 8レベル · M800V/M80V: 10レベル
M800VW/M80VW vs M800VS/M80Vバージョンパラメータ #8876 が設定されていない場合の、M198におけるデフォルトの検索デバイス。VW/Type-W: データサーバ · VS/Type-S: 前面SDカード

警告: 複数の系統から同時にSDカードのM198サブプログラムを実行することはブロックされ、即座の運転停止を引き起こします。

ブランド比較

機能項目FanucSiemensMitsubishi
英数字ファイル名ネイティブサポートなし。厳密なO番号指定が必要。プログラム名の文字列を使用してネイティブサポート。山括弧(不等号)を使用してネイティブサポート(例:<PART-FILE.PRG>)。
反復モーダル呼び出しブロックごとの実行、またはG66モーダルマクロ呼び出し。MCALL <プログラム名> を使用したモーダルサブプログラム実行。ブロックごとの実行。
ネスト深さ最大4ネスト(マクロ呼び出しを含めると8)。最大11(808D)、16(828D/840D sl)、ASUBを含めると最大18。最大8(M70V/M700V)、10(M800V/M80V)。
ストレージメディアからの呼び出しM198 P_ によりカード/データサーバからストリーミング。EXTCALL を使用して外部サブプログラムを呼び出し。M198 により #8876 または明示的な ,D アドレスパラメータで構成されたデバイスから呼び出し。
パラメータの受け渡しカスタムマクロ呼び出し(G65/G66)が必要。PROC 定義を介して直接サポート(値渡しおよび VAR による参照渡し)。マクロ呼び出しまたは変数の使用が必要。

技術解析

これら3つのCNCアーキテクチャを分析的にレビューすると、サブプログラムの実行、メモリスコープ、およびパラメータ転送に対する異なるアプローチが明らかになります。Siemensはその実行モデルを高級PCプログラミング言語に習っており、プログラマーがサブプログラムヘッダー内で直接ローカルスコープやパラメータ受け渡しメカニズムを定義できるようにしています。PROC 行内で VAR キーワードを使用することで、Siemensは参照渡しによる実行を可能にし、サブプログラムが値を修正して呼び出し元の親プログラムに計算結果を戻すことができます。一方、FanucとMitsubishiはレガシーなレジスタアーキテクチャを採用しており、値を転送するには G65G66 などのマクロオプションを使用するか、揮発性のコモン変数(共通変数)やグローバル変数に依存せざるを得ないため、モーダルデータの破損リスクが生じます。

ネスト階層も、それぞれのハードウェア哲学を反映しています。Fanucの最大4ネストという制限は、呼び出しツリーをシンプルかつ浅い構成に保つことをプログラマーに要求します。Siemensは最大16〜18のネストレベルを提供しますが、これらのレベルはユーザサブプログラム、標準のSiemensサイクル、およびメーカー(OEM)のバックグラウンドルーチン(主軸速度制限やタレット制御マクロなど)の間で動的に共有されるため、この割当メモリは急速に枯渇する可能性があります。Mitsubishiはその中間に位置し、従来のM70Vシリーズで8レベル、新しいM80V制御装置で10レベルを提供しています。どの制御システムであっても、これらの制限を超えると即座に実行が停止するため、すべてのアクティブなシステムにわたって呼び出しの深さを事前にトレースしておく必要があります。

ディレクトリルーティングと安全制御も、これらのプラットフォームを差別化する要因です。Fanucはパラメータ 3457 を使用して固定された自動フォルダ階層を検索しますが、Mitsubishiは ,Dアドレスや <PART.PRG> のような山括弧付きファイル名によって直接物理的なルーティングを指定できます。Siemensは、EXTERN 宣言がない限り、サブプログラム呼び出しをローカルのワークピースディレクトリ内に制限します。また、SiemensはHMI編集時の安全ロック(ソフトウェアバージョン5以降)を適用しており、呼び出されたファイルが画面上で開かれている場合にNC Startを防止します。これはFanucやMitsubishiにはネイティブで存在しない機能です。

プログラム例

Fanucサブプログラム呼び出し例

; Fanucサブプログラム呼び出し例
O0001 (メインプログラム) ;
G90 G54 G00 X0 Y0 Z10.0 ; 軸の予備位置決め
M98 P1000 L5 ; サブプログラムO1000を5回呼び出し
G00 Z50.0 M30 ; 退避してメインプログラム終了

O1000 (サブプログラム) ; G91 G01 Z-2.0 F150 ; インクリメンタルに切り替えてZ送り G90 G01 X50.0 F300 ; アブソリュートに切り替えてX50.0まで切削 G91 G01 Z2.0 ; インクリメンタルZ退避 G90 G01 X0 ; アブソリュートでX0に戻る M99 ; メインプログラムに復帰

空運転 (dry run)

Fanucコードを空運転(dry run)で検証する際、機械はまずアブソリュートモードで座標X0、Y0、Z10.0に移動します。インタプリタがM98 P1000 L5ブロックに達すると、メインプログラムを一時停止し、サブプログラムO1000にジャンプします。O1000内でコントローラはインクリメンタルモード(G91)に切り替えてZ軸を2.0 mm切り込み、その後アブソリュートモード(G90)に戻してX軸送り50.0 mmを実行します。その後インクリメンタル退避を行い、アブソリュートX0に戻ってからM99を読み取ります。コントローラはこのループを5回繰り返してからメインプログラムに戻り、そこでZを50.0 mmに退避させ、M30で終了します。

Siemensサブプログラム呼び出し例

; Siemensサブプログラム呼び出し例
N10 G90 G54 G00 X0 Y0 Z10.0 ; 軸の予備位置決め
N20 MCALL POCKET_CYCLE(3.0, 150.0) ; POCKET_CYCLEサブプログラムをモーダル呼び出し
N30 X50.0 Y50.0 ; 座標1でサブプログラムを実行
N40 X100.0 Y50.0 ; 座標2でサブプログラムを実行
N50 MCALL ; モーダルサブプログラム呼び出しを解除
N60 G00 Z50.0 M30 ; Z退避およびメインプログラム終了

注: 以下は、ワークピースディレクトリ内に保存されたサブプログラム POCKET_CYCLE.SPF です。

PROC POCKET_CYCLE(REAL DEPTH, REAL FEED) SAVE DISPLOF ;
G91 G01 Z=-DEPTH F=FEED ; インクリメンタル切り込み
G90 G01 G41 X0 Y0 ; 工具径補正の適用
G03 X0 Y0 CR=25.0 ; 円弧ポケット加工
G40 G01 X0 Y0 ; 補正キャンセル
G91 G01 Z=DEPTH ; インクリメンタル退避
M17 ; メインプログラムに復帰

空運転

空運転中にSiemensプログラムを検証すると、機械はまずX0、Y0、Z10.0に移動します。ブロックN20のMCALLコマンドは、POCKET_CYCLEルーチンをモーダルとしてNCメモリに登録します。機械はN20ブロックではサブプログラムを実行せず、ブロックN30(X50.0 Y50.0)を読み込むと、その座標に移動して一時停止し、サブルーチンを呼び出します。サブルーチンはSAVE属性がアクティブな状態で実行され、呼び出し元プログラムのモーダル設定を自動的に保存します。インクリメンタルモードに切り替えてZを3.0 mm切り込み、円をミーリング加工し、退避してからM17を読み取ります。コントローラは元のモーダル設定を自動的に復元して続行します。このシーケンスをN40(X100.0 Y50.0)でも繰り返し、その後ブロックN50でモーダル状態がクリアされます。

Mitsubishiサブプログラム呼び出し例

; Mitsubishiサブプログラム呼び出し例
O0002 (メインプログラム) ;
G90 G54 G00 X0 Y0 Z10.0 ; 軸の予備位置決め
M98 <POCKET-ROUT.PRG> H200 L3 ,D1 ; デバイス1からブロックN200開始でファイルPOCKET-ROUT.PRGを呼び出し
G00 Z50.0 M30 ; 退避およびメインプログラム終了

注: 以下は、CFカード(デバイス1)に保存されたサブプログラム POCKET-ROUT.PRG です。

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 ; インクリメンタル退避
N500 G90 G01 X0 Y0 ; アブソリュート復帰
M99 ; メインプログラムに復帰

空運転

空運転中、Mitsubishiコントローラは工具をX0、Y0、Z10.0に予備位置決めします。M98コマンドを実行すると、CNCはデバイス1(CFカード)を確認し、ファイル <POCKET-ROUT.PRG> を特定してシーケンスブロックN200を検索します。インタプリタはブロックN100を完全にバイパスし、N200からZ軸のインクリメンタル移動を開始します。輪郭切削を実行した後、工具はアブソリュートモードでX0、Y0に戻ります。M99を読み込むと、コントローラはメインプログラムに戻り、M30で終了する前にこのプロセスを3回繰り返します。

エラー解析

ブランドアラームコードトリガー条件オペレータ側の症状根本原因 / 対策
Fanucアラーム 0076呼び出されたプログラム番号がメモリまたは検索フォルダ内に存在しません。機械が即座に停止し、画面に「PROGRAM NOT FOUND」のエラーメッセージが表示されます。パラメータ 3457 のフォルダパス設定を確認し、ローカルメモリにO番号のファイルが存在することを確認します。
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」というメッセージが表示されてシステムが停止し、NC Startが無効になります。呼び出しツリーを確認します。ネストされたサイクルまたは Turret3_CODE_T などのメーカー(OEM)マクロを削減します。
Siemensアラーム 12720P によるプログラム番号の定義なしに、ISOモードのマクロ呼び出しを実行しました。制御装置がコマンドを拒否し、「program number for macro call missing」エラーを表示します。アドレス P を使用してターゲットプログラム番号を指定します。
Mitsubishiエラー P230ネストレベルが制限を超えたか、データサーバ上でネストされたM198呼び出しを実行しました。制御装置が停止し、「Subprogram nesting over」エラーが表示されます。ネストレベルを確認します。呼び出し回数を8回(M70V/M700V)または10回(M800V/M80V)までに制限します。
Mitsubishiエラー P231指定された復帰ブロック(M99 P)またはジャンプ先が存在しません。インタプリタが停止し、「No sequence No.」エラーが表示されます。Pの後にプログラムされたシーケンス番号が、復帰先ターゲットプログラム内に存在することを確認します。
Mitsubishiエラー P232呼び出されたファイルが存在しないか、ドライブが未マウントであるか、またはファイル名が32文字を超えています。実行が停止し、「No program No.」エラーが表示されます。外部メディアを確実にマウントし、ファイル名を確認して文字数を32文字未満に抑えます。

実務応用ノウハウ

サブプログラム終了時のモーダル状態やネスト境界の管理を誤ると、工作物や治具への衝突を招き、重大な機械的損傷と生産ラインの長期停止を引き起こします。特にSiemens環境で PROC 行の SAVE 属性を省略すると、サブプログラム内での一時的なインクリメンタル指令(G91)がメインプログラムにリークします。この結果、復帰コマンド M17RET の実行後に工具が意図しない相対座標で移動し、タレットがバイスジョーやチャック、工作物保持クランプに激突して主軸を曲げ、ツールを破損させます。また、FanucやMitsubishiにおけるマクロプログラム編集保護のための 0010#4(PRG9)0389#2(PRG8) パラメータのロックが解除されたままだと、オペレータによる誤操作でバックグラウンドマクロが改ざんされるリスクが生じます。このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されるという、再現性の低下と不良品発生の致命的な問題に繋がります。段取り前にFanucの 3404番(SBP) パラメータやMitsubishiの #8876番(M198デバイス設定) パラメータを確認することで、このコマンドで最も多い非計画停止を防げます。さらに、Fanucでは最大4レベル、Mitsubishi M80Vでは最大10レベル、Siemens 840D slでは最大16レベルというネスト許容制限を超えると、それぞれ Alarm 0077Error P230Alarm 14012 が発生し、実行が即座に中断されます。特に複数のパートシステムからSDカード上の同一 M198 プログラムへ同時にアクセスしようとすると、Mitsubishiでは競合エラーが発生して動作が停止するため、事前の動作設計とパラメータ確認が再現精度の維持に不可欠です。

関連コマンド

  • G65 単純マクロ呼び出し: ローカル変数をマクロレジスタに直接渡しながら、サブプログラムへの単一の非モーダル呼び出しを開始します。
  • G66 モーダルマクロ呼び出し: キャンセルされるまで、以降のすべての移動ブロックの後に指定されたマクロサブプログラムを自動的に実行するようCNCインタプリタに指示します。
  • G645公差ベース平滑化: 高速加工時の輪郭制御平滑化公差を調整します。コード誤差を防ぐために、サブプログラムの送り速度と慎重に調整する必要があります。
  • G68.2傾斜面制御: 多軸加工用の傾斜加工面座標系を設定します。サブプログラムループを実行する前に、正しい座標マッピングを行う必要があります。
  • Mitsubishi高速高精度制御III(G05 P20000): 微小セグメント処理用の先進的な先行読み込み(ルックアヘッド)パスバッファリングを有効にします。コマンドの競合を防ぐため、サブプログラム呼び出しとは別の単独ブロックでプログラムする必要があります。

おわりに

量産工程における寸法ばらつきを防ぎ、高精度な加工の繰り返し精度を担保するためには、サブプログラム実行完了時のモーダル初期化手順を標準化することが必須です。プログラムの作成や段取りの際には、サブプログラムの復帰コマンド(M99またはM17)の直前に、アブソリュート復帰(G90)および各種補正キャンセル(G40、G49など)を明記した初期化ブロックを必ず挿入してください。さらに、パラメータ 0010#40389#2 による編集権限のロックを徹底し、外部メモリ(M198 / EXTCALL)を使用する際は伝送速度やデバイス割当パラメータ(3404番、#8876番など)を事前検証することで、予期せぬ非計画停止や座標のずれによる不良品発生のリスクを極小化できます。

よくある質問

サブプログラム呼び出しの多用によってロット間での寸法精度にばらつきが出る(ロット一貫性の低下)のを防ぐには、どのような対策が必要ですか?

ロットごとの寸法ばらつきや再現性の低下は、サブプログラム内の局所的な送り速度(F)や補正量などのモーダル指令がメインプログラムに残留することで発生します。特に、前加工と後加工でサブプログラムを共有する際、予期せぬモーダルデータの干渉が工具軌道にわずかな差を生じさせ、2ロット目以降で初めて寸法不良として現れる場合があります。具体的な対策:サブプログラムの最初と最後に必ずモーダルクリーンアップブロック(G90、G40、G49、および送り速度へのリセット指令)を配置し、メインプログラムに復帰する際の状態を一貫して初期化してください。

大容量のサブプログラムを外部メモリから呼び出す(M198 / EXTCALL)際、非計画停止を防ぐために段取り前に検証すべきパラメータは何ですか?

外部ストレージからの実行時に発生する突然の停止は、データ転送レートの不足や、呼び出し先ファイルのアドレス解釈の不一致(プログラム番号とファイル名の混同)が原因です。例えば、パラメータ設定が正しく行われていないと、M198読み込み時にバッファリングが追いつかず、切削中に工具が一時停止してワーク表面にツールマーク(食い込み痕)を形成し、不良品発生の原因になります。具体的な対策:Fanucではパラメータ3404番(SBP)を正しく設定してPコードの検索タイプを整合させ、Mitsubishiでは#8876番で対象デバイス(メモリカードやデータサーバ)を明確にマッピングして、事前に単動(ドライラン)による読み込み検証を実施してください。

サブプログラム実行中にFanucのAlarm 0077やSiemensのAlarm 14012(ネスト制限超過)が発生した場合、どのようにプログラムを修正すべきですか?

ネスト制限のアラームは、単にユーザープログラムのネスト(Fanucは4、Siemensは11または16)が多いだけでなく、機械メーカー(OEM)が定義した自動測定サイクルやタレット旋回などの非表示マクロがバックグラウンドで呼び出され、ネスト数が上限を超えたことで発生します。このエラーは機械の即時停止を招き、ワークやツールの損傷リスクを高めます。具体的な対策:呼び出し階層をトレースしてメインプログラム側に一部の処理を展開(フラット化)するか、共通変数(#100〜#199等)を活用して呼び出し回数自体を減らすようプログラムロジックを最適化してください。

まだ解決しませんか?

このトピックについて、AIアシスタントに自然言語で質問できます。検証済みの情報源に基づいており、ハルシネーションはありません。

AIアシスタントに質問する
Hakan Gündoğdu
Hakan Gündoğdu
  • 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による変更反映手順を解説し、ロット加工における激しい衝突事故や不良品発生を防ぐ実務技術。

FanucProgramming

Fanucカスタムマクロ有効化パラメータ(0932/8135)の設定と衝突回避ガイド

Fanucカスタムマクロ有効化パラメータ0932および8135の設定手順、共通変数拡張、工具補正マッピング(V15)について解説。ロット間での再現性低下やアラーム123による非計画停止、チャックやバイスジョーへの激しい機械衝突(ハードクラッシュ)を防ぐ段取り実務。

FanucProgramming

Fanucの工具寿命管理パラメータ設定方法と衝突を防止する段取り手順

Fanucの工具寿命管理パラメータ(6800#2、6810)の正しい設定方法を解説。登録時のエラーアラーム156や159の発生原因と対策を提示し、量産時の工具折損に伴うspindleやturretの衝突事故(ハードクラッシュ)を防ぎ、ロット間の加工精度と高い再現性を維持します。

FanucProgramming

Fanucリジッドタッピング加減速パラメータ:設定手順と衝突防止ガイド

Fanuc CNCにおけるリジッドタッピング用の最適なトルク加減速パラメータ(11420#0や5214番など)の設定手順を徹底解説。ギア固有の加減速調整やアラームSP0741、衝突事故を防止してロット生産の繰り返し精度と加工品質を高める実務ノウハウを紹介。

FanucProgramming