第三节 G代码基础与程序结构:G代码与M代码分类、程序名与程序段格式、主程序与子程序结构
各位同学,欢迎来到数控编程的核心地带。今天我们要聊的,是每个数控人都绕不开的“通用语言”——G代码和M代码。说白了,这就是你跟机床沟通的“暗号”。你写对了,它干活;你写错了,它罢工,甚至可能“自残”。
我刚开始学编程那会儿,总觉得G代码就是一堆字母加数字,死记硬背就行。结果有一次,我编了个程序,机床主轴死活不转。我查了半天,最后发现是M03写成了M30。嗯,M30是程序结束,主轴当然不转。从那以后,我对每一个代码都多了一份敬畏。
一、G代码与M代码:机床的“动词”和“状态词”
G代码,全称是准备功能代码。它告诉机床“怎么动”。比如G01是直线切削,G02是顺时针圆弧。你可以把它想象成“动词”。
M代码,全称是辅助功能代码。它告诉机床“开什么、关什么”。比如M03是主轴正转,M08是开冷却液。这更像是“状态词”。
我个人习惯,把G代码和M代码分成几大类,这样记起来不费劲:
| 类别 | 常见代码 | 作用 | 我的经验 |
|---|---|---|---|
| 运动类G代码 | G00, G01, G02, G03 | 控制刀具移动轨迹 | G00快速定位时,一定要确认路径上没有障碍物。我见过有人撞刀,就是G00没算好安全距离。 |
| 平面选择类 | G17, G18, G19 | 指定加工平面(XY/XZ/YZ) | 车床默认G18(XZ平面),但如果你用动力头,就得小心了。 |
| 刀具补偿类 | G40, G41, G42 | 刀具半径补偿的取消/左/右 | 补偿用不好,尺寸肯定超差。我建议新手先关掉补偿(G40),手动算刀路。 |
| 固定循环类 | G70, G71, G72, G73 | 粗车、精车、螺纹等复合循环 | 这是车床编程的“大招”,后面章节会细讲。 |
| 主轴与冷却M代码 | M03, M04, M05, M08, M09 | 主轴正反转、停止;冷却液开/关 | M03和M04千万别搞反。有一次我徒弟把M04(反转)用在攻丝上,丝锥直接断了。 |
| 程序控制M代码 | M00, M01, M02, M30 | 程序暂停、选择停止、结束 | M00是“无条件暂停”,常用于测量。M30是“结束并复位”,光标会回到程序头。 |
核心要点:G代码是“模态”的,意思是它一旦设定,后续程序段都有效,直到被同组别的G代码取代。比如G01是直线插补,你写了G01 X10,下一行只写Z-20,它还是直线切削。M代码大部分是“非模态”的,只在本行生效。
二、程序名与程序段格式:写程序的“语法规则”
你想想看,写文章有标点符号,写程序也有它的“语法”。数控程序的基本单元是“程序段”,一个程序段就是一行指令。
程序名:每个程序都有一个名字。在FANUC系统里,程序名以O开头,后面跟4位数字,比如O1234。西门子系统用%开头。我建议你给程序起名时有点规律,比如O1001代表“某产品第一道工序”,不然程序多了,找起来像大海捞针。
程序段格式:一个标准的程序段长这样:
N10 G01 X50.0 Z-20.0 F0.15 S1200 M03 T0101 ;
我们来拆解一下:
- N10:顺序号(行号)。不是必须的,但我强烈建议加上。调试程序时,你直接搜N50就能定位,省时间。
- G01:准备功能,告诉机床直线切削。
- X50.0 Z-20.0:坐标值。注意,小数点不能省。写X50机床可能理解为X0.050,这是血泪教训。
- F0.15:进给速度,单位是mm/转(车床常用)。
- S1200:主轴转速,单位是转/分钟。
- M03:主轴正转。
- T0101:调用1号刀具,并启用1号刀补。
- ;:程序段结束符。在FANUC系统里,分号就是“回车键”。
我的小技巧:写程序时,我习惯把G代码放在最前面,然后是坐标,最后是M代码和T代码。这样读起来一目了然。另外,每行只写一个动作,别把G01和G00写在同一行,机床会懵的。
三、主程序与子程序结构:学会“偷懒”的艺术
做机械加工,最怕重复劳动。如果你要加工6个一模一样的零件,难道要把同样的程序写6遍?当然不。这时候,子程序就派上用场了。
主程序:是程序的“总指挥”。它负责调用子程序,控制加工流程。
子程序:是“具体干活的”。它里面存放重复的加工步骤。
举个例子,你要车一个阶梯轴,外圆粗车、精车、切槽这三个步骤,每个零件都要做一遍。你可以把这三个步骤写成一个子程序,主程序里循环调用它。
结构如下:
O1000 (主程序)
N10 G21 G40 G99 ; 公制、取消补偿、每转进给
N20 M03 S1500 T0101 ; 主轴正转,调用1号刀
N30 G00 X100.0 Z50.0 ; 快速定位到安全点
N40 M98 P2000 L6 ; 调用子程序O2000,重复6次
N50 G00 X100.0 Z50.0 ; 返回安全点
N60 M30 ; 程序结束
O2000 (子程序)
N10 G01 X50.0 Z-10.0 F0.2 ; 外圆粗车
N20 G00 X55.0 Z2.0 ; 退刀
N30 G01 X48.0 Z-10.0 F0.1 ; 外圆精车
N40 G00 X55.0 Z2.0 ; 退刀
N50 G01 X45.0 Z-10.0 F0.15 ; 切槽
N60 G00 X100.0 Z50.0 ; 返回安全点
N70 M99 ; 子程序结束,返回主程序
你看,主程序里用M98 P2000 L6调用了子程序6次。P后面是子程序号,L后面是重复次数。如果不写L,默认执行1次。
避坑指南:我曾经犯过一个错,子程序里用了M30(程序结束)。结果调用一次就停了,后面的5次全废了。记住,子程序结尾必须是M99,不是M30。M99的意思是“返回主程序”,M30是“全剧终”。
四、知识体系框架:一张图看懂
为了让你更直观地理解今天的内容,我画了一张结构图。它把G代码、M代码、程序结构串在了一起。你保存下来,以后忘了就看看。
这张图把今天的内容串起来了。从最顶层的“数控程序”,往下拆成主程序和子程序,再往下是程序段,最后是具体的G代码和M代码。你写程序的时候,脑子里要有这个层次感。
好了,G代码基础就讲到这里。记住,编程不是背代码,而是理解逻辑。你多写几遍,自然就熟了。下次我们聊聊坐标系,那是所有刀路的“地基”。