第2章:数控编程基础:G代码与M代码的区别、M代码分类、M代码执行机制、M代码格式规范
各位同学,欢迎来到第二章。
上一章我们聊了数控系统二次开发的整体框架。今天,咱们把基础打牢——G代码和M代码。
很多刚入行的朋友,容易把这两者搞混。我见过不少工程师,写起G代码来行云流水,一到M代码就卡壳。说白了,就是没搞懂它们各自的角色。
2.1 G代码与M代码的区别
G代码,全称是准备功能代码。它告诉机床:你要怎么走?走直线还是圆弧?走多快?
M代码,全称是辅助功能代码。它告诉机床:你要干什么?主轴转不转?冷却液开不开?
我打个比方你就明白了:
- G代码是导航员——规划路径,控制轨迹
- M代码是操作员——开关设备,执行动作
举个例子:
G01 X100.0 F200 ; 直线插补,走到X100位置,速度200
M03 S1500 ; 主轴正转,转速1500转/分
你看,G01管的是“怎么走”,M03管的是“主轴转不转”。
我在项目里遇到过新手把M代码当成G代码来用,结果主轴该转的时候不转,刀具直接怼上去……嗯,那场面,不说了。
核心区别总结:
- G代码:控制运动轨迹、坐标系、进给率
- M代码:控制开关量、逻辑动作、辅助设备
- G代码通常成段出现,M代码一般单行执行
2.2 M代码分类
M代码看起来很多,其实分几大类就清楚了。我个人习惯把它们分成四组:
| 类别 | 典型代码 | 功能说明 |
|---|---|---|
| 主轴控制 | M03、M04、M05 | 主轴正转、反转、停止 |
| 冷却控制 | M07、M08、M09 | 雾冷、液冷、关闭冷却 |
| 程序控制 | M00、M01、M02、M30 | 暂停、选择暂停、程序结束、程序结束并复位 |
| 换刀控制 | M06 | 自动换刀 |
你想想看,这四类基本覆盖了90%的日常加工场景。
我记得有一次调试五轴机床,客户非要自定义一个M代码来控制旋转工作台的夹紧。那就是典型的“辅助功能”扩展——不在标准M代码列表里,但逻辑上完全属于M代码的范畴。
小提示:标准M代码从M00到M99,共100个。但很多数控系统预留了M100-M999给用户自定义。这就是我们二次开发的空间。
2.3 M代码执行机制
这个问题很关键。M代码到底是怎么被执行的?
说白了,数控系统读到M代码后,会做三件事:
- 解析:系统识别出这是一个M代码,提取后面的数字
- 查表:在内部功能表中找到对应的处理函数
- 执行:调用该函数,完成开关动作
这里有个细节——M代码的执行时机。
G代码是“边走边执行”,而M代码分两种:
- 模态M代码:执行后一直有效,直到被同组其他M代码取代。比如M03(主轴正转)就是模态的,你不发M05它就一直转。
- 非模态M代码:执行一次就完事。比如M00(程序暂停),执行完就停在那,不会保持什么状态。
为什么会这样?因为设计者要考虑安全。主轴如果非模态,转一下就停,那还怎么加工?
我曾经犯过一个错:自定义了一个M代码,忘了设置模态属性。结果每次执行完,设备就自动复位了。排查了半天,才发现是执行机制没搞对。
注意:自定义M代码时,一定要明确它是模态还是非模态。搞错了,轻则加工异常,重则撞机。
2.4 M代码格式规范
格式这东西,看着简单,但最容易出问题。
标准M代码格式就一句话:
M + 数字
比如:
M03
M08
M30
但实际编程中,有几个规范你必须遵守:
- 数字范围:标准是00-99,扩展可以到999。但别乱用,先查一下系统手册
- 前导零:M03和M3,大多数系统都认。但我建议统一写三位数,比如M03,更规范
- 单行原则:一行最好只写一个M代码。别写成“M03 M08”,容易出歧义
- 位置顺序:M代码通常放在行的末尾,G代码在前面
举个例子,规范的写法:
G90 G54 G00 X0 Y0 Z100.0 M03 S2000
G01 Z-5.0 F100 M08
G01 X50.0
G00 Z100.0 M09
M05
M30
你看,M代码都在每行的最后,清晰明了。
我建议你养成这个习惯。以前我带徒弟,有人把M03写在行首,系统也能跑,但别人读代码的时候一脸懵。代码是写给人看的,对吧?
避坑指南:
我曾经在调试一台老式发那科系统时,写了个M100想控制一个自定义气缸。结果系统直接报错——它只认M00-M99。后来查手册才知道,老系统的自定义范围是M50-M99,而且还得先开通选项。所以,动手之前,先看手册。
好了,这一章的内容就这些。G代码和M代码的区别,M代码的分类、执行机制、格式规范,都是后面二次开发的基石。下一章,我们开始真正动手——搭建开发环境。