CNC编程语言精要:程序结构、指令代码与G/M码详解
学习目标
完成本单元学习后,您将能够:
- 阅读理解标准CNC程序结构与块执行顺序
- 掌握字母地址代码(地址码)的含义、模态/非模态特性
- 识别特殊字符功能(程序开始/结束、注释、屏蔽、块结束)
- 熟记核心G码与M码功能及典型组合
- 理解关键G码(G00/G01/G02/G03/G40~G43/G54/G80~G84/G90/G91/G98/G99)的几何与工艺含义
CNC程序结构:安全、可读、可维护
NC程序 = 按执行顺序排列的指令块。像读书一样:从上到下、从左到右。每行一个块,块内指令同时生效。
标准程序块序列(单刀具单操作最小模型)
- 程序开始
% - 程序号
Oxxxx - 刀具信息注释
(T1 D=6.0 ENDMILL) - 安全块:
G17 G20 G40 G49 G80 G90(XY平面/英制/取消刀补/取消刀长/取消固定循环/绝对编程) - 换刀
T1 M06 - 主轴启动
S9200 M03(9200转/分,顺时针) - 冷却开
M08 - 快移至工件上方安全平面
G00 X... Y... Z... - 加工操作(插补/固定循环)
- 冷却关
M09 - 主轴停
M05 - 移至安全位置
G00 Z... / G28... - 程序结束
M30(或M02) - 程序结束符
%
多刀具程序:重复步骤4~11(换刀→主轴/冷却→定位→加工→退刀→关冷却/主轴)。
示例程序解析:方形轮廓铣削 + 定点钻孔
%
O1234
(T1 0.25 END MILL)
G17 G20 G40 G49 G80 G90
T1 M6
S9200 M3
G54
M8
G00 X-0.025 Y-0.275
G43 Z1. H1
Z0.1
G01 Z-0.1 F18.
G41 Y0.1 D1 F36.
Y2.025
X2.025
Y-0.025
X-0.025
G40 X-0.4
G00 Z1.
M5
M9
(T2 0.25 DRILL)
T2 M6
S3820 M3
M8
X1. Y1.
G43 Z1. H2
Z0.25
G98 G81 Z-0.325 R0.1 F12.
G80
Z1.
M5
M9
G91 G28 Z0
G91 G28 X0 Y0
G90
M30
%
关键块解读
G43 Z1. H1:调用H1刀长补偿,快移至Z=1.0(工件坐标系)安全平面。G01 Z-0.1 F18.:以18 ipm进给切入至Z=-0.1切深。G41 Y0.1 D1 F36.:左刀补(G41)启动,引入切(Y=0.1),调用D1刀径补偿,进给36 ipm。- 四条
G01直线完成方形轮廓。 G40 X-0.4:取消刀补并引出切(避免在工件上留痕)。G98 G81 Z-0.325 R0.1 F12.:G98(回初始平面)钻孔固定循环,孔底Z=-0.325, R平面Z=0.1, 进给12 ipm。G91 G28 Z0 / X0 Y0:增量模式回机床零点(Z轴先回、XY后回,防碰撞)。G90:恢复绝对模式(安全收尾习惯)。
字母地址代码完整参考表
地址码 = 字母 + 数值。模态码:持续有效直到被同组其他码取消;非模态码:仅本块有效(G04、G28、G53、M00、M01、M02、M06、M30等)。
| 地址 | 功能 | 典型用法/备注 |
|---|---|---|
| A/B/C | 第4/5/6轴旋转位置(度) | G01 A45.325 B90. C180.;三轴联动/五轴联动 |
| D | 刀具半径/直径补偿寄存器号 | 配合G41/G42,D号通常=刀具号(T1→D1);整数无小数点 |
| E | 车床螺纹精密进给 | G32/G33/G76螺纹循环专用 |
| F | 进给速率 | G94模式:mm/min或ipm;G93反时间模式;钻孔/攻丝需小数点(F12. / F0.5) |
| G | 预备功能(运动/模式/补偿/坐标系/固定循环) | 核心指令,详见G码表 |
| H | 刀具长度补偿寄存器号 | 配合G43/G44,H号通常=刀具号;整数;G43 H1 Z1. |
| I/J/K | 圆弧矢量(圆心相对起点增量) | G02/G03圆弧插补;I=X向矢量,J=Y向,K=Z向;螺旋插补用K |
| L | 固定循环重复次数 / G10寄存器类型 | G81 L3 三次重复;G10 L2 写工件坐标系 |
| M | 辅助功能(主轴/冷却/换刀/夹具/程序控制) | 每块仅1个M码;详见M码表 |
| N | 块号/行号 | 整数≤5位;CAD/CAM生成程序常省略;G10 P参数号 |
| O | 程序号 | 整数,O前缀无小数;O1234 (PART_NAME) |
| P | 停留时间(秒)/子程序号/参数号 | G04 P1.5(停留1.5s);M98 P1234(调子程序);G10 P... |
| Q | 深孔钻啄距 | G83 Q2.0 每次啄进2mm |
| R | 圆弧半径 / 固定循环R平面 | G02 R10. / G81 R0.1;R定义圆弧不如IJK可靠(双解问题) |
| S | 主轴转速(rpm) / 表面速度(m/min) | 整数无小数;配合M03/M04;G96恒线速模式下为m/min |
| T | 刀具选择 | 整数;配合M06换刀;T01 M06 |
| U/V/W | 车床增量轴(X/Y/Z对应) | 车床专用:X/U绝对/增量对应,Z/W同理;车床G90/G91含义不同 |
| X/Y/Z | 线性轴绝对/增量坐标 | 四位小数;模态坐标(不变可省略);G01 X2.250 F20. |
特殊字符代码
| 字符 | 名称 | 功能与限制 |
|---|---|---|
| % | 程序开始/结束(卷带复位符) | 独占一行,文件首尾必须;源自纸带时代 |
| ( ) | 注释 | 大写字母数字符号,≤40字符;(T02: 5/8 END MILL) |
| / | 屏蔽/跳过 | 本块后内容在屏蔽开关ON时不执行;/ M00 可选停屏蔽 |
| ; | 块结束符(EOB) | 文本编辑器不可见(回车符),机床屏幕显式显示;N8 Z0.750 ; |
G码与M码核心速查表
G码 (预备功能)
| 代码 | 功能 | 分组/模态性 |
|---|---|---|
| G00 | 快速定位(点对点,非插补) | 01组 模态 |
| G01 | 线性插补(直线切削) | 01组 模态 |
| G02 | 顺时针圆弧插补 | 01组 模态 |
| G03 | 逆时针圆弧插补 | 01组 模态 |
| G04 | 停留/延时 | 00组 非模态 |
| G17/G18/G19 | 选定平面 XY / ZX / YZ | 02组 模态 默认G17 |
| G20/G21 | 英制/公制输入单位 | 06组 模态 程序开头指定 |
| G28 | 回机床零点(经中间点) | 00组 非模态 |
| G40 | 取消刀具半径补偿(CDC) | 07组 模态 |
| G41 | 左刀补(刀具相对切削方向左侧) | 07组 模态 |
| G42 | 右刀补 | 07组 模态 |
| G43/G44 | 刀具长度补偿正/负 | 08组 模态 |
| G49 | 取消刀长补偿 | 08组 模态 |
| G54~G59 | 工件坐标系#1~#6 | 12组 模态 |
| G80 | 取消固定循环 | 09组 模态 |
| G81 | 钻孔循环(进给-退回) | 09组 模态 |
| G82 | 钻孔循环(底部停留) | 09组 模态 |
| G83 | 深孔啄钻循环 | 09组 模态 |
| G84 | 攻丝循环(刚性攻丝需主轴伺服) | 09组 模态 |
| G90 | 绝对坐标编程模式 | 03组 模态 默认 |
| G91 | 增量坐标编程模式 | 03组 模态 |
| G94 | 进给模式:分钟进给 | 05组 模态 默认 |
| G98 | 固定循环回初始平面 | 10组 模态 |
| G99 | 固定循环回R平面 | 10组 模态 |
M码 (辅助功能)
| 代码 | 功能 |
|---|---|
| M00 | 程序强制停(按循环启动继续) |
| M01 | 可选停(面板开关ON时停) |
| M02 | 程序结束(不回首) |
| M03 | 主轴正转(CW) |
| M04 | 主轴反转(CCW) |
| M05 | 主轴停止 |
| M06 | 换刀(ATC) |
| M08 | 冷却液开 |
| M09 | 冷却液关 |
| M30 | 程序结束并回首(按循环启动重跑) |
重点G码展开解析
G00 快速定位 — 非插补、各轴独立全速
G00 X0 Y0 → X、Y轴各自以最大快移速度独立运动,轨迹呈“折线/犬牙”而非直线(见下图)。优势:最快到达;风险:中间轨迹不可控,极易碰撞夹具/工件/刀具。首次运行必须开快移倍率覆盖(25%/50%),单段模式验证。

G01 线性插补 — 直线切削、多轴联动、受F控制
- F字:进给速率。
G01 X10 Y20 F200→ 刀尖沿直线以200mm/min移动至(10,20),X/Y轴按矢量分速联动。 - 单行多坐标 = 插补运动(直线/圆弧/螺旋);分行 = 顺序单轴运动。
- Z轴单独编块策略:先XY定位、再Z下切,便于观察避让夹具/工件凸台,防碰撞。
G02/G03 圆弧插补 — 圆心矢量IJK vs 半径R
圆弧 = 起点(当前点) + 终点(XYZ) + 圆心矢量(IJK)。
- I/J/K:起点到圆心的增量矢量(带符号)。推荐唯一使用IJK,无歧义、数值稳定。
- R:半径值。正R<180°,负R>180°;但同一终点/半径有两个圆心解(大/小圆弧),控制器按最近/最远策略可能选错 → 生产环境禁用R编程圆弧。
示例:起点(0,2) 终点(2,0) 圆心(0,0) 顺时针:
G02 X2 Y0 I0 J-2
G17/G18/G19 平面选择
圆弧/刀补/固定循环必须在选定平面内。默认G17(XY)。车铣复合/五轴常切换G18(ZX)、G19(YZ)。
G40/G41/G42 刀具半径补偿 (CDC) — 精加工关键
刀具磨损/偏摆导致实际切削轮廓偏小/偏大。CDC让控制器自动偏移刀具中心路径:
- G41:左补(刀具左偏 D寄存器值/2)
- G42:右补(刀具右偏)
- G40:取消补偿
- D寄存器存磨损补偿值(通常为负,如-0.015),几何尺寸由CAM按刀具中心轨迹已补偿。
D寄存器表示例:
| D号 | 磨损值 |
|---|---|
| D1 | -0.0125 |
| D2 | 0.0000 |
操作员对加工尺寸实测 → 计算偏差 → 写入D寄存器 → 下一刀自动补偿。
G43 刀具长度补偿 (TLO)
G43 H1 Z1.0:激活H1刀长补偿,移动至工件坐标系Z=1.0位置。控制器内部:机床Z = 程序Z + G54_Z_offset + H1_TLO。H寄存器表示例:
| H号 | 长度值 |
|---|---|
| H1 | 10.236 |
| H2 | 4.7510 |
G54 工件坐标系偏移
工作偏移寄存器表:
| 坐标系 | X | Y | Z |
|---|---|---|---|
| G54 | 14.2567 | 6.6597 | 0.0000 |
| G55~G59 | 0.0000 | 0.0000 | 0.0000 |
X/Y = 机床零点到工件零点距离;Z = 刀具设定基准面(如1-2-3块顶面)到工件Z零点距离。G54通常为首次装夹坐标系,多面加工用G55~G59/G54.1 Pn。
单元测试题
- 描述CNC程序指令的执行顺序与结构特点。
- 所有CNC程序以什么字符开始和结束?
- 解释字母地址代码的模态与非模态特性。
- 列举三个特殊字符代码及其功能。
- 概述G码与M码的分类与核心功能差异。
- 解读指令组合:
G00 G90 G54 X0 Y0。 - 解读指令组合:
G00 G90 G43 H1 Z1.。 - G00与G01的根本区别是什么?
- G02与G03的区别是什么?圆心定义推荐用IJK还是R?为什么?
- 解释F字与S字的含义、单位、模态性。
工业技术
- CNC刀具磨床核心技术:功能、用途与优势详解
- 微处理器编程基础
- 数控木工车床刀具Top 5:打造卓越木工成果的必备指南
- CNC实操进阶:哈斯数控铣床上机操作全流程与最佳实践
- 掌控CNC加工变量:稳定产出的关键策略
- 掌握CNC铣削精度:精密零件的实证步骤
- 波特兰地区精密CNC加工与刀模服务首选:BDE Manufacturing Technologies
- 五轴CNC机床碰撞的预防与管理
- 提升CNC机床精度与定位精准度:综合技术指南
- CNC刀具预调仪与测量:精密高效的必备指南
- C 程序结构详解:Hello World 实例与编译运行全流程
- C# 程序结构解析:从 Hello World 看命名空间、类、Main 入口与编译运行