第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代码后,会做三件事:

  1. 解析:系统识别出这是一个M代码,提取后面的数字
  2. 查表:在内部功能表中找到对应的处理函数
  3. 执行:调用该函数,完成开关动作

这里有个细节——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代码的分类、执行机制、格式规范,都是后面二次开发的基石。下一章,我们开始真正动手——搭建开发环境。