CNCマクロの論理演算子:IF、WHILE、GOTOの安全活用ガイド
Fanuc、Siemens、MitsubishiのCNCマクロ論理演算子(IF、WHILE、GOTO)の正しい使い方。無限ループや先行判定による機械衝突を防ぐパラメータ設定、ネスト制限、安全な数値比較方法を実務例で徹底解説。
はじめに
マクロプログラム内でのカウンタ変数(#1 = #1 + 1 など)のインクリメント忘れや、LookAheadバッファの同期ミスは、高速移動するタレット(刃物台)や切削工具を回転チャック、バイスジョウ、あるいは固定クランプに直接激突させる致命的な機械衝突を引き起こします。また、実数値の判定において単純な一致比較(EQ)を用いると、浮動小数点の計算誤差により退避シーケンスがスキップされ、工具がワークやチャックバリアに激突して激しいハードクラッシュを引き起こし、スピンドルの損傷やワークのスクラップ(不良品)化を招きます。このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されます。このような再現性の低下や不良品発生を防ぐためには、マクロの動作保証が極めて重要です。段取り前に MGO(6000#1)や #8101 などのパラメータを確認することで、このコマンドで最も多い非計画停止を防げます。加工の信頼性と繰り返し精度を最大化するため、各CNCシステムにおける論理制御とループ構造の完全な理解と安全対策が不可欠です。
技術概要
| 技術仕様 | 詳細 |
|---|---|
| コマンドコード | IF, WHILE, GOTO, DO, END, ELSE, ENDIF, GOTOF, GOTOB, GOTOC, REPEAT, UNTIL, FOR, LOOP, CASE |
| モーダルグループ / モダリティ | マクロ制御ステートメント (非モーダル) |
| 対象ブランド | Fanuc, Siemens, Mitsubishi |
| 重要パラメータ | Fanuc: 6000#1 (MGO), 6000#4 (HGO), 6006#0 (MLG); Siemens: $MC_EXTERN_FUNCTION_MASK bit 3; Mitsubishi: #8101 (MACRO SINGLE), #6452 bit 6 |
| 主な制約事項 | Fanuc: 各マクロレベルで最大3つのDOループ、5レベルの括弧ネスト制限; Siemens: 808Dは11ネストレベルに制限; Mitsubishi: 最大10レベルのIFおよび27レベルのWHILEネスト制限、テープモードでのジャンプ禁止 |
クイックリード
- ループインクリメントの検証: 無限実行や深刻な衝突を防ぐため、
WHILEループ内では常に演算カウンタ(例:#1 = #1 + 1)を記述してダブルチェックしてください。 - 先行デコードの同期: 動的変数の早期評価を防ぐため、Siemensのプログラムでは条件分岐(
IF)の前にプリプロセッシングストップ(STOPRE)を挿入してください。 - 実数の一致判定の回避: 浮動小数点の計算誤差を防ぐため、小数の判定をする際は厳密な一致(
EQ)チェックではなく、絶対許容差(例:[ABS[#10 - #20] LT 0.01])を使用してください。 - ネスト制限の遵守: 制御装置の制限範囲内にネストを維持してください(Fanucは最大3レベルのループ、Siemens 808Dは11レベル、Mitsubishiは10レベルのIF / 27レベルのDO)。
- 適切な実行モードの選択: 即時のP295アラームおよびプログラムの中断を防ぐため、Mitsubishiシステムではテープ/DNCモードでのマクロループや分岐ステートメントの実行を避けてください。
- 高速GOTOキャッシュの活用: 分岐性能を最適化し、ループ実行の遅延を減らすため、Fanucのパラメータ 6000#1 (MGO) および 6000#4 (HGO) を有効にしてください。
基本概念
論理マクロ演算子の実用的なプログラミング効果は、硬直した線形なGコードを、動的で意思決定能力のあるソフトウェアへと完全に変貌させることです。WHILE/DO ループを使用することで、プログラマーは深穴ペック、グリッド穴あけ、スパイラルミーリングなどの反復的な物理タスクを実行するための高度に凝縮された数学的ルーチンを、何千行ものGコードではなくわずか数ブロックで記述できます。固定された幾何学的移動を変数反復構造に置き換えることにより、単一のマスタープログラムで異なる寸法、経路、パターンに適応させることができます。
同時に、条件分岐ステートメントによって、CNCマシンは加工現場の物理的条件を自律的に評価できます。たとえば、マクロプログラムでタッチプローブのスキップ信号位置を読み取ったり、工具摩耗オフセットシステム変数を照会してワークが公差内にあるかどうかを確認したりできます。制御装置はこれらのデータを論理的に評価し、仕上げパスのスキップ、補正的な座標シフトのトリガー、あるいは工具破損時におけるサイクルの即時中止など、工具経路を瞬時に変更できます。
これらの論理構造の安全かつ信頼性の高い動作を保証するため、プログラマーはループ境界が決して交差しないこと、および条件パラメータが正しくフォーマットされていることを検証する必要があります。不正な構文、制御装置の制限を超えるネストされた括弧、またはペアになっていないループマーカーは、CNCの内部パーサーによって検出されます。これが発生すると、制御装置は自動実行を停止し、アラームメッセージを表示して、物理的な移動が始まる前に工作機械を保護します。
コマンド構造
マクロプログラムは、無条件ジャンプ、条件分岐、反復ループの3つの主要な構造を通じて実行フローを制御します。無条件ジャンプは GOTO コマンドを使用して、インタープリタが途中のすべてのコード行をバイパスし、特定のブロック番号に直接ジャンプするように強制します。条件分岐は、括弧内の論理比較と GOTO ジャンプまたは THEN ステートメントを組み合わせ、評価された関係が真(TRUE)の場合にのみリダイレクトを実行します。反復ループは WHILE ステートメントを使用して、条件基準が満たされている限り、DO と END マーカーの間のサブコードブロックを繰り返し実行します。
各制御ブランドは、これらのコマンドに対して特定の構文フォーマットを実装しています。FanucとMitsubishiは、変数と演算子を角括弧 [] で囲む Custom Macro B 規格に準拠しています。Siemensは、ネイティブの IF-ELSE-ENDIF、FOR、および REPEAT-UNTIL ループを含む、現代のコンピュータプログラミング言語に類似した構造化された高レベルコマンドを使用します。制御装置の階層に関係なく、インタープリタがプログラムを停止させることなくコンパイルできるようにするためには、適切な構文スペース、括弧のペア、およびループ識別子が必要です。
; Fanuc Custom Macro B Syntax
GOTO 100;
IF [#100 GT 5.0] GOTO 200;
IF [#101 EQ 1.0] THEN #102 = 1.5;
WHILE [#1 LT 10.0] DO 1;
...
END 1;
; Siemens SINUMERIK High-Level Syntax
GOTO LABEL1
IF R10 > 5 GOTOF LABEL2
IF R10 == 1.0 ELSE ... ENDIF
WHILE R1 < 10.0
...
ENDWHILE
; Mitsubishi Logic Syntax
GOTO 100;
IF [#100 GT 5.0] GOTO 200;
IF [#101 EQ 1.0] THEN;
...
ELSE;
...
ENDIF;
WHILE [#1 LT 10.0] DO1;
...
END1;
| パラメータ / 変数 | ブランド | 説明 |
|---|---|---|
6000#1 (MGO) | Fanuc | 高速GOTO分岐動作。0: 標準、1: 高速キャッシュ検索(最大20ブロック)。 |
6000#4 (HGO) | Fanuc | ローカル分岐キャッシュ。1: ジャンプ直前の30ブロック、または前回の検索で保存された最大10ブロックをキャッシュ。 |
6006#0 (MLG) | Fanuc | 条件文内部での論理演算(AND、ORなど)の有効化。 |
$MC_EXTERN_FUNCTION_MASK | Siemens | ビット3は、ISOダイアレクトモードにおいてSiemens固有のチェック構造をネイティブで処理するかどうかを指定。 |
#8101 (MACRO SINGLE) | Mitsubishi | マクロ処理モード。0: バックグラウンドバッチ処理、1: 実行可能文と並行したブロックごとの実行。 |
#6452 (bit 6) | Mitsubishi | 分岐先ラベルの検証。1: 分岐先をチェック、0: 未定義ラベルへのジャンプでバスエラーを誘発。 |
ブランド別応用
Fanuc
Fanuc Custom Macro Bは、論理演算子と制御ステートメントを利用して、条件分岐と反復を実行します。EQ、NE、GT、LT、GE、LE などの関係演算子は括弧内で評価されます。パラメータ 6000#1 および 6000#4 は、GOTO 検索を最適化するための先行デコードキャッシュ動作を指定します。
以下は、Fanucシステムにおける代表的な条件分岐およびループ制御のGコード構造です。
IF [#100 GT 10.0] GOTO 500;
WHILE [#1 LT 5.0] DO 1;
...
END 1;
| 属性タイプ | 詳細 |
|---|---|
| パラメータ | GOTO速度キャッシュ用 6000#1 (MGO)、ローカルキャッシュ用 6000#4 (HGO)、および論理演算用 6006#0 (MLG)。 |
| アラーム | アラーム124(END文がありません)、アラーム126(DO/END番号が1〜3の範囲外です)、およびアラーム128(シーケンス番号が見つかりません)。 |
| バージョン | Custom Macro Bは単一のTHEN行を許可します。現代のシリーズは、ネストされたIF-THEN-ELSE-ENDIFおよびCASEステートメントをサポートしています。 |
警告:ループ制御変数のインクリメントを忘れると、制御装置が無限実行サイクルにロックされ、予期せぬ動作が発生してクランプ等のワーク保持具への激しい衝突につながります。
Siemens
Siemens SINUMERIK制御装置は、PCスタイルの構造化言語要素を標準Gコードに直接組み込んでいます。GOTOF や GOTOB などの条件ジャンプステートメントがプログラムフローを制御します。先行デコード処理を制御する STOPRE コマンドを使用して同期が維持されます。
以下は、高レベルのSiemens Gコード制御構造の表現です。
IF (R10 < 50) AND ($AA_IM[X] >= 17.5) GOTOF LABEL_A
WHILE $AA_IW[DRILL_AXIS] > -10
...
ENDWHILE
| 属性タイプ | 詳細 |
|---|---|
| パラメータ | ISOダイアレクト処理の翻訳設定用 $MC_EXTERN_FUNCTION_MASK bit 3。 |
| アラーム | アラーム14080(ジャンプ先ラベルが見つかりません)およびアラーム14000(外部ジャンプ先がバッファ制限外です)。 |
| バージョン | 808Dファミリーはネストを11レベルに制限していますが、840D sl および SINUMERIK ONE は最大16レベルのネストをサポートします。 |
警告:リアルタイムの機械状態を確認する前に STOPRE プリプロセッシングストップを配置しないと、先行デコード評価が早すぎて行われ、工具がクランプやバイスジョウに突っ込む原因となります。
Mitsubishi
Mitsubishi CNCは、ネストされたIF-THEN-ELSE構造とWHILEループによる高度な論理分岐を提供します。パラメータ #8101 は、マクロをバックグラウンドバッチ処理で実行するか、ブロックごとに実行するかを設定します。パラメータ #6452 はジャンプ先ラベルを検証します。
以下は、Mitsubishi制御装置における条件分岐および絶対値比較の例です。
IF [ABS [#10 - #20] LT 0.01] THEN #120 = 10;
WHILE [#101 LT #2] DO1;
...
END1;
| 属性タイプ | 詳細 |
|---|---|
| パラメータ | #8101 (MACRO SINGLE) 制御モード、#1754 (処理速度)、#1259 (実行最適化)、および #6452 ビット6 (ラベル検証)。 |
| アラーム | P288(IFネストが10レベルを超えています)、P293(ループネストが27レベルを超えています)、およびP295(テープモードでWHILE/GOTOが実行されました)。 |
| バージョン | M800VW/M80VWシリーズは、非VWモデルとは異なり、G65/G66を使用して表示器内蔵ディスクに格納されたマクロを呼び出すことができます。 |
警告:テープモードで GOTO または WHILE ステートメントを実行すると、即座に P295 アラームが発生し、切削途中で機械動作が停止します。
ブランド比較
| 機能 / 項目 | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| ループネスト制限 | マクロレベルごとに最大3つのDO-ENDループ(DO 1、DO 2、DO 3)。 | 808Dはマクロネストを11レベルに制限。840D sl / ONE は最大16レベルまで許可(ASUB使用で18レベルまで拡張可能)。 | WHILE-DO ループは最大27レベルの深さまでネスト可能。ループ識別子の範囲は1〜127。 |
| 構造化構文 | 古くからある IF-GOTO および IF-THEN。新しいシリーズでは、予約語によるネストされた IF-THEN-ELSE-ENDIF をサポート。 | ネイティブのPCスタイル制御構造(IF-ELSE-ENDIF、WHILE、FOR、LOOP)。 | Gコード内で IF-THEN-ELSE-ENDIF を直接ネイティブサポートし、最大10レベルまでネスト可能。 |
| 検索キャッシュ | 先行読込みパラメータ 6000#1 (MGO) および 6000#4 (HGO) により、ジャンプ時のプログラム線形スキャンを回避。 | アラーム抑制ジャンプコマンド GOTOC は、ラベルが見つからない場合のアラーム14080を抑制。 | パラメータ #8101 (MACRO SINGLE) でバックグラウンドでの論理処理のON/OFFを切り替え。 |
| カスタムアラーム統合 | 変数 #3000 に論理を関連付けてアラームを発生。表示形式はパラメータ 6008#1 (MCA) でグローバルに規定。 | SETAL コマンドによりユーザーアラーム(60000〜69999)を発生。 | プログラムエラーアラームコード(P288、P289、P293、P294、P295)により、論理構文やネストのエラーで機械を停止。 |
| 条件評価ルール | Custom Macro B内で実行。Look-aheadバッファが物理的な移動に先んじて変数を実行する可能性あり。 | プログラマーは動的な条件判定の直前の行でプリプロセッシングストップコマンド STOPRE を使用する必要あり。 | 浮動小数点の不一致を防ぐため、プログラマーは ABS 関数を用いて安全許容差を考慮した小数評価を行う必要あり。 |
技術解析
これら3つのCNCプラットフォームを分析比較すると、論理の実行、構文の安全性、および処理効率における設計思想の明確な違いが浮き彫りになります。Fanucは、高度に最適化されているものの構造的に硬直したアプローチを採用しています。そのループネストは3レベルに厳格に制限されておりバッファの過負荷を防ぐ一方で、特定のハードウェア先行読込みキャッシュを使用して GOTO 検索性能が維持されます。しかし、この硬直した構造は、深い数値変数のインデックス作成に頼ることなしに、複雑で可読性の高いプログラムを記述することを困難にしています。
対照的に、Siemensは可読性の高いPCスタイルの高レベルプログラミングに焦点を当てています。ネストされた IF-ELSE-ENDIF、FOR、および REPEAT-UNTIL 構造をネイティブに埋め込むことで、難解な変数マッピングを記述する必要性を排除しています。Siemensはまた、ジャンプ先アラームを抑制する GOTOC のような特殊なジャンプコマンドを提供し、存在しないオプションブロックをプログラムが安全にスキップできるようにしています。主なリスクはインタープリタの先行読込み実行であり、プログラマーは論理を評価する前にリアルタイム変数を同期させるための STOPRE ブロックを明示的に記述する必要があります。
Mitsubishiは中間的な位置を占めており、ISO Custom Macro B構文と最新の高レベル実行を融合させています。最大27レベルのループと10レベルのIFという膨大なネスト深度を許容し、プログラマーに巨大なスケールを与えています。Mitsubishiはまた、パラメータ #8101 (MACRO SINGLE) を介して独自の診断の柔軟性を提供し、オペレーターが空運転 (dry run)中にマクロをブロックごとに実行するか、生産速度向上のためにバックグラウンドで実行するかを切り替えることができます。しかし、工具衝突を引き起こす浮動小数点の不一致を回避するためには、ABS 関数を使用した慎重な小数比較が必要です。
プログラム例
Fanucプログラム例:グリッド穴あけサイクル
; Fanuc Custom Macro B グリッド穴あけ
#100 = 0 (列カウンタ)
#101 = 3 (総列数)
#102 = 50.0 (列間隔、mm)
WHILE [#100 LT #101] DO 1;
#103 = 0 (行カウンタ)
#104 = 4 (総行数)
#105 = 40.0 (行間隔、mm)
WHILE [#103 LT #104] DO 2;
G90 G00 X[#100 * #102] Y[#103 * #105];
G81 Z-15.0 R2.0 F150.0;
G80;
#103 = #103 + 1 (行をインクリメント);
END 2;
#100 = #100 + 1 (列をインクリメント);
END 1;
M30;
空運転
空運転中、制御装置は #100 = 0 および #101 = 3 で開始します。外側ループの条件 #100 LT #101 は真(TRUE)と評価され、ループ1に入ります。内部で #103 が0にリセットされます。内側ループ of 条件 #103 LT #104 (0 < 4) が真(TRUE)と評価され、ループ2に入ります。機械は X0.0 Y0.0 に移動し、Z-15.0 への G81 穴あけサイクルを実行します。ループ変数 #103 は1にインクリメントされます。内側ループは Y40.0、Y80.0、および Y120.0 に対して繰り返されます。#103 が4に達すると、ループ2は終了します。#100 が1にインクリメントされ、機械は X50.0 に移動します。このプロセスが列1および列2に対して繰り返されます。#100 が3になると、ループ1は偽(FALSE)と評価され、プログラムは M30 で終了します。
Siemensプログラム例:工具チェックと安全経路退避
; Siemens SINUMERIK 工具チェックと安全退避
R10 = $TC_MPPC1[1] ; アクティブな工具摩耗値の読込み
STOPRE ; 先行読込み同期のためのプリプロセッシングストップ強制
IF R10 > 0.25 GOTOF ALARM_RETRCT
; 標準経路
G00 X100.0 Z50.0
M30
ALARM_RETRCT:
GOTOC SAFE_HOME
SAFE_HOME:
G00 G53 Z0.0 D0 ; 安全なZ軸退避
SETAL(60100) ; カスタム工具摩耗アラームのトリガー
M30
空運転
インタープリタはアクティブな工具摩耗値を R10 に読み込みます。STOPRE ブロックは LookAhead バッファを一時停止し、条件がチェックされる前に摩耗値が完全に読み取られることを保証します。R10 が 0.25 mm を超える場合、IF 条件は真と評価され、プログラムは ALARM_RETRCT に前方ジャンプ(GOTOF)します。コードは次に SAFE_HOME への GOTOC ジャンプを開始します。SAFE_HOME ラベルが存在する場合、機械基準点への安全なZ軸退避(G53 Z0.0)を実行し、工具オフセットを無効にします(D0)。SETAL(60100) 命令が実行され、機械の動作を停止させて画面にユーザーアラーム60100を表示します。
Mitsubishiプログラム例:安全なパラメータ式ペックループ
; Mitsubishi ABS許容差を使用した安全なペックサイクル
#100 = -50.0 (目標Z深さ)
#101 = 0.0 (現在のZ深さ)
#102 = -10.0 (ペック切込み量)
#103 = 0.01 (安全許容差)
WHILE [ABS[#101 - #100] GT #103] DO1;
#101 = #101 + #102;
IF [#101 LT #100] THEN #101 = #100;
G00 Z[#101 + 2.0];
G01 Z#101 F100.0;
G00 Z2.0; (逃げ位置へ退避)
END1;
M30;
空運転
プログラムは目標深さ #100 を -50.0 に、現在の深さ #101 を 0.0 に設定します。ペック量は #102 = -10.0 です。WHILE ループは、#101 と #100 の絶対差が許容差 #103 より大きいかどうかをチェックします。最初のチェックでは ABS[0.0 - (-50.0)] すなわち 50.0 を評価します。50.0 > 0.01 であるため、ループに進入します。#101 は -10.0 に更新されます。IF-THEN は #101 が #100 をオーバーランしていないか検証します。工具は Z-8.0 に移動し、Z-10.0 までフィードし、Z2.0 の逃げ位置まで退避します。ループは繰り返され、Z-20.0、Z-30.0、Z-40.0、Z-50.0 へとペックします。最終イテレーションでは、差は 0.0 になり、これは #103 より大きくないため、ループは終了し、プログラムは M30 で終了します。
エラー解析
| ブランド | アラームコード | 発生条件 | オペレータに見られる症状 | 根本原因と対策 |
|---|---|---|---|---|
| Fanuc | 124 / PS1124 | DO - END のネストが1:1に対応していません。 | ループを実行する直前にサイクルが停止します。画面に「MISSING END STATEMENT」(END文がありません)と表示されます。 | プログラム内で、すべての DO 文に同じ識別子を持つ一致する END 文があることを確認してください。 |
| Fanuc | 126 | DO 識別子 m が 1〜3 の範囲外です。 | ブロック実行時にCNCがアラーム状態に入ります。画面に「ILLEGAL LOOP NUMBER」(不正なループ番号です)と表示されます。 | DO 識別子を DO 1、DO 2、または DO 3 に厳格に制限するようにループブロックを修正してください。 |
| Fanuc | 128 / PS1128 | GOTOのジャンプ先シーケンス番号が見つからないか、範囲外です。 | GOTOコマンドの時点で実行が停止します。画面に「SEQUENCE NUMBER OUT OF RANGE」(シーケンス番号範囲外)と表示されます。 | 対象の N シーケンス番号が存在し、1〜99999999 の範囲内であることを確認してください。 |
| Siemens | 14080 | アクティブなプログラムレベル内にジャンプ先のラベルまたはブロック番号がありません。 | 即座にインタープリタの停止が発生します。画面に「Jump destination not found」(ジャンプ先が見つかりません)と表示されます。 | ラベルまたはブロック番号のスペルを確認してください。対象がアクティブなプログラムレベルに存在することを確認してください。 |
| Siemens | 14000 | 外部サブプログラムのジャンプ先が、再ロードバッファの外にあります。 | 外部ファイルの読込み中にプログラムの途中で実行が停止します。画面にメモリバッファエラーが表示されます。 | ジャンプ先(GOTOB または REPEAT ラベルなど)が、ロード後のバッファ境界内にあることを確認してください。 |
| Mitsubishi | P288 | IF 文のネスト深度が最大10レベルを超えています。 | プログラムのロード中またはマクロ呼び出し中に実行が停止します。画面に「IF EXCESS」アラームが表示されます。 | マクロロジックを再構築し、ネストされた条件ツリーを10レベル以下にフラット化してください。 |
| Mitsubishi | P293 | WHILE-DO ループのネストレベルが 27 レベルを超えています。 | インタープリタは直ちに実行を停止します。画面に「DO-END nesting over」アラームが表示されます。 | ネスト深度が27レベルのハードウェア制限を超えないように、プログラムのループを再設計してください。 |
| Mitsubishi | P295 | テープ運転モード中に WHILE または GOTO コマンドが実行されました。 | テープフィード中の切削途中でCNCが停止します。画面に「WHILE/GOTO in tape」アラームが表示されます。 | マクロプログラムをCNCの内部メモリに転送し、DNC/テープモードではなくメモリモードで実行してください。 |
実務応用ノウハウ
実数値の比較時に EQ または NE 演算子を使用すると、浮動小数点の微小な計算誤差によって回避シーケンスがスキップされ、タレットや切削工具が回転中のチャックバリアや固定クランプに激突する致命的な機械衝突が発生します。このパラメータが未検証のまま量産に入ると、2ロット目から寸法ばらつきが広がり、最終検査で初めて不良が発見されるという、量産加工における再現性の低下と不良品発生のリスクを常に抱えることになります。段取り前に #8101 (MACRO SINGLE) や 6000#1 (MGO) などのパラメータを確認・適正化することで、これらマクロの論理処理で最も発生しやすい非計画停止を防ぎ、ロット間の繰り返し精度を保つことができます。また、Siemensの SINUMERIK 制御装置では、IF 条件の判定前に STOPRE コマンドによる先行デコードの停止(プリプロセッシングストップ)を行わないと、LookAhead バッファがまだ更新されていない古い座標変数を読み込んで軸移動を開始し、リジッドタップ加工(G331)中にクランプ(アラーム 700011)やチャック(アラーム 700013)の非常停止アラームをトリガーしてツールとワークを完全に損壊させます。このような物理的破損を防ぐため、演算子の記述ルールと LookAhead 同期、そしてパラメータの事前検証ルールを徹底しなければなりません。
関連コマンド
- g65-custom-macro-b: ローカル変数に渡された引数を用いて、条件付きループ論理を含むカスタムマクロを呼び出します。
- writing-and-calling-subprograms: 論理カウンタのインクリメントを使用して繰り返し実行可能な、ネストされたサブプログラムを実装します。
- r-parameter-programming: 構造化されたループに座標や送り速度を渡すために、Siemensシステム上の演算変数を利用します。
- STOPRE: 条件ジャンプが実行される前に動的な機械状態が完全に評価されるように、Siemens制御装置で Look-Ahead 先行読込みインタープリタバッファを一時停止します。
おわりに
CNCマクロプログラムにおける論理演算子の安全な運用は、単なるプログラミングテクニックではなく、加工現場の物理的な安全とワークの歩留まりを守る重要なセーフティバリアです。無限ループやデコード同期のズレによって引き起こされる激しい衝突を回避し、ロット間の寸法ばらつきを防ぐためには、すべての演算ブロックの直後に STOPRE コマンドや絶対許容差(ABS)判定といった同期処理を徹底しなければなりません。段取りの段階で、パラメータ 6000#1 や #8101 を必ず検証・構成し、プログラムが意図通りにループを終了することを確認します。この安全プロセスを標準化とすることで、再現性の低下を完璧に防ぎ、不良品の発生や非計画停止のコストを極限まで低減することが可能となります。
よくある質問
CNCマクロのループ処理でロット間の寸法ばらつきが発生し、2ロット目から不良が出る原因は何ですか?
この問題は、制御装置の先行読込み(LookAhead)機能が、変数演算の結果がメモリに書き込まれるよりも先に後続の移動ブロックをデコードしてしまうことで発生します。量産加工時の再現性低下と寸法不良を防ぐため、演算ブロックの直後の行に STOPRE コマンドを挿入するか、Fanucではパラメータ 6000#1 (MGO) や 6000#4 (HGO) で高速分岐キャッシュを有効化して、先行デコードバッファと座標変数の同期を完了させてください。
マクロ実行時の非計画停止(Fanucアラーム124やMitsubishiアラームP293)を防ぐために、段取り前に確認すべきパラメータは何ですか?
Fanucではパラメータ 6000#1 (MGO) や 6000#4 (HGO) を有効にし、Mitsubishiではパラメータ #6452 (bit 6) を 1 に設定してジャンプ先ラベルの検証を強制します。段取り前にこれらの設定を確認し、ネスト制限やラベル不足による突発的なエラー停止を防ぐため、パラメータ画面から設定値がプログラムの仕様(最大ループ深度やラベル名)と適合しているかを必ず確認してください。
GOTOやWHILEを使用したマクロプログラムを自動運転(DNC/テープモード)で実行すると、なぜアラーム(P295など)が発生して止まるのですか?
テープ運転モードでは外部からコードをシーケンシャルに供給するため、CNC側がループ全体のバッファを保持できず、Mitsubishiの P295 などのアラームが発生します。この問題による切削途中の急停止を防ぐため、論理分岐やループを含むマクロはテープ/DNC運転を避け、プログラムファイルをCNCの内部メモリに転送してから「メモリモード」で起動する運用を徹底してください。
まだ解決しませんか?
このトピックについて、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、衝突事故を防止してロット生産の繰り返し精度と加工品質を高める実務ノウハウを紹介。