Fanuc, Siemens, Mitsubishi CNC 서브프로그램 호출 및 매개변수 가이드
Fanuc, Siemens, Mitsubishi CNC의 서브프로그램(M98, M198, MCALL) 작성 및 에러 제어법. 중첩 한도 및 nesting 알람 해결 파라미터 설정을 알아봅니다.
서론
CNC 서브프로그램 종료 시 절대 좌표계(G90) 복원을 누락하여 터렛(turret)이 바이스 조(vise jaw)나 클램프(clamp)와 충돌하는 사고는 스핀들 샤프트가 휘어지고 공구가 파손되는 치명적인 비가동 시간(downtime)을 초래한다. 특히 팔레트 교환기와 같은 자동화 라인 반복 가공 환경에서 이러한 좌표계 드리프트는 불량률을 크게 증가시키는 직접적인 요인이다. 이 파라미터를 검증하지 않고 양산에 들어가면, 팔레트 교환 후 두 번째 사이클부터 치수 편차가 누적되어 최종 검사에서 불량이 발견된다. 서브프로그램 호출 및 제어에 사용되는 핵심 파라미터를 사전에 적절히 구성하지 않으면, 대량 생산 라인에서의 예기치 못한 비계획 정지와 장비 파손을 막을 수 없다. 예를 들어, Fanuc의 3404#2(SBP) 파라미터를 사전 확인하면 이 명령어에서 가장 빈번한 비계획 정지를 없앨 수 있다. 따라서 자동화 생산 라인의 안정성을 유지하기 위해서는 각 CNC 브랜드별 서브프로그램 호출 구조와 중첩 제한 및 매개변수 설정을 철저히 검증해야 한다.
기술 요약
| 기술 사양 | 세부 정보 |
|---|---|
| 명령 코드 | Fanuc: M98, M99, M198Siemens: L<number>, <program name>, MCALL, EXTCALL, M17, RETMitsubishi: M98, M99, M198 |
| 모달 그룹 / 모달리티 | 서브프로그램 호출 및 복귀 명령 |
| 적용 브랜드 | Fanuc, Siemens, Mitsubishi |
| 핵심 파라미터 | Fanuc: 3404#2 (SBP), 6001#5/7000#0 (TCS)Siemens: P (INT), VAR 키워드Mitsubishi: #8876 (M198 장치), #8129 (검색 우선순위) |
| 주요 제한 사항 | 중첩(nesting) 한도: 최대 4레벨(Fanuc), 최대 11/16레벨(Siemens), 최대 8/10레벨(Mitsubishi). 외부 저장 매체를 통한 중첩 M198 호출은 금지됩니다. |
핵심 요약
- 모달 리셋 조치: 서브프로그램을 종료하기 전에 일관되게 절대 좌표계(G90)를 복원하고 수정된 모달 피드를 리셋하여 치명적인 공구 경로 드리프트를 방지하십시오.
- 중첩 한도 제한: 인터프리터 메모리 오버플로우를 피하기 위해 서브프로그램 중첩 레벨을 Fanuc은 4레벨, Mitsubishi는 8~10레벨, Siemens는 11~16레벨로 제한하십시오.
- 외부 저장소 호출: 대형 프로그램을 외부 메모리 카드나 데이터 서버에서 직접 실행하려면
M198(Fanuc/Mitsubishi) 또는EXTCALL(Siemens)을 프로그램하십시오. - 파라미터 잠금 보호: 실수로 인한 수정을 방지하기 위해
PRG8(0389#2) 및PRG9(0010#4) 파라미터를 사용하여 Fanuc의 8000 및 9000 계열 매크로 프로그램 편집 권한을 잠그십시오. - 에일리어싱 커스텀 결정: 터렛 회전 시퀀스와 같은 백그라운드 서브루틴을 자동으로 에일리어싱하고 트리거하려면 커스텀 M, S, T 또는 B 코드를 사용하십시오.
- Siemens 모달 MCALL: 선택 해제될 때까지 이후 블록에 나열된 모든 좌표 위치에서 서브프로그램을 자동으로 실행하도록 Siemens 시스템에서
MCALL을 적용하십시오.
기본 개념
서브프로그램의 실질적인 프로그래밍 효과는 반복적인 가공 시퀀스를 모듈화하여 프로그램 파일 크기를 크게 줄이고 향후의 엔지니어링 변경을 단순화하는 기능입니다. 개발자는 동일한 기하학적 황삭 패스, 슬로팅 루틴 또는 팔레트 교체 시퀀스를 하나의 큰 프로그램 내에서 여러 번 복사하여 붙여넣는 대신, 이러한 동작을 독립적인 하위 파일로 저장합니다. 메인 프로그램은 필요할 때마다 이러한 서브루틴을 호출하고 서브프로그램이 종료되는 즉시 메인 경로를 재개하므로 최소한의 메모리만 소비하는 깔끔하고 효율적인 파일 구성이 가능합니다.
제어 장치 브랜드에 따라 이러한 하위 파일의 위치 지정, 호출 및 실행 방식이 다릅니다. 레거시 플랫폼은 엄격한 숫자형 O-번호 명명 규칙을 요구하는 반면, 최신 제어 장치는 서술형 알파뉴메릭(alphanumeric) 이름을 지원합니다. 또한 서브프로그램은 서로 다른 좌표에 걸쳐 모달처럼 실행되거나, 내부 메모리 제한을 완전히 우회하기 위해 외부 하드웨어 인터페이스로부터 동적으로 스트리밍될 수 있습니다. 서브프로그램은 호출 프로그램의 활성 확장형으로 실행되기 때문에 이송 속도 및 위치 좌표와 같은 모달 상태가 레벨 간에 유동적으로 흐르므로, 좌표 블리딩(bleeding)을 방지하기 위한 엄격한 프로그래밍 방식이 요구됩니다.
명령 구조
서브프로그램을 호출하려면 CNC 인터프리터가 대상 프로그램의 식별자 및 반복 횟수와 함께 특정 명령 코드를 파싱해야 합니다. 표준 Fanuc 및 Mitsubishi 환경에서는 M98 코드가 이 점프를 시작하여 P 주소로 지정된 프로그램으로 제어를 전달합니다. 컨트롤러는 최종 복귀 시퀀스를 실행하기 전에 반복 카운터를 사용하여 서브프로그램의 각 반복을 추적합니다. 서브프로그램 끝에 도달하면 복귀 코드가 서브루틴의 실행을 중단하고 프로그램 포인터를 원래 호출 명령 바로 다음 블록으로 되돌립니다.
Siemens 제어 장치는 프로그램 이름이나 L 주소로 서브프로그램을 직접 호출할 수 있도록 더 유연한 구조를 지원합니다. Siemens 서브프로그램 정의에는 프로그램 레벨 간에 값을 전달하기 위한 매개변수 유형과 이름을 정의하는 PROC 헤더가 포함될 수 있습니다. 복귀 점프는 M17 또는 RET를 통해 실행됩니다. 모든 브랜드에서 M198 또는 EXTCALL과 같은 외부 호출을 통해 메모리 카드 또는 네트워크 드라이브로부터의 스트리밍이 가능합니다. 매개변수 및 구문 주소는 제어 장치가 이러한 루틴을 검색, 반복 및 복귀하는 방식을 관리합니다.
명령 구문 주소:
- Fanuc Standard Call:
M98 P_ L_ ; - Fanuc External Call:
M198 P_ ; - Fanuc Return:
M99 ; - Siemens Definition:
PROC <program name> (<ParamType> <ParamName>, VAR <ParamType> <ParamName>) [SAVE] [DISPLOF] [SBLOF] [ACTBLOCNO] - Siemens Call:
<program name> (<Param1>, <Param2>)orL<number>orMCALL <program name> - Siemens Return:
M17orRET - Mitsubishi Standard Call:
M98 P__ H__ L__ ,D__ ;orM98 <file name> H__ L__ ,D__ ; - Mitsubishi External Call:
M198 P__ L__ ;orM198 <file name> L__ ; - Mitsubishi Return:
M99 P__ ;
| 매개변수 주소 | 제어 브랜드 | 설명 | 유효한 설정 |
|---|---|---|---|
P | Fanuc / Mitsubishi | 호출할 대상 프로그램 번호를 지정합니다 | 최대 8자리 |
L | Fanuc / Mitsubishi | 서브프로그램의 반복 횟수를 결정합니다 | 1 ~ 9999 (기본값: 1) |
H | Mitsubishi | 서브프로그램 내부의 시작 시퀀스 블록 번호를 지정합니다 | 시퀀스 코드 (예: H100은 N100과 매칭됨) |
,D | Mitsubishi | 특정 물리적 저장 장치로 호출 경로를 명시적으로 지정합니다 | 0 ~ 4 (파라미터를 통해 매핑됨) |
<file name> | Mitsubishi | 꺾쇠괄호 안에 알파뉴메릭 파일 이름을 지정합니다 | 최대 32자 |
P (호출 시) | Siemens | 프로그램의 반복 횟수를 제어합니다 | 1 ~ 9999 (예: P3) |
VAR | Siemens | PROC 헤더에서 참조에 의한 호출(call-by-reference) 매개변수 전달을 선언합니다 | 해당 없음 (키워드) |
SAVE | Siemens | 활성 모달 G-기능 및 프레임을 자동으로 저장하고 복원합니다 | 해당 없음 (속성) |
DISPLOF | Siemens | 서브프로그램 실행 중 HMI의 블록 표시를 억제합니다 | 해당 없음 (속성) |
SBLOF | Siemens | 실행 중 싱글 블록 모드 단계를 비활성화합니다 | 해당 없음 (속성) |
브랜드별 응용
Fanuc CNC 통합
Fanuc 제어 장치는 서브프로그램을 트리거하기 위해 파라미터 구동 에일리어싱(aliasing)을 지원합니다. 시스템은 파라미터 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)를 지정하는지 여부를 결정합니다. | 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 헤더에서 참조에 의한 호출(call-by-reference) 매개변수를 선언합니다. | 해당 없음 |
SAVE | 속성 | 활성 모달 G-기능 및 프레임을 자동으로 저장하고 복원합니다. | 해당 없음 |
DISPLOF / SBLOF | 속성 | HMI의 블록 표시를 억제합니다 / 싱글 블록 모드를 비활성화합니다. | 해당 없음 |
알람 14011 | 알람 | program not existing or will be edited: 호출된 파일이 누락되었거나 HMI에 열려 있습니다. | HMI에서 해당 파일을 닫으십시오. _N_SPF_DIR 경로를 확인하십시오. |
알람 14012 | 알람 | maximum subroutine level exceeded: 최대 중첩 깊이를 초과했습니다. | 중첩 레벨을 점검하십시오. |
알람 12720 | 알람 | ISO 모드에서 매크로 호출(G65/G66)을 위한 프로그램 번호가 누락되었습니다. | 주소 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 (메모리 카드), D (데이터 서버), T (이더넷), F (플로피 디스크) |
#8129 (Subpro No. select) | 파라미터 | 서브프로그램 번호 검색 우선순위를 결정합니다. | 0 (지정된 번호), 1 (4자리 O-번호), 2 (8자리 O-번호) |
프로그램 오류 (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 서브프로그램을 실행하는 것은 불가능하며, 시도 시 실행이 즉각 중단됩니다.
브랜드 비교
| 항목 | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| 알파뉴메릭 파일 | 자체 지원 안 함; 반드시 O-번호 형식을 사용해야 합니다. | 프로그램 이름 문자열을 사용하여 자체적으로 지원합니다. | 꺾쇠괄호를 사용하여 자체적으로 지원합니다 (예: <PART-FILE.PRG>). |
| 반복 모달 호출 | 블록별 실행 또는 G66 모달 매크로 호출. | MCALL <prog>를 통한 모달 서브프로그램 실행. | 블록별 실행. |
| 중첩 깊이 | 최대 4단계 중첩 (매크로 포함 시 8단계). | 최대 11단계 (808D), 16단계 (828D/840D sl), ASUB 사용 시 최대 18단계. | 최대 8단계 (M70V/M700V), 10단계 (M800V/M80V). |
| 저장 매체 호출 | M198 P_를 사용하여 카드/데이터 서버로부터 스트리밍. | EXTCALL을 사용하여 외부 서브프로그램 호출. | #8876으로 구성된 장치 또는 명시적인 ,D 주소 매개변수로부터 M198 호출. |
| 매개변수 전달 | 커스텀 매크로 호출(G65/G66)이 필요합니다. | PROC 정의를 통해 직접 지원합니다 (값에 의한 호출 및 VAR을 통한 참조에 의한 호출). | 매크로 호출 또는 변수가 필요합니다. |
기술 분석
이 세 가지 CNC 아키텍처를 분석적으로 검토하면 서브프로그램 실행, 메모리 범위 지정 및 매개변수 전달에 대한 서로 다른 접근 방식을 알 수 있습니다. Siemens는 PC 고수준 프로그래밍 언어를 모델로 하여 프로그래머가 서브프로그램 헤더에 직접 지역 범위 및 매개변수 전달 메커니즘을 정의할 수 있도록 합니다. PROC 라인에서 VAR 키워드를 사용하여 Siemens는 참조에 의한 호출(call-by-reference) 실행을 활성화하므로 서브프로그램이 계산 결과를 수정하여 부모 프로그램으로 다시 반환할 수 있게 합니다. 이와 대조적으로 Fanuc 및 Mitsubishi는 레거시 레지스터 아키텍처를 사용하여 값 전달에 G65 또는 G66과 같은 매크로 옵션이 필요하거나, 휘발성 공통/전역 변수에 의존하도록 하여 모달 데이터 손상 위험이 수반됩니다.
중첩 계층 구조 또한 하드웨어 철학의 차이를 반영합니다. Fanuc의 4레벨 중첩 제한은 프로그래머가 단순하고 얕은 호출 트리를 유지하도록 요구합니다. Siemens는 최대 16~18단계의 중첩 레벨을 제공하지만, 이러한 레벨이 사용자 서브프로그램, 표준 고정 사이클(canned cycles) 및 제조업체 OEM 백그라운드 루틴(예: 주축 속도 클램프 또는 터렛 제어 매크로) 간에 동적으로 공유되기 때문에 이 자원이 빠르게 소모될 수 있습니다. Mitsubishi는 레거시 M70V 시리즈에서 8레벨, 최신 M80V 제어 시스템에서 10레벨을 제공하여 중간 위치를 차지합니다. 어떤 제어 장치에서든 이러한 한계를 초과하면 실행이 즉시 중단되므로 모든 활성 시스템에서 호출 깊이를 사전에 추적하는 것이 필수적입니다.
디렉토리 라우팅 및 안전 제어 부분에서도 플랫폼 간의 차이가 두드러집니다. Fanuc은 파라미터 3457을 사용하여 엄격하고 자동화된 폴더 계층 구조를 검색하는 반면, Mitsubishi는 ,D 주소나 <PART.PRG>와 같은 꺾쇠괄호 파일 이름을 통해 직접적인 물리적 라우팅을 지원합니다. Siemens는 EXTERN 선언이 포함되지 않는 한 서브프로그램 호출을 로컬 작업물 디렉토리로 격리합니다. 또한 Siemens는 호출된 파일이 화면에 열려 있으면 NC Start를 방지하는 HMI 편집 안전 잠금 장치(버전 5 이상)를 강제하는데, 이는 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 코드를 검증할 때 기계는 먼저 절대 모드에서 X0, Y0, Z10.0 좌표로 이동합니다. 인터프리터가 M98 P1000 L5 블록에 도달하면 메인 프로그램을 일시 중단하고 서브프로그램 O1000으로 점프합니다. O1000에서 컨트롤러는 증분 모드(G91)로 전환하여 Z축을 2.0mm 아래로 이송한 다음 절대 모드(G90)로 되돌아가 X축 이송을 50.0mm까지 실행합니다. 그런 다음 증분식으로 후퇴하고 절대 X0 좌표로 복귀한 후 M99를 읽습니다. 컨트롤러는 메인 프로그램으로 복귀하기 전에 이 루프를 5회 반복하며, 메인 프로그램에서 Z축을 50.0mm로 후퇴시키고 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 명령은 NC 메모리에 POCKET_CYCLE 루틴을 모달로 등록합니다. 기계는 N20에서 서브프로그램을 즉시 실행하지 않지만, N30 블록(X50.0 Y50.0)을 읽는 즉시 해당 좌표로 이송하여 일시 정지하고 서브루틴을 호출합니다. 서브루틴은 SAVE 속성이 활성화된 상태로 실행되어 호출 프로그램의 모달 설정을 자동으로 저장합니다. Z축을 3.0mm 아래로 이송하기 위해 증분 모드로 전환하고, 원을 밀링하고 후퇴한 다음 M17을 읽습니다. 컨트롤러는 원래 모달 설정을 자동으로 복원하고 계속 진행합니다. N50 블록이 모달 상태를 해제하기 전에 N40 블록(X100.0 Y50.0)에서 이 시퀀스를 반복합니다.
Mitsubishi 서브프로그램 호출 예제
; Mitsubishi 서브프로그램 호출 예제
O0002 (메인 프로그램) ;
G90 G54 G00 X0 Y0 Z10.0 ; 축 사전 위치 결정
M98 <POCKET-ROUT.PRG> H200 L3 ,D1 ; 장치 1에서 N200 블록부터 시작하는 POCKET-ROUT.PRG 파일 호출 (3회 반복)
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 ; 증분 Z축 후퇴
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 | 알람 12720 | P를 통해 프로그램 번호를 정의하지 않은 채 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자 이내로 유지하십시오. |
실무 응용 가이드
서브프로그램 중첩 한도 초과나 모달 좌표계 누설로 인한 충돌 사고는 장비의 물리적 파손과 막대한 비가동 시간(downtime)을 유발하는 직접적인 원인이다. Siemens 환경에서 PROC 문에 SAVE 속성을 누락할 경우, 서브프로그램 내부의 G91(증분 지령) 모달 설정이 메인 프로그램으로 그대로 유출된다. 이 상태에서 제어 장치가 M17 또는 RET를 통해 복귀하면 복귀 후의 좌표가 누적 오차를 발생시키며 터렛이 클램프나 척과 충돌하여 스핀들을 영구적으로 손상시키고 불량률을 상승시킨다. Fanuc의 경우 8000번 및 9000번 매크로 프로그램의 편집 권한을 잠그는 파라미터 0010#4(PRG9) 및 0389#2(PRG8) 설정을 무시하면, 작업자의 실수로 프로그램이 수정되어 툴 체인저나 프로브 매크로 실행 시 예기치 못한 비계획 정지가 발생하고 불량률이 급상승한다. 또한 Mitsubishi 컨트롤러에서 SD 카드나 데이터 서버 호출(M198) 시 장비 오작동을 유발하는 P232(No program No.) 에러를 방지하려면 장비 가동 전에 매체 장착 상태와 파라미터 #8876의 하드웨어 매핑 값을 사전에 반드시 확인해야 한다. 이러한 제어 오류를 방지하기 위해 매개변수 관리를 철저히 해야 한다.
관련 명령 구조
G65단순 매크로 호출: 매크로 레지스터에 지역 변수를 직접 전달할 수 있도록 하면서 서브프로그램에 대한 단일 비모달 호출을 시작합니다.G66모달 매크로 호출: 취소될 때까지 이후의 모든 이동 블록 뒤에 지정된 매크로 서브프로그램을 자동으로 실행하도록 CNC 인터프리터에 지시합니다.- G645 공차 기반 평활화: 고속 가공 시 윤곽 평활화 공차를 제어하며, 현 오차(chordal errors)를 방지하기 위해 서브프로그램 이송 속도와 정밀하게 조율되어야 합니다.
- G68.2 경사면 제어: 다축 가공을 위한 틸팅 작업 평면 좌표를 설정하며, 서브프로그램 루프를 가동하기 전에 정확한 좌표 매핑이 선행되어야 합니다.
- Mitsubishi 고속 고정밀 제어 III (G05 P20000): 미세 세그먼트 가공을 위한 고유의 선독(look-ahead) 경로 버퍼링을 활성화하며, 명령 충돌을 방지하기 위해 서브프로그램 호출과 격리된 독립적인 단독 블록으로 프로그램되어야 합니다.
결론
자동화 생산 라인의 비가동 시간 최소화와 일관된 반복 가공 정밀도 유지를 위해서는 서브프로그램 제어 정책의 표준화가 필수적이다. 모든 서브프로그램 복귀 코드(M99, M17, RET) 직전에는 절대 좌표계 복원(G90)과 가공 보정 취소(G40, G49) 명령을 명시적으로 포함하는 안전 블록을 Habit화해야 한다. 생산 준비 단계에서 하드웨어별 중첩(nesting) 제한을 확인하고, O8000/O9000 매크로 라이브러리의 편집 방지 파라미터 잠금을 확인하며, 외부 미디어 카드(SD/CF 카드)의 장착 상태 및 물리적 장치 번호를 대조하는 체크리스트를 실행하면 예기치 못한 불량률과 비계획 정지 위험을 근본적으로 제거할 수 있다.
자주 묻는 질문 (FAQ)
자동 반복 가공 중 메인 프로그램 복귀 시 공구 경로가 어긋나는 현상을 방지하려면 어떻게 해야 합니까?
이러한 현상은 서브프로그램 내부의 G91(증분 지령) 모달 설정이 취소되지 않고 메인 프로그램으로 블리딩되어 발생합니다. 실무 조치: 서브프로그램의 M99/M17 바로 앞줄에 항상 G90 G40 G49를 단독 블록으로 삽입하고, Siemens의 경우 SAVE 속성을 PROC 라인에 강제 적용하여 제어기 레벨에서 모달 상태를 자동 복원하십시오.
Fanuc 시스템에서 외부 메모리 카드나 데이터 서버를 이용한 M198 서브프로그램 호출 시 발생하는 비계획 정지를 없애려면 어떤 매개변수를 확인해야 합니까?
외부 장치 호출 시 M198 P 주소가 파일 번호를 뜻하는지 프로그램 번호를 뜻하는지에 대한 파라미터 매칭 불일치가 주된 원인입니다. 실무 조치: 3404#2(SBP) 파라미터를 확인하여 P 주소가 파일 번호(0)인지 프로그램 번호(1)인지 매칭하고, 메모리 카드 채널 번호(파라미터 20번)와 검색 경로 파라미터 3457이 올바른지 검증하십시오.
Mitsubishi 또는 Siemens 컨트롤러에서 서브프로그램 호출 중 중첩 레벨 초과 알람(P230 또는 14012)이 발생했을 때 해결 방법은 무엇입니까?
컨트롤러의 물리적 메모리 깊이 제한을 초과했거나 데이터 서버 호출 중 중복 M198을 호출하는 경우 발생합니다. 실무 조치: Mitsubishi M70V(8레벨) 및 M80V(10레벨) 또는 Siemens(11~16레벨)의 물리적 한계를 파악하고, 제어기가 백그라운드에서 실행하는 툴 체인저 매크로나 안전 ASUB 사이클의 점유 레벨을 감안하여 사용자 서브프로그램의 호출 깊이를 3레벨 이하로 재구조화하십시오.
아직 해결되지 않았나요?
이 주제에 대해 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 간섭 체크 설정 가이드: 10930 파라미터 구성
Fanuc CNC에서 3D 간섭 체크 기능을 활성화하기 위해 Parameter 10930#0 및 10930#5를 정확히 구성하고, Alarm PS0492를 해결하여 가공 비가동 시간을 단축하고 부품 불량률을 방지하는 실무 파라미터 설정 가이드입니다.
Fanuc CNC 커스텀 매크로 활성화 파라미터(0932 및 8135) 설정 가이드
Fanuc CNC 제어기에서 커스텀 매크로 활성화 파라미터인 0932 및 8135를 정확히 설정하고 공통 변수를 확장하여 Alarm 123 및 물리적 공구 충돌을 방지하고 설비 비가동 시간을 최소화하는 전문적인 기술 가이드입니다.
Fanuc 공구 수명 관리 파라미터 G10 L3 설정 가이드
Fanuc 공구 수명 관리 파라미터 6800#2 및 6810 설정 방법을 설명합니다. G10 L3 데이터 등록 중 발생하는 Alarm 159 및 156 오류를 방지하고 무인 자동화 라인의 비가동 시간과 불량률을 최적화하십시오.
Fanuc 리지드 태핑 최적 가속 파라미터 설정 가이드
Fanuc CNC에서 리지드 태핑 최적 토크 가속을 활성화하여 사이클 타임을 단축하고, 파라미터 11420#0 설정 및 1~4단 기어 가속 파라미터를 조정하여 서보 오차 알람 SP0741에 따른 가공 비가동 시간을 방지하는 방법을 알아봅니다.