서브프로그램(Subprogram) 정의와 CNC 컨트롤에서의 활용
다른 프로그램의 제어 섹션에 의해 반복적으로 호출될 수 있는 프로그램입니다.
서브프로그램(Subprogram) 상세 설명
정의
서브프로그램은 메인 프로그램 내에서 M98 코드(또는 컨트롤러별 전용 코드)로 호출되어 실행되는 독립적인 프로그램 단위입니다. 메인 프로그램과 별도의 프로그램 번호(O번)를 가지며, 실행 후 메인 프로그램의 다음 블록으로 복귀합니다.
주요 특징
- 재사용성: 동일 가공 패턴(포켓, 홀 패턴, 나사 가공 등)을 여러 위치에 적용 시 코드 중복 방지
- 모듈화: 복잡한 가공 시퀀스를 기능별로 분리하여 가독성/유지보수성 향상
- 중첩 호출: 서브프로그램 내에서 또 다른 서브프로그램 호출 가능 (중첩 레벨 제한 있음, 통상 4~8단계)
- 매개변수 전달: Fanuc 등에서 G65/G66(매크로 호출) 시 인수 전달 가능
호출 코드 비교 (주요 컨트롤러)
| 컨트롤러 | 서브프로그램 호출 | 반복 호출 | 복귀 코드 |
| Fanuc | M98 P(프로그램번호) L(반복횟수) | L값 지정 | M99 |
| Siemens | CALL PNAME / EXTCALL | MCALL / LOOP | RET / M17 |
| Heidenhain | CALL LBL / LBL SET | REPEAT | LBL 0 |
| Mitsubishi | M98 P(프로그램번호) | L(반복횟수) | M99 |
| Haas | M97 (로컬) / M98 (외부) | L(반복횟수) | M99 |
활용 예시
(메인 프로그램)
O0001
G54 G90 G00 X0 Y0
M98 P1001 L4 (1001번 서브 4회 반복 호출)
G00 Z100
M30
(서브프로그램 - 4개 홀 가공 패턴)
O1001
G91 G81 X50 Y0 Z-20 R5 F100 (상대 위치 홀 가공)
G90
M99
주의사항
- 서브프로그램 끝에는 반드시 복귀 코드(M99 등) 필수
- 중첩 깊이 초과 시 알람 발생 - 컨트롤러별 제한 확인
- 메인/서브 간 변수(#100~#999) 공유 범위 컨트롤러별 상이
- 서브프로그램 내 M30 사용 금지 (메인 프로그램 종료 유발)