入门基石 ④

CNC G/M 代码入门:G 管"怎么动"、M 管"开关动作",读懂机床的"语言"

零基础也能上手 · 把坐标系/对刀/刀补用到的指令一次讲透 · 附最小可运行程序逐行拆解

一句话定义:G/M 代码(数控机床的"编程语言",由字母+数字组成)就是——你写给机床的一行行指令,告诉它"动到哪、怎么动、什么时候开冷却液"。其中 G 代码管"运动与设置"(准备功能),M 代码管"开关类辅助动作"(辅助功能)。坐标系、对刀、刀补那些概念,最终都靠这两类代码组合成程序,机床才看得懂。

一、为什么要有 G/M 代码(原理 / 为什么)

机床是铁疙瘩,听不懂中文、也不懂"把那个方块的边铣一下"。它只认标准化的数字指令。于是行业约定了一套通用的字母+数字指令

关键点:绝大多数 G 代码是"模态"的(执行后持续有效,直到被同组指令取代)。比如写了 G01,后面每行都按直线走,不用重复写;写了 G90(绝对坐标),之后坐标都相对编程零点算。M 代码一般是单段有效(这一行执行完就结束)。

补充:G/M 代码是国际标准(ISO),FANUC、三菱、西门子大体通用,个别指令略有差异——具体以你机床厂手册为准。这也是为什么"看懂一套、换系统能猜个八九成"。

二、一行程序长什么样(图示要点)

一条最基本的程序,开头有个程序号,中间是若干指令行,结尾用 M30 收尾:

(建议配图:一张"程序清单 → 机床动作"对照图。左边列出 6 行代码,右边画对应动作——G00 Z5 抬刀、G00 X0 Y0 快速跑位、G01 下刀切削、G41 偏刀心……让读者直观看到"哪行代码对应机床哪个动作"。)

三、最小可运行程序(代码示例 + 逐行讲解)

下面这段是一个完整、能直接跑的方块轮廓铣削程序(呼应入门基石③刀补示例)。先整体看,再逐行拆:

O1001 (DEMO: 铣一个 50×50 方块轮廓)
G21 G90 G54 ; 公制(mm) / 绝对坐标 / 调用工件坐标系1
M03 S3000 ; 主轴正转,转速 3000rpm
G00 Z5. ; 快速抬到安全高度(空行程,不切削)
G00 X0 Y0 ; 快速跑到引入点(空行程)
G01 Z-2. F200 ; 直线下刀 2mm,进给 200(开始切削)
G41 D01 X5 Y5 ; 建立左补偿到起点(D01=刀半径,呼应③)
G01 X45 Y5 ; 底边切削
G01 X45 Y45 ; 右边
G01 X5 Y45 ; 顶边
G01 X5 Y5 ; 左边回起点
G40 G01 X0 Y0 ; 取消补偿,退回引入点
G00 Z50. ; 抬刀
M05 ; 主轴停
M30 ; 程序结束并复位

逐行拆解(看 G/M 怎么分工):

四、常用 G / M 速查表

常用 G 代码(运动 / 设置,多半模态)

代码含义备注
G00快速定位空行程,不走切削轨迹
G01直线插补按 F 进给直线切削
G02 / G03顺/逆圆弧需 I/J 或 R 指定圆心
G54~G59工件坐标系 1~6对刀后调用,编程零点来源
G90 / G91绝对 / 增量坐标模态,别切混
G21 / G20公制 / 英寸国内常用 G21(mm)
G41 / G42 / G40左/右补偿 / 取消半径补偿(见③)
G43 Hxx长度补偿H 指向长度偏置号

常用 M 代码(辅助动作,多单段有效)

代码含义备注
M03 / M04主轴正/反转常配 S 转速
M05主轴停止程序结束前停
M08 / M09冷却液开 / 关切削时开,保护刀具
M30程序结束并复位放程序最末尾
M00程序暂停中途检查用

五、新手最容易踩的 6 个坑

⚠ 坑 1:拿 G00 当 G01 去切削

G00 是"以机床最快速度移动、且不保证走直线轨迹",只用于空行程。若下刀/切削写成 G00,刀会斜插猛冲,轻则崩刃、重则撞工件。真切削一律用 G01(配 F 进给)。

⚠ 坑 2:模态忘了被同组替换

写了 G91(增量坐标)后,后面一直按"相对上一点的偏移"算;忘了切回 G90,整批尺寸全错位。一段加工结束或换新工序,主动重置模态(G90/G17/G40 等)。

⚠ 坑 3:M03 没给 S 转速,干切

主轴正转 M03 后忘了写 Sxxxx,主轴可能不转或默认低速,刀具"干磨"工件 → 烧刀、打刀。主轴转必有 S,且 S 给合理值。

⚠ 坑 4:忘了调 G54 / 对刀没做就跑

程序里写了 G54,但机床没对刀、坐标系参数还是默认值,机床按"机械零位"跑 → 直接撞刀或切空气。跑程序前确认已对刀、G54 偏置已写入(见②)。

⚠ 坑 5:M30 写错位置或漏写

M30 必须放程序最末尾表示"结束并复位"。写在中间会提前停,漏写则程序跑完不复位、下次调用状态混乱。结尾固定 M05 M30 收尾。

⚠ 坑 6:中文注释格式不对,程序报错

有些系统中文注释要用括号包起来 (抬刀到安全位),裸中文或用了系统不支持的符号会直接报警。写注释优先用括号,少用裸中文;换系统先试一行。

六、小结