← 博客

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

· 阅读约 12 分钟

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

G代码是几乎每台数控机床都在说的语言——从小作坊里的铣床到工厂车间的加工中心。在这份指南里,你会看到从零讲起的G代码:它从哪里来、程序如何构成、最重要的G指令做什么、什么是机床零点,以及实践中G代码如何生成。最后我们把一个CNC示例程序逐行拆开。

什么是G代码

G代码是数控机床的标准编程语言,用来编写控制刀具运动和机床功能的指令。它的正式基础是两个标准:国际标准 ISO 6983 和德国标准 DIN 66025,它们定义了大多数控制系统共享的公共核心。名字来自最重要指令开头的字母G,尽管一个完整的CNC程序还包含地址 M、X、Y、Z、F、S 和 T。它的根源可以追溯到1950年代和美国的 RS-274 标准;今天每家控制系统制造商——发那科(Fanuc)、西门子(Siemens)、海德汉(Heidenhain)或开源的 LinuxCNC——都有自己的方言,但核心是共通的。在CNC编程语言中,G代码就像自然语言中的英语:会了它,你几乎能和任何机床对话。

G代码的目的很简单:把技术图纸上的几何形状变成规划好的刀具运动,外加对主轴、冷却液和刀库的指令。CNC加工(Computer Numerical Control)的含义正是:机床由程序控制,而不是靠手摇轮。这让金属切削变得可重复:程序写好一次,第一次运行和第一千次运行完全相同——这是我们称之为精密制造的基础。

CNC编程如何运作

CNC编程是把零件几何翻译成控制器能理解的指令的过程。CNC机床以一个简单的循环工作:控制器逐段读取G代码文件,解释指令并把它们转化为进给轴驱动和主轴的脉冲。编程刀具运动归结为描述刀具去哪里、多快、沿什么轨迹,而伺服驱动以千分之几毫米的精度执行运动。

典型的工作流程是这样的:设计师提供模型或图纸,工艺工程师规划工序和切削刀具,然后编写记录连续刀具运动和机床功能的程序。经过仿真和调试,程序上机,操作工监控首件。操作CNC机床不需要为每个零件从头写程序,但读懂并修改G代码是机床旁的核心技能。

G代码的结构:程序段、行与字

CNC程序是一个纯文本文件。G代码的每一行——称为程序段——描述一个步骤:一次运动、一项机床功能或一次设置更改。程序段由字组成,每个字是一个地址(字母)加一个数值。像 N30 G01 X50.0 Y20.0 F200 这样的指令意思是:第30段,直线切削移动到 X=50、Y=20 的点,进给速度 200 mm/min。

解读G代码指令

认识了地址,G代码就容易解读。G 选择运动类型或工作方式,M 切换机床功能,X、Y、Z 给出坐标,F 设定进给速度,S 设定主轴转速,T 选择刀具,N 给程序段编号。模态性很关键:大多数G指令保持有效,直到同组的另一条指令取消它。一条 G01 之后,后续程序段可以只含坐标,控制器继续执行直线运动。这就是为什么真实程序看起来如此精简:声明一次的方式对几十个程序段持续有效。

坐标系与机床零点

程序中的每个坐标都是从某个零点量起的,这里出现了一个关键区分。机床零点是制造商设定的固定基准,通常在轴行程末端;每次开机和回参考点后,机床都从这个点建立坐标系(G28 是返回与机床零点绑定的参考位置)。而工件零点是便于测量零件尺寸的零点,比如一个角或一个孔的轴线。

因为机床零点离装夹的零件很远,实践中使用零点偏置:指令 G54 到 G59 把机床零点与工件零点之间的距离存入控制器,这段距离在调试时用测头或百分表测出。之后程序员相对零件写坐标,控制器自己加上相对机床零点的偏置。G53 临时切回机床坐标,比如去一个安全的换刀位置;较老的 G92 则以编程方式设定零点,不用偏置表。此外还有两种尺寸方式:G90(绝对坐标,从当前有效零点量起)和 G91(增量坐标,从当前位置量起)。零点相关的错误是车间的经典事故:偏置输错、把机床零点和工件零点搞混,结局是报废或撞机——所以启动前总要核对程序设置。

最重要的G指令:刀具运动

四条运动指令是每门课程开头的绝对基础。G00 是快速移动:以机床最大速度在材料之外定位刀具。G01 是按编程进给的直线运动,也就是在材料中的实际切削运动。G02 和 G03 是顺时针和逆时针的圆弧插补;靠这两条指令可以铣出圆弧和圆,操作工不用做任何额外计算。G04——编程暂停——补齐这一组,例如用在孔底以改善孔的表面。

值得知道的是,这个家族还有更少见的代码:G05 和 G06 出现在高速加工和样条插补中,G07 涉及虚拟轴,G09 在拐角处强制准确停止。不过这些是特定控制系统和机床类型的特性。

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

CNC G代码:最重要指令一览

下表汇集了大多数程序中会遇到的G代码。可以当作与 ISO 6983 / DIN 66025 一致的速查表;不同控制系统的描述可能略有差异。

代码 功能
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 是刚性攻丝,控制器把主轴旋转与进给耦合——就像 G33 在车床上切螺纹那样。G98 和 G99 决定刀具在孔与孔之间返回的高度,G80 结束循环。

单位、进给与主轴转速

G20 和 G21 在英寸与毫米之间切换——每个从网上下载、单位不对的程序都会让人痛苦地想起这一点。G94 和 G95 定义进给是按每分钟还是每转,而 G96 和 G97 是车床的领地:恒线速度通过实时调整主轴转速,在变化的直径上保持表面质量。

M代码:机床功能

语言的另一半是M代码:切换与几何无关的机床功能的指令。最重要的有 M03 和 M04(主轴顺时针和逆时针启动)、M05(主轴停止)、M06(换刀)、M08 和 M09(冷却液)以及 M30——程序结束并返回开头。现代CNC机床配有刀库,换刀自动进行:程序段 T05 M06 装入5号刀,无需操作工参与。正是自动换刀让一个程序能在一次装夹中完成钻孔、铣削和攻丝。

逐行讲解一个G代码示例程序

这是一个简单的铣削程序:绕矩形走一圈轮廓,再钻一个孔。

%
O0006 (PLATE 60x40)
N10 G21 G90 G54          (毫米、绝对尺寸、工件零点G54)
N20 T01 M06              (换刀:10 mm立铣刀)
N30 S3000 M03            (主轴3000转/分,顺时针)
N40 G00 X-10.0 Y-10.0 Z5.0  (快速移动到起点上方)
N50 G01 Z-2.0 F100       (下刀至2 mm深,切削进给)
N60 G01 X70.0 F300       (沿下边直线运动)
N70 G01 Y50.0            (右边 - G01仍然有效)
N80 G01 X-10.0           (上边)
N90 G01 Y-10.0           (回到起点)
N100 G00 Z50.0           (安全退刀)
N110 T02 M06             (换刀:6 mm钻头)
N120 S1500 M03           (新的主轴转速)
N130 G00 X30.0 Y20.0     (定位到孔上方)
N140 G81 Z-12.0 R2.0 F80 (钻孔循环至-12 mm)
N150 G80 G00 Z50.0       (取消循环,退刀)
N160 M05 M09             (主轴和冷却液停止)
N170 M30                 (程序结束)
%

这段短脚本展示了所有要点:开头的设置、沿轮廓的刀具运动、一个固定循环和干净利落的收尾。控制Z轴移动(先到安全高度、再下刀)是同时保护刀具和零件的习惯。

生成G代码:手写还是CAD/CAM

简单零件可以在机床旁手工编程,很多操作工每天都这么干。复杂形状手写就没有意义了:G代码生成由 CAD/CAM 系统接管——它们从3D模型规划刀具路径,后置处理器再把路径翻译成具体控制系统的方言。更简单的工具也能生成G代码:DraftSight G-Code Generator 直接从2D图纸生成程序,3D打印切片软件为打印机生成G代码,免费的 LinuxCNC 能让你用一台普通电脑驱动自己的机床。无论来源如何,生成的终点都是一个文本文件——永远可以手工再润色。

NC代码的验证

程序上机之前值得在仿真器里检查一遍:图形验证抓出碰撞、错误偏置和笔误,比断一把铣刀便宜得多。另一个好习惯是降低进给做首件,手放在倍率旋钮上。琐碎的程序跳过仿真可以接受;其他一切情况下,这几分钟纯粹是赚的。

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

哪里会遇到G代码

尽管人们把G代码和铣削联系在一起,但在几乎所有需要可重复机器运动的地方,它都在控制运动。铣床和车床是经典,但同一种语言还驱动激光切割、等离子切割、线切割和水刀、磨床、镗床,甚至工业机器人和3D打印机。不是所有CNC机床都懂完全相同的方言,所以为生产选机床时值得核对控制系统和可用的后置处理器。应用也决定哪些指令组用得多:车床上 G96 和螺纹循环当家,切割台上运动只有两轴,加工中心则用上全套。

CNC机床的潜力:优化与过程自动化

写得好的程序不只是几何正确。CNC优化从代码开始:更短的 G00 路径、深思熟虑的工序顺序、更少的不必要换刀、匹配材料的进给,能在零投资的情况下把节拍时间缩短百分之几十。CNC机床的全部潜力由过程自动化释放:棒料送料器、测头和上下料工业机器人让机床持续运转,操作工去做别的事。为什么每一分钟省下的主轴时间都如此值钱,我们在CNC加工中最贵的一分钟一文中写过。

从采购方的角度看,逻辑相同,只是反过来:你的零件需要的编程和主轴小时越少,付的钱就越少。在 MetronQ 报价工具中,零件几何直接换算成加工时间,参考费率列在价格区。还要记住:价格不仅由程序驱动,还由图纸公差和要求的表面粗糙度决定。

关于G代码的常见问题

**G代码和M代码有什么区别?**G指令描述几何和运动:刀具去哪里、多快、沿什么轨迹。M代码控制机床的设备:主轴、冷却液、刀库。完整的CNC程序交替使用两者。

**车床和铣床上的G代码一样吗?**核心是共通的(G00、G01、G02、G03、G90、G91),但车床在X和Z轴工作、使用G96/G97和自己的车削循环,而铣床有钻孔循环和XY平面内的补偿。铣削程序不经改写无法在车床上运行。

**自动换刀是如何工作的?**像 T03 M06 这样的程序段命令机床把当前刀具放回刀库并装入3号刀。控制器套用刀具表中的长度补偿(G43),所以每把刀在Z轴上都有正确的零点。

**主轴转速和进给由什么设定?**地址S设定转速(如S3000),M03/M04启动它;地址F定义进给速度,按G94或G95解释。车床上G96保持与直径无关的恒定线速度。

**想写第一个CNC程序该从哪里开始?**从四种运动(G00、G01、G02、G03)、G90/G91尺寸方式,以及理解机床零点和G54偏置是什么开始。然后是钻孔循环和半径补偿。一个免费仿真器或LinuxCNC就足够在没有机床的情况下练习。

**有了CAD/CAM还需要懂G代码吗?**实践中需要,至少要能看懂。CAM系统会生成程序,但在机床旁总有东西要改:一个进给、一个零点偏置、程序段的顺序。会读G代码的操作工能在后置处理器错误毁掉一把铣刀或一个零件之前把它抓出来。

**程序层面的CNC优化有什么用?**缩短节拍、节省刀具:更少的空行程、更少的换刀、匹配材料的进给。在批量生产中,哪怕微小的程序改进都会乘以零件数量。

主题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方言)。

接着读

拿您自己的零件试一次

注册一个账号,上传您自己的 STEP 文件,把算出的价格和您自己的比一比。头 14 天免费,不用绑卡。

免费注册账号