1. G代码概述:数控机床的通用语言

大家好,我是老陈。干CNC这行快二十年了,今天咱们聊聊G代码。

G代码是什么?说白了,它就是数控机床的「指令集」。你给机床发一条指令,它就执行一个动作。比如G01,机床就知道:「哦,该直线切削了。」

我刚开始接触数控时,觉得这东西挺神秘。后来自己写了个解析器,才明白——G代码其实就是一串有格式的文本命令。每行代码告诉控制器:用什么速度、走什么路径、要不要开冷却液。

核心定义:G代码(Geometric Code)是数控加工中用于控制机床运动轨迹和加工参数的标准化指令语言。它遵循ISO 6983 / RS-274D标准。

G代码在数控加工中的角色

你可以把G代码想象成「乐谱」,数控机床就是「演奏家」。乐谱写得好,演奏就流畅;乐谱写错了,机床就撞刀。

具体来说,G代码承担了三个关键角色:

  • 运动控制——告诉机床往哪走、怎么走(直线、圆弧、快速移动)
  • 工艺参数设定——设定主轴转速、进给速度、冷却液开关
  • 坐标系管理——定义工件原点、刀具长度补偿、半径补偿

我在项目中遇到过一件事:一个新手写的G代码,G90和G91混用,结果刀具直接扎进了工件。嗯,从那以后我要求团队必须严格区分绝对坐标和增量坐标。

我的习惯:写G代码前,先画一张加工路径草图。哪怕只是手绘的,也能避免80%的逻辑错误。

G代码与M代码的区别

很多人搞混G代码和M代码。其实很简单:

  • G代码管「怎么动」——控制几何轨迹和运动模式
  • M代码管「做什么」——控制机床辅助功能(开关、换刀、冷却)

举个例子:

G01 X100 Y50 F200   ; 直线插补,走到(100,50),速度200
M03 S1500           ; 主轴正转,转速1500转/分
M08                 ; 开启冷却液
G00 Z10             ; 快速移动到Z=10高度
M05                 ; 主轴停止
M09                 ; 关闭冷却液

你看,G01、G00是G代码,管运动。M03、M08、M05、M09是M代码,管开关。泾渭分明。

为什么会有人搞混?因为有些老机床的M代码也带运动功能,比如M19(主轴定向)。但现代数控系统已经严格区分了。

避坑指南:我曾经见过一个案例,操作员在M06(换刀)后面忘了加G43(长度补偿),结果刀尖直接撞到工件表面。记住:M代码只管「动作」,不管「位置」。位置控制永远是G代码的职责。

G代码的分类

G代码按功能可以分为几大类。我整理了一个表格,方便你对照:

类别 代码范围 典型指令 说明
运动指令 G00-G04 G00(快速定位)、G01(直线插补)、G02/G03(圆弧) 最常用,控制刀具路径
平面选择 G17-G19 G17(XY平面)、G18(XZ平面)、G19(YZ平面) 决定圆弧插补的平面
坐标系 G53-G59 G54(工件坐标系1)、G55(工件坐标系2) 定义工件零点位置
补偿指令 G40-G43 G40(取消补偿)、G41(左补偿)、G43(长度补偿) 刀具半径/长度补偿
固定循环 G73-G89 G81(钻孔)、G84(攻丝)、G73(高速深孔钻) 简化重复加工动作
其他 G90-G99 G90(绝对坐标)、G91(增量坐标)、G94(进给率) 模式设定

你想想看,如果没有G代码,我们得手动摇手轮,一个零件加工下来胳膊都酸了。G代码让机床自动运行,而且精度能达到微米级。

G代码的语法结构

一条完整的G代码指令长这样:

N10 G01 X100.5 Y50.2 Z-5.0 F200 S1500 M03

拆开来看:

  • N10 —— 行号(可选,但建议加,方便调试)
  • G01 —— 准备功能(直线插补)
  • X100.5 Y50.2 Z-5.0 —— 坐标值(终点位置)
  • F200 —— 进给速度(mm/min)
  • S1500 —— 主轴转速(rpm)
  • M03 —— 辅助功能(主轴正转)

这里有个细节:G代码是模态的。什么意思?就是如果你上一行写了G01,下一行没写,机床默认还是G01模式。我刚开始写解析器时没注意这个,结果解析出来的路径全乱了。

模态规则:G代码分为模态指令(一直有效直到被同组指令取代)和非模态指令(仅当前行有效)。G00、G01、G02、G03属于同一模态组,互相取代。

G代码的局限性

说实话,G代码并不完美。它有几个明显的缺点:

  • 可读性差——满屏的G01、X、Y、Z,看久了眼花
  • 缺乏变量支持——没有循环、条件判断(虽然有些系统扩展了宏程序)
  • 标准化不足——不同厂商的G代码有差异,比如海德汉和发那科的代码就不完全一样

但即便如此,G代码依然是数控加工的事实标准。你想想看,从1950年代诞生到现在,它还在用,说明这东西确实管用。

我个人习惯是:写G代码时,尽量用注释把逻辑说清楚。比如:

(粗加工外轮廓)
G90 G54 G00 X0 Y0
G43 Z10 H01
G01 Z-2 F100
G01 X50 Y0 F200
G02 X50 Y0 I-25 J0
G00 Z10
M30

括号里的内容就是注释,机床会忽略,但人看得懂。这个习惯帮我省了不少排查时间。

知识体系总览

下面这张图是我画的G代码知识体系结构,帮你理清脉络:

G代码知识体系 G代码 定义与标准 在加工中的角色 与M代码的区别 ISO 6983标准 RS-274D标准 运动控制 工艺参数 坐标系管理 G:几何运动 M:辅助功能 G代码 = 数控机床的「运动语言」 理解G代码是手写解析器的第一步

这张图把G代码的核心知识点串起来了。你从定义出发,理解它在加工中的角色,再搞清楚它和M代码的区别,基础就打牢了。

好了,这一章就到这里。记住:G代码不难,难的是严谨。写解析器时,每一个字符都不能错。下一章我们开始动手写解析器的核心逻辑。


公众号:蓝海资料掘金营,微信deep3321