一、G代码基础与坐标系

G代码的前世今生

G代码这东西,说白了就是数控机床的“通用语言”。上世纪50年代,MIT的工程师们搞出了第一台数控铣床,那时候的编程方式还很原始——打孔纸带。后来为了统一标准,就有了RS-274标准,也就是我们现在用的G代码。

我个人习惯把G代码分成两类:模态代码和非模态代码。模态代码就像“开关”,你打开一次,它就一直生效,直到被同组的其他代码取代。非模态代码呢,只对当前行有效,用完就失效了。

核心要点:G代码的本质就是告诉机床“去哪里”和“怎么去”。理解了这个,后面学起来就顺了。

坐标系——机床的“世界观”

你想想看,一台数控机床,它怎么知道刀具该往哪儿走?这就得靠坐标系了。

机床坐标系(MCS)

每台机床出厂时,都有一个固定的坐标系原点,叫机床原点。这个点通常设在机床的某个极限位置,比如Z轴的正极限附近。机床坐标系是绝对的,不会因为你的工件摆放位置而改变。

我记得有一次在车间调试一台老式的FANUC系统,操作员把工件装偏了,结果程序跑起来直接撞刀。为什么?因为他以为工件坐标系和机床坐标系是同一个东西。嗯,这里要注意:机床坐标系是“房子的墙”,工件坐标系是“屋里的家具”,两者不能混为一谈。

工件坐标系(WCS)

工件坐标系就灵活多了。你可以把它的原点设在工件的任意位置,比如工件的左上角、中心点,或者某个基准孔上。编程时,我们通常用G54~G59来调用不同的工件坐标系。

坐标系 代码 特点
机床坐标系 G53 固定不变,参考机床原点
工件坐标系1 G54 可偏移,常用
工件坐标系2 G55 可偏移,多工位时用
工件坐标系3~6 G56~G59 可偏移,特殊场景

我的小技巧:在编写解析器时,我习惯用一个数组来存储G54~G59的偏移量。这样查找起来快,代码也干净。比如:double offsets[6][3]; 分别存X、Y、Z的偏移值。

绝对编程 vs 增量编程

这个知识点,说白了就是“你告诉机床怎么走”的两种方式。

绝对编程(G90)

所有坐标值都相对于当前工件坐标系的原点。比如 G90 G01 X100 Y50,意思就是刀具走到(100, 50)这个点,不管它之前在哪。

增量编程(G91)

坐标值相对于刀具当前位置。比如 G91 G01 X10 Y5,意思是从当前位置往X方向走10,往Y方向走5。

我曾经在写一个后处理器时,遇到一个客户提供的程序,里面G90和G91混着用,而且没有明确切换。结果解析出来的路径完全不对。后来我加了一个状态机,专门跟踪当前是G90还是G91模式,这才把问题解决。

避坑指南:我曾经见过一个新手,在G91模式下写了G01 X0 Y0,结果刀具直接撞到工件上。为什么?因为增量模式下X0 Y0意味着“不动”,但程序逻辑上他想让刀具回原点。所以,增量模式下千万别写0坐标,除非你真的想让刀具停在原地。

知识体系结构图

下面这张图,是我自己总结的G代码坐标系知识体系。你看一眼,心里就有谱了。

G代码坐标系知识体系 G代码 坐标系 编程模式 机床坐标系 (G53) 工件坐标系 (G54~G59) 绝对编程 (G90) 增量编程 (G91) 固定原点,不可偏移 可偏移,灵活设置 相对于原点 相对于当前位置 理解坐标系 → 正确编程 → 安全加工

实战中的坐标系选择

在实际项目中,我一般这样选:

  • 单件加工:用G54,把原点设在工件中心或角点
  • 多工位加工:用G54~G59分别对应不同工位,省去重复对刀
  • 回机床原点:用G53,比如换刀前 G53 Z0 让Z轴回到安全位置

解析器实现思路:在写G代码解析器时,我会维护一个current_coord_system变量,默认是G54。遇到G54~G59指令时,更新这个变量。遇到G90/G91时,更新is_absolute标志位。这样后续的坐标计算就能正确执行了。

好了,这一章的内容就这些。坐标系和编程模式是G代码的基石,搞懂了它们,后面的路径控制、进给速度、主轴控制学起来就轻松多了。