G代码基础:最重要的指令与CNC编程实战

G代码(G-code)是CNC机床的标准编程语言:一组告诉机床刀具往哪里走、走多快、沿什么路径运动的指令。本文从基础讲解G代码,提供带说明的G代码和M代码列表、逐行讲解的示例程序以及CNC编程的基本原则。G代码和M代码列表的PDF版本可在“下载”框中获取。
CNC用的G代码:什么是G-code
G代码是数控机床(CNC,Computer Numerical Control)的编程语言,用来编写控制刀具运动和机床功能的指令。其依据是ISO 6983和DIN 66025标准,它们为大多数控制系统规定了通用的标准G代码。
名称来自最重要指令开头的字母G,不过程序中还包含M、X、Y、Z、F、S和T等地址。G代码起源于20世纪50年代和RS-274标准;如今Fanuc、Siemens、Heidenhain以及开源的LinuxCNC都有各自的方言,但符合DIN 66025的核心是共通的。在CNC编程语言中,G代码就像自然语言中的英语。
G代码的目的很简单:把图纸上的几何形状变成规划好的刀具运动,以及主轴、冷却液和刀库的指令。CNC加工意味着机床由程序而不是手轮控制。编好的G代码第一次和第一千次运行完全一样,这使切削加工可重复,精密生产可预测。
CNC编程:CNC程序是如何产生的
CNC编程就是把零件的几何形状翻译成控制系统能理解的G代码指令。工艺人员规划工序和CNC刀具,然后编写包含刀具运动和机床功能的程序,经过仿真后程序送到机床,由操作者监控首件加工,确认无误后再进入批量生产。
CNC机床有三种编程方式。手工编程:程序员在编辑器中编写G代码,适合简单零件。机床上编程:对话式控制系统(Heidenhain Klartext、Mazatrol)根据表单生成代码。CAM编程:CNC软件和CAD/CAM系统根据三维模型计算刀具路径。无论哪种方式,结果都是同一个文本文件,所以读懂和修改G代码始终是操作CNC机床的核心能力。
G代码的结构:程序段、行与字
CNC程序是控制系统逐段读取的普通文本文件。每一行称为一个程序段,描述一个步骤:一次运动、一个机床功能或一项设置的改变。程序段由字组成,每个字由地址(字母)和数值构成,结构简单,便于阅读和修改,也方便在机床上直接编辑。
G代码指令N30 G01 X50.0 Y20.0 F200的意思是:第30段,以200 mm/min的进给速度直线运动到X=50、Y=20。它像句子一样从左往右读,随后伺服驱动以千分之一毫米级的精度执行运动。
解读G代码指令
熟悉地址就容易解读G代码指令:G选择运动类型或工作模式,M开关机床功能,X、Y、Z给出坐标,F为进给,S为主轴转速,T为刀具,N为程序段号。模态性很重要:大多数G指令一直有效,直到同组的另一条指令将其取消,所以一个G01之后,后面的程序段可以只写坐标。
坐标系与机床零点
机床零点是制造商设定的固定参考点,通常位于各轴行程的末端。机床每次开机和回参考点后都以它为基准建立坐标系。工件零点则是便于标注零件尺寸的零点,例如零件的某个角或孔的轴线。两者必须区分清楚,否则程序会在错误的位置加工。
由于机床零点离工件很远,因此使用零点偏置:G54-G59存储机床零点与工件零点之间的距离,在对刀时用测头测得。G53临时切换回机床坐标,G28返回参考点,较早的G92在程序中设定零点。G90按当前零点绝对编程,G91按当前位置增量编程。
混淆机床零点和工件零点,或者输错偏置值,都会导致废品或碰撞,所以开机前一定要检查程序设置。控制Z轴运动,先到安全高度再下刀,可以保护刀具和工件,因此回机床零点时要先编程Z轴。
最重要的G指令:刀具运动
最重要的G指令是四种运动,每一门CNC编程入门课都从它们开始。G00是快速移动,即在材料外定位CNC刀具;G01是按编程进给的直线运动;G02和G03是顺时针和逆时针圆弧插补。这些运动指令足以加工大多数轮廓,是读懂任何程序的基础。
借助圆弧插补,操作者无需计算就能铣出圆弧,而G01切削运动则引导刀具沿边缘移动。G04是暂停,例如在孔底停留。较少见的有G05和G06(高速加工、样条)、G07(虚拟轴)和G09(准确停止):这些已取决于具体的控制系统和机床类型。

G代码列表:CNC G代码及其功能
大多数控制系统的G代码列表包括几组:运动、单位与尺寸方式、零点、刀具补偿(G40-G43)、固定循环(G76-G87)以及进给方式(G94-G97)。下表列出符合ISO 6983和DIN 66025的G指令及说明。
| 代码 | 功能 |
|---|---|
| G00 | 材料外快速移动 |
| G01 | 以切削进给直线运动 |
| G02 / G03 | 顺时针 / 逆时针圆弧插补 |
| G04 | 暂停 |
| G09 | 程序段准确停止 |
| G20 / G21 | 英寸 / 毫米 |
| G28 | 返回参考点 |
| G33 | 进给与主轴同步的螺纹切削 |
| G40 / G41 / G42 | 取消 / 左 / 右刀具半径补偿 |
| G43 | 刀具长度补偿 |
| G53 | 机床坐标 |
| G54-G59 | 工件零点偏置 |
| G76 | 精镗(铣床)、螺纹循环(车床) |
| G79 | 参数化循环(部分控制系统) |
| G80 | 取消固定循环 |
| G81 / G82 / G83 | 钻孔循环:普通 / 带暂停 / 啄钻 |
| G84 | 攻丝 |
| G87 | 反镗 |
| G90 / G91 | 绝对 / 增量尺寸 |
| G92 | 程序中设定零点 |
| G94 / G95 | 进给 mm/min / mm/r |
| G96 / G97 | 恒切削速度 / 恒主轴转速 |
| G98 / G99 | 返回初始平面 / 退刀平面 |
刀具半径与长度补偿
G41和G42把路径偏移一个刀具半径,这样编程的是零件轮廓而不是刀具中心;G40取消补偿,G43加入刀具表中的长度补偿。刀具重磨后,只需修改刀具表中的一个数值。
钻孔与攻丝循环
钻孔循环把接近、钻削和退刀写在一个程序段里。G81用于浅孔,G82在孔底暂停,G83分段退刀以断屑。G84是刚性攻丝,G98和G99设定返回高度,G80结束循环。
单位、进给与主轴转速
G20和G21在英寸和毫米之间切换。G94和G95决定进给按每分钟还是每转计算,G96和G97属于车床:恒切削速度会随直径改变主轴转速。
M代码:CNC机床功能
M代码是这门语言的另一半:开关与几何无关的机床功能的指令,例如主轴、冷却液和换刀。所有CNC机床都能理解核心M代码,但M30以上的编号由制造商自由分配,因此其含义一定要查阅具体控制系统的说明书,不能想当然。
| 代码 | 功能 |
|---|---|
| M00 / M01 | 程序停止 / 选择停止 |
| M03 / M04 | 主轴正转 / 反转 |
| M05 | 主轴停止 |
| M06 | 换刀 |
| M08 / M09 | 冷却液开 / 关 |
| M30 | 程序结束并返回开头 |
现代CNC机床配有刀库,所以换刀是自动的:程序段T05 M06无需操作者参与即可换上5号刀。
G代码示例:逐行讲解CNC程序
下面的示例程序有17个程序段:设定毫米、绝对尺寸和G54零点,用直径10 mm的铣刀沿矩形轮廓铣深2 mm,换刀后用G81循环钻一个孔,最后以M30结束。这是一个典型的铣床G代码程序,适合用来入门。
%
O0006 (PLATE 60x40)
N10 G21 G90 G54 (mm, absolute, G54)
N20 T01 M06 (end mill 10 mm)
N30 S3000 M03 (3000 rpm CW)
N40 G00 X-10.0 Y-10.0 Z5.0
N50 G01 Z-2.0 F100 (plunge 2 mm)
N60 G01 X70.0 F300 (bottom edge)
N70 Y50.0 (right side, G01 active)
N80 X-10.0 (top edge)
N90 Y-10.0 (back to start)
N100 G00 Z50.0 (retract)
N110 T02 M06 (drill 6 mm)
N120 S1500 M03
N130 G00 X30.0 Y20.0 (above hole)
N140 G81 Z-12.0 R2.0 F80 (drilling cycle)
N150 G80 G00 Z50.0 (end of cycle)
N160 M05 M09 (spindle, coolant off)
N170 M30 (end of program)
%
这个简短的程序展示了最重要的内容:开头的设置、沿轮廓的刀具运动、固定循环以及规范的结束。它是学习G代码编程很好的机器代码示例。
生成G代码与验证NC代码
简单零件可以手写G代码,复杂形状则交给CAD/CAM系统:它们根据三维模型计算刀具路径,再由后处理器翻译成控制系统的方言。DraftSight G-Code Generator可从二维图纸生成程序,3D打印切片软件也会生成G代码。
无论来源如何,结果都是可以手工修改的文本文件。开机前最好在仿真软件中检查:NC代码的图形验证能发现碰撞和错误偏置,代价比断一把铣刀低得多。只有非常简单的程序才可以不经仿真直接运行;首件要降低进给加工。

车床、铣床与激光切割:使用G代码的CNC加工
凡是需要可重复运动控制的地方,都由G代码控制运动。铣床和车床是传统的切削加工,但同一种语言也用于激光切割、等离子切割、水刀切割和磨床,甚至工业机器人和3D打印机,各自使用自己的方言和循环。
CNC机床的用途决定了使用哪些指令组:车床上以G96和车削循环为主,等离子切割机的运动只限于两个轴,加工中心则用到全部指令。为生产选择合适的CNC机床时,应检查控制系统和可用的后处理器。
CNC机床的潜力:机床优化与过程自动化
CNC机床的优化从代码开始:缩短G00空行程、合理安排工序顺序、减少换刀次数并匹配进给,无需任何投资就能把节拍时间缩短几十个百分点。CNC机床的全部潜力要靠过程自动化才能释放:棒料送料器、测头以及上下料机器人。
每节省一分钟主轴时间都有实际价值,详见CNC加工中最贵的一分钟。编程时间和主轴时间也直接体现在零件价格上,MetronQ的CNC自动报价正是基于这一原理,按工厂自行录入和校准的机床计算。
关于G代码的常见问题
CNC用的G代码和M代码有什么区别?
G代码指令描述几何形状和运动:刀具往哪里走、走多快、沿什么路径。M代码控制机床的装置:主轴、冷却液和刀库。例如G00和G01是快速移动和切削运动,M03启动主轴,M06换刀,M30结束程序。完整的CNC程序会交替使用这两类代码。
车床和铣床上的G代码一样吗?
不完全一样:核心是共通的(G00-G03、G90、G91),但车床在X和Z轴上工作,使用G96、G97和自己的车削循环,铣床则有钻孔循环和XY平面的半径补偿。铣床程序不经修改无法在车床上运行,即使控制系统是同一家制造商的也一样。
自动换刀是如何工作的?
像T03 M06这样的程序段让机床把当前刀具放回刀库并取出3号刀。控制系统同时加入刀具表中的长度补偿(G43),使每把刀在Z轴上都有正确的零点。因此一个程序可以在一次装夹中完成钻孔、铣削和攻丝,无需操作者干预。
主轴转速和进给由什么设定?
地址S设定主轴转速,例如S3000,M03或M04启动主轴。地址F设定进给速度,G94时单位为mm/min,G95时为mm/r。在车床上,G96使切削速度不随直径变化,G97恢复恒定转速。
有了CAD/CAM,做CNC加工还需要懂G代码吗?
需要,至少要能读懂。CAM系统会生成程序,但在机床上总有需要修改的地方:进给、零点偏置、程序段顺序。后处理器输出的是文本文件,懂G代码的操作者能在后处理错误造成断刀或废品之前发现它,这一点在批量生产中尤其重要。
程序层面的CNC机床优化有什么用?
用于缩短节拍时间、降低刀具成本:减少空行程和换刀次数,并让进给与材料相匹配。更短的G00路径和合理的工序顺序,无需投资就能把节拍时间缩短几十个百分点。在批量生产中,即使很小的程序改进也会乘以零件数量,回报非常可观。
下载
参考来源
- 1.ISO 6983-1:2009(程序格式与地址字)
- 2.DIN 66025(NC程序结构)
- 3.P. Smid,《CNC Programming Handbook》,第3版,Industrial Press,2008年(G代码、M代码与固定循环)
- 4.LinuxCNC文档,linuxcnc.org(RS-274/NGC方言)。
