第二讲:G代码语法结构——行号、G、M、坐标字、F、S、T
大家好,我是老陈。干CNC这行快二十年了,今天咱们聊聊G代码的语法结构。
很多人觉得G代码就是一堆字母加数字,随便写写就能跑。嗯,我刚开始也这么想,直到有一次在车间里,一台五轴机因为一个逗号的位置不对,直接撞了刀。那次损失可不小,从那以后,我对语法结构就特别较真。
说白了,G代码就是数控机床的“语言”。你得按它的语法规则来,它才能听懂。今天我就把最核心的七个要素掰开揉碎了讲给你听。
核心要点:G代码的每一行,本质上就是一个“指令包”。这个包里可以包含:行号、准备功能、辅助功能、坐标字、进给率、主轴转速、刀具号。但不是每行都要写全,缺什么取决于你要干什么。
1. 行号(N)——程序的“门牌号”
行号就是N后面跟一串数字,比如N10、N20、N100。它不参与加工,纯粹是为了让人好找位置。
我个人习惯用N10、N20、N30这样跳着编,中间留出空间。为什么?因为后期调试时,你可能需要在两行之间插入新指令。如果你用了N1、N2、N3,想插一行都难。
我的经验:行号不是必须的。很多现代数控系统根本不看行号,它只按顺序执行。但如果你要调试程序、跳转执行,行号就特别有用。我建议养成写行号的习惯,哪怕只是为了自己看着方便。
2. 准备功能(G)——机床的“动作指令”
G代码是G代码里最核心的部分。它告诉机床:你要干什么。
常见的G代码有:
- G00:快速定位,不切削,只管跑得快
- G01:直线插补,边跑边切
- G02/G03:圆弧插补,顺时针/逆时针
- G90/G91:绝对坐标/增量坐标模式
我记得有一次,一个新手把G01写成了G0(少了个0),结果机床直接快速移动撞上了工件。嗯,这里要注意:G代码的格式是严格固定的,G01不能写成G1(虽然有些系统支持,但为了兼容性,我建议按标准写)。
避坑指南:G代码是模态的,意思是它一旦设定,后面没写新G代码之前都有效。比如你写了G01,后面几行没写G代码,机床默认还是G01模式。我曾经见过有人每行都写G01,虽然没错,但看着累赘。反过来,也有人忘了写G代码,结果机床用上一段的G00快速移动去切削,直接崩刀。
3. 辅助功能(M)——机床的“开关指令”
M代码管的是机床的开关动作,比如主轴转不转、冷却液开不开。
| M代码 | 功能 | 说明 |
|---|---|---|
| M03 | 主轴正转 | 顺时针旋转 |
| M04 | 主轴反转 | 逆时针旋转 |
| M05 | 主轴停止 | 停转 |
| M08 | 冷却液开 | 开切削液 |
| M09 | 冷却液关 | 关切削液 |
| M30 | 程序结束 | 复位并停止 |
M代码和G代码最大的区别是什么?G代码管的是“怎么走”,M代码管的是“开什么关什么”。你想想看,主轴不转,你让机床去切削,那不是扯吗?
4. 坐标字(X、Y、Z、A、B、C)——目标位置
坐标字就是告诉机床:你要去哪儿。
X、Y、Z是三个直线轴,A、B、C是旋转轴。坐标值可以是整数,也可以是小数。比如X100.5,表示X轴走到100.5毫米的位置。
这里有个坑:小数点。有些老系统要求必须带小数点,比如X100.要写成X100.0。我遇到过一台设备,写X100它当成X0.1(因为系统默认单位是微米)。那次差点报废一个模具。
我的建议:坐标值一律带小数点,哪怕整数也写成X100.0。这样既清晰又安全,不会因为系统设置不同而出错。
5. 进给率(F)——切削速度
F代码控制刀具移动的速度,单位通常是毫米/分钟(mm/min)。
比如F300,就是每分钟走300毫米。F值的大小直接影响加工效率和表面质量。太快了伤刀具,太慢了效率低。
我个人习惯:粗加工用F200-F400,精加工用F100-F200。当然,这取决于材料和刀具。有一次我加工铝合金,用了F600,结果刀具磨损得特别快。后来降到F300,效果就好多了。
6. 主轴转速(S)——转多快
S代码控制主轴转速,单位是转/分钟(rpm)。比如S1500,就是主轴每分钟转1500圈。
S值和F值要匹配。怎么匹配?看刀具直径和材料。一般来说,小刀具转速高,大刀具转速低。硬材料转速低,软材料转速高。
举个例子:用直径10毫米的铣刀加工钢件,S值大概在2000-3000转。用直径20毫米的铣刀,S值降到1000-1500转。这是经验值,具体还要看刀具厂商的推荐。
7. 刀具号(T)——用哪把刀
T代码告诉机床:换第几号刀具。比如T01,就是用1号刀。
在加工中心上,T代码通常和M06(换刀指令)配合使用。比如:
T01 M06 ; 换1号刀
G43 H01 ; 调用1号刀的刀长补偿
这里要注意:T代码只是指定刀具号,真正执行换刀动作的是M06。我见过有人只写了T01没写M06,结果机床没换刀,直接用上一把刀去加工,后果可想而知。
避坑指南:写T代码时,一定要确认刀库里有这把刀,而且刀具参数(长度、半径)已经设置正确。我曾经因为忘记设置刀长补偿,直接撞坏了工件。从那以后,我每次换刀前都会检查一遍刀具参数。
完整示例:一行G代码的“解剖”
咱们来看一个完整的例子:
N10 G90 G00 X0 Y0 Z100.0
N20 T01 M06
N30 G43 H01
N40 S2000 M03
N50 G01 Z-5.0 F200
N60 X100.5 Y50.2
N70 G00 Z100.0
N80 M05
N90 M30
我来一行行解释:
- N10:行号10,设置绝对坐标模式,快速移动到X0 Y0 Z100位置
- N20:换1号刀
- N30:调用1号刀的刀长补偿
- N40:主轴转速2000转,正转
- N50:直线插补,Z轴下到-5毫米,进给率200
- N60:移动到X100.5 Y50.2位置(此时Z保持-5,继续切削)
- N70:快速抬刀到Z100
- N80:主轴停止
- N90:程序结束
你看,这一小段程序里,行号、G代码、M代码、坐标字、F值、S值、T值全用上了。每个要素各司其职,缺一不可。
最后提醒一句:G代码的语法结构看似简单,但细节决定成败。一个逗号、一个小数点、一个字母的大小写,都可能让机床“发疯”。我见过太多因为语法错误导致的撞机事故了。所以,写程序时多检查一遍,总比修机床省钱。
公众号:蓝海资料掘金营,微信deep3321