CNC Path Analyzer

M98·M99 서브프로그램: 반복 형상을 한 번만 쓰고 여러 번 호출하기

M98로 서브프로그램을 호출하고 M99로 돌아오는 구조, P 번호와 반복 횟수 L, 증분 서브프로그램으로 같은 홈을 여러 위치에 가공하는 방법, 호출 오류 유형을 예제로 설명합니다.

왜 서브프로그램을 쓰나

같은 홈을 다섯 군데 파거나, 같은 윤곽을 깊이만 바꿔 여러 번 깎는 일은 흔합니다. 매번 같은 블록을 복사해 붙이면 프로그램이 길어지고, 치수 하나를 고칠 때 다섯 군데를 모두 고쳐야 합니다. 하나라도 빠뜨리면 다섯 개 중 하나만 치수가 다른 불량이 됩니다.

서브프로그램은 반복되는 부분을 별도 프로그램으로 떼어 두고, 메인 프로그램에서 필요할 때 불러 쓰는 구조입니다. 형상은 한 곳에서만 관리되고 메인 프로그램은 “어디서, 몇 번”만 말하면 됩니다.

호출과 복귀

지령의미예제
M98 P_P 번호(O번호)의 프로그램을 호출M98 P3100
L_ 또는 P 앞자리반복 횟수L3 → 3회
M99호출한 블록 다음 줄로 복귀O3100 마지막 줄
M99 P_복귀하되 지정한 시퀀스 번호로 이동분기·반복 구조에 사용

예제: 증분 서브프로그램으로 홈 세 개

서브프로그램 O3100은 G91 증분으로 적혀 있습니다. 현재 위치에서 6mm 내려가 X로 30mm 홈을 파고, 6mm 올라온 뒤 시작 X로 돌아가면서 Y로 10mm 옮겨 갑니다. 끝난 위치가 다음 반복의 시작 위치가 되므로, 같은 호출을 세 번 반복하는 것만으로 10mm 간격의 홈 세 개가 생깁니다.

O3100 서브프로그램을 L3으로 세 번 호출해 10mm 간격 홈 세 개를 가공

O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99
O3100 서브프로그램을 L3으로 세 번 호출해 10mm 간격 홈 세 개를 가공 — XY 경로XY
점선·연한 파랑은 G00 급속, 주황 실선은 절삭 이동입니다. 원호는 계산된 곡선을 정적 그림으로 펼쳤습니다.

위 그림은 이 프로그램을 CNC Path Analyzer로 해석한 결과입니다 (급속 8 구간, 직선 절삭 6 구간).

메인 프로그램에서 지킬 규칙

  • 모드 되돌리기: 서브프로그램이 G91 상태로 끝나므로, 복귀 직후 메인에서 G90을 다시 지령합니다. 예제의 G90 G00 Z50.이 그 역할입니다. G90 없이 Z50.만 적으면 “높이 50”이 아니라 “현재보다 50mm 위”로 해석됩니다. 이번에는 위로 가는 이동이라 큰 문제가 없지만, 다음 공구의 접근 블록이었다면 충돌로 이어질 수 있습니다.
  • 시작 위치: 증분 서브프로그램은 호출 당시의 위치에 따라 결과가 달라집니다. 호출 직전에 절대 좌표로 시작 위치를 분명히 지령합니다.
  • 보정과 사이클 상태: 공구경 보정이나 고정 사이클이 켜진 채 호출하면 서브프로그램 안의 이동이 예상과 다르게 해석될 수 있습니다. 호출 전후의 모달 상태를 의식적으로 정리합니다.
  • M30 위치: 같은 파일에 서브프로그램을 둘 때는 메인 프로그램의 M30 뒤에 둡니다. 메인이 M30에서 끝나므로 서브프로그램이 실수로 실행되지 않습니다.

반복 횟수와 사이클 시간 계산

서브프로그램 한 번의 절삭 이동은 Z 6mm(F100)와 X 30mm(F300)입니다. 각각 3.6초와 6초로, 한 번에 9.6초, 세 번이면 약 29초가 순수 절삭 시간입니다. 반복 횟수를 L5로 바꾸면 메인 프로그램 한 글자만 고쳐서 홈 다섯 개, 절삭 약 48초가 됩니다. 반복 구조가 프로그램 수정과 시간 견적을 함께 단순하게 만든다는 점을 보여 줍니다. 계산 방법은 가공 시간 계산에서 더 자세히 다룹니다.

호출 오류의 종류

도구에서는 메인 프로그램과 별도 파일로 된 호출 프로그램을 함께 불러올 수 있으며, P 번호는 파일 이름이 아니라 파일 안의 O번호로 연결됩니다.

오류원인CNC Path Analyzer 표시
호출 대상 없음P 번호와 같은 O번호 프로그램이 없음호출 행과 찾지 못한 번호
O번호 중복같은 번호의 프로그램이 둘 이상어느 쪽을 쓸지 확정할 수 없다는 경고
M99 누락서브프로그램이 끝나지 않고 다음 프로그램으로 이어짐복귀 누락 경고
무한 호출서로를 계속 호출하거나 자기 자신을 호출재귀·실행 한도 초과로 계산 중단

자주 묻는 질문

서브프로그램 안에서 또 서브프로그램을 부를 수 있나요?
네. 이를 중첩 호출이라고 하며, 허용 단계 수(보통 4단계 이상)는 제어기마다 다릅니다. 단계가 깊어질수록 모달 상태 추적이 어려워지므로 2단계 이내로 쓰는 것을 권합니다.
M98과 G65 매크로 호출은 무엇이 다른가요?
G65는 인수(A, B, C…)를 변수로 넘겨 호출하는 매크로 호출입니다. 같은 형상을 치수만 바꿔 부를 때 쓰며, M98은 인수 없이 같은 동작을 반복합니다.

다음 단계

CNC Path Analyzer 도구에서 경로 확인하기