Skip to main content
CNC.wiki

Fanuc, Siemens, Mitsubishi CNC 중첩 서브프로그램 가이드

Fanuc, Siemens, Mitsubishi CNC에서 중첩 서브프로그램을 설정하고 파라미터 3457 및 알람 0077, 14012, P230을 해결하여 가공 라인의 비계획 정지와 비가동 시간을 없애는 방법을 알아봅니다.

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

CNC CARE 공동 창업자

서론

서브프로그램의 복귀 블록(M99 또는 M17)을 읽기 전에 절대 좌표계(G90) 상태로 원상 복구하지 않고 증분 명령(G91)이나 좌표계 시프트가 활성화된 채 프로그램을 종료하면, 공구가 본래의 가공 경로에서 심각하게 이탈하여 터렛(turret)이나 스핀들(spindle)이 척(chuck), 바이스 조(vise jaw), 혹은 고정 클램프(clamp)와 강력하게 충돌하는 대형 사고가 발생한다. 특히 다중 호출이 발생하는 중첩 서브프로그램 환경에서 이와 같은 좌표 복구 누락은 물리적인 장비 파손으로 이어져 초경 공구를 완전히 손상시키고 스핀들의 정밀 정렬을 비틀어 놓는다. 이는 수천만 원 상당의 설비 손실뿐만 아니라 가공 중이던 제품을 즉각 불량으로 폐기하게 만들고, 결국 자동화 라인의 장시간 비가동 시간(downtime)을 초래하는 주된 원인이 된다. 연속적인 반복 가공의 안정성을 극대화하고 라인의 불량률을 예방하기 위해서는 각 CNC 컨트롤러별 중첩 서브프로그램의 동작 한계와 복귀 메커니즘을 완벽히 파악해야 한다.

기술 요약

기술 사양세부 정보
명령 코드Fanuc: M98, M198, M99
Siemens: 알파뉴메릭 이름, PROC, M17, RET
Mitsubishi: M98, M198, M99
모달 그룹 / 모달리티서브프로그램 호출 및 복귀 제어 / 모달 코드 (Modal-Code)
적용 브랜드Fanuc, Siemens, Mitsubishi
핵심 파라미터Fanuc: 3457 (검색 경로), 0010#4 (PRG9)
Siemens: SAVE 속성, VAR 키워드
Mitsubishi: #8876 (M198 장치), #8129 (검색 우선순위)
주요 제한 사항중첩 깊이: 최대 4레벨 (Fanuc), 최대 8/16레벨 (Siemens), 최대 8/10레벨 (Mitsubishi). 외장 M198/EXTCALL 중첩 호출 불가.

핵심 요약

  • 모달 상태 복원: 좌표 유출(bleeding)을 방지하기 위해 서브프로그램 복귀 블록 바로 직전에 절대 좌표(G90)를 명시적으로 복원하고 보정 취소 명령을 내리십시오.
  • 중첩 제한 경계: 중첩 호출은 하드웨어로 정의된 엄격한 깊이 제한 내에서 유지하십시오 (Fanuc은 최대 4레벨, Siemens는 8~16레벨, Mitsubishi는 8~10레벨).
  • 서브프로그램 파라미터 잠금: Fanuc에서 파라미터 0389#2 (PRG8) 및 0010#4 (PRG9)를 1로 설정하여 O8000 및 O9000 매크로 시리즈의 편집 권한을 잠그십시오.
  • 외장 미디어 호출: 내부 메모리 제약을 우회하기 위해 M198 (Fanuc/Mitsubishi) 또는 EXTCALL (Siemens)을 사용하여 메모리 카드나 데이터 서버에서 직접 대형 파일을 실행하십시오.
  • 직접 저장소 라우팅: 로컬 ,D 주소(0~4)를 사용하여 호출 블록 내에서 미쓰비시 서브프로그램을 특정 하드웨어 저장 매체로 직접 라우팅하십시오.
  • 자동 모달 저장: 좌표 프레임과 모달 G-코드를 자동으로 저장하고 복원하려면 Siemens PROC 헤더에 SAVE 속성을 선언하십시오.

기본 개념

중첩 서브프로그램을 사용할 때 얻을 수 있는 실제 프로그래밍 효과는 서브루틴을 서로의 내부에 적층함으로써 복잡하고 반복적인 공구 경로를 고도로 압축하고, 메모리 소비를 획기적으로 줄이며, 그리드 구멍 패턴이나 황삭 패스 같은 형상의 편집 작업을 단순화할 수 있다는 것이다. 메인 프로그램에서 동일한 기하학적 블록을 반복하는 대신, 개발자는 이러한 루틴을 독립형 파일로 한 번 작성하고 순차적으로 호출할 수 있다. 이러한 모듈식 구조는 프로그램 크기를 작게 유지하며, 프로그래머가 전체 마스터 파일을 수정하지 않고도 특정 가공 섹션을 업데이트할 수 있도록 지원한다. 서브프로그램을 처음 사용하는 경우, 기초적인 내용을 이해하기 위해 writing-and-calling-subprograms 가이드를 확인해 보십시오.

컨트롤 브랜드마다 이러한 하위 레벨 파일을 찾고, 호출하고, 실행하는 방식이 서로 다르다. 레거시 플랫폼은 엄격한 숫자 기반 O-번호 명명 규칙을 요구하는 반면, 현대식 제어 장치는 서술형 알파뉴메릭 이름을 지원한다. 또한 서브프로그램은 서로 다른 좌표에 걸쳐 모달처럼 실행되거나, 내부 메모리 한계를 완전히 우회하기 위해 외장 하드웨어 인터페이스로부터 동적으로 스트리밍될 수도 있다. 서브프로그램은 호출 프로그램의 활성 연장선으로 실행되므로 피드레이트(feedrate) 및 위치 결정 좌표와 같은 모달 상태가 레벨 간에 유동적으로 흐르게 되며, 좌표 유출을 피하기 위해 엄격한 프로그래밍 습관이 요구된다. 관련 사이클 기법은 g83-deep-hole-peck-drilling-cycleg84-g74-rigid-tapping 가이드를 참조하십시오.

명령 구조

중첩 서브프로그램 호출의 구문과 구조는 제어 장치의 인터프리터가 대상 프로그램 이름 또는 번호, 시작 블록 및 반복 횟수를 해석하도록 요구한다. 전통적인 환경에서 M98 명령은 점프를 개시하여 CNC 메모리에 저장된 서브프로그램으로 실행을 리디렉션한다. 인터프리터가 서브프로그램을 읽으면 블록을 순차적으로 실행한다. 서브프로그램의 끝에 도달하면 복귀 블록이 실행 포인터를 다시 호출 프로그램으로 되돌린다. 반복 횟수가 지정된 경우 인터프리터는 메인 프로그램 시퀀스를 재개하기 전에 명령된 횟수만큼 서브루틴을 루핑한다.

Siemens 제어 장치는 서브프로그램을 파일 이름으로 직접 호출하는 고도로 발전된 알파뉴메릭 명명 시스템을 적용한다. 지멘스 서브루틴은 고정된 O-번호에 의존하는 대신 PROC 헤더에 선언된 값 또는 참조로 전달된 파라미터를 수용할 수 있다. 지멘스 서브루틴으로부터의 복귀는 M17 또는 RET를 사용하여 종료된다. 반면 Fanuc과 Mitsubishi는 레거시 레지스터 아키텍처를 활용하므로 값을 전달하기 위해 매크로 옵션을 사용해야 하거나, 프로그래머가 휘발성 공통 또는 전역 변수에 의존해야 하는 제약이 있다. 파라미터 및 구문 주소는 제어 장치가 이러한 루틴을 검색, 반복 및 복귀하는 방식을 관리한다.

명령 구문 주소:

  • Fanuc 표준 호출: M98 P_ L_ ;
  • Fanuc 외장 호출: M198 P_ ;
  • Fanuc 복귀: M99 ;
  • Siemens 정의: PROC <program name> (<ParamType> <ParamName>, VAR <ParamType> <ParamName>) [SAVE]
  • Siemens 호출: <program name> (<Param1>, <Param2>) 또는 MCALL <program name>
  • Siemens 복귀: M17 또는 RET
  • Mitsubishi 표준 호출: M98 P__ H__ L__ ,D__ ; 또는 M98 <file name> H__ L__ ,D__ ;
  • Mitsubishi 외장 호출: M198 P__ L__ ; 또는 M198 <file name> L__ ;
  • Mitsubishi 복귀: M99 P__ ;
파라미터 / 주소제어 브랜드설명값 범위 / 설정
PFanuc / Mitsubishi호출할 서브프로그램의 프로그램 번호 식별자.최대 8자리
LFanuc / Mitsubishi서브루틴의 반복 실행 횟수.1 ~ 9999
HMitsubishi호출된 서브프로그램 내에서 시작할 시퀀스 번호 (N-번호).유효한 N-번호
,DMitsubishi파일 검색을 위한 명시적 장치 번호 라우팅.0 ~ 4
<file name>Mitsubishi서브프로그램 파일의 직접적인 알파뉴메릭 이름 호출.최대 32자
PROC 파라미터 유형Siemens서브루틴이 허용하는 데이터 유형 (예: REAL, INT, CHAR, BOOL).표준 변수 유형
VARSiemens파라미터가 참조로 전달됨을 선언하는 키워드.키워드
SAVESiemens활성 모달 설정 및 프레임을 저장하고 복원하는 속성.속성 플래그

브랜드별 응용

Fanuc CNC 통합

Fanuc의 중첩 서브프로그램 환경은 액세스 및 안전을 관리하기 위해 파라미터 구동 메커니즘을 사용합니다. 이 시스템에서 파라미터 0010#4 (PRG9)는 9000계열 매크로 프로그램에 대한 액세스를 제한하며, 파라미터 0389#2 (PRG8)는 8000계열 프로그램에 대해 동일한 기능을 수행합니다.

표준 중첩 서브루틴을 호출하려면 프로그래머는 프로그램 번호와 루프를 지정하여 M98 P1000 L5 ;와 같이 M98 블록을 작성합니다. 외장 루틴은 M198 P50 ;을 사용하여 스트리밍되며, 서브프로그램은 M99 ;로 종료됩니다.

유형이름 / 코드설명 및 설정
Parameter0010#4 (PRG9)1로 설정 시 서브프로그램 O09000~O09999의 편집을 금지함 (0일 때는 금지되지 않음).
Parameter0389#2 (PRG8)1로 설정 시 서브프로그램 O08000~O08999의 편집을 금지함 (0일 때는 금지되지 않음).
Parameter3404#2 (SBP)M198 블록의 주소 P가 파일 번호(0)를 가리키는지 또는 프로그램 번호(1)를 가리키는지 지정.
Parameter6005#0 (SQC)서브프로그램 시퀀스 번호 호출이 사용되지 않는지(0) 또는 사용되는지(1) 결정.
Parameter3457파일을 검색하기 위해 폴더 계층 구조 검색 경로(LIB, MC1/MC2, SYS 폴더)를 구성.
Alarm0077TOO MANY SUB, MACRO NESTING: 중첩 깊이가 한계를 초과했거나 외장 M198 중첩 호출이 발생함.
Alarm1080DUPLICATE DEVICE SUB PROGRAM CALL: 활성 M198 프로그램 내부에서 중복 외장 장치 호출(M198)이 발생함.
Alarm1091DUPLICATE SUB-CALL WORD: 동일한 블록 내에 여러 개의 서브프로그램 호출 단어가 발견됨.
Alarm0076PROGRAM NOT FOUND: 호출된 서브프로그램 번호를 메모리나 폴더 경로에서 찾을 수 없음.
Version0001#1 (FCV)레거시 테이프 호환성. 1로 설정하면 P-코드를 구문 분석하여 반복 횟수와 프로그램 번호를 결합함.

경고: M99 명령 전에 증분 위치 결정에서 절대 위치 결정으로 복귀하는 것을 누락하면 좌표 오프셋 드리프트가 발생하여 물리적 장비 충돌로 이어집니다.

Siemens SINUMERIK 통합

Siemens SINUMERIK 시스템은 숫자 방식의 O-번호를 사용하지 않고 서브루틴을 알파뉴메릭 이름으로 직접 호출합니다. 서브루틴 선언부에서 PROC 명령을 사용하여 프로그램 파라미터를 이들 서브루틴에 전달할 수 있습니다.

서브프로그램을 이름으로 호출하려면 SUB_NAME(parameters) 형식을 사용합니다. 복귀 블록은 M17 또는 RET로 작성되며, RET를 사용하면 RET("N200", 2) ;와 같이 여러 레벨을 한 번에 점프해 복귀할 수 있습니다.

유형이름 / 코드설명 및 설정
ParameterPROC 파라미터 유형서브프로그램이 수용하는 형식 파라미터 데이터 유형 (예: REAL, INT, CHAR, BOOL).
ParameterVAR형식 파라미터가 값이 아닌 참조로 전달됨을 선언하는 키워드.
ParameterSAVE복귀 시 모달 G-코드 및 좌표 프레임을 자동으로 저장하고 복원하는 속성.
Alarm14012Maximum subroutine level exceeded: 중첩 깊이 초과 (808D의 경우 8레벨, 840D/828D의 경우 16레벨).
Alarm14011Program not existing or will be edited: 서브프로그램 파일이 유실되었거나 현재 HMI 에디터에 열려 있음.
Alarm14013Number of subroutine passes invalid: 서브루틴 반복 횟수가 잘못되었거나 범위를 벗어남.
Version808D vs 828D/840D slSINUMERIK 808D는 중첩을 8레벨로 제한하는 반면, 828D 및 840D sl은 최대 16레벨까지 지원합니다.

경고: 현재 HMI에서 편집 중인 활성 서브프로그램 파일을 호출하면 즉시 알람 14011이 트리거되고 장비가 정지합니다.

Mitsubishi CNC 통합

Mitsubishi 제어 장치는 호출 블록 내에서 직접적인 물리 저장 매체 라우팅을 지원합니다. 프로그래머는 파라미터 #8876 및 #8880을 설정하여 장치 대상지를 로컬 ,D 주소에 매핑합니다.

시퀀스 시작 블록 N100을 사용해 카드 리더기에서 서브프로그램을 호출하려면 M98 <PATTERN.PRG> H100 ,D1 ;와 같이 작성합니다. 호출 프로그램으로의 복귀는 M99 ;를 통해 종료됩니다.

유형이름 / 코드설명 및 설정
Parameter#8876M198 외장 서브프로그램 호출을 위한 저장 장치 구성 (G=HD, R=M-Card, D=Server, N=USB).
Parameter#8880 to #8884장치 대상을 주소 ,D0부터 ,D4에 매핑 (M=Memory, E=Memory 2, G=HD, R=M-Card, D=Server).
Parameter#8129서브프로그램 검색 우선순위 (0=지정된 프로그램 번호, 1=4자리 O-번호, 2=8자리 O-번호).
AlarmP230Subprogram nesting over: 중첩 깊이를 초과했거나 데이터 서버 프로그램 내부에서 M198 호출이 수행됨.
AlarmP231No sequence No.: 복귀 블록 시퀀스 번호 대상(M99 P)을 호출 프로그램 내에서 찾을 수 없음.
AlarmP232No program No.: 지정된 장치에서 명령된 프로그램 번호 또는 꺾쇠괄호 파일 이름을 찾을 수 없음.
VersionM70V vs M80VM70V/M700V 시리즈는 최대 8레벨 깊이까지 중첩을 지원하는 반면, 최신 M80V/M800V는 최대 10레벨까지 지원합니다.
VersionM800VW vs M800VS파라미터 #8876이 공란인 경우, M800VW/M80VW는 데이터 서버를 기본값으로 사용하고, M800VS/M80V는 전면 SD 카드를 기본값으로 사용합니다.

경고: 가공 도중 외장 저장소와의 연결이 끊어지면 P232 알람이 트리거되어 사이클 도중에 위험한 비상 정지가 발생합니다.

브랜드 비교

비교 항목FanucSiemensMitsubishi
서브프로그램 호출 명령M98 (내부), M198 (외장)알파뉴메릭 프로그램 이름 또는 CALL / PCALL / MCALLM98 (내부/외장), M198 (외장)
복귀 명령M99M17 또는 RETM99
알파뉴메릭 이름 지원 여부— (no source)예 (직접 이름 지정)예 (<filename> 구문 사용)
최대 중첩 깊이4레벨 (매크로 포함 시 8레벨)8레벨 (808D), 16레벨 (840D sl / 828D)8레벨 (M70V), 10레벨 (M80V)
파라미터 전달 기능— (no source)예 (PROC에 선언된 로컬 파라미터)— (no source)
호출 시 저장 매체 선택글로벌 검색 폴더 파라미터 (3457)경로 검색 / 메모리예 (블록 내 ,D 장치 주소 사용)
복귀 시 모달 복원 여부수동 복원자동 (PROCSAVE 속성 사용)수동 복원

기술 분석

이 세 가지 CNC 아키텍처를 분석적으로 검토하면 서브프로그램 실행, 메모리 가동 범위(scope), 파라미터 전송에 대한 서로 다른 접근 방식을 확인할 수 있다. 지멘스는 상위 PC 프로그래밍 언어를 모델로 실행 방식을 설계하여, 프로그래머가 서브프로그램 헤더에 로컬 가동 범위와 파라미터 전달 메커니즘을 직접 정의할 수 있도록 한다. PROC 선언부에서 VAR 키워드를 사용함으로써 지멘스는 참조에 의한 호출(call-by-reference) 실행을 활성화하여 서브프로그램이 연산 결과를 수정하고 부모 프로그램으로 되돌릴 수 있도록 지원한다. 반면 화낙과 미쓰비시는 레거시 레지스터 아키텍처를 사용하므로 값을 전달하기 위해 G65 또는 G66과 같은 매크로 옵션을 사용해야 하거나, 프로그래머가 휘발성 공통 또는 전역 변수에 의존하도록 강제되어 모달 데이터 오염의 위험이 존재한다. 중첩 계층 구조 또한 상이한 하드웨어 철학을 반영한다. 화낙의 4레벨 중첩 제한은 프로그래머가 단순하고 얕은 호출 트리를 유지하도록 유도한다. 지멘스는 최대 16레벨의 중첩을 제공하지만, 이들 레벨이 사용자 서브프로그램, 표준 가공 사이클, 제조업체 OEM 백그라운드 루틴(스핀들 속도 클램프 또는 터렛 제어 매크로 등) 간에 동적으로 공유되기 때문에 이 자원이 빠르게 소진될 수 있다. 미쓰비시는 절충적인 위치로 레거시 M70V 시리즈에서 8레벨, 최신 M80V 제어 장치에서 10레벨을 제공한다. 어떠한 제어 시스템이든 이 제한을 초과하면 즉시 실행이 중단되므로 모든 활성 시스템에서 호출 깊이를 사전에 추적하는 것이 필수적이다. 디렉토리 라우팅 및 안전 제어 부분도 이들 플랫폼을 구별하는 기준이 된다. 화낙은 3457번 파라미터를 사용하여 규격화되고 자동화된 폴더 계층 구조를 검색하는 반면, 미쓰비시는 ,D 주소 또는 <PART.PRG>와 같은 꺾쇠괄호 파일 이름을 통해 직접적인 물리 경로 지정을 허용한다. 지멘스는 EXTERN 선언이 없는 한 서브프로그램 호출을 로컬 공작물 디렉토리로 격리한다. 또한 지멘스는 호출된 파일이 화면에 열려 있을 경우 NC 스타트를 차단하는 HMI 편집 안전 잠금 장치(버전 5 이상)를 적용하고 있으나, 이 기능은 화낙이나 미쓰비시 시스템에는 기본적으로 존재하지 않는다.

프로그램 예제

Fanuc Nested Subprogram Example

이 예제는 반복적인 좌표 이동 절삭을 수행하기 위해 메인 프로그램(O0001)이 중첩 서브프로그램(O1000)을 5회 호출하는 과정을 보여줍니다.

O0001 (MAIN PROGRAM) ;
"
"G90 G54 G00 X0 Y0 Z10.0 ; 공작물 절대 원점으로 축 사전 위치 결정
"
"M98 P1000 L5 ; 서브프로그램 O1000을 5회 순차적으로 호출
"
"G00 Z50.0 M30 ; Z축 후퇴 및 메인 프로그램 종료 ;

" "O1000 (SUBPROGRAM) ; " "G91 G01 Z-2.0 F150 ; 증분 모드로 전환, Z축을 2.0 mm 하향 이송 " "G90 G01 X50.0 F300 ; 절대 위치 결정으로 복귀, X축을 50.0 mm로 이송 " "G91 G01 Z2.0 ; 2.0 mm 증분 Z축 후퇴 " "G90 G01 X0 ; 절대 X 원점 복귀 " "M99 ; 메인 프로그램으로 제어 복귀

공운전 (dry run)

공운전 (dry run) 진행 중, Fanuc 제어 장치는 절대 위치 결정 모드에서 장비 축을 X0, Y0, Z10.0으로 이동합니다. M98 P1000 L5를 읽으면 서브루틴 O1000으로 점프합니다. O1000에서 제어 장치는 증분 모드(G91)로 전환하여 Z축을 2.0 mm 플런지한 다음 절대 모드(G90)로 복귀하여 X50.0까지 절삭합니다. Z축을 2.0 mm 증분 후퇴시킨 후, 공구는 절대 모드에서 X0으로 돌아갑니다. 제어 장치는 이 전체 서브프로그램 루프를 총 5회 실행하여 Z축 총 증분 깊이를 10.0 mm로 누적합니다. 그 후 메인 프로그램으로 복귀하여 Z50.0으로 후퇴하고 M30을 통해 사이클을 종료합니다.

Siemens Alphanumeric Subprogram Example

이 프로그램은 PROC 헤더에서 파라미터 전달과 함께 Siemens 알파뉴메릭 호출 규칙을 사용하고, SAVE 속성을 통해 좌표계를 자동으로 보호합니다.

; 메인 프로그램 (MAIN_PROG.MPF)
"
"N10 G90 G54 G00 X0 Y0 Z10.0 ; 공구를 절대 원점으로 사전 위치 결정
"
"N20 MCALL CUT_POCKET(3.0, 150.0) ; 서브루틴 CUT_POCKET을 모달로 등록
"
"N30 X50.0 Y50.0 ; 좌표 1에서 서브프로그램을 자동으로 실행
"
"N40 X100.0 Y50.0 ; 좌표 2에서 서브프로그램을 자동으로 실행
"
"N50 MCALL ; 모달 서브프로그램 호출 해제
"
"N60 G00 Z50.0 M30 ; Z축 후퇴 및 메인 프로그램 종료 ;

" "; 서브프로그램 CUT_POCKET.SPF (SPF 디렉토리에 저장됨) " "PROC CUT_POCKET(REAL DEPTH, REAL FEED) SAVE DISPLOF ; " "G91 G01 Z=-DEPTH F=FEED ; DEPTH 파라미터 기준 증분 플런지 " "G90 G01 G41 X0 Y0 ; 공구 반경 보정 활성 상태로 절대 위치 결정 " "G03 X0 Y0 CR=25.0 ; 원형 포켓 프로파일 보간 " "G40 G01 X0 Y0 ; 공구 반경 보정 취소 " "G91 G01 Z=DEPTH ; Z축의 증분 후퇴 " "M17 ; 서브루틴 종료 및 제어 복귀

공운전

지멘스 프로그램의 공운전에서 제어 장치는 먼저 X0, Y0, Z10.0으로 절대 위치 결정을 실행합니다. 블록 N20의 MCALL 명령은 CUT_POCKET을 모달 서브루틴으로 등록합니다. N30(X50.0 Y50.0)으로 이동하면 축을 위치시키고 잠시 멈춘 다음 파라미터 값 3.0 및 150.0을 사용하여 서브루틴을 호출합니다. 서브루틴은 상위 프로그램의 활성 절대 상태를 캡처하는 SAVE 속성 하에서 실행을 시작합니다. 증분 이동을 사용하여 포켓 절삭을 수행하고 후퇴한 뒤 M17을 통해 복귀합니다. 제어 장치는 절대 G90 상태를 자동으로 복원하고 N40(X100.0 Y50.0)으로 진행하여 이 과정을 반복합니다. 마지막으로 블록 N50은 Z축이 50.0 mm로 후퇴하고 M30으로 끝나기 전에 모달 루틴 호출을 취소합니다.

Mitsubishi Alphanumeric Subprogram Example

이 프로그램은 ,D 파라미터 주소를 사용하여 특정 저장 장치에서 알파뉴메릭 파일 이름을 호출하는 Mitsubishi의 기능을 보여줍니다.

O0002 (MAIN PROGRAM) ;
"
"G90 G54 G00 X0 Y0 Z10.0 ; 공구를 공작물 절대 원점으로 사전 위치 결정
"
"M98 <ROUGH-CUT.PRG> H200 L3 ,D1 ; 시퀀스 N200부터 시작하여 장치 1에서 ROUGH-CUT.PRG 파일 호출
"
"G00 Z50.0 M30 ; 후퇴 및 메인 프로그램 종료 ;

" "; ROUGH-CUT.PRG (CF 카드 - 장치 1에 저장됨) " "O2000 (SUBPROGRAM) ; " "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 ; 2.0 mm 증분 Z축 후퇴 " "N500 G90 G01 X0 Y0 ; 절대 X0 Y0 위치로 복귀 " "M99 ; 메인 프로그램으로 제어 복귀

공운전

미쓰비시 시스템의 공운전 중에 공구는 X0, Y0, Z10.0에 사전 위치 결정됩니다. M98 블록을 실행할 때 제어 장치는 장치 1(CF 카드)에 액세스하여 ROUGH-CUT.PRG 파일을 엽니다. 주소 H200으로 지정된 대로 서브루틴에서 블록 N200을 검색합니다. 블록 N100은 완전히 우회됩니다. 실행은 증분 Z 이동과 함께 N200에서 시작되며, 절대 프로파일링 절삭이 이어집니다. 그 후 공구는 후퇴하고 절대 좌표로 돌아가 M99 블록을 만납니다. 제어 장치는 Z축을 후퇴시키고 M30을 통해 종료하기 위해 메인 프로그램으로 돌아가기 전에 이 루프를 세 번 반복합니다.

오류 분석

브랜드알람 코드발생 조건작업자 관찰 증상원인 및 조치 방법
Fanuc0076호출된 프로그램 번호가 메모리 또는 검색 폴더에 존재하지 않는 경우.장비가 즉시 정지하며 화면에 "PROGRAM NOT FOUND" 에러 메시지를 표시합니다.3457번 파라미터의 폴더 경로를 확인하고 O-번호 파일이 메모리에 있는지 검증합니다.
Fanuc0077서브프로그램 또는 매크로 중첩 깊이가 최대 허용 제한을 초과하는 경우.CNC가 사이클 도중에 정지하며 "TOO MANY SUB, MACRO NESTING" 에러를 출력합니다.실행 중첩 수준이 4레벨(매크로 호출 포함 시 8레벨)을 초과하지 않는지 확인합니다.
Fanuc1080활성 M198 서브프로그램 내에서 중첩 M198 외장 장치 호출이 실행된 경우.제어 장치가 실행을 중단하고 화면에 "DUPLICATE DEVICE SUB PROGRAM CALL" 에러를 표시합니다.M198 중첩 호출을 피하십시오. 보조 서브루틴을 내부 SRAM 메모리로 전송합니다.
Fanuc1091동일한 NC 블록 내에 여러 개의 서브프로그램 호출 명령이 지정된 경우.인터프리터가 정지하고 "DUPLICATE SUB-CALL WORD" 에러를 출력합니다.각 서브프로그램 호출 명령을 독립된 개별 블록으로 분리합니다.
Siemens14011호출된 서브루틴이 유실되었거나, 릴리즈되지 않았거나, 편집을 위해 열려 있는 경우.제어 장치가 실행을 정지하고 "program not existing or will be edited" 메시지를 표시합니다.HMI에서 파일을 닫아 편집 잠금을 해제합니다. _N_SPF_DIR 경로에 파일이 있는지 확인합니다.
Siemens14012프로그램 레벨의 중첩 깊이 한계가 초과된 경우.시스템이 "maximum subroutine level exceeded" 메시지를 출력하고 정지합니다.중첩 레벨을 검토합니다. Siemens canned 사이클은 최대 3레벨을 소모하므로 주 프로그램의 호출은 12레벨 이하에서 구성되어야 합니다.
Siemens14013서브루틴의 반복 실행 횟수가 잘못 지정되었거나 범위를 벗어난 경우.제어 장치가 실행을 거부하며 "Number of subroutine passes invalid"를 표시합니다.서브루틴 호출 블록의 반복 횟수(passes) 값을 확인하고 수정합니다.
MitsubishiP230서브프로그램 중첩 깊이를 초과했거나 데이터 서버 프로그램 내에서 M198 호출이 이루어진 경우.제어 장치가 정지하고 화면에 "Subprogram nesting over" 에러를 표시합니다.중첩 깊이가 8레벨(M70V) 또는 10레벨(M80V)을 초과하지 않는지 검증하고 M198 호출 구조를 재조정합니다.
MitsubishiP231복귀 대상지로 지정된 시퀀스 번호를 호출 프로그램 내에서 찾을 수 없는 경우.인터프리터에 결함이 발생하고 "No sequence No." 에러를 표시합니다.M99 블록의 P 뒤에 프로그래밍된 시퀀스 번호가 호출 프로그램에 존재하는지 확인합니다.
MitsubishiP232지정된 장치에서 해당 프로그램 번호 또는 파일 이름을 찾을 수 없는 경우.실행이 중단되고 "No program No." 에러를 화면에 출력합니다.장착 장치의 슬롯 삽입 상태, 주소 파라미터 매핑 상태, 그리고 파일 이름이 32자 미만인지 검증합니다.

실무 응용 가이드

작업자가 SINUMERIK HMI 에디터 창에 가공 프로그램을 열어둔 채 라인을 기동하여 알람 14011(program not existing or will be edited)을 트리거하는 실수는 자동화 설비의 생산 흐름을 끊는 대표적인 비계획 정지 원인이다. 마찬가지로 Fanuc의 3457번 파라미터를 사전 확인하면 이 명령어에서 가장 빈번한 비계획 정지를 없앨 수 있다. 이 검색 경로 파라미터가 유효한 라이브러(LIB)나 장비 제조사 전용 폴더(MC1/MC2)를 가리키지 않으면, 컨트롤러는 외부 서브프로그램 호출 시 즉각 0076 알람을 띄우고 서보 모터를 비상 정지시킨다. 또한, Mitsubishi CNC에서 외장 CF 카드나 USB 장치 인덱싱을 위한 #8880~#8884 파라미터를 잘못 지정하거나 접촉 불량으로 인해 장치가 분리되면 P232 알람이 발생하여 실시간 가공 중에 장비가 급정거하게 된다. 이러한 급정거는 가공 중인 공작물 표면에 단차를 발생시켜 불량률을 높이고 스핀들 베어링에 지속적인 충격을 준다. 따라서 자동화 라인의 다축 설비를 안전하게 관리하려면 제어 장치별 파라미터 잠금을 철저히 검증해야 한다. Fanuc의 경우 0010#4(PRG9) 및 0389#2(PRG8) 파라미터를 1로 설정하여 작업자가 장비 내부에 보관된 8000번 및 9000번 계열의 툴 체인지 및 자동 측정 매크로 코드를 임의로 수정할 수 없도록 물리적인 잠금 조치를 취해야 한다. Siemens 환경에서는 nested 서브프로그램 선언 시 PROC ... SAVE 속성을 반드시 기입하여 프로그램 복귀 시 원래의 작업 평면과 absolute 좌표계가 자동으로 복원되도록 설계해야 좌표 오프셋 누적에 따른 터렛 충돌 사고를 원천적으로 방지할 수 있다.

관련 명령 구조

  • writing-and-calling-subprograms: 단일 프로그램에서 모듈식 호출로의 전환을 통해 서브루틴 구조화의 핵심 논리를 확립합니다.
  • g83-deep-hole-peck-drilling-cycle: 심공 그리드 패턴 가공을 위해 커스텀 서브프로그램 내에 중첩 배치할 수 있는 심구멍 펙 드릴링 canned 사이클을 호출합니다.
  • g84-g74-rigid-tapping: 다중 좌표 위치에서 탭 가공을 자동화하기 위해 중첩 서브루틴 내에서 리지드 태핑 사이클을 호출합니다.
  • G65 단순 매크로 호출: 서브프로그램 호출과 유사하지만 파라미터 전달 기능을 포함하여 로컬 변수를 매크로 레지스터로 전달하며 단일 블록으로 매크로 프로그램을 실행합니다.
  • G66 모달 매크로 호출: 취소되기 전까지 이후의 모든 모션 블록 뒤에 매크로 서브루틴을 모달 형태로 실행하도록 제어 장치에 지시합니다.

결론

이 파라미터를 검증하지 않고 양산에 들어가면, 팔레트 교환 후 두 번째 사이클부터 치수 편차가 누적되어 최종 검사에서 불량이 발견된다. 자동화 가공 라인에서 다중 호출 서브프로그램을 성공적으로 통합하기 위한 최선책은 각 장비의 물리적 메모리와 검색 우선순위(Mitsubishi의 #8129 등)를 기계 셋업 단계에서 일관되게 정렬하는 것이다. 작업 표준 매뉴얼에 서브프로그램 복귀 직전 모달 좌표 리셋(G90, G40)을 의무화하고, 장비별 고유의 중첩 레벨(Fanuc 4레벨, Mitsubishi 10레벨 등)을 사전에 확인하여 버퍼 오버플로우로 인한 불필요한 라인 정지를 완전히 차단해야 생산 안정성과 설비 가동률을 극대화할 수 있다.

자주 묻는 질문 (FAQ)

자동화 라인에서 Fanuc M198 외장 호출 실행 시 1080 알람이 발생하는 원인은 무엇입니까?

이 알람은 외장 미디어(PCMCIA 카드 또는 데이터 서버)를 통해 스트리밍 가공 중인 프로그램 내부에서 또 다른 M198 명령을 중첩 호출했을 때 발생합니다. Fanuc은 외장 호출의 다중 중첩을 차단하므로, 한 번의 M198 호출 내에서는 추가적인 외부 호출을 가동할 수 없습니다. 실무적 조치: 중첩되어 호출되는 서브프로그램 파일을 CNC 본체 메모리(SRAM)로 이동시키고, 프로그램 호출 명령을 M98로 변경하여 내부에서 처리하십시오.

지멘스 컨트롤러에서 복잡한 가공 사이클 실행 중 14012 알람으로 라인이 정지하면 어떻게 해결합니까?

알람 14012는 서브프로그램의 최대 중첩 깊이(808D는 8레벨, 840D는 16레벨)를 초과할 때 유발됩니다. 지멘스의 내장 가공 사이클(ShopMill 등)은 내부적으로 최대 3단계의 호출 레벨을 소모하므로, 사용자 프로그램의 중첩 단계가 12단계 이상일 때 충돌이 발생합니다. 실무적 조치: 호출 구조를 평탄화하여 중첩 단계를 줄이거나, 사이클 호출이 들어가는 주 프로그램을 12레벨 이하의 상위 단계에서 실행되도록 코드 아키텍처를 재설계하십시오.

미쓰비시 CNC에서 다중 팔레트 반복 가공 중 P232 알람이 발생하여 설비가 정지할 때 조치법은 무엇입니까?

P232 프로그램 오류는 M98 명령에 포함된 파일 이름 또는 지정된 장비 번호(,D)가 데이터 서버나 CF 카드 등의 실물 매체 내부 경로와 일치하지 않거나 통신 연결이 일시적으로 분리되었을 때 발생합니다. 이는 물리적 매체의 기계적 고정 불량이나 케이블 노이즈 등으로 인해 발생할 수 있습니다. 실무적 조치: 가공 시작 전에 메모리 카드 카드의 삽입 상태를 점검하고, 컨트롤러의 #8880~#8884 파라미터가 장착된 슬롯 번호와 물리적으로 일치하는지 확인해 보십시오.

아직 해결되지 않았나요?

이 주제에 대해 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의 공동 창업자로서 활동을 이어가고 있습니다.

관련 기사

이 주제에 관한 다른 기사