一、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代码坐标系知识体系。你看一眼,心里就有谱了。
实战中的坐标系选择
在实际项目中,我一般这样选:
- 单件加工:用G54,把原点设在工件中心或角点
- 多工位加工:用G54~G59分别对应不同工位,省去重复对刀
- 回机床原点:用G53,比如换刀前
G53 Z0让Z轴回到安全位置
解析器实现思路:在写G代码解析器时,我会维护一个current_coord_system变量,默认是G54。遇到G54~G59指令时,更新这个变量。遇到G90/G91时,更新is_absolute标志位。这样后续的坐标计算就能正确执行了。
好了,这一章的内容就这些。坐标系和编程模式是G代码的基石,搞懂了它们,后面的路径控制、进给速度、主轴控制学起来就轻松多了。