简介:本资源是一份面向3D打印与CNC初学者及进阶用户的G代码与M代码系统性学习指南,聚焦RepRapFirmware固件生态下的指令解析与工程实践。文档全面覆盖G/M代码语法结构、字段含义(如G10/G28/M106等常用指令)、注释规范、大小写规则、引号字符串处理、多挤出机参数格式(冒号分隔)、坐标与温度控制逻辑,并详解其在笛卡尔、Delta、CoreXY等多种机械构型中的配置差异,助力用户理解切片输出、手动调试及固件定制。资源为单文件PDF,共1个文件,大小1.79MB,内容精炼、术语准确,含大量命令示例与上下文说明,便于随时查阅与对照实操。目前已有575人学习下载,适合希望深入掌握底层控制逻辑、提升打印机调试能力或参与固件二次开发的硬件爱好者与工程师。
1. 这不是“说明书翻译”,而是一份能让你少调三天床、少烧两块热敏电阻的G/M代码实战手册
你有没有在凌晨两点对着打印失败的模型发呆,反复检查切片设置,最后发现是G28 Z被误写成G28 Z0导致归位撞床?有没有在调试 Delta 校准时,因为没看清G32 S1和G32 S2的存储差异,反复重刷固件三次?这份《G代码M代码详细解释(翻译).pdf》不是维基百科式的术语堆砌,它是一份从 RepRapFirmware 1.18 到 2.03+ 全版本实测验证过的命令行为白皮书——所有条目都标注了「哪个固件版本开始支持」「哪些参数在激光模式下被重定义」「哪些字段会触发隐式缓冲」「哪些组合会导致宏静默失败」。它专为正在用 Duet 系列板卡跑 RepRapFirmware 的一线调试者、跨平台固件迁移工程师、以及需要手动注入 G 代码做精密补偿的进阶用户而生。如果你还在靠试错改M563工具定义、靠猜解G10 L2 P1 X...的偏移逻辑、或把G30 S-2当成万能归零键,这份 PDF 就是你该立刻存进/sys/目录并加进config.g注释区的「操作宪法」。
2. G代码结构:从空格分隔到校验和计算,每一处格式细节都决定命令是否被真正执行
2.1 字段构成与字母语义:为什么X17.62合法而T2.76报错?
RepRapFirmware 的 G 代码解析器对字段类型有严格语义约束。每个字段由「单个大写字母 + 数字(可含小数点)」组成,但字母本身携带类型含义,数字必须符合该类型的物理意义:
X/Y/Z/U/V/W:坐标轴位置 → 接受整数或浮点数(如X17.62,Z0.3),精度取决于步进细分和机械刚性E:挤出长度 → 同样接受浮点(E22.4),但单位是毫米长丝,非体积F:进给速度 → 单位 mm/min,典型值F3000(50mm/s),不能为负或零S/P/R/H/T:参数类 →S在固件 <2.02 中表示移动模式(S0~S3),≥2.02 且启用M452激光模式后,S变为激光功率(0~254),此时H才接管移动模式;P恒为整数(工具编号、探针点号、SD卡号);R为温度(℃),可带小数(R175.0)
提示:
T2.76会直接被固件忽略或报Invalid parameter,因为工具编号必须是整数(T0,T1,T2)。若需多挤出机协同,应使用M563 P2 D0:1定义工具,再用T2选择。
字段间以空格或制表符分隔,换行符等效于空格。这意味着以下三行完全等价:
G1 X100 Y100 Z0.3 F3000 G1 X100 Y100 Z0.3 F3000 G1 X100 Y100 Z0.3 F3000但实际调试中,强烈建议将F与运动命令写在同一行,避免因缓冲区顺序导致进给率未及时生效(见 4.2 节)。
2.2 注释语法:分号与括号的隐藏陷阱
注释用于提升可读性,但 RepRapFirmware 对其解析有明确边界:
- 分号注释:从
;开始至行尾,必须独占一行或位于行末G28 ; 归位所有轴(正确) G1 X100 Y100 ; 移动到右上角(正确) G1 X100 ; Y100 (错误!Y100 被当注释,不执行) - 括号注释:必须在同一行内成对出现,且不能跨行
G28 (归位所有轴) (正确) G1 X100 Y100 (移动并挤出) (正确) G1 X100 ( Y100 ) (错误!跨行,固件报错)
关键点在于:注释内容不参与任何逻辑判断,但会影响校验和计算(见 2.4 节)。若你在 SD 卡文件中使用带注释的 G 代码,且启用了校验和(*NNN),则注释字符会被计入校验和计算——这是很多自动生成脚本翻车的根源。
2.3 引用字符串:WiFi密码、文件名含空格的唯一合法解法
当参数需包含空格、分号、引号等非法字符时(如 WiFi SSIDMY ROUTER、密码ABC;xyz),必须使用双引号包裹:
M587 S"MY ROUTER" P"ABC;xyz"但此处存在两个硬性规则:
- 双引号内需转义:字符串中的每个
"必须写成"" - 大小写强制转换:多数 G 代码发送端(如旧版 Pronterface)会自动转大写,导致密码失效。RepRapFirmware 提供单引号
’作为小写强制符:
解析逻辑:M587 S"MY ROUTER" P"ABC'X'Y'Z;""123" (等效于 ABCxyz;”123)’X’→ 输出小写x,’’→ 输出单引号'。
参数说明:
M587是配置 WiFi 的核心命令,S为 SSID,P为密码。若密码含;或空格却不加引号,固件会截断解析,导致连接失败。
2.4 行号(N)与校验和(*):通信鲁棒性的双保险机制
对于通过 USB/Telnet 实时发送的 G 代码(非 SD 卡文件),N行号和*校验和是可选但强推荐的可靠性增强手段:
- N 行号:必须为整数,位于行首,格式
N123 *校验和:位于行尾(注释前),格式*71,值为该行除*及其后数字外所有字符的异或(XOR)结果
计算示例(伪代码):
cmd = "N123 G1 X100 Y100 Z0.3 F3000" # 不含换行符 cs = 0 for c in cmd: if c == '*': break cs ^= ord(c) cs &= 0xff # 取低8位 print(f"{cmd} *{cs}") # 输出: N123 G1 X100 Y100 Z0.3 F3000 *142关键逻辑:
N和*必须同时存在或同时缺失。若只写N123不写*,或只写*142不写N,固件将报Bad checksum or line number并丢弃该行。这是为防止串口通信中因噪声导致的指令错乱。
2.5 多命令单行:加速流水线与缓冲区溢出的临界点
RepRapFirmware 允许在一行内写多个 G/M 命令,用空格分隔:
G90 G28 G1 X0 Y0 Z0.2 F2000解析规则:每次遇到G或M字符(且不在引号内),即视为新命令起点。
但此处埋着一个深坑:只有G0~G3移动命令被环形缓冲区缓存,其余G/M/T命令均直通执行。这意味着:
- 上例中
G90(设绝对模式)和G28(归位)会立即执行,G1才进入缓冲区 - 若
G1前有耗时命令(如M140 S60加热床),G1会等待加热完成才启动,无法实现真正的并行
避坑实践:对需严格时序的流程(如归位后立即测床),务必分行书写:
G28 G30 S-1 ; 先测当前点高度,不校准
3. G命令详解:从G28归位到G32床面建模,每一条都是机械精度的锚点
3.1G28:归位命令的三种模式与 Delta 架构的不可分割性
G28表面是“回原点”,实则是固件与机械结构深度耦合的开关。其行为由固件模式(笛卡尔/ Delta/CoreXY)和参数共同决定:
| 参数形式 | 笛卡尔/ CoreXY 行为 | Delta 行为 |
|---|---|---|
G28 | 归位 X/Y/Z 三轴 | 归位全部三塔(忽略 XYZ 参数) |
G28 X Y | 仅归位 X 和 Y 轴 | 无效,仍归位全部三塔 |
G28 Z | 仅归位 Z 轴(需先G28 X Y确保 XY 在安全区) | 无效,仍归位全部三塔 |
根本原因:Delta 打印机无独立的 X/Y/Z 轴,三塔电机协同控制喷嘴空间位置,单塔归位无物理意义。若强行在 Delta 模式下发G28 X,固件会静默忽略该参数,仅执行homedelta.g宏。
血泪经验:在 Delta 打印机的
config.g中,绝不可写G28 X作为初始化步骤。正确流程是:
M561清除所有床面补偿G28归位三塔G32或G29执行床面校准
3.2G30:单点探测的四种 S 参数模式与 Z 偏移修正逻辑
G30是 Z 探针的原子操作,其S参数决定了探测后的动作分支:
| S 值 | 行为 | 典型场景 |
|---|---|---|
S0(默认) | 探测床面,将 Z 坐标设为探针触发高度(如G31 Z2.6定义的标称值) | 日常归位 Z 轴 |
S-1 | 探测床面,仅报告触发时的机器 Z 高度,不修改任何坐标 | 调试探针触发一致性 |
S-2 | 探测床面,调整当前工具的 Z 偏移量,使当前位置 Z=0(即G10 Pn Z<offset>) | 更换喷嘴后快速校准 Z 零点 |
S-3 | 探测床面,将探针触发高度更新为当前测量值(RRF 2.03+) | 长期使用后探针老化补偿 |
关键细节:S-2修改的是G10 Pn Zxxx中的Z值,而非机器坐标。例如当前工具P1的Z偏移为0.0,执行G30 S-2后,若探针在Z=2.6触发,则G10 P1的Z值变为-2.6(符号相反!),确保后续G1 Z0时喷嘴真正接触床面。
3.3G32:从三点探测到九点矩阵,床面建模的完整闭环
G32是 RepRapFirmware 的高级床面补偿引擎,其S参数控制数据流走向:
| S 值 | 行为 | 存储行为 |
|---|---|---|
S0 | 仅更新 RAM 中的变换矩阵,不计算 Z 最大高度,不保存 | 临时测试,断电丢失 |
S1 | 更新 RAM 矩阵 +移动至 Z 最大限位开关处计算新 Zmax(需M208 Znnn设定 Zmax) | 仅内存有效,重启失效 |
S2 | S1行为 +将矩阵与 Zmax 写入/sys/config.g持久化 | 生产环境唯一推荐选项 |
S3 | 仅保存矩阵(不计算 Zmax) | 极少使用 |
执行前提:G32依赖M557预设的探测点。例如:
M557 X10:190 Y10:190 P5 ; 在 X10~190, Y10~190 区域布5x5网格(25点) G32 S2 ; 探测全部25点,生成9参数矩阵并保存注意:
G32默认使用bed.g宏(若存在),而非M557。若需强制用M557,需在config.g中注释掉bed.g调用。
3.4G10:刀具偏移、温度设定与坐标系切换的三合一枢纽
G10是 RepRapFirmware 中最易混淆的命令,其功能由L参数切换:
| L 值 | 功能 | 关键参数 | 示例 |
|---|---|---|---|
L1 | 设置刀具偏移(旧版兼容) | Pn Xx Yy Zz | G10 P1 X0.2 Y-0.1 Z0.0(工具1偏移) |
L2 | 设置坐标系原点(推荐) | Pn Xx Yy Zz | G10 L2 P1 X100 Y100 Z20(设坐标系1原点) |
L20 | 相对于当前工具位置设坐标系原点 | Pn Xx Yy Zz | G10 L20 P1 X0 Y0 Z0(当前点即坐标系1原点) |
| 无 L | 设置工具温度与待机温度 | Pn Rr Ss | G10 P1 R140 S205(工具1待机140℃,工作205℃) |
致命误区:L2与L20的区别在于参考系。L2是绝对坐标(机器坐标系),L20是相对坐标(当前工具位置)。若在G28后执行G10 L20 P1 X0 Y0 Z0,则坐标系1原点即为归位后的位置;若执行G10 L2 P1 X0 Y0 Z0,则原点被设为机器坐标 (0,0,0),可能远离实际打印区。
3.5G53与G54-G59.3:绝对坐标与多坐标系的工业级定位
G53是绕过所有偏移的“上帝模式”:
G53 G1 X0 Y0 Z0 ; 强制移动到机器硬件原点(0,0,0),无视 G10 L2、工具偏移、工作坐标系而G54-G59.3(共9个坐标系)是 CNC 级别的多工件管理:
G54:坐标系1(默认激活)G55:坐标系2(需G10 L2 P2 ...预设)G59.3:坐标系9
联动逻辑:G54激活后,所有G1命令的坐标均相对于G10 L2 P1设定的原点。这允许你为同一台打印机预设:
G54:主打印区(G10 L2 P1 X0 Y0 Z0)G55:第二打印区(G10 L2 P2 X200 Y0 Z0)G56:夹具定位区(G10 L2 P3 X0 Y150 Z0)
工业实践:在 IDEX 打印机上,
G54用于左喷嘴,G55用于右喷嘴,通过T0/T1切换工具并自动绑定对应坐标系,实现双色无缝打印。
4. M命令实战:从M18断电到M587连网,固件底层能力的释放开关
4.1M18与M84:电机使能的两种哲学与节能陷阱
M18和M84均用于禁用步进电机,但设计哲学迥异:
M18:立即切断电机电流,轴可自由旋转(“失电”状态)M18 X Y ; 仅禁用 X/Y 电机,Z/E 保持使能 M18 ; 禁用所有电机(X/Y/Z/U/V/W/E)M84:延时后自动禁用(默认 30 分钟),期间若收到运动命令则重置计时器
关键区别:M18无延时,M84有保护。若在config.g末尾写M18,开机后电机瞬间失电,手动推轴会打滑;而M84 S60(60秒后禁用)更安全。
避坑:
M18后若未执行G28归位,再次G1运动时固件会按“上次已知位置”计算,导致严重丢步。生产环境中,禁用电机前必加G28。
4.2M20-M29:SD 卡文件系统的原子操作链
SD 卡操作是 RepRapFirmware 的核心 IO,其命令形成严格的状态机:
| 命令 | 功能 | 状态依赖 | 典型用法 |
|---|---|---|---|
M21 | 初始化 SD 卡 | 开机自动执行,手动调用可重载 | M21(重载损坏的卡) |
M20 | 列出文件(JSON/文本) | 需M21成功后 | M20 S2 P"/gcodes"(JSON 格式列出子目录) |
M23 | 选择文件(准备打印) | M20后执行 | M23 frog.gcode(选中文件) |
M24 | 开始/恢复打印 | M23后执行,M25暂停后可恢复 | M24(开始)或M24(恢复暂停) |
M25 | 暂停打印(运行pause.g) | 打印中执行 | M25(暂停,头部缩回) |
M26 | 设置文件偏移(字节级定位) | M23后执行 | M26 S12345(跳过前12345字节) |
M27 | 报告打印进度 | 打印中执行 | M27(返回SD print byte 2134/235422) |
M28 | 开始写入 SD(创建文件) | M21后执行 | M28 log.txt(创建日志文件) |
M29 | 结束写入(关闭文件) | M28后执行 | M29(关闭 log.txt) |
致命链路:M23选中文件后,M24才真正启动打印。若M23后直接M27,会报Not SD printing。所有 SD 操作必须遵循M21→M20→M23→M24主干流程。
4.3M587:WiFi 配置的终极形态与密码转义实战
M587是 RepRapFirmware 的 WiFi 入口,其参数必须严格遵循引用字符串规则:
M587 S"MY_ROUTER" P"ABC'X'Y'Z;""123" ; SSID=MY_ROUTER, Password=ABCxyz;"123"逐字段解析:
S"MY_ROUTER":SSID 名,双引号包裹,允许空格P"ABC'X'Y'Z;""123":密码字段’X’→ 小写x’Y’→ 小写y’Z’→ 小写z;→ 分号(无需转义,因在引号内)""→ 输出一个双引号"123→ 字符串123
验证方法:执行
M587后,用M588查询当前配置(M588返回加密后的 SSID/Password,确认是否写入成功)。
4.4M452与M453:激光/CNC 模式切换的全局影响
M452(激光模式)和M453(CNC 模式)是固件的行为模式开关,一旦启用,将永久改变 G 代码语义:
激光模式 (
M452):G0/G1的S参数变为激光功率(0~254),H参数接管移动模式G1 F3000中的F变为 mm/min,但实际激光移动速度由M203限制M3/M4/M5被重定义为激光开关(M3开激光,M5关激光)
CNC 模式 (
M453):M3/M4/M5控制主轴(M3 S4000启动 4000 RPM)G0移动速度由M203的X/Y/Z参数单独设定G1的E参数被忽略(无挤出机)
切换代价:模式切换后,所有G10温度设定、G29床面补偿、M563工具定义均失效,需重新配置。因此,M452/M453应置于config.g末尾,且一台设备只固定一种模式。
5. 避坑指南:12 条血泪换来的 G/M 代码执行故障排查清单
5.1 现象:G28执行后 Z 轴不归位,或归位后 Z 高度异常
原因:
- Delta 模式下误用
G28 Z,固件忽略 Z 参数但仍执行三塔归位,导致 Z 位置未校准 M208 Znnn中 Z 最大限位值(Zmax)设置错误,G32 S1计算 Zmax 时超出范围
解决:
- 确认固件模式:
M122查看Mode字段(Delta/Cartesian) - Delta 机只用
G28,笛卡尔机用G28 X Y后再G28 Z - 检查
M208输出,确保Zmax大于实际机械行程(如行程 200mm,设M208 Z210)
5.2 现象:G30 S-2执行后喷嘴未接触床面,或接触时 Z 值为正
原因:
G31 Zxxx中的标称触发高度(Z值)与实际探针触发高度偏差过大G30 S-2修改的是工具 Z 偏移,但当前工具未通过Tn正确激活
解决:
- 手动执行
G30 S-1,记录触发时 Z 值(如Z=2.62) - 将
G31的Z值设为该数值:G31 Z2.62 - 执行
T1(若工具1为当前喷嘴),再G30 S-2
5.3 现象:SD 卡文件M23选中后M24无响应,或报File not found
原因:
- 文件名含中文或特殊字符,RepRapFirmware 仅支持 ASCII 编码(UTF-8 文件名需转为 8.3 格式)
M23后未等待固件确认即发M24,SD 卡初始化未完成
解决:
- 重命名文件为纯英文+数字:
frog.gcode→model1.g M23后加M400(等待所有缓冲完成),再M24- 用
M20确认文件名列表中显示正确名称
5.4 现象:G10 P1 R140 S205设定温度后,M105查询显示T:0 /0
原因:
G10仅设定工具温度参数,不启动加热;需M140(热床)或M104(喷嘴)显式触发- 工具编号
P1与M563 P1定义的工具不匹配(如M563定义P0)
解决:
G10后必须跟M104 S205(喷嘴)或M140 S140(热床)- 执行
M563查看已定义工具列表,确认P值一致
5.5 现象:G54激活后G1 X100移动距离远小于预期
原因:
G10 L2 P1未预设坐标系1原点,G54默认原点为 (0,0,0),但机械原点可能在床外G90(绝对模式)未启用,G1仍在G91(相对模式)下执行
解决:
G54前执行G10 L2 P1 X0 Y0 Z0设定原点(或G10 L20 P1 X0 Y0 Z0设当前点为原点)G54后加G90确保绝对坐标生效
5.6 现象:M587配置 WiFi 后,DWC 界面仍显示Not connected
原因:
- 密码中
’转义错误,如P"ABC'X'Y'Z"被解析为ABCXYZ(缺少分号) M587后未执行M588验证,或未重启网络服务(M588仅查询,M587后需M588+M589)
解决:
- 用
M588查看返回的 SSID 是否与输入一致 - 若不一致,重发
M587,确保’位置精确(每个小写字母前加’) M587后执行M589(重启 WiFi 服务)
5.7 现象:G32 S2执行后,G29床面补偿失效
原因:
G32与G29使用不同补偿机制:G32生成 3/4/6/9 参数矩阵,G29生成 25+ 点高度图,二者互斥M557网格点与G32探测点冲突(如M557设 5x5,G32用 3 点)
解决:
- 统一使用
G32时,删除G29相关宏(bed.g)及M557 - 统一使用
G29时,删除G32相关宏(bed.g)及M557 M557仅用于G29,G32使用内置点或bed.g宏
5.8 现象:G1移动时挤出量E为负,材料被倒抽
原因:
G92 E0重置挤出坐标后,G1中E值小于当前E坐标(如G92 E0后G1 E-5)- 挤出机模式为相对(
M83),但G1中E值按绝对模式理解
解决:
G92 E0后,G1的E值必须 ≥0(如G1 E5挤出 5mm)- 确认挤出模式:
M82(绝对)或M83(相对),G1的E值逻辑不同
5.9 现象:G28归位时某轴未触发限位开关,持续撞击
原因:
M574中该轴的限位开关类型(S1/S2)与硬件接线不匹配(如常开开关配S2)M208中该轴的软限位(Xmin/Xmax)范围过小,归位前已到达软限位
解决:
M574查看限位配置,S1=常闭,S2=常开M208检查Xmin/Xmax,确保大于机械行程(如行程 200mm,设Xmin=0 Xmax=210)
5.10 现象:G10 L2 P1设定坐标系后,G54无效,G1仍按机器坐标移动
原因:
G10 L2的P值(坐标系编号)与G54的映射关系错误:G54=P1,G55=P2,依此类推- `G
本文还有配套的精品资源,点击获取