← 博客

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

阅读约 11 分钟

MetronQ 团队
显示G代码行的CNC控制器屏幕
Designed by Magnific

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(准确停止):这些已取决于具体的控制系统和机床类型。

CNC铣削:刀具在材料中进行切削运动
Designed by Magnific

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代码的图形验证能发现碰撞和错误偏置,代价比断一把铣刀低得多。只有非常简单的程序才可以不经仿真直接运行;首件要降低进给加工。

带进给倍率旋钮的CNC机床操作面板
Designed by Magnific

车床、铣床与激光切割:使用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路径和合理的工序顺序,无需投资就能把节拍时间缩短几十个百分点。在批量生产中,即使很小的程序改进也会乘以零件数量,回报非常可观。

下载

G代码与M代码列表 - PDF速查表

一页汇总最常用的G代码和M代码及说明:程序段结构、运动指令、零点、补偿、固定循环和机床功能,并附运行程序前的检查清单。A4纵向。

主题CNC编程G代码技术

参考来源

  1. 1.ISO 6983-1:2009(程序格式与地址字)
  2. 2.DIN 66025(NC程序结构)
  3. 3.P. Smid,《CNC Programming Handbook》,第3版,Industrial Press,2008年(G代码、M代码与固定循环)
  4. 4.LinuxCNC文档,linuxcnc.org(RS-274/NGC方言)。

接着读

CNC 加工自动报价

根据三维模型或图纸,按您的机床和费率算出价格,您只需审批。头 14 天免费,不用绑卡。

免费注册账号