Skip to main content
CNC.wikiCNC.wiki

M00, M01, M02, M30: CNCプログラム停止・終了コード完全解説

CNCの停止・終了コマンドM00、M01、M02、M30をFanuc、Siemens、Mitsubishiで徹底検証。ロット間の寸法ばらつきを防ぐパラメータ設定(Parameter 3404等)や、アラームPS5010、P36、16954の回避・解消法を解説。

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

CNC CARE 共同創業者

はじめに

オペレーターパネルの「オプショナルストップ」スイッチの切り替え忘れひとつで、プログラムされた M01 コマンドは完全に無視されます。主軸が高速で回転したまま、次の工程の急送り運動によって工具がワークやバイス口金、あるいは固定用クランプに激しく衝突し、turret(タレット)軸の狂いや spindle(スピンドル)の致命的な破損を招くことは、量産現場において最も警戒すべきリスクのひとつです。さらに、M00(プログラムストップ)やM01(オプショナルストップ)をリジッドタップ加工などの停止禁止領域(stop delay area)で実行すると、電気的な同期が崩れ、Siemens制御盤ではアラーム 16954 が発生してタップがワーク内にねじ切られたまま非計画停止します。このような加工プロセスにおける安全な段取りと、ロット間における高い再現性を担保するためには、M00M01M02(プログラムエンド)、M30(プログラムエンド&巻き戻し)という4つの補助機能(M-code)と、それらを制御する CNC と PLC の間のハードウェアレベルでの通信連携(ハンドシェイク)を正しく理解し、パラメータを適切に管理することが不可欠です。量産立ち上げ時に CNC パラメータが未検証のまま生産ラインが稼働すると、最初の数個は正常に加工できても、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されるという深刻な事態に陥ります。特に、プログラムの終了コマンドが PLC のカウンタや自動バーフィーダーなどの周辺機器と正しく同期していない場合、こうした再現性の低下や不良品発生を招きやすくなります。位置決め制御との関連性については、G94およびG95:送り速度指定 のガイドを参照してください。

技術概要

技術仕様詳細
指令コードM00, M01, M02, M30
modalグループ非modal(プログラムされたブロックのみ有効)
対応ブランドFanuc, Siemens, Mitsubishi
重要なパラメータFanuc Parameter 3404(巻き戻し動作), Siemens MD 22254 / MD 22256(カスタム停止Mコード), Mitsubishi Parameter #12005(ブロックごとの最大Mコード数)
主な制約事項周辺装置の停止(spindle、クーラント)は、ベースの CNC 仕様ではなく、各工作機械メーカー(MTB)の PLC ラダーロジックによって制御されます。Siemensの停止遅延エリア(Alarm 16954)内ではプログラムしないでください。

クイックリード

  • HMIパネルの状態を確認する: ワークの測定などで M01 を使用するプログラムを実行する前に、オペレーターのHMIパネルで「オプショナルストップ」スイッチが有効になっていることを必ず確認してください。
  • 終了コマンドを独立させる: 自動バーフィーダーやワークカウンタロジックなどの補助機能における PLC ハードウェアハンドシェイクのエラーを防ぐため、M02 および M30 は独立した専用ブロックに記述してください。
  • 停止禁止エリアを避ける: 同期ロスとSiemensの alarm 16954 を防ぐため、ねじ切り加工やリジッドタップの cycle 中には絶対 M00M01 をプログラムしないでください。
  • Parameter 3404の確認: プログラムの先頭に自動で巻き戻すか、外部信号を待って一時停止するかを制御するため、Fanucの Parameter 3404(M30 はbit 4、M02 はbit 5)を設定してください。
  • ハンドシェイク信号の整合: 標準の FIN1/FIN2 信号ではなく、M02 および M30 に対するReset & Rewind(RRW)信号を返すようにMitsubishiの PLC ラダーが設定されていることを確認してください。誤った設定は alarm P36 の原因となります。
  • 先読みブロックの制限に注意: 後続のコードが早期に実行されるのを防ぐため、M00M01M02M30 はFanuc、Siemens、Mitsubishiにおいてプリリード(先読み)バッファを強制的に停止させることを認識してください。

基本概念

プログラムの停止および終了コマンドは、自動 CNC 運転を分割、制御、そして安全に終結させるための中心的な論理インターフェースです。送りモーターや interpolation パスを直接駆動する移動指令とは異なり、M00、M01、M02、M30はハードウェアハンドシェイクリレーを介して機械のシーケンサ(PLC)と直接通信します。これらのコマンドは厳格な動作境界を設定し、特定のオペレーターの介入動作または自動ワーク供給シーケンスが正常に完了するまで、後続の座標指令や工具動作が実行されないようにします。

停止コマンドであるM00とM01は、加工 cycle の途中で一時停止する機能を持ちます。M00は無条件停止であり、CNC インタプリタを即座に停止させ、各軸の動作を凍結し、プログラムの実行を中断します。この一時停止は、マイクロメーターによる重要寸法の測定、深い溝から蓄積した切りくずの除去、手作業によるワークの反転など、オペレーターの手作業による介入を前提として設計されています。一方、M01は選択停止(オプショナルストップ)であり、機械オペレーターが制御盤の「オプショナルストップ」スイッチを有効にしている場合にのみ加工を一時停止します。オプショナルストップのトグルがオフの場合、コントローラーはM01を単なるコメントとして扱い、躊躇することなく次のブロックを実行します。

プログラム終了コマンドであるM02とM30は、ワーク加工プログラムの物理的な終端を示します。どちらのコードも、現在のワークに対するすべての加工動作が完了したことを CNC 制御部および PLC に通知します。これにより、システムは spindle を停止し、高圧クーラントポンプをオフにし、内部レジスタをリセットします。M30は特に、加工プログラムの先頭ブロックに巻き戻すよう制御部に指示し、cycle スタートボタンが押されたときに次のワークに対して即座に加工を実行できる状態にします。cycle 戻りレベルの完全な理解については、G98およびG99:サイクル戻りレベル のガイドを参照してください。

コマンド構造

停止および終了の補助機能のプログラミングはシンプルですが、適切なハードウェアシーケンスの実行を保証するために、絶対的な構文の独立(孤立記述)が必要です。プログラムの一時停止や終了は、spindle リレー、安全ドアのインターロック、バーローダーのハンドシェイクなどの重要なハードウェア変更をトリガーするため、制御部は特定の先読み制限下でこれらを処理する必要があります。これらのコマンドの記述ミスや、相反する移動パスとの組み合わせは、コントローラーの解析エラーの主な原因になります。

最適な信頼性を得るために、M00、M01、M02、M30は移動座標とは分け、専用の独立したNCブロックにプログラムする必要があります。ほとんどのシステムでは移動ブロックの末尾に記述することが許可されていますが、そうすると制御部は移動完了と補助機能による停止処理を同時に解決しなければならず、工作機械メーカーが PLC ラダーロジックをどのように設計したかによって、不規則なタイミングの動作を引き起こす可能性があります。さらに、これらのコードは非バッファリングに分類され、Mコードの実行が完了するまでインタプリタが後続のブロックを読み込んだり準備したりすることを禁止します。

プログラミング構文:

M00 ; 無条件プログラム停止
M01 ; 選択プログラム停止
M02 ; プログラム終了
M30 ; プログラム終了(先頭へ巻き戻し)

パラメータおよびシステム設定:

ブランドシステム識別子機能設定
FanucParameter 3404 Bit 4 (M30)0: 自動的に先頭へ巻き戻し; 1: 外部 Reset & Rewind 信号待ち。
FanucParameter 3404 Bit 5 (M02)0: 自動的に先頭へ巻き戻し; 1: 外部 Reset & Rewind 信号待ち。
FanucParameter 3201 Bit 6 (NPE)0: M02、M30、M99で直ちにデータ受信を停止; 1: 終了コードを無視。
FanucParameter 3204 Bit 6 (MKP)0: M02/M30実行時にアクティブなMDI画面のシーケンスをクリア; 1: MDIプログラムを保持。
SiemensMD22254 $MC_AUXFU_ASSOC_M0_VALUE無条件プログラム停止のための追加のカスタムMコードの値を定義。
SiemensMD22256 $MC_AUXFU_ASSOC_M1_VALUE選択プログラム停止のための追加のカスタムMコードの値を定義。
SiemensMD10714 $MN_M_NO_FCT_EOPリセットまたはプログラム終了後も spindle を動作させ続けるためのカスタムMコード値を定義。
Siemens$AC_ACTUAL_PARTSアクティブなワークカウンタシステム変数。M02またはM30の実行により自動的に1インクリメント。
Mitsubishi#12005 Mfig単一ブロック内で許容される最大Mコード数を決定(範囲:1〜4)。
Mitsubishi#1278 ext14/bit10: 通常の PLC ハンドシェイク待ち; 1: 高速完了処理方式で cycle 時間を短縮。
Mitsubishi#1405 M_mode(SMLK)高速簡易プログラムチェック中の物理的な補助Mコード信号出力を有効または無効に設定。

ブランド別応用

Fanuc

Fanuc CNC システムは、専用のハードウェアレベルのパラメータを使用して、プログラムの停止および終了がアクティブメモリへの登録や外部データ転送とどのように連携するかを決定します。Parameter 3404 bit 4 は M30 の巻き戻し動作を規定し、Parameter 3404 bit 5 は M02 の巻き戻し動作を管理します。これらのビットを設定することにより、コントローラーがメモリポインタをファイル先頭に自動で再配置するか、あるいは外部リレーがマニュアルリセット信号を送るまで停止し続けるかを制御します。

Fanuc制御部では、M00、M01、M02、M30は標準フォーマットで記述し、look-ahead(先読み)制限を確実にするためにブロック内に単独で記述します。旋盤システムでは、シリアル転送中のデータ破損を防ぐために、デベロッパーは Parameter NPE の状態を監視する必要があります。

システムカテゴリ設定 / アラームコード説明とハードウェア動作
システムパラメータParameter 3404 bit 4 (M30)メモリ運転中に M30 が実行されたときの自動巻き戻し動作を制御します。値が 0 の場合はプログラム先頭に自動巻き戻しされ、1 の場合は外部からのリセットおよび巻き戻し信号を待ちます。
システムパラメータParameter 3404 bit 5 (M02)M02 が実行されたときの自動巻き戻し動作を制御します。値が 0 の場合は自動巻き戻しされ、1 の場合は外部からのリセットおよび巻き戻し信号を待ちます。
システムパラメータParameter 3201 bit 6 (NPE)0: M02、M30、または M99 を読み取った時点で、加工プログラムの登録を停止し、通信ポートを閉じます。1: 停止せずにデータ受信を継続します。
システムパラメータParameter 3204 bit 6 (MKP)0: M02、M30、または % を実行した際に、アクティブな MDI 画面上のシーケンスを自動的に削除します。1: 削除を防止し、MDI コードを保持します。
アラーム / エラーPS5010 (END OF RECORD)Parameter 3404 bit 6 が 0 の場合、プログラムの末尾に M02 または M30 などのプログラム終了コマンドがない状態でファイル終端マーク(%)が読み込まれたときにトリガーされます。
アラーム / エラーPS0008 (ILLEGAL USE)M02、M30、または M99 が不足している状態で EOR(%)マークを実行しようとした際、マシニングセンタ向け(Mシリーズ)制御盤で特異的にトリガーされます。
アラーム / エラーPS5016 (ILLEGAL COMBINATION)同一グループに属する複数の Mコードが同一ブロックで指定された場合、または終了コマンドが他の Mコードと組み合わされた場合にトリガーされます。
世代による差異レガシーシステム(0シリーズ)旧世代の Fanuc コントローラーでは、M02 巻き戻し動作は parameter 0019 bit 5 (M02NR) で管理されていましたが、現代의 制御盤では parameter 3404 bit 5 に移行されました。

警告: Fanuc加工プログラムの末尾で M02 または M30 の記述を怠ると、プログラム読み込み装置がファイル終端マーク(%)に達した瞬間、予期しないメモリオーバーランを防ぐために制御部が動作をインターロックし、即座に PS5010 または PS0008 アラームをスローします。

Siemens

Siemens SINUMERIK コントローラーは、停止コマンドをワークトラッキングや計測 cycle の安全性と直接統合する柔軟な構文構造を提供します。制御部は、カスタムのマクロカウンタを記述しなくても、M02 または M30 が実行された際にシステム変数である $AC_ACTUAL_PARTS および $AC_SPECIAL_PARTS を標準で更新します。さらに、Siemens は機械データ MD22254 および MD22256 を使用して、機械メーカーが独自のカスタマイズされた停止 M機能を定義できるようにしています。

Siemens 構文は、M0/M1 および M00/M01 の両方のブロック形式をサポートしています。これらのコードは移動コマンドと同一ブロックに記述できますが、プログラム終了ブロックには厳密な記述の制限が適用されます。

システムカテゴリ設定 / アラームコード説明とハードウェア動作
システムパラメータMD22254 $MC_AUXFU_ASSOC_M0_VALUE無条件プログラム停止のための追加のカスタム補助 M機能を定義するために使用される機械データ。
システムパラメータMD22256 $MC_AUXFU_ASSOC_M1_VALUE選択プログラム停止のための追加のカスタム補助 M機能を定義するために使用される機械データ。
システムパラメータMD10714 $MN_M_NO_FCT_EOPリセットまたはプログラム終了後も spindle をアクティブに保ち、動作を継続させるためのカスタム M機能(値 32 など)を定義します。
システムパラメータ$AC_ACTUAL_PARTSアクティブなワークカウンタシステム変数。M02 または M30 が実行されると自動的に 1 インクリメントされます。範囲:0 〜 999,999,999。
アラーム / エラーAlarm 16954停止遅延領域内でのプログラム一時停止(M0/M1)禁止。同期ねじ切り加工またはリジッドタップ加工の実行中に停止コマンドが検出された場合にトリガーされます。
アラーム / エラーAlarm 62304 / 62305 / 62306許容寸法公差オーバー、取り残り(アンダーサイズ)、または許容寸法差超過。ワークの計測 cycle 中に公差外れが検出されると、プログラムの進行を完全にアボートすることなく、システムが自動的に内部的な暗黙の M00 一時停止を挿入してこれらの警告を表示します。
世代による差異サブプログラムのネストSiemens は、呼び出されたメインプログラム内の M02 および M30 を M17 サブプログラムリターンと全く同様に扱い、親のメインプログラムブロックに制御をシームレスに戻します。

警告: リジッドタップや同期ねじ切りの最中など、停止遅延エリア内に M00 または M01 を配置すると、補間器(インタプリタ)と spindle の同期関係が完全に破壊され、Alarm 16954 がスローされてタップがワークの中にねじ切られた状態で非常停止します。

Mitsubishi

Mitsubishi CNC システムは、PLC と直接通信する高度に構築された専用のハンドシェイク信号インターフェースを使用して、停止および終了コマンドを処理します。補助機能に汎用のストローブ信号を共用する他のブランドとは異なり、Mitsubishi は M00、M01、M02、または M30 が読み込まれると、それぞれ完全に独立した専用の信号を PLC に出力します。これにより、プログラム一時停止中に安全カバー(エンクロージャ)のドアを開錠するなど、機械メーカー独自の制御ロジックを容易に組み込むことができます。

Mitsubishi G-code プログラムは、標準の 8桁の M-code 構文構造を採用しています。軸移動と停止コマンドは同一ブロックで同時に実行可能であり、実行シーケンスの順序(移動完了後に M機能が実行されるか、同時に実行されるか)はすべて機械メーカーの PLC ラダー仕様によって決定されます。

システムカテゴリ設定 / アラームコード説明とハードウェア動作
システムパラメータParameter #12005 Mfig単一ブロック内で出力できる最大 M-code 数を決定します。最大 4コードまでサポートされ、制限を超えた場合は後から指定された M-code が先に入力されたものを上書きします。
システムパラメータParameter #1278 ext14/bit10: 通常の完了方式(PLC からの完了信号を待ってから進行); 1: 高速完了方式を採用し、各補助機能の処理による cycle 時間を短縮します。
システムパラメータParameter #1405 M_mode(SMLK)高速簡易プログラムチェック時に、物理的な補助 M-code 信号の出力を有効にするか無効にするかを指定します。
アラーム / エラーAlarm P36 (プログラムエラー)M02 または M30 コマンドの処理後、PLC が必須である「Reset & rewind(RRW)」信号の代わりに、誤って通常の完了ストローブ信号(FIN1 または FIN2)をコントローラーに返送した場合にトリガーされます。
アラーム / エラーAlarm M01 (操作アラーム)機械が簡易プログラムチェックモードで動作している間(チェック完了によりプログラム終了で一時的に終了し再起動しない状態)に、オペレーターが物理的に cycle スタートボタンを押した場合にトリガーされます。
世代による差異ハードウェアの違い古い世代や小型の画面表示ユニットでは、画面上のインターフェースがプログラムされた 8桁の M-code を全桁表示できない制限があります。また、M00 による直接的なシステムリセット動作や、M02/M30 によるファイルの先頭への巻き戻し動作は、ベースの Mitsubishi CNC 仕様ではなく、工作機械メーカー(MTB)の個別仕様に厳密に依存します。

警告: M02 または M30 によるプログラム終了処理において、必須とされる Reset & Rewind(RRW)信号ではなく、標準の FIN1 または FIN2 ストローブ完了信号を返すように PLC ラダー回路をプログラムすると、正しい終了シーケンスが完了できずにシステムが異常状態になり、即座に P36 プログラムエラーが発生します。

ブランド比較

項目 / 機能FanucSiemensMitsubishi
先読み/プリリードバッファアクティブなバッファ設定に関わらず、M00/M01/M02/M30を超える先読み演算を物理的に禁止します。実行ブロックで M00 または M01 が処理されると、インタプリタ(補間器)と軸の移動を即座に一時停止します。後続の座標移動が早期に実行されるのを防ぐため、これらの Mコードが読み取られた瞬間に先読みバッファを強制停止します。
PLCハンドシェイク/フィードバックParameter 3404 のビットを介して、自動巻き戻しを行うか、外部の Reset & Rewind ハードウェア信号を待つかを切り替えます。HMIのオプショナルストップ操作パネルの VDI 状態と密接に連携します。一時停止時の spindle およびクーラントの挙動は PLC 設計が制御します。M00 と M01 は進行するために FIN1/FIN2 ストローブ信号を要求します。M02 と M30 は専用の Reset & Rewind(RRW)信号を必須とします。
ネスト&プログラム終了リターンM02 および M30 は、現在実行している階層ファイルでのメモリ実行を常に終了します。ネストされたメインプログラム(サブプログラムとして呼び出し)では、自動的に M02/M30 を M17 サブプログラム終了・リターンブロックに変換します。M98/M99サブプログラムは内部処理されます。M02/M30 は工作機械メーカー(MTB)のラダー仕様に従って、常にプログラムの先頭を呼び出します。
統合された生産数トラッキング手動でのマクロカウンタ記述、または個別の外部 PLC ロジック設計が必要です。M02 または M30 の実行により、システム変数カウンタ $AC_ACTUAL_PARTS および $AC_SPECIAL_PARTS を自動的に「1」インクリメントします。カウンタ追跡は標準機能ではありません。工作機械メーカー(MTB)による PLC ラダー構成、またはカスタムマクロの割り込みが必要です。

技術解析

Fanuc、Siemens、Mitsubishiがプログラムの一時停止および終了コマンドをどのように処理するかを分析的に比較すると、look-ahead バッファ制御、PLCハンドシェイク、およびプログラムのネスト動作に関する設計思想の決定的な違いが浮かび上がります。3社すべての制御盤が、最終的には移動軸を停止させてプログラム先頭を呼び出すものの、実行される内部の動作プロセスは各社のシステムアーキテクチャに最適化されています。

プリリード(先読み)バッファの処理方法は、大きな分岐点のひとつです。Fanucは M00、M01、M02、M30を厳格な障壁として扱います。アクティブなバッファ設定に関わらず、制御部の look-ahead 計算がこれらのコマンドを超えて先読みすることは物理的に禁止され、座標演算が完全に固定されます。Siemensのアプローチも同様に即時的で、アクティブな実行ブロックで M00 または M01 が処理されると即座にインタプリタ(補間器)と各軸の動作を一時停止します。これに対し、Mitsubishiはアグレッシブな先読みバッファ禁止を強制し、これらの特定の M-code に遭遇した瞬間に先読み処理を即時停止することで、後続のプログラム座標が事前にロードされて機械側で意図しない反応が早期に誘発されるのを確実に防ぎます。

CNC プロセッサと PLC キャビネットとの間のフィードバックループも異なります。Fanucは巻き戻しの制御権を Parameter 3404 に委ねており、CNC が自動的に先頭に巻き戻るか、あるいは外部の Reset & Rewind ハードウェアリレーを待つかを工作機械メーカーが選択できるようにしています。Siemensは HMI のオプショナルストップ操作パネルの状態に依存し、物理的な spindle およびクーラントの一時停止アクションはすべて PLC 設計の判断に任せています。Mitsubishiは独自の「独立Mコード出力」構造を採用し、PLC に直接専用の信号を出力します。また、Mitsubishiは必要なフィードバック信号の仕様も変更しており、プログラムの一時停止には通常の完了信号(FIN1/FIN2)を求めますが、プログラムの終了時には専用の Reset & Rewind(RRW)ハンドシェイクを必須とします。これらの PLC ハンドシェイクに不整合があると、P36 プログラムエラーが発生します。

最後に、プログラムのネスト(階層化)は、Siemensのインタプリタ(解釈器)の極めて高い柔軟性を示しています。Siemens制御盤では、M02 または M30 を含むメインプログラムが別のファイルからサブプログラムとして呼び出された場合、インタプリタはこれらの終了コマンドを自動的に M17 サブプログラムリターンとして翻訳処理します。これにより、デベロッパーは過去のメインプログラムファイルを一切書き換えることなく、階層構造に組み込んでネストさせることができます。FanucとMitsubishiにはこのような動的なネスト翻訳機能はなく、M02 または M30 を実行すると現在のファイル階層でメモリ実行が強制終了されるため、プログラマは M98 や M99 などの専用のサブプログラム呼び出し・戻り構造を明示的に設計する必要があります。feedrate がこれらのモードとどのように相互作用するかについては、G96およびG97:周速一定制御および回転数一定制御 のガイドを参照してください。

プログラム例

Fanuc Program Example

O1001 (FANUCプログラム停止・終了例) ;
N10 G90 G21 G17 ;
N20 T0101 M06 (ツール1選択、工具交換) ;
N30 G54 G00 X0 Y0 S1200 M03 ;
N40 G43 H01 Z25.0 M08 (工具長補正有効、クーラントON) ;
N50 G01 Z-5.0 F150. ;
N60 X50.0 ;
N70 G00 Z25.0 M09 (工具逃げ、クーラントOFF) ;
N80 M00 (無条件停止 - 切りくず除去およびワーク着座確認) ;
N90 G00 X100.0 Y100.0 ;
N100 T0202 M06 ;
N110 S1500 M03 M08 ;
N120 G00 Z5.0 ;
N130 G01 Z-2.0 F200. ;
N140 X150.0 ;
N150 G00 Z50.0 M05 M09 ;
N160 M30 (プログラム終了、ブロックO1001へ自動巻き戻し) ;
%

空運転 (dry run)の解説

  • 工具状態: M03 により spindle が 1200 rpm で回転し、M08 によりクーラントが有効になります。ブロック N150 で M05 により spindle が停止し、M09 によりクーラントが停止します。
  • オペレーターの操作: ブロック N80 (M00) の一時停止中、オペレーターはドアを開け、切りくずを除去し、ポケット寸法を測定し、ワークの着座確認を行ってからドアを閉め、CYCLE START ボタンを押します。
  • PLCの動作: ブロック N80 で M00 が読み込まれると、PLC は spindle とクーラントのリレーをオフにし、各軸の送りを凍結(一時停止)します。ブロック N160 で M30 が読み込まれると、PLC は終了 cycle を完了し、Parameter 3404 bit 4 の設定(0)に従って、プログラムの読み込み位置を自動的に先頭の O1001 に巻き戻します。

Siemens Program Example

; SIEMENS M00/M30 プログラム一時停止&終了
N10 G90 G71 G17
N20 T="END_MILL_10" D1 M6
N30 G54 S1800 M3
N40 G0 X0 Y0 Z30.0 M8
N50 G1 Z-8.0 F250.
N60 Y80.0
N70 G0 Z30.0 M9
N80 M01 ; 選択停止 - オペレーターがHMIでオプショナルストップをONにして寸法測定
N90 G0 X120.0 Y50.0
N100 G1 Z-4.0 F300.
N110 X200.0
N120 G0 Z100.0 M5 M9
N130 G53 X0 Y0 D0 ; 機械原点への復帰
N140 M30 ; プログラム終了、制御盤リセット、$AC_ACTUAL_PARTSカウンタインクリメント

空運転の解説

  • 工具状態: ブロック N30 で spindle が 1800 rpm で回転し、N40 でクーラントが有効になります。機械原点復帰の前のブロック N120 で両方ともオフになります。
  • オペレーターの操作: SiemensのHMIパネルで「オプショナルストップ」スイッチがONになっている場合、機械はブロック N80 で一時停止します。オペレーターは工具摩耗やポケットの深さを確認し、NC START ボタンを押します。スイッチがOFFの場合、ブロック N80 は完全に無視されます。
  • PLCの動作: 制御部はブロック N80 で M01 を処理します。オプショナルストップがアクティブな場合、PLC はインタプリタのパルス出力を一時停止します。ブロック N140 で PLC はプログラム終了シーケンスを実行し、modal レジスタをリセットして、ワークカウンタ変数 $AC_ACTUAL_PARTS を自動的に 1 インクリメントします。

Mitsubishi Program Example

; MITSUBISHI M00/M30 専用PLCハンドシェイク
N10 G90 G21
N20 M06 T1
N30 G54 G00 X0 Y0 S1000 M03
N40 G43 H1 Z20. M08
N50 G01 Z-10. F180.
N60 X100.
N70 G00 Z20. M09
N80 M00 ; 専用PLC一時停止 - ドア安全開錠トリガー
N90 G00 X0 Y0
N100 M30 ; cycle終了、RRWハンドシェイクを要求

空運転の解説

  • 工具状態: 工具 1 が有効です。spindle が 1000 rpm で回転し、クーラントがオンになります。プログラム終了ブロックの N100 で spindle とクーラントは停止します。
  • オペレーターの操作: ブロック N80 の M00 による一時停止中、CNC は停止します。安全ドアのインターロックが解除され、オペレーターはワークの検査を行い、ドアを閉めて CYCLE START ボタンを押します。
  • PLCの動作: M00 コマンドは PLC に個別の独立した信号を出力します。PLC は安全ドアの開錠リレーを作動させます。ブロック N100 で PLC はコントローラーに対して Reset & Rewind(RRW)ハンドシェイクを実行し、システムをプログラムの先頭ブロックにリセットします。

エラー解析

ブランドアラームコード発生条件機械・オペレーターの症状原因と対策
FanucPS5010 (END OF RECORD)Parameter 3404 bit 6 が 0 の場合、プログラム末尾の M02 または M30 がない状態で EOR (%) マークが読み込まれたとき。CNC 画面に「PS5010 END OF RECORD」と表示され、自動運転が即座に停止します。末尾の % 文字の直前に、適切な M02 または M30 プログラム終了コマンドが記述されていることを確認してください。
FanucPS0008 (ILLEGAL USE)M02、M30、または M99 がない状態で、Mシリーズ用制御盤において EOR (%) マークを実行しようとしたとき。赤いアラームランプが点灯し、プログラム実行が急激に停止します。末尾の % 記号の前の独立したブロックに M30 または M02 を挿入するようにプログラムを編集します。
FanucPS5016 (ILLEGAL COMBINATION)同一ブロックに同じグループの複数の Mコードがプログラムされた場合、あるいは終了コマンドを他の Mコードと組み合わせたとき。コントローラーはアラーム PS5016 を発生させ、ブロックの解析を拒否します。プログラム終了コマンド(M02/M30)を他の Mコードを記述しない単独のブロックに移動させます。
SiemensAlarm 16954同期タップ中などの保護された停止遅延領域内で、プログラムストップ(M0/M1)が読み出されたとき。システムが「Alarm 16954: Programmed stop prohibited」を表示し、動作の途中で非常停止します。M0/M1 を、同期タップ、ねじ切り、または輪郭制御の cycle 外に移動させます。
SiemensAlarm 62304 / 62305ワーク寸法測定 cycle で許容公差外れ(取り残り/アンダーサイズ)が検出されたとき。プログラム実行が暗黙の M00 一時停止により一時中断し、HMI に公差外れ警告が表示されます。操作パネルで工具摩耗補正値を調整し、NC START を押して安全に実行を再開します。
MitsubishiAlarm P36 (プログラムエラー)PLC ロジックの設計不良。M02/M30 に対して Reset & Rewind(RRW)ではなく標準の FIN1/FIN2 ストローブ信号を返したとき。プログラムは終了しますが、機械が「P36」をアクティブにした状態でエラー停止(異常状態)します。M02 および M30 が CNC に Reset & Rewind(RRW)ハンドシェイクをトリガーするように、PLC ラダープログラムを修正します。
MitsubishiAlarm M01 (操作アラーム)簡易プログラムチェックモードで動作している間に、オペレーターがサイクルスタートボタンを押したとき。画面上に「M01」操作アラームが点滅表示され、サイクルスタートは無視されます。簡易プログラムチェックルーチンが M02 または M30 に到達して終了するのを待ってから、実運転を開始してください。

実務応用ノウハウ

自動化ラインや多品種少量生産において、M-codeの処理タイミングやパラメータ設定の不整合は、ラインの非計画停止や加工精度のばらつき(不良品発生)に直結します。たとえば、Mitsubishi(三菱)の CNC システムにおいて、プログラム終了時に発生するアラーム P36(プログラムエラー)は、PLC 設計者が M02 や M30 の完了処理として標準のストローブ信号(FIN1 または FIN2)を返してしまうことが直接の原因です。Mitsubishiでは、サイクル終了を正しく処理するために専用の「Reset & rewind(RRW)」信号を PLC から返さなければならず、これに失敗するとシステムがハングアップします。段取り前にこれらのパラメータや PLC 信号の応答設計を確認することで、このコマンドで最も多い非計画停止を防ぐことができます。また、Fanuc(ファナック)制御盤では、Parameter 3404 の bit 4(M30用)および bit 5(M02用)の検証が重要です。これらが「1」に設定されていると、M30を実行してもプログラム先頭への自動巻き戻しが行われず、外部機器からの Reset & rewind 信号を待ち続けます。この設定変更が検証されないまま自動運転が開始されると、自動ローダーやロボットと CNC との同期が崩れ、サイクルが途中で停止するか、最悪の場合はローダーと干渉する危険があります。Siemens(シーメンス)では、リジッドタップなどの加工で同期動作中に M00/M01 を実行すると、即座にアラーム 16954(停止禁止エリアでのプログラムストップ)が作動し、工具とワークが噛み合った状態で非常停止します。これによりタップが折損し、ワーク全体の廃棄(不良品発生)を余儀なくされます。量産稼働の前には、必ずこれらの終了・一時停止コードを単独の NC ブロックとして独立して記述し、PLC への補助機能完了通知と CNC の look-ahead(先読み)バッファ制限が正しく機能しているかを検証しなければなりません。これにより、ロットごとの再現性の低下を防ぎ、安定した繰り返し精度を維持することが可能になります。

関連コマンド

  • M98 / M99(サブプログラム呼び出し&リターン): M98 は外部のサブプログラムブロックを呼び出し、M99 はサブプログラムを終了して実行制御を親のメインプログラムに戻します。
  • M17(Siemens サブプログラムリターン): Siemens コントローラーにおける標準のサブプログラム終了およびリターンコマンドであり、処理フローを親の呼び出しプログラムブロックに戻します。
  • M03 / M04 / M05(spindle 制御): それぞれ spindle の正転、逆転、停止を制御します。通常は、プログラム停止と同時、またはその直前に停止するようにプログラムされます。
  • EOR / %(エンドオブレコード): ワークプログラムデータ転送時の物理的なファイル境界マークとして機能し、メモリリーダーにスキャン停止を指示して、ファイルオーバーランエラーを防ぎます。

おわりに

CNC 加工におけるプログラムの停止および終了制御は、単なるコードの記述ルールを超えて、機械と制御盤の電気的協調(PLC ハンドシェイク)を正しく機能させるための基盤です。量産開始前に各制御盤のパラメータ(Fanucの Parameter 3404 やMitsubishiの #1278 など)を綿密に検証し、M02 や M30 などの終端コードを単独ブロックで安全に実行することは、不要な非計画停止を防止し、工程全体の信頼性を高めるために欠かせない手順です。これらの確実なステップを徹底することが、寸法のばらつき(再現性の低下)や不良品発生を極限まで抑え、ロットごとの極めて高い繰り返し精度を持続させるための唯一の道と言えます。標準作業手順書(SOP)にこれらのチェック項目を組み込み、安定した生産体制を構築することを推奨します。

よくある質問

量産加工で2ロット目から寸法ばらつきが発生する場合、M30やM02の設定で確認すべきパラメータはどれですか?

Fanuc制御盤の Parameter 3404 bit 4(M30用)または bit 5(M02用)を確認し、自動巻き戻し(Reset & Rewind)が外部信号待ち(値が1)になっていないかを検証してください。外部同期の設定に不整合があると、自動バーフィーダーやワークチェンジャーの動作タイミングが数秒ずれ、ロット間のワークの着座不良や初期温度変化を引き起こして寸法のばらつきを誘発します。量産に入る前に、必ずこれらのパラメータが「0」(自動巻き戻し有効)になっていることを確認し、自動運転のタイミングチャートを検証してください。

MitsubishiのCNCでプログラム終了時にアラームP36が発生する原因と対策は何ですか?

これは、PLCから送信される完了信号(ハンドシェイク)の種類が誤っていることが原因です。M02やM30の実行時には、通常の補助機能完了信号(FIN1 または FIN2)ではなく、リセット&巻き戻しを意味する RRW 信号をPLCラダーから返さなければなりませんが、標準完了信号が返されると制御盤が処理を中断して P36 アラームを発生させます。実機のPLCラダー設計書を開き、M02/M30の検出回路がRRWレジスタを正しくオンにするように回路を修正してください。

Siemensの制御盤でM00やM01を記述した際に、アラーム16954が発生して非計画停止するのを防ぐにはどうすればよいですか?

アラーム 16954 は、リジッドタップ(同期タップ加工)やスレッド切削(ねじ切り)などの主軸と送り軸が同期している「停止禁止領域(stop delay area)」の中でM00またはM01を実行した際に、同期崩れを防ぐために制御盤が強制的に作動させる安全機能です。これらのプログラム一時停止コマンドは、必ずねじ切りサイクルやリジッドタップサイクルの呼び出しブロックより前、またはサイクルキャンセルを行った後の安全なブロックに記述するようにNCプログラムを書き換えてください。

まだ解決しませんか?

このトピックについて、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の共同創業者として活動を続けています。

関連記事

このトピックに関する他の記事

Siemens CYCLE800の使い方:平面旋回とツールアライメント

SiemensのCYCLE800による3+2軸加工をマスターしましょう。平面旋回、ツールアライメント、パラメータ設定から、アラーム61190や61153といったエラーのトラブルシューティングまで詳しく解説します。

SiemensProgramming

Siemens CYCLE72 パスミーリング: 輪郭加工の設定とプログラム解説

SinumerikのCYCLE72輪郭ミーリングを徹底解説。_KNAMEや_VARIの正しいパラメータ設定、シミュレーション時のアラーム61123回避方法、チャッククランプ確認によるアラーム700017防止まで、機械停止や不良品発生を防ぐ実務ノウハウを紹介します。

SiemensProgramming

Siemens CYCLE952旋削サイクルの設定とプログラム解説

SinumerikのCYCLE952輪郭旋削サイクルを徹底解説。_PRGや_CONRによるブランク境界定義、アラーム61051/61059の回避方法、および設定データSD55212による自動メモリ管理の設定手順まで詳しく紹介します。

SiemensProgramming

Siemens SLOT1/SLOT2溝フライスcycleプログラミング

Siemens製Sinumerikの溝加工cycleSLOT1・SLOT2のプログラミングを解説。パラメータ設定、Alarm 61000を防ぐ工具半径補正、VARIを用いた障害物回避など、量産時のロット間再現性を高め不良品発生を防ぐための実務ノウハウを紹介します。

SiemensProgramming