CNC 프로그램과 NC코드 G코드 M코드 이해하기
CNC는 컴퓨터로 공작기계를 제어하는 방식이고, NC코드는 그 기계가 읽는 명령 프로그램입니다. G코드는 이동·좌표·보정·가공 모드를, M코드는 주축·절삭유·공구교환 같은 보조 동작을 지정합니다. 같은 코드라도 밀링과 선반, 제어기와 기계 제작사에 따라 의미가 달라질 수 있습니다.
처음에는 G00, G01 같은 번호를 외우게 되지만, 실제로 코드를 읽을 때 더 중요한 것은 지금 어떤 모드가 유지되고 있는가입니다.
그래서 저라면 한 줄씩 번역하기 전에 단위, 좌표 기준, 공구 보정, 이송 모드부터 확인할거 같은데요 일단 앞줄에서 설정한 값이 다음 줄에도 남아 있으면 같은 X50도 전혀 다른 이동이 될 수 있기 때문인데요.

아래에서는 밀링·머시닝센터의 일반적인 ISO 계열 표기를 중심으로 설명하고, 기종에 따라 달라지는 명령은 따로 표시했습니다.
코드 예제는 경로 학습용이며 공구·소재·고정구·오프셋이 정의된 실기계용 가공 프로그램이 아니며 시뮬레이터는 브라우저 안에서만 작동하며 장비와 연결되지 않습니다.
CNC·NC코드·CAM 차이와 프로그램 한 줄 읽기
CAD에서 형상을 만들고 CAM에서 공구와 가공 전략을 정한 뒤, 포스트프로세서가 대상 기계와 제어기에 맞는 NC코드를 출력하는 흐름을 생각하면 이해하기 쉽습니다. N
C 프로그램은 사람이 직접 작성하거나 수정할 수도 있으므로 CAM 사용이 항상 필수인 것은 아닙니다.
| 구분 | 하는 일 | 확인할 내용 |
|---|---|---|
| CAD | 제품 형상과 치수 정의 | 모델 단위·공차·가공 기준 |
| CAM | 공구경로와 가공 조건 계획 | 공구·소재·가공 여유·접근/이탈 |
| 포스트프로세서 | 기계·제어기에 맞는 NC 프로그램 출력 | 축 구성·코드 형식·보정·사이클 |
| NC코드 | 실행할 명령과 조건을 텍스트로 표현 | G/M·좌표·F/S/T·프로그램 흐름 |
| CNC 제어기 | 코드를 해석하고 기계 동작 제어 | 설정·오프셋·인터록·기종별 기능 |
툴패스 생성 단계는 NX CAM Background Generate 사용법|NX 2606 백그라운드 툴패스 계산과 Generate in Background에서 이어서 볼 수 있습니다. CAM 화면에서 경로가 정상으로 보이더라도 포스트프로세서가 다른 장비용이면 출력된 NC 동작은 달라질 수 있습니다.
NC코드는 G·M·주소값을 함께 읽습니다
N120 G01 X50.0 Y20.0 F300
| 표기 | 의미 | 예제 해석 |
|---|---|---|
| N120 | 블록 번호·순서 표기 | 선택적으로 사용하는 줄 식별자 |
| G01 | 직선보간 이동 모드 | 설정한 이송으로 직선 이동 |
| X50.0 Y20.0 | 좌표 주소와 값 | G90이면 목표 좌표, G91이면 이동량 |
| F300 | 이송 지령값 | G21·G94 가정에서는 300mm/min |
X·Y·Z·I·J·K·F·S·T·H·D 주소의 차이
| 주소 | 주요 의미 | 헷갈리기 쉬운 점 |
|---|---|---|
| X·Y·Z | 선택 좌표계의 위치 또는 증분량 | 기계 구성에 따라 공구 또는 테이블이 실제 이동 |
| I·J·K | 원호 중심 지정 등에 사용하는 주소 | 증분/절대 중심 모드는 제어기별 확인. G90/G91과 별도일 수 있음 |
| R | 원호 반지름 또는 사이클 복귀면 등 | 같은 주소라도 사용 명령에 따라 의미 변화 |
| F | 이송 지령값 | G94 분당, G95 회전당, G93 역시간 등 |
| S | 주축 속도 관련 지령값 | 정회전수 모드에서는 rpm. 주속 일정 모드에서는 절삭속도 의미 |
| T | 공구 선택·호출 번호 | 물리적 매거진 포켓 번호와 항상 같지는 않음 |
| H | 공구 길이 보정 번호 등 | T번호와 같게 운용해도 자동 동일이라고 가정하지 않음 |
| D | 공구경·반경 보정 번호 등 | 값의 반경/직경 해석과 보정 방식 확인 |
| P·Q·L | 시간·프로그램·반복·절입 조건 등 | 뜻과 단위가 명령마다 달라짐 |
“공구 코드”라는 표현으로 X·F·S를 한꺼번에 부르기보다, 주소 문자와 그 값으로 구분하면 더 정확합니다. 예를 들어 F100이 항상 100mm/min인 것도 아니고, S1500이 모든 운전 모드에서 1,500rpm을 뜻하는 것도 아닙니다.
G코드 종류와 기능|이동·좌표·보정·가공 사이클
G코드 표는 명령을 찾는 출발점입니다. 범용으로 통하는 부분과 제어기 옵션인 부분을 구분해야 하며, 특히 선반 코드를 밀링 표에 그대로 대입하면 안 됩니다. 각 명령의 적용 범위를 함께 확인할 수 있도록 기능별로 정리했습니다.
기본 이동·단위·평면
| G코드 | 주요 기능 | 범위와 확인사항 |
|---|---|---|
| G00 | 급이송·위치결정 | 절삭 이송이 아닌 위치 이동. 실제 경로가 단일 직선이라는 보장은 없음 |
| G01 | 직선보간 | 공구를 지정한 직선 경로를 따라 이동시킵니다. |
| G02 | 원호보간/헬리컬 보간 (시계방향) | 공구를 시계방향으로 원호 또는 헬리컬 경로를 따라 이동시킵니다. |
| G03 | 원호보간/헬리컬 보간 (반시계방향) | 공구를 반시계방향으로 원호 또는 헬리컬 경로를 따라 이동시킵니다. |
| G04 | 드웰 | 지정 시간 대기. G09 정위치 정지와 다르며 P/X 시간 단위는 매뉴얼 확인 |
| G07.1 | 원통형보간 | 원통형 보간을 수행합니다. · 지원 기종·옵션·형식 확인 |
| G08 | 선행제어 | 공구의 이동을 원활하게 하기 위해 선행 제어를 활성화합니다. · 지원 기종·옵션·형식 확인 |
| G09 | 정위치 정지 확인 | 해당 블록 끝에서 정지/위치 확인. 비상정지 명령이 아님 |
| G17 | XY 평면 설정 | XY 평면을 가공 기준 평면으로 설정합니다. |
| G18 | ZX 평면 설정 | ZX 평면을 가공 기준 평면으로 설정합니다. |
| G19 | YZ 평면 설정 | YZ 평면을 가공 기준 평면으로 설정합니다. |
| G20 | 인치 입력 | 좌표·관련 조건의 인치 단위 모드 |
| G21 | 미터법 입력 | 일반적인 밀링 좌표 입력은 mm. 미터(m) 단위라는 뜻이 아님 |
좌표·복귀·공구 보정
| G코드 | 주요 기능 | 범위와 확인사항 |
|---|---|---|
| G10 | 데이터 설정 | 기계 설정 데이터를 입력합니다. · 지원 기종·옵션·형식 확인 |
| G11 | 데이터 설정 모드 취소 | 데이터 설정 모드를 취소합니다. · 지원 기종·옵션·형식 확인 |
| G27 | 원점 복귀 검사 | 원점 복귀를 확인합니다. · 지원 기종·옵션·형식 확인 |
| G28 | 기준점 복귀 | 중간점을 경유할 수 있음. 공작물 원점으로 단순 직선 복귀하는 명령이 아님 |
| G29 | 기준점에서 복귀 | G28 등의 기준점 복귀와 연계. 지원 여부·경유점 해석 확인 · 지원 기종·옵션·형식 확인 |
| G30 | 제2, 3, 4 원점 복귀 | 지정된 두 번째, 세 번째, 네 번째 원점으로 복귀합니다. · 지원 기종·옵션·형식 확인 |
| G31 | 스킵 신호 이동 | 이동 중 입력 신호로 스킵. 프로브·신호 설정과 함께 검토 |
| G40 | 공구경 옵셋 취소 | 공구경 옵셋 보정을 취소합니다. |
| G41 | 공구경 보정 좌측 | 진행 방향 기준 좌측. 화면의 절대 왼쪽이라는 뜻이 아님 |
| G42 | 공구경 보정 우측 | 진행 방향 기준 우측. 보정 진입·이탈 거리와 D값 확인 |
| G43 | 공구 길이 옵셋, + | 공구 길이 보정을 더합니다. |
| G44 | 공구 길이 옵셋, – | 공구 길이 보정을 뺍니다. |
| G49 | 공구 길이 옵셋 보정 취소 | 공구 길이 보정을 취소합니다. |
| G52 | 지역 좌표계 설정 | 지역 좌표계를 설정합니다. |
| G53 | 기계 좌표 지정 | 일반적으로 해당 블록에 적용하는 비모달 명령. 공작물 좌표와 구분 |
| G54 | 공작물 좌표계 1 선택 | 첫 번째 공작물 좌표계를 선택합니다. |
| G55 | 공작물 좌표계 2 선택 | 두 번째 공작물 좌표계를 선택합니다. |
| G56 | 공작물 좌표계 3 선택 | 세 번째 공작물 좌표계를 선택합니다. |
| G57 | 공작물 좌표계 4 선택 | 네 번째 공작물 좌표계를 선택합니다. |
| G58 | 공작물 좌표계 5 선택 | 다섯 번째 공작물 좌표계를 선택합니다. |
| G59 | 공작물 좌표계 6 선택 | 여섯 번째 공작물 좌표계를 선택합니다. |
| G90 | 절대 지령 | 밀링 가정. 선택 공작물 좌표계의 목표점 지정 |
| G91 | 증분 지령 | 밀링 가정. 현재 위치에서의 이동량 지정 |
| G92 | 제어기별 좌표 설정·다른 기능 | 밀링 좌표 이동값 설정, 일부 선반 나사 사이클 등. 최고 회전수 제한 코드로 공통 정의할 수 없음 · 지원 기종·옵션·형식 확인 |
| G92.1 | G92 관련 리셋 등 | LinuxCNC에서는 G92 오프셋 해제·초기화. 다른 제어기는 매뉴얼 확인 · 지원 기종·옵션·형식 확인 |
사이클·매크로·가공 모드
| G코드 | 주요 기능 | 범위와 확인사항 |
|---|---|---|
| G61 | 정위치 정지 모드 | 블록 접속부 정지 확인을 유지하는 모드. 상세 동작은 제어기별 확인 |
| G63 | 탭핑 모드 | 탭핑 작업을 수행하도록 설정합니다. · 지원 기종·옵션·형식 확인 |
| G64 | 연속 경로·절삭 모드 계열 | G61 해제/연속 경로 계열로 쓰임. Exact stop check와 동일 명령으로 보지 않음 |
| G65 | 마크로 호출 | 지정된 매크로를 호출합니다. · 지원 기종·옵션·형식 확인 |
| G66 | 매크로 모달 호출 | 매크로 모달 호출을 설정합니다. · 지원 기종·옵션·형식 확인 |
| G67 | 매크로 모달 호출 취소 | 매크로 모달 호출을 취소합니다. · 지원 기종·옵션·형식 확인 |
| G68 | 좌표 회전 | 지정된 각도로 좌표를 회전시킵니다. · 지원 기종·옵션·형식 확인 |
| G69 | 좌표 회전 취소 | 좌표 회전을 취소합니다. · 지원 기종·옵션·형식 확인 |
| G72.1 | 회전 반복·복사 기능 계열 | 지원 제어기에서 경로/패턴을 반복. 공작물 자체를 회전시키는 뜻으로 단정하지 않음 · 지원 기종·옵션·형식 확인 |
| G72.2 | 평행 반복·복사 기능 계열 | 지원 제어기의 반복 경로 기능. 형식·파라미터 확인 · 지원 기종·옵션·형식 확인 |
| G73 | 고속 펙 드릴링 사이클 | 부분 후퇴를 포함한 반복 드릴링 계열. G83과 후퇴 방식 차이 확인 |
| G74 | 역회전 탭 싸이클 | 역회전하여 탭 싸이클을 수행합니다. · 지원 기종·옵션·형식 확인 |
| G76 | 파인 보링 싸이클 | 정밀 보링 싸이클을 수행합니다. · 지원 기종·옵션·형식 확인 |
| G80 | 홀 가공 고정 싸이클 취소 | 홀 가공 고정 싸이클을 취소합니다. |
| G81 | 기본 드릴링 사이클 | 드릴링 등 기본 홀 사이클. 스폿 드릴 전용으로 한정하지 않음 |
| G82 | 바닥 드웰 드릴링 계열 | 구멍 바닥에서 대기하는 사이클. 스폿·카운터보링 등에 활용 |
| G83 | 심공 드릴링 싸이클 | 깊은 구멍 드릴링 싸이클을 수행합니다. |
| G84 | 탭핑 싸이클 | 탭핑 싸이클을 수행합니다. |
| G85 | 보링 싸이클 | 일반 보링 싸이클을 수행합니다. |
| G86 | 보링 싸이클 | 보링 싸이클을 수행하고 스핀들을 멈춥니다. |
| G87 | 백 보링 계열 | 지원 제어기에서 구멍 안쪽/뒷면 가공. 주축 방향·편심 이동 등 절차 확인 · 지원 기종·옵션·형식 확인 |
| G88 | 정지·수동 개입 보링 계열 | 지원 기종의 드웰·주축 정지·수동 후퇴 동작 확인 · 지원 기종·옵션·형식 확인 |
| G89 | 드웰 포함 보링 계열 | 바닥 대기 후 이송 후퇴 등 지원 동작 확인 |
| G94 | 분당 이송 | 분당 이송 속도를 설정합니다. |
| G98 | 고정 사이클 초기점 복귀 | 밀링 고정 사이클 기준. 선반에서는 분당 이송 의미인 기종도 있음 |
| G99 | 고정 사이클 R면 복귀 | 밀링 고정 사이클 기준. 선반에서는 회전당 이송 의미인 기종도 있음 |
예를 들어 Haas 선반의 G90·G92·G94는 각각 선삭 사이클·나사 사이클·단면 가공 사이클로 쓰이며, 밀링에서 설명하는 절대 지령·좌표 이동·분당 이송과 다릅니다. 숫자가 같다고 프로그램을 옮겨 실행하지 않는 이유가 여기에 있습니다.
모달 명령과 비모달 명령
모달 명령은 다른 명령으로 바꿀 때까지 유지됩니다. G01 뒤의 줄에 X나 Y만 있어도 직선보간이 이어지는 방식입니다. 비모달 명령은 일반적으로 해당 블록에서만 적용됩니다. 다만 모달 그룹과 해제 규칙은 제어기 문서를 기준으로 확인해야 합니다.
G90 G01 X50 F300
Y20 (G01 유지: Y20으로 직선 이동)
G00 Z10 (이동 모드가 급이송으로 변경)
G00에서 여러 축을 동시에 지정하면 실제 급이송 경로는 제어 방식에 따라 달라질 수 있습니다. 그래서 화면에 직선이 그려졌다는 사실만으로 고정구를 피한다고 판단하지 않습니다. 이 글의 시뮬레이터는 급이송을 시작점과 끝점 사이 직선으로 단순화합니다.
M코드 종류와 기계별로 달라지는 기능

M코드는 주축 회전, 절삭유 공급, 공구교환, 프로그램 흐름 같은 보조 동작을 담당합니다. 기계 제작사가 PLC와 주변 장치를 연결하는 방식에 영향을 받으므로 G코드보다도 기종별 차이를 놓치기 쉽습니다.
| M코드 | 일반적인 기능 | 주의할 해석 |
|---|---|---|
| M00 | 프로그램 정지 | 작업 확인 후 재개하는 정지. 비상정지와 구분 |
| M01 | 선택 정지 | 옵셔널 스톱 선택 조건에 따라 정지 |
| M02 | 프로그램 종료 | 종료 후 상태는 제어기 확인 |
| M03 | 주축 정회전 | 장비에서 정의한 정회전 방향 |
| M04 | 주축 역회전 | 장비에서 정의한 역회전 방향 |
| M05 | 주축 정지 | 축 이송 전체를 비상정지하는 명령은 아님 |
| M06 | 공구교환 | T 호출과 ATC 절차는 기종별 확인 |
| M08 | 절삭유 공급 | 해당 장비에서 지정한 공급 계통 |
| M09 | 절삭유 정지 | 정지되는 계통 범위 확인 |
| M19 | 주축 오리엔테이션 | 지정 방향 정지; 각도 지정 형식은 기종별 |
| M30 | 프로그램 종료·리셋 | 자동으로 다시 가공을 시작한다는 의미는 아님 |
| M98 | 서브프로그램 호출 | 호출 번호·반복 형식은 제어기별 확인 |
| M99 | 복귀 또는 반복 흐름 | 호출 위치와 메인/서브 문맥에 따라 반복 가능 |
제작사·옵션 확인이 필요한 M코드 일람
| 코드 | 확인 가능한 기능 예 / 확인 방법 | 적용 범위 |
|---|---|---|
| M10 | 4축 브레이크 체결 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M11 | 4축 브레이크 해제 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M16 | 공구교환 계열 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M17 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M18 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M20 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M23 | 선택 사용자 M기능/M-Fin | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M27 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M29 | M-Fin 연계 출력 릴레이 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M33 | 칩 컨베이어 정지 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M40 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M41 | 저속 기어 오버라이드 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M42 | 고속 기어 오버라이드 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M43 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M46 | 조건에 따른 줄 분기 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M47 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M48 | 프로그램과 팔레트 적합성 확인 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M49 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M51 | 선택 사용자 M출력 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M53 | 선택 사용자 M출력 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M55 | 선택 사용자 M출력 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M59 | 출력 릴레이 설정 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M60 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M70 | 워크홀딩 클램프 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M73 | 공구 에어 블라스트 ON | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M74 | 공구 에어 블라스트 OFF | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M75 | G35/G136 기준점 설정 | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M76 | 해당 장비의 M코드 표로 확인 | 공통 기능을 확정하지 않음. 제작사·기종·옵션 필요 |
| M88 | 주축 관통 절삭유 ON | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
| M89 | 주축 관통 절삭유 OFF | Haas 밀링 안내의 예시; 다른 기종에 공통 적용하지 않음 |
자동 전원 차단, 매거진 공구포트 하향, 공구 수납, 오일 미스트, 센서 전환, 워크 카운트, X/Y 미러 이미지, 팔레트 교환 같은 기능은 실제로 사용되지만, 위 번호에 고정된 보편적 의미로 묶을 수는 없습니다. 예를 들어 어떤 장비의 M29가 리지드 탭 준비라 해도 다른 기계에서 같은 동작을 보장하지 않습니다.
NC코드 예제와 공구경로 시뮬레이터
시뮬레이터에서 예제 불러오기 → 코드 수정 → 코드 해석 → 다음 블록 또는 단계 재생 순서로 확인하세요. 좌표값을 바꾸면 XY 경로와 XZ 높이 변화가 함께 표시됩니다.
코드 수정 후에는 이전 결과를 지워 새 코드와 이전 경로가 섞이지 않도록 했습니다.
NC코드 학습용 경로 시뮬레이터
초기 위치 X0 Y0 Z10mm · 공작물 좌표 원점 고정 · XY 원호 · I/J는 시작점 기준 증분입니다. 화면은 공구 기준점의 경로를 보여줍니다. 공구 형상·소재 제거·충돌·기계 동작은 검증하지 않습니다.
회색: 전체 경로 · 파란 실선: 진행한 이송 · 주황 점선: 진행한 급이송 · 원형 점: 현재 위치. 축 단위는 mm입니다. G00도 직선으로 단순 표시하며 실제 급이송 궤적과 다를 수 있습니다.
시뮬레이터가 해석하는 범위
| 구분 | 지원 내용 | 제한 |
|---|---|---|
| 이동 | G00·G01·G02·G03, X/Y/Z | G00은 직선 근사. 실제 기계 축 동역학 미반영 |
| 평면·단위 | G17, G20·G21 | XY 원호만 지원. 출력 좌표와 길이는 mm로 통일 |
| 좌표 모드 | G90·G91 | 공작물 원점 고정. G54·G53·G92 오프셋은 미지원 |
| 원호 | 시작점 기준 I/J, G91.1 선언 | R·G90.1·K·G18/G19는 오류. 반지름 불일치 검사 |
| 이송 | G94·F | 분당 이송만 지원. G93·G95는 오류 |
| 상태 표시 | S·T, M03/04/05·M06·M08/09 | 주축·선택 공구·절삭유 표시만 제공; 물리 동작 없음 |
| 초기화 표기 | G40·G49·G80 | 보정/사이클 비활성 전제. G80은 이동 모드도 비워 다음 이동을 명시하도록 함 |
| 프로그램 | N·O, M02·M30, 괄호·세미콜론 주석 | 서브프로그램·매크로·조건분기 미지원. 종료 뒤 코드는 실행하지 않음 |
G코드 표에 있는 모든 명령을 이 도구가 실행하는 것은 아닙니다. 지원하지 않는 명령은 자동으로 건너뛰지 않고 오류로 알립니다.
입력은 최대 800줄·60,000자, 각 축 표시 범위는 ±100,000mm이며 이는 학습 도구의 범위입니다. 원호 반지름 검사는 0.001mm와 반지름의 0.001% 중 큰 값을 사용하는 내부 기준으로, 실제 제어기 허용차가 아닙니다.
예제 1. 50×50mm 사각 경로를 절대좌표로 읽기
(EDUCATIONAL PATH ONLY)
G21 G17 G90 G94
G40 G49 G80
T1 M06
S1500 M03
G00 Z10
G00 X0 Y0
G01 Z-5 F100
G01 X50 Y0 F300
Y50
X0
Y0
G00 Z10
M05
M30
| 블록 | 뜻 | 좌표 해석 |
|---|---|---|
| G21 G17 G90 G94 | mm·XY·절대좌표·분당 이송 | 예제의 해석 기준 |
| T1 M06 / S1500 M03 | 공구교환·주축 상태 표기 | T1·S1500은 설명용 값 |
| G00 Z10 / G00 X0 Y0 | 초기 높이·평면 시작점 | 10mm가 실제 고정구에 안전하다는 뜻은 아님 |
| G01 Z-5 F100 | Z=-5까지 이송 | Z10에서 시작하면 이동량은 −15mm |
| X50 Y0 → Y50 → X0 → Y0 | 한 변 50mm 사각 경로 | G01이 유지되어 좌표만 있는 줄도 이동 |
| G00 Z10 / M05 / M30 | 상승·주축 정지·종료 | 재생은 블록별이며 실제 시간과 다름 |
Z-5는 “항상 현재 위치에서 5mm 아래”라는 뜻이 아닙니다. G90에서는 선택 원점 기준 Z=-5이고 G91에서는 현재 위치에서 −5mm 이동입니다.
이 차이는 가공 깊이를 잘못 읽는 대표적인 원인입니다. F100·F300·S1500도 경로 설명용이며 소재·공구에 맞춘 권장 절삭조건이 아닙니다.
예제 2. 같은 사각형을 증분좌표로 표현하기
(SAME SQUARE IN INCREMENTAL MODE)
G21 G17 G90 G94
G00 Z10
G00 X0 Y0
G01 Z-5 F100
G91
G01 X50 F300
Y50
X-50
Y-50
G90
G00 Z10
M30
오른쪽 50, 위쪽 50, 왼쪽 50, 아래쪽 50을 각각 X50·Y50·X-50·Y-50으로 지정합니다.
마지막에는 G90으로 되돌린 뒤 Z10으로 이동합니다. G91을 그대로 둔 채 Z10을 쓰면 Z=-5에서 Z=5까지 10mm 올라가므로 절대좌표 복귀와 결과가 달라집니다.
예제 3. G02·G03 원호와 I·J 계산
(XY ARCS - I J RELATIVE TO START)
G21 G17 G90 G94
G00 X0 Y0
G01 Z0 F100
G02 X40 Y0 I20 J0 F300
G03 X80 Y0 I20 J0
G00 Z10
M30
첫 원호의 시작점은 (0,0), 끝점은 (40,0), 중심은 (20,0)입니다.
따라서 시작점에서 중심까지의 X 차이는 +20, Y 차이는 0이므로 I20 J0입니다. 다음 원호는 시작점 (40,0)에서 중심 (60,0)까지이므로 다시 I20 J0을 씁니다. I20이 고정된 절대 중심 X20이라는 의미는 아닙니다.
이 화면은 +Z에서 XY 평면을 내려다본 기준입니다. G02는 시계방향, G03은 반시계방향으로 표시합니다.
다른 평면·좌표 방향에서는 화면상 인상만 보고 회전 방향을 판단하지 말고 선택 평면의 양의 수직축 기준을 확인해야 합니다.
예제 4. XY 원호를 돌면서 Z도 바꾸는 헬리컬
(ONE FULL XY HELIX - RADIUS 10)
G21 G17 G90 G94
G00 X10 Y0
G01 Z0 F100
G03 X10 Y0 Z-2 I-10 J0 F200
G00 Z10
M30
시작점 X10 Y0에서 I-10 J0을 지정하면 중심은 X0 Y0, 반지름은 10mm입니다.
XY 끝점을 시작점과 같게 두고 Z를 0에서 −2로 바꾸면 한 바퀴 회전하면서 2mm 내려가는 교육용 헬리컬 경로가 됩니다. 원호의 XY 길이는 2πr, 3차원 경로 길이는 √[(2πr)²+ΔZ²]로 약 62.864mm입니다. 실제 제어기의 전원(360°) 원호·헬리컬 지원 형식은 별도 확인합니다.
예제 5. 인치 단위를 mm로 바꿔 확인하기
(ONE INCH SQUARE - DISPLAY IN MM)
G20 G17 G90 G94
G00 Z0.4
G00 X0 Y0
G01 Z0 F4
G01 X1 Y0 F12
Y1
X0
Y0
G00 Z0.4
M30
G20에서 X1은 1mm가 아니라 25.4mm입니다. F12를 G94와 함께 사용하면 12in/min, 즉 304.8mm/min입니다. 시뮬레이터는 결과를 mm로 환산해 보여주며, 단위를 변경한 뒤에는 새 F를 지정하도록 검사합니다.
설계·제조·품질팀이 실제 프로그램에서 확인할 것
코드 문법이 맞다는 것과 가공품이 도면에 맞게 나온다는 것은 다릅니다.
설계자는 기준·공차·가공 접근성을, 제조 담당자는 공구·고정구·오프셋·순서를, 품질 담당자는 검사 기준과 프로그램 개정 이력을 연결해서 봐야 합니다.
| 분야 | 핵심 질문 | 남길 정보 |
|---|---|---|
| 설계 | 가공 기준과 검사 기준이 같은가? 공구 접근이 가능한가? | 도면 개정·기준면·공차·표면 요구 |
| CAM·제조 | 출력 포스트와 실제 기계가 일치하는가? | 기계·제어기·포스트 버전·공구 목록 |
| 셋업 | 공작물 원점과 H/D 보정이 맞는가? | 셋업시트·공구 실측·오프셋 승인값 |
| 검증 | 소재·척·바이스·홀더·스트로크가 반영됐는가? | 시뮬레이션 범위·간섭 결과·미검증 항목 |
| 품질 | 프로그램 변경이 제품 특성에 영향을 주는가? | 초품 검사·치수 추세·부적합·변경 승인 |
| 양산 | 올바른 개정이 설비에 올라가 있는가? | 파일명·버전·배포 경로·작업 이력 |
좌표 기준이 헷갈린다면 직각좌표계·원통좌표계·구좌표계 변환 공식과 계산방법|CAD·CAM·CMM 설계 실무에서 좌표계 개념을 함께 확인해보세요. 공구 측정값과 보정 연결은 NX 2606 공구측정 사이클 설정|Renishaw·Blum-Novotest 프로브와 포스트프로세서 검증의 내용과도 이어집니다.
공구 중심 경로와 완성품 윤곽은 다릅니다
50×50mm 사각 경로를 그렸다고 완성품이 반드시 50×50mm가 되는 것은 아닙니다.
공구 반경만큼 안쪽 또는 바깥쪽에서 재료가 제거되고, CAM에서 이미 공구 중심 경로를 계산했는지 제어기의 G41/G42로 보정하는지에 따라 결과가 달라지며 보정을 중복 적용하면 경로가 예상과 어긋납니다.
이송·회전수 계산은 공구와 소재 조건을 함께 봅니다
밀링의 단순 계산 관계
주축 회전수 n(rpm) = 1000 × 절삭속도 Vc(m/min) / [π × 공구 지름 D(mm)]
테이블 이송 Vf(mm/min) = 날당 이송 fz(mm/tooth) × 날 수 z × n(rpm)
가정: D=10mm, Vc=100m/min, fz=0.03mm/tooth, 날 수=4
n ≈ 3,183rpm, Vf ≈ 382mm/min
위 값은 공식 설명용 가정입니다. 실제 절삭조건은 소재·공구 재질·코팅·돌출·절입량·냉각·설비 강성에 맞는 공구사 자료와 검증 절차를 따릅니다.
F만 낮추는 것으로 모든 진동이나 치수 문제를 해결할 수는 없습니다.
자주 만나는 오류와 점검 순서
| 증상 | 먼저 볼 것 | 다음 확인 |
|---|---|---|
| 한 줄만 수정했는데 경로가 크게 바뀜 | G90/G91·G20/G21·모달 이동 | 이전 줄에서 유지된 모드 |
| 원호 오류·반지름 불일치 | 끝점과 I/J·선택 평면 | 중심의 절대/증분 방식·R 형식 |
| 공구가 예상보다 깊게 내려감 | 공작물 원점·Z 해석·H 보정 | 공구 길이·셋업 기준·잔여 오프셋 |
| G28에서 예상 외 이동 | 중간점과 좌표 모드 | 제어기의 복귀 동작·고정구 간섭 |
| 가공 크기가 공구경만큼 다름 | CAM/제어기 반경 보정 방식 | D값·진입/이탈·공구 마모 |
| 다른 기계에서 M코드 동작이 다름 | 제작사 M코드 표·PLC·옵션 | 장비용 포스트와 프로그램 승인 상태 |
| 시뮬레이션 정상인데 실물 불량 | 시뮬레이션 범위 | 클램핑·열변위·공구 마모·절삭 부하 |
실기계 적용은 대상 장비용 매뉴얼과 승인된 셋업을 기준으로 진행합니다.
그래픽 검증, 간섭 확인, 제작사 절차에 따른 시험 운전과 초품 검사를 거쳐야 하며, 브라우저 경로 그림이 정상이라는 이유로 실행 적합성을 판단하지 않습니다.
참고 : CNC 프로그램의 주요 G코드 및 M코드 사용방법 2탄
CNC·NC코드·G코드·M코드 자주 묻는 질문
NC코드와 CNC는 같은 뜻인가요?
CNC는 컴퓨터 수치제어 방식 또는 그 장비를 가리키고, NC코드는 제어기가 해석할 프로그램입니다. CAM은 경로를 계획하고 포스트프로세서는 기계에 맞게 프로그램을 출력합니다.
G코드와 M코드 차이는 무엇인가요?
G코드는 이동뿐 아니라 단위·좌표·보정·가공 모드를 지정합니다. M코드는 주축·절삭유·공구교환·정지 같은 보조 기능과 프로그램 흐름에 사용됩니다.
NC코드에서 X Y Z는 무엇을 뜻하나요?
선택한 좌표계의 위치 또는 현재점에서의 증분량을 나타냅니다. 실제로 공구가 움직이는지 테이블이 움직이는지는 기계 구성에 따라 다릅니다.
F와 S는 각각 무엇인가요?
F는 이송 관련 지령, S는 주축 속도 관련 지령입니다. G94·G21이면 F는 mm/min이지만 다른 이송 모드에서는 해석이 달라집니다. S 역시 주속 일정 모드인지 확인해야 합니다.
G00과 G01은 어떻게 다른가요?
G00은 급이송 위치결정, G01은 설정한 이송으로 직선 이동하는 명령입니다. G01이 반드시 절삭 중이라는 뜻은 아니며 G00의 실제 궤적은 기종에 따라 직선이 아닐 수 있습니다.
G02와 G03은 언제 사용하나요?
선택한 평면의 원호 이동에 사용합니다. G02는 시계방향, G03은 반시계방향입니다. 헬리컬은 해당 제어기의 지원 방식까지 확인해야 합니다.
M03과 M05는 무슨 뜻인가요?
일반적으로 M03은 주축 정회전 지령, M05는 주축 정지입니다. 화면에서 보이는 회전 방향과 정회전 정의를 혼동하지 않습니다.
T코드는 공구 포켓 번호인가요?
T는 공구 선택·호출 번호로 이해하는 것이 좋습니다. 랜덤 포켓 관리 등에서는 실제 매거진 포켓 위치와 공구 번호가 같지 않을 수 있습니다.
NC코드를 처음 배울 때 무엇부터 봐야 하나요?
단위·좌표 모드·선택 평면을 먼저 확인한 뒤 이동 명령, F/S/T, 보정과 종료 순서로 읽으면 좋습니다. 이 글의 절대/증분 예제를 비교하면 좌표 차이를 확인할 수 있습니다.
예제 코드는 어떤 순서로 읽으면 쉬운가요?
초기 모드, 공구·주축 상태, 시작 위치, 이송 경로, 상승·정지·종료 순서로 읽습니다. Z의 목표 위치와 실제 이동량은 구분해서 계산합니다.
M30이면 처음부터 자동 반복하나요?
일반적으로 종료와 리셋을 뜻하며 자동 재가공 시작과 같은 의미가 아닙니다. 반복 운전은 해당 장비의 프로그램 흐름과 운전 설정을 확인해야 합니다.
이 시뮬레이터로 충돌이나 소재 제거도 확인되나요?
확인되지 않습니다. 지원 코드의 공구 기준점 이동과 상태를 보여주는 학습 도구입니다. 소재·홀더·치구·기계 축 구조·보정이 반영된 검증은 별도 CAM/기계 시뮬레이션이 필요합니다.
코드 해석에서 오류가 나면 실제 기계에서도 오류인가요?
반드시 그렇지는 않습니다. 이 도구가 지원하지 않는 정상 코드도 있습니다. 반대로 여기서 경로가 보여도 실제 제어기의 문법·설정·장비 조건까지 적합하다는 의미는 아닙니다.
공식 매뉴얼 확인
코드 기능은 제어기와 기계 매뉴얼을 우선합니다. 확인일은 2026년 10월 12일이며 아래 문서는 서로 다른 제어기의 예시입니다. 하나의 공통 명령 사양으로 합쳐 적용하지 않습니다.