M00 M01 M02 M30: CNC 프로그램 정지 및 종료 가이드
Fanuc, Siemens, Mitsubishi CNC 제어기에서 M00, M01, M02, M30 프로그램 정지 및 종료 명령어의 동작 차이점을 분석합니다. 바이스 충돌 방지를 위한 안전 파라미터 셋업 및 P36, Alarm 16954 알람 해결 가이드를 제공합니다.
서론
작업자가 조작반에서 '선택 정지(Optional Stop)' 토글스위치를 활성화하지 않은 채 양산을 시작하면, 프로그램에 지정된 M01 중간 검사 명령이 해석기(Interpreter)에서 그대로 지나치게 됩니다. 이로 인해 장비는 검사 단계를 생략하고 다음 공정의 급속 이송으로 이동하며, 결국 고속 회전하는 공구가 덜 고정된 공작물이나 바이스 조(vise jaw), 혹은 고정 클램프(fixture clamp)를 그대로 들이받는 대형 충돌 사고를 일으킵니다. 단 몇 초 만에 터렛 축(turret axis)이 뒤틀리고 spindle이 파손되며, 값비싼 고장 부품과 설비 손상으로 인한 비계획 비가동 시간이 기하급수적으로 늘어납니다. 자동화 라인의 반복 가공 공정에서 이러한 대참사를 방지하고 불량률을 영초(0초)화하기 위해서는 M00(Program Stop), M01(Optional Stop), M02(Program End), M30(Program End & Rewind) 명령어의 하드웨어 연동 구조를 명확히 이해해야 합니다. 특히 Fanuc 3404번 파라미터를 사전 확인하면 이 명령어에서 가장 빈번한 비계획 정지를 없앨 수 있다. 이 파라미터를 검증하지 않고 양산에 들어가면, pallet 교환 후 두 번째 cycle부터 치수 편차가 누적되어 최종 검사에서 불량이 발견된다. 좌표 포지셔닝에 미치는 영향은 G94 및 G95 Feed Rate Modes 가이드를 참조하십시오.
기술 요약
| 기술 사양 | 상세 정보 |
|---|---|
| 명령 코드 | M00, M01, M02, M30 |
| 모달 그룹 | Non-modal (지령된 블록에서만 유효) |
| 지원 브랜드 | Fanuc, Siemens, Mitsubishi |
| 주요 파라미터 | Fanuc Parameter 3404 (되감기 동작), Siemens MD 22254 / MD 22256 (사용자 정의 정지 M코드), Mitsubishi Parameter #12005 (블록당 최대 M코드 개수) |
| 주요 제약 사항 | 주변 장치 정지(spindle, coolant)는 기본 CNC 사양이 아닌 장비 제조사(MTB)의 특정 PLC ladder 로직에 의해 제어됨; Siemens stop delay area 내에서 프로그래밍해서는 안 됨 (Alarm 16954). |
핵심 요약
- HMI 조작반 상태 검증: part 측정 등을 위해
M01에 의존하는 프로그램을 실행하기 전에 조작반 HMI의 "Optional Stop" 토글이 활성화되어 있는지 항상 확인하십시오. - 종료 명령어 단독 배치: bar feeder나 workpiece 카운터 로직과 같은 보조 장치의 PLC 하드웨어 핸드셰이크 실패를 방지하기 위해
M02및M30은 독립된 전용 블록에 작성하십시오. - Stop Delay Area 회피: spindle과 축 간의 동기화 손실 및 Siemens alarm 16954를 예방하기 위해 나사 절삭 또는 rigid tapping cycle 도중에
M00또는M01을 프로그래밍하지 마십시오. - Parameter 3404 점검: 실행이 프로그램 시작점(head)으로 자동 되감기되는지 혹은 외부 신호를 대기하는지 제어하기 위해 Fanuc Parameter 3404(
M30은 bit 4,M02는 bit 5)를 설정하십시오. - 핸드셰이크 신호 일치: 알람 P36을 방지하기 위해 Mitsubishi PLC ladder가
M02및M30에 대해 표준 FIN1/FIN2 신호가 아닌 Reset & Rewind (RRW) 신호를 반환하도록 세팅되었는지 확인하십시오. - Look-Ahead 블록 감시: 후속 코드의 조기 실행을 방지하기 위해
M00,M01,M02,M30명령어가 Fanuc, Siemens, Mitsubishi 제어기에서 pre-read look-ahead 버퍼를 사전에 적극 억제한다는 점을 인지하십시오.
기본 개념
Program stop 및 end 명령어는 자동 CNC 작업을 분할하고, 속도를 조절하며, 안전하게 종료하는 기본 논리 인터페이스입니다. feed motor나 interpolation 경로를 직접 구동하는 동작 명령어와 달리, M00, M01, M02, M30은 하드웨어 핸드셰이크 릴레이를 사용하여 장비의 PLC와 직접 통신합니다. 이 명령어들은 엄격한 작업 경계를 강제하여 특정 작업자의 조치나 자동 재부하(reload) 시퀀스가 완료될 때까지 후속 좌표나 공구 명령이 실행되지 않도록 보장합니다.
정지 명령어인 M00과 M01은 가공 cycle 중간의 일시 정지 역할을 합니다. M00은 CNC interpreter를 즉시 중단시키고, 축 이동을 동결하며, 프로그램 실행을 일시 정지하는 무조건적 정지를 의미합니다. 이 일시 정지는 마이크로미터로 중요 공차를 측정하거나 깊은 홈에서 칩을 청소하고, 혹은 수동으로 workpiece를 뒤집는 등의 작업자 수동 개입을 위해 설계되었습니다. 반면, M01은 조건부 정지로서 장비 작업자가 컨트롤러 하드웨어 콘솔의 '선택 정지(Optional Stop)' 스위치를 활성화한 경우에만 cycle을 정지시킵니다. 선택 정지 토글이 비활성 상태이면 컨트롤러는 M01을 주석으로 처리하고 다음 블록을 망설임 없이 실행합니다.
프로그램 종료 명령어인 M02와 M30은 part 프로그램의 물리적 종료를 의미합니다. 두 코드 모두 현재 workpiece에 대한 모든 가공 작업이 완료되었음을 CNC 제어기와 하부 PLC에 신호로 보냅니다. 이는 시스템을 트리거하여 spindle을 중지하고, 고압 coolant 펌프를 끄며, 내부 레지스터를 리셋하도록 만듭니다. 특히 M30은 제어기에 part 프로그램을 가장 첫 번째 블록으로 되감기하도록 지시하여, cycle start 버튼을 눌렀을 때 다음 제품에 대해 즉시 cycle을 실행할 수 있도록 CNC를 준비시킵니다. cycle 복귀 레벨에 대한 세부 설명은 G98 및 G99: Cycle Return Levels 가이드를 참조하십시오.
명령 구조
정지 및 종료 보조 기능의 프로그래밍은 단순하지만, 올바른 하드웨어 시퀀스 실행을 보장하기 위해 절대적인 구문 격리가 필요합니다. 프로그램 정지 및 종료는 spindle 릴레이, 안전 도어 인터락(interlock), bar-loader 핸드셰이크와 같은 중요한 하드웨어 변경을 트리거하므로 제어기는 이를 특정 look-ahead 제약 하에서 평가해야 합니다. 이러한 명령어를 잘못 작성하거나 충돌하는 동작 경로와 결합하는 것은 제어기 파싱 오류의 주요 원인입니다.
최상의 신뢰성을 위해 M00, M01, M02, M30은 모션 좌표와 분리하여 자체 전용 NC 블록에 프로그래밍되어야 합니다. 대부분의 시스템에서 이들을 이동 라인에 추가하는 것을 허용하지만, 그렇게 하면 제어기가 모션과 보조 정지를 동시에 해결하도록 강제하여 장비 제조사(MTB)가 PLC ladder 로직을 작성한 방식에 따라 불규칙한 타이밍 거동을 유발할 수 있습니다. 또한, 이 코드들은 non-buffering으로 분류되며, 이는 M-code 실행이 완료될 때까지 interpolator가 후속 블록을 읽거나 준비하는 것을 방지한다는 의미입니다.
프로그래밍 구문:
M00 ; 무조건 프로그램 정지
M01 ; 선택 프로그램 정지
M02 ; 프로그램 종료
M30 ; 프로그램 종료 및 파일 헤드로 되감기
파라미터 및 시스템 설정:
| 브랜드 | 시스템 식별자 | 기능 설정 |
|---|---|---|
| Fanuc | Parameter 3404 Bit 4 (M30) | 0: 자동으로 시작점으로 되감기; 1: 외부 Reset & Rewind 신호 대기. |
| Fanuc | Parameter 3404 Bit 5 (M02) | 0: 자동으로 시작점으로 되감기; 1: 외부 Reset & Rewind 신호 대기. |
| Fanuc | Parameter 3201 Bit 6 (NPE) | 0: M02, M30, M99 리드 시 즉시 데이터 수신 중단; 1: 종료 코드 무시. |
| Fanuc | Parameter 3204 Bit 6 (MKP) | 0: M02/M30 실행 시 활성 MDI 시퀀스 소거; 1: MDI 프로그램 유지. |
| Siemens | MD22254 $MC_AUXFU_ASSOC_M0_VALUE | 무조건적인 프로그램 정지를 위해 추가적인 사용자 정의 M 기능을 정의. |
| Siemens | MD22256 $MC_AUXFU_ASSOC_M1_VALUE | 조건부 프로그램 정지를 위해 추가적인 사용자 정의 M 기능을 정의. |
| Siemens | MD10714 $MN_M_NO_FCT_EOP | 리셋/종료 후에도 spindle을 활성 상태로 유지하기 위한 사용자 정의 M 기능을 정의. |
| Siemens | $AC_ACTUAL_PARTS | 활성 workpiece 카운터 시스템 변수, M02/M30 실행 시 자동으로 1 증가. |
| Mitsubishi | #12005 Mfig | 단일 블록 내에서 허용되는 최대 M-code 개수를 결정 (범위: 1 ~ 4). |
| Mitsubishi | #1278 ext14/bit1 | 0: 일반 PLC 핸드셰이크 대기; 1: 고속 완료 방식. |
| Mitsubishi | #1405 M_mode(SMLK) | 고속 단순 프로그램 점검 중 보조 M-code 출력의 활성화 여부를 지정. |
브랜드별 응용
Fanuc
Fanuc CNC 시스템은 프로그램 정지 및 종료가 활성 메모리 등록 및 외부 데이터 전송과 상호 작용하는 방식을 결정하기 위해 하드웨어 레벨의 전용 파라미터에 의존합니다. Parameter 3404 bit 4는 M30에 대한 되감기 거동을 결정하고, Parameter 3404 bit 5는 M02에 대한 되감기 거동을 제어합니다. 이 비트들을 설정함으로써 제어기가 파일의 시작점으로 메모리 포인터를 자동으로 재배치할지, 아니면 외부 릴레이가 수동 리셋 신호를 보낼 때까지 정지할지를 결정합니다.
Fanuc 제어 장치에서 M00, M01, M02, M30은 look-ahead 억제를 보장하기 위해 단독 블록으로 격리되어 표준 포맷으로 프로그래밍됩니다. 선반 시스템에서 개발자는 직렬 전송 시 데이터 손상을 방지하기 위해 파라미터 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를 읽을 때 part 프로그램 등록을 중단하고 통신 포트를 닫음; 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-code가 단일 블록에 지정되거나 종료 명령과 함께 결합될 경우 트리거됩니다. |
| 버전별 차이점 | 레거시 시스템 (0-Series) | 레거시 Fanuc 제어기는 M02 되감기 거동을 제어하기 위해 파라미터 0019 bit 5 (M02NR)를 사용하였으며, 현대 제어기에서는 이를 Parameter 3404 bit 5로 마이그레이션했습니다. |
경고: Fanuc part 프로그램의 끝에 M02 또는 M30을 누락하면 리더기가 레코드 종료(%) 마크에 도달하게 되며, 이는 예기치 않은 메모리 오버런을 방지하기 위해 즉시 실행을 트랩하고 PS5010 또는 PS0008 알람을 발생시킵니다.
Siemens
Siemens SINUMERIK 제어기는 정지 명령을 workpiece 추적 및 측정 cycle 안전과 직접 통합하는 유연한 구문 구조를 제공합니다. 제어기는 M02 또는 M30이 처리될 때 $AC_ACTUAL_PARTS 및 $AC_SPECIAL_PARTS와 같은 시스템 변수를 자체적으로 업데이트하므로 사용자 정의 매크로 카운터의 필요성을 생략합니다. 또한 Siemens는 장비 제작사가 사용자 정의 정지 M-기능을 정의할 수 있도록 기계 데이터 MD22254 및 MD22256을 사용합니다.
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 | 활성 workpiece 카운터 변수, M02 또는 M30이 실행될 때 자동으로 1 증가합니다. 범위: 0 ~ 999,999,999. |
| 알람 / 오류 | Alarm 16954 | stop delay area 내에서 프로그래밍된 정지 (M0/M1) 금지. 동기화된 thread cutting 또는 rigid tapping 내부에서 정지 명령어를 만날 경우 트리거됩니다. |
| 알람 / 오류 | Alarms 62304 / 62305 / 62306 | 상한 공차 초과, 하한 공차 초과 또는 허용 편차 초과. measuring cycle 동안 공차가 위배되면 제어기가 자동으로 암묵적인 M00 일시 정지를 주입합니다. |
| 버전별 차이점 | 서브프로그램 네스팅 | Siemens는 호출된 메인 프로그램의 M02 및 M30을 M17 subprogram return과 동일하게 처리하여 실행을 상위 호출 프로그램 블록으로 원활하게 반환합니다. |
경고: rigid tapping 또는 thread cutting 도중과 같이 stop delay zone 내부에 M00 또는 M01을 배치하면 interpolator와 spindle 간의 동기화가 손상되고 Alarm 16954가 작동하여 고가의 workpiece에 파손된 탭이 영구적으로 박히게 될 수 있습니다.
Mitsubishi
Mitsubishi CNC 시스템은 PLC와 직접 통신하는 고도로 구조화된 전용 핸드셰이크 신호 인터페이스를 사용하여 정지 및 종료 명령을 처리합니다. 보조 기능에 대해 일반 strobe 신호를 공유하는 타 브랜드와 달리, Mitsubishi는 M00, M01, M02, M30을 읽을 때 PLC로 독립된 전용 신호를 출력합니다. 이를 통해 정지 중에 안전 도어 잠금을 해제하는 등 정교한 설비 측 논리를 가동할 수 있습니다.
Mitsubishi G-code 프로그램은 표준 8자리 M-code 구문 구조를 사용합니다. 축 이동과 정지 명령어는 동일 블록에서 실행될 수 있으며, 실행 순서는 장비 제조사(MTB)의 PLC ladder 로직에 의해 온전히 결정됩니다.
| 시스템 범주 | 설정 / 알람 코드 | 설명 및 하드웨어 동작 |
|---|---|---|
| 시스템 파라미터 | Parameter #12005 Mfig | 단일 블록에서 발행할 수 있는 최대 M-code 개수를 결정합니다. 최대 4개의 코드를 지원하며, 초과 시 이후 M-code가 이전 코드를 덮어씁니다. |
| 시스템 파라미터 | Parameter #1278 ext14/bit1 | 0: 일반 완료 방식 (PLC 완료 신호를 대기); 1: cycle 시간을 단축하는 고속 완료 방식. |
| 시스템 파라미터 | Parameter #1405 M_mode(SMLK) | 고속 단순 프로그램 점검 중 물리적인 보조 M-code 신호 출력의 활성화 여부를 지정합니다. |
| 알람 / 오류 | Alarm P36 (Program Error) | M02/M30 이후에 PLC가 필수의 Reset & Rewind (RRW) 신호 대신 일반 FIN1/FIN2 strobe 완료 신호를 제어기에 잘못 회신하는 경우 프로그램 끝에서 트리거됩니다. |
| 알람 / 오류 | Alarm M01 (Operation Alarm) | CNC가 프로그램 점검 모드에서 가동 중일 때 작업자가 cycle start 버튼을 물리적으로 누를 경우 트리거됩니다. |
| 버전별 차이점 | 하드웨어 편차 | 일부 레거시 디스플레이 유닛은 프로그래밍된 8자리 M-code를 모두 표시할 수 없습니다. M00을 통한 시스템 리셋 및 M02/M30을 통한 되감기는 엄격하게 장비 제조사(MTB) 사양에 국한됩니다. |
경고: 필수의 Reset & Rewind (RRW) 신호 대신 M02 또는 M30에 대해 일반 FIN1 또는 FIN2 strobe 완료 신호를 반환하도록 PLC ladder를 설계하면 종료 시퀀스를 위반하고 P36 프로그램 오류를 발생시킵니다.
브랜드 비교
| 비교 항목 | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Look-Ahead / Pre-Read 버퍼 | 활성 버퍼링 파라미터와 완전히 무관하게 M00/M01/M02/M30 이후를 읽는 것이 물리적으로 억제됩니다. | 실행 블록에서 M00 또는 M01이 처리될 때 interpolator 및 축 이동을 즉시 일시 정지합니다. | 후속 좌표가 조기에 트리거되는 것을 방지하기 위해 pre-reading 버퍼를 즉시 의도적으로 중단합니다. |
| PLC 핸드셰이크 / 피드백 | 자동 되감기와 외부 Reset & Rewind 하드웨어 신호 대기 사이를 토글하도록 Parameter 3404 비트를 통해 처리됩니다. | HMI optional stop 패널 VDI 상태와 복잡하게 연동됩니다; PLC 로직 설정이 활성 spindle/coolant의 정지 거동을 제어합니다. | M00 및 M01은 실행을 위해 FIN1/FIN2 strobe 신호가 필요합니다; M02 및 M30은 필수적인 Reset & Rewind (RRW) 신호를 요구합니다. |
| 네스팅 & 프로그램 종료 반환 | M02 및 M30은 항상 활성 파일 레벨의 메모리 실행을 종료합니다. | 중첩된 메인 프로그램(subprogram으로 호출됨)은 M02/M30을 M17 subprogram return 블록으로 자동으로 전환합니다. | M98/M99 subprogram은 내부적으로 처리됩니다; M02 및 M30은 MTB 사양에 따라 항상 프로그램의 처음을 준비합니다. |
| 통합 생산 추적 | 수동 프로그램 카운터 또는 사용자 정의 외부 PLC 로직 프로그래밍이 필요합니다. | M02 or M30 실행 시 시스템 변수 카운터인 $AC_ACTUAL_PARTS 및 $AC_SPECIAL_PARTS를 자체적으로 1씩 증가시킵니다. | 카운터 추적이 자체적이지 않습니다; 장비 제조사(MTB) PLC ladder 설정 또는 사용자 정의 매크로 개입이 필요합니다. |
기술 분석
Fanuc, Siemens, Mitsubishi가 정지 및 종료 명령을 처리하는 방식에 대한 분석적 비교는 look-ahead 버퍼링, PLC 핸드셰이크, 네스팅 거동에 대한 근본적으로 다른 제어 철학을 보여줍니다. 세 브랜드 모두 궁극적으로 동작을 정지시키고 프로그램의 시작점을 준비하지만, 실행하는 기본 계산 프로세스는 각각의 시스템 아키텍처에 맞게 조정되어 있습니다.
pre-read look-ahead 버퍼 처리는 주요한 차이점을 나타냅니다. Fanuc은 M00, M01, M02, M30을 엄격한 차단막으로 취급합니다. 제어기의 look-ahead 연산은 버퍼링 파라미터 설정에 전혀 무관하게 이 명령어들 너머를 읽는 것이 물리적으로 금지됩니다. 이를 통해 좌표 수학 연산이 완전히 고정됩니다. Siemens의 접근 방식 역시 즉각적이어서, 활성 실행 블록에서 M00 또는 M01이 처리될 때 interpolator와 축을 일시 정지시킵니다. 반면 Mitsubishi는 공격적인 pre-read 버퍼 억제를 강제하여 이 특정 M-code를 만나는 즉시 pre-reading 버퍼를 중단시킴으로써, 후속 기하학적 이동이 미리 로드되어 설비 측 반응을 조기에 유발하지 않도록 보장합니다.
CNC 프로세서와 PLC 캐비닛 간의 피드백 루프 역시 다양합니다. Fanuc은 되감기 제어를 Parameter 3404에 위임하여 장비 제조사가 CNC를 자동으로 되감을지 아니면 외부 Reset & Rewind 하드웨어 릴레이를 대기할지 결정하도록 합니다. Siemens는 HMI optional stop 패널 상태에 의존하며, 물리적 spindle 및 coolant 반응은 온전히 PLC 로직에 일임합니다. Mitsubishi는 고유한 'M-code 독립 출력' 구조를 활용하여 PLC로 전용 신호를 직접 출력합니다. 또한 Mitsubishi는 필요한 피드백 형식을 차별화하여 정지 시에는 표준 완료 신호(FIN1/FIN2)를 요구하지만, cycle을 종료할 때는 필수적인 Reset & Rewind (RRW) 핸드셰이크를 요구합니다. 이러한 PLC 핸드셰이크를 일치시키지 못하면 P36 프로그램 오류가 발생합니다.
마지막으로, 프로그램 네스팅은 Siemens interpreter의 유연성을 보여줍니다. Siemens 제어기에서는 M02 또는 M30을 포함하는 메인 프로그램이 다른 파일에 의해 subprogram으로 호출되면 interpreter가 이 종료 명령어를 M17 subprogram return으로 자동 처리합니다. 이를 통해 개발자는 코드 수정 없이 레거시 메인 파일을 네스팅할 수 있습니다. Fanuc과 Mitsubishi는 이러한 유연한 네스팅 번역 기능이 없어서 M02 또는 M30이 현재 레벨의 메모리 실행을 종료하므로, 프로그래머는 M98 및 M99와 같은 전용 subprogram 호출 및 반환 구조를 사용해야 합니다. feedrate가 이러한 모드와 상호 작용하는 방식을 이해하려면 G96 및 G97: Constant Surface Speed 및 Constant RPM 가이드를 참조하십시오.
프로그램 예제
Fanuc 프로그램 예제
O1001 (FANUC 정지 및 종료 예제) ;
N10 G90 G21 G17 ;
N20 T0101 M06 (공구 1 선택, 공구 로드) ;
N30 G54 G00 X0 Y0 S1200 M03 ;
N40 G43 H01 Z25.0 M08 (공구 길이 보정 활성화, Coolant 켬) ;
N50 G01 Z-5.0 F150. ;
N60 X50.0 ;
N70 G00 Z25.0 M09 (공구 후퇴, Coolant 끔) ;
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) 분석
- 공구 상태: spindle은 M03 하에서 1200 RPM으로 회전하고, coolant는 M08 하에서 활성화됩니다. N150 블록에서 spindle은 M05 하에서 정지하며, coolant는 M09 하에서 꺼집니다.
- 작업자 조치: N80 블록(M00) 동안 작업자는 문을 열고 칩을 청소하며 pocket을 측정하고 workpiece 안착을 확인한 후 문을 닫고 CYCLE START를 누릅니다.
- PLC 반응: N80에서 M00을 읽는 즉시, PLC는 spindle 및 coolant 릴레이를 트리거하여 끄고 축 이송을 동결합니다. N160에서 M30을 읽으면 PLC는 종료 cycle을 완료하고, Parameter 3404 bit 4가 0으로 설정됨에 따라 프로그램 포인터를 O1001 상단으로 자동으로 되감습니다.
Siemens 프로그램 예제
; 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를 토글하여 공작물 치수를 검사
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 카운터 증가
공운전 분석
- 공구 상태: spindle은 N30 블록에서 1800 RPM으로 작동하고, coolant는 N40에서 활성화됩니다. 둘 다 기계 원점 복귀 전인 N120 블록에서 비활성화됩니다.
- 작업자 조치: Siemens HMI의 "Optional Stop" 토글이 ON 상태이면 장비는 N80 블록에서 일시 정지합니다. 작업자는 공구 마모와 pocket 깊이를 확인한 후 NC START를 누릅니다. 토글이 OFF 상태이면 N80 블록은 완전히 생략됩니다.
- PLC 반응: 제어기는 N80에서 M01을 처리합니다. 선택 정지가 활성 상태이면 PLC는 interpolator 펄스를 유예합니다. N140 블록에서 PLC는 프로그램 종료 시퀀스를 실행하고, modal 레지스터를 리셋하며, $AC_ACTUAL_PARTS workpiece 카운터를 자동으로 1 증가시킵니다.
Mitsubishi 프로그램 예제
; 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 ; RRW 핸드셰이크를 요구하는 사이클 종료
공운전 분석
- 공구 상태: 공구 1 활성화. spindle은 1000 RPM으로 회전하며 coolant는 켬 상태입니다. 프로그램 종료 블록 N100에서 spindle 및 coolant가 비활성화됩니다.
- 작업자 조치: N80 블록의 M00 일시 정지 동안 CNC가 정지합니다. 안전 도어 인터락이 해제되어 작업자가 part를 검사하고 문을 닫은 뒤 CYCLE START를 누를 수 있습니다.
- PLC 반응: M00 명령은 PLC로 전용 독립 신호를 출력합니다. PLC는 안전 도어 잠금 릴레이를 트리거하여 잠금을 해제합니다. N100 블록에서 PLC는 제어기로 Reset & Rewind (RRW) 핸드셰이크를 시작하여 시스템을 N1 블록으로 리셋합니다.
오류 분석
| 브랜드 | 알람 코드 | 트리거 조건 | 작업자 화면 증상 | 원인 분석 및 조치 방안 |
|---|---|---|---|---|
| Fanuc | PS5010 (END OF RECORD) | Parameter 3404 bit 6이 0일 때, 이전의 M02 또는 M30 없이 EOR (%) 마크 실행. | CNC 화면에 PS5010 END OF RECORD가 표시되며 자동 운전이 즉시 중단됩니다. | 뒤따르는 % 문자 바로 전에 올바른 M02 또는 M30 프로그램 종료 명령어가 쓰여졌는지 확인하십시오. |
| Fanuc | PS0008 (ILLEGAL USE) | 이전의 M02, M30, M99 없이 M-시리즈 제어기에서 EOR (%) 마크 실행. | 적색 알람등이 켜지며 프로그램 실행이 갑자기 정지됩니다. | 뒤따르는 % 기호 앞의 독립된 블록에 M30 또는 M02를 삽입하도록 프로그램을 수정하십시오. |
| Fanuc | PS5016 (ILLEGAL COMBINATION) | 한 블록에 동일 그룹의 여러 M-code가 프로그래밍되었거나, 종료 명령이 다른 M-code와 결합된 경우. | 컨트롤러가 PS5016 알람을 생성하고 블록 파싱을 거부합니다. | 다른 M-code가 없는 독립된 블록으로 프로그램 종료 명령(M02/M30)을 이동하십시오. |
| Siemens | Alarm 16954 | 보호된 stop delay area (예: tapping 가공 도중) 내에서 프로그래밍된 정지 (M0/M1) 봉착. | 시스템이 Alarm 16954: Programmed stop prohibited를 발생시키고 가공 동작이 중간에 정지합니다. | 동기화된 tapping, threading, contouring cycle 외부로 M0/M1을 이동하십시오. |
| Siemens | Alarm 62304 / 62305 | workpiece 치수 measuring cycle이 공차 위배(상한 초과/하한 초과)를 검출함. | 프로그램 실행이 암묵적인 M00 정지로 인해 보류되며 HMI에 경고가 표시됩니다. | 조작반에서 공구 마모 오프셋을 조정한 뒤 NC START를 눌러 안전하게 실행을 재개하십시오. |
| Mitsubishi | Alarm P36 (Program Error) | PLC 로직 오류; M02/M30에 대해 Reset & Rewind (RRW) 대신 일반 FIN1/FIN2 strobe 완료 신호를 반환함. | part 프로그램은 종료되지만 장비는 P36 코드가 활성화된 결함 상태로 정지합니다. | M02 및 M30이 CNC에 Reset & Rewind (RRW) 핸드셰이크를 트리거하도록 PLC ladder 프로그램을 수정하십시오. |
| Mitsubishi | Alarm M01 (Operation Alarm) | CNC가 프로그램 점검 모드에서 가동 중인 와중에 작업자가 cycle start 버튼을 물리적으로 누름. | 컨트롤러가 화면에 M01 알람을 깜빡이며 cycle start가 무시됩니다. | 장비를 가동하기 전에 프로그램 점검 루틴이 M02 또는 M30에 도달할 때까지 대기하십시오. |
실무 응용 가이드
자동화 라인의 반복 가공 공정에서 비계획 비가동 시간을 방지하고 부품 불량률을 제로화하려면 제어기별 프로그램 종료 파라미터와 PLC 핸드셰이크 로직의 결합 상태를 반드시 교차 검증해야 합니다. 만약 Mitsubishi 제어기 환경에서 M30 또는 M02 프로그램 종료 명령어 실행 시, 기계측 PLC 래더가 Reset & Rewind(RRW) 신호 대신 일반 피드백 완료 스트로브 신호인 FIN1 또는 FIN2를 전송하도록 잘못 설계되어 있다면 시스템은 즉시 P36 프로그램 오류(Program Error) 알람을 작동하며 장비를 긴급 정지 상태로 만듭니다. 동시에 Fanuc 제어 장치에서는 Parameter 3404의 4번 비트(M30 되감기)와 5번 비트(M02 되감기) 값을 점검하지 않은 상태로 다품종 대량 양산에 돌입할 경우, 프로그램이 헤드(head)로 자동 되감기되지 않고 외부 리셋 신호를 무한히 대기하여 자동화 라인의 물리적 흐름이 끊기고 막대한 다운타임 손실이 발생합니다. 이어서 지멘스(Siemens) 시스템 역시 rigid tapping 이나 나사 절삭 같은 동기화 가공(stop delay area) 블록 도중에 M00 또는 M01 코드를 강제 삽입하면 spindle과 축 이송 간의 동기화 결합이 해제되면서 Severe Alarm 16954가 작동하여 고가의 workpiece에 탭이 박힌 채 손상되어 완전한 scrap part 불량으로 직결됩니다. 따라서 생산 엔지니어는 장비 기동 전 하드웨어 인터록 파라미터(Fanuc 3404, Siemens MD22254/22256, Mitsubishi #12005)와 PLC 통신 신호를 사전에 정밀 검증함으로써 라인의 가공 정밀성과 자동화 생산성을 최대로 유지해야 합니다.
관련 명령 구조
- M98 / M99 (Subprogram Call & Return): M98은 외부 subprogram 블록을 호출하고, M99는 subprogram을 종료하며 실행 제어권을 상위 호출 프로그램으로 반환합니다.
- M17 (Siemens Subprogram Return): Siemens 제어기에서 자체적인 subprogram 종료 및 반환 명령 역할을 하며, 처리 흐름을 상위 호출 프로그램 블록으로 반환합니다.
- M03 / M04 / M05 (Spindle Controls): 각각 spindle 정회전, 역회전, 정지를 제어하며, 일반적으로 프로그램 정지와 동시에 또는 바로 직전에 꺼지도록 프로그래밍됩니다.
- EOR / % (End of Record): part 프로그램 데이터 전송 시 물리적인 파일 경계 마크 역할을 하며, 메모리 리더기에 스캔을 중단하도록 신호를 보내고 파일 오버런 오류를 방지합니다.
결론
M00, M01, M02, M30 명령어는 단순한 정지용 문자 코드에 그치지 않고 자동화 양산 가공 라인의 설비 반복도와 장기적 작동 신뢰성을 보장하는 핵심 안전장치입니다. 수동 측정 및 chip 제거를 위한 일시 정지(M00, M01), 그리고 장비의 하드웨어 리셋과 자동 되감기(M02, M30)가 가동되는 고속 대량 가공 프로세스에서 치명적인 충돌 리스크를 봉쇄하고 불필요한 비가동 시간 손실을 제로화하려면 제어기별 PLC 핸드셰이크 인터페이스와 필수 시스템 파라미터를 사전에 반드시 검증해야 합니다. 자동화 생산의 신뢰성을 극대화하기 위해 프로그램 정지 명령어는 항상 독립된 블록으로 격리 프로그래밍하고, Fanuc 3404, Siemens MD22254, Mitsubishi #1278 등 제어기의 내부 구성 변수들을 철저히 점검하여 공정에 표준화할 것을 강력히 권장합니다.
자주 묻는 질문 (FAQ)
자동화 생산 라인에서 M30 실행 시 프로그램이 처음 블록으로 자동 되감기되지 않고 설비가 정지하는 원인은 무엇인가요?
Fanuc 제어기 기준 Parameter 3404의 4번 비트(구형 장비의 경우 파라미터 0019 5번 비트 M02NR)가 1로 설정되어 있으면, 제어기가 M30 리드 시 자동 되감기를 수행하지 않고 외부 PLC 물리 릴레이나 Reset & Rewind(RRW) 신호 입력을 계속 대기하기 때문입니다. 비가동 시간 누적을 막으려면 시스템의 파라미터 쓰기 권한을 활성화한 뒤 Parameter 3404 bit 4 값을 0으로 즉시 변경하여 외부 입력 신호 연동 없이도 자체 자동 되감기가 수행되도록 조치하십시오.
Mitsubishi CNC 설비에서 가공 종료 시점에 P36 프로그램 오류 알람이 발생하며 제어기가 정지하는 해결법은 무엇인가요?
Mitsubishi 제어기는 M02 또는 M30 실행 시 일반 보조 완료 피드백 신호(FIN1 또는 FIN2)가 아닌 필수 전용 핸드셰이크 신호인 Reset & Rewind(RRW) 신호를 PLC 래더로부터 수신하여 작동 상태를 클리어해야 합니다. 만약 PLC가 일반 완료 신호로 피드백을 전달하도록 오설정되어 있다면 즉시 PLC 래더 다이어그램을 열어 M30 코드가 RRW 신호 레지스터를 트리거하도록 회로를 수정하고 시퀀스를 업데이트하십시오.
Siemens SINUMERIK 제어기 가공 중 Alarm 16954가 발생하며 M00 또는 M01 정지 명령이 거부되는 리스크를 방지하려면 어떻게 해야 하나요?
지멘스 제어기는 rigid tapping(G33/G63)이나 동기식 나사 절삭 가공 도중(Stop Delay Area)에 M00 또는 M01 정지 명령이 입력되면, 주축과 가공 축 간의 전자 기어링 동기화 붕괴로 인한 공구 파손 및 부품 불량(scrap part)을 원천 방지하기 위해 Alarm 16954를 출력하며 동작을 비활성화합니다. 나사 가공 중 탭 손상과 불량률을 완전히 차단하려면 프로그램 분석을 통해 M00/M01 정지 명령을 동기 절삭 시작 블록 진입 이전이나 황삭 완료 직후의 안전 영역으로 위치를 재조정하십시오.
아직 해결되지 않았나요?
이 주제에 대해 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의 공동 창업자로서 활동을 이어가고 있습니다.
관련 기사
이 주제에 관한 다른 기사
지멘스 CYCLE800 평면 선회 및 공구 정렬 실무 가이드
지멘스 CNC CYCLE800 명령어를 활용한 3+2축 평면 선회 및 공구 정렬 방법과 Alarm 61190 및 61153 오류를 신속히 해결하고 자동화 라인 비가동 시간 및 불량률을 개선하는 실무 가이드입니다.
Siemens CYCLE72 윤곽 가공: Sinumerik 가이드
Sinumerik CNC에서 Siemens CYCLE72 윤곽 밀링을 완벽하게 설정하는 방법입니다. 파라미터 구성법을 배우고 Alarm 61123 차단을 방지하며, 비가동 시간과 불량률을 없애기 위한 척 클램프 등 가공 노하우를 확인하십시오.
Siemens CYCLE952 윤곽 선삭 cycle 프로그래밍 가이드
Siemens Sinumerik CNC에서 CYCLE952 윤곽 선삭 cycle의 파라미터를 올바르게 구성하고, Alarm 61051 및 61059 오류를 방지하여 자동화 가공 라인의 비계획 정지 비가동 시간과 불량률을 최소화하는 실무 프로그래밍 가이드.
Siemens SLOT1 및 SLOT2 슬롯 가공 cycle 프로그래밍 가이드
Siemens Sinumerik CNC에서 SLOT1 및 SLOT2 원호 홈 밀링 cycle의 파라미터를 올바르게 구성하고, Alarm 61000 및 61105 오류를 방지하여 자동화 라인의 비가동 시간을 최소화하는 실무 프로그래밍 방법 안내.