3D打印机G-M代码详解 下载本文

G-M指令详解

概述

众所周知,3D打印机执行的是一堆指令,这一堆指令都来源于一个指令集,即G-M指令集。而固件就负责解释这些指令,并将命令指派给电子原件,从而完成打印任务。因此,固件和指令集必须相互配合,否则打印机不会正常工作。开源的3D打印机使用的固件多种多样,但和这些固件匹配的指令集绝大多数指令都相同,即RepRap G-M指令集。由于Marlin固件使用的最为广泛,笔者就以Marlin固件的指令集为例作叙述。

了解G-M指令有什么用?这用处可大了。帮助使用者更方便地调试打印机,检测打印机的问题,扩展打印机菜单功能…反正好处多多,不管你信不信,反正我是信了。

废话不多说,进入正题。G-M指令集就是一些以G或M开头的代码,有时候还会掺杂一些以其其他字母以标示参数意义,比如T、S、F、P等。具体意义见下表,表中nnn表示数字。 字母 Gnnn Mnnn Tnnn Snnn Pnnn Xnnn Ynnn Znnn Ennn Innn Jnnn Fnnn Rnnn Qnnn Nnnn *nnn 意义 标准 GCode 命令, 例如移动到一个坐标点。 RepRap定义的命令,例如打开一个冷却风扇 选择工具代码。 在 RepRap中,工具通常是挤出头(extruder)。 命令参数, 例如马达的电压。 命令参数, 频率:1次每毫秒。 X坐标, 通常用于移动命令。 Y坐标, 通常用于移动命令。 Z坐标, 通常用于移动命令。 挤出长度,用于控制挤出线材的长度. 参数 - 现在仍未使用(定义)。 参数 - 现在仍未使用(定义)。 打印头移动速度 单位: 毫米每分钟 参数 - 温度相关。 参数- 现在仍未使用(定义)。 行码,在发送错误情况后,用来重复输入某行代码(命令)。 校验码(Checksum). 用于检测通信错误 因此,能够被Marlin固件识别的代码应该是像下面的样子:

N3 T0*57 N4 G92 E0*67 N5 G28*22

N6 G1 F1500.0*82

N7 G1 X2.0 Y2.0 F3000.0*85 N8 G1 X3.0 Y3.0*33

1

详解

注释

G-Code一行中分号“;”后面的内容为解释性语句,即注释。固件会忽略其内容。为了减少通信量,可以把注释信息都去掉。 N3 T0*57 ;这是一条注释 N4 G92 E0*67 ; 这也是 N5 G28*22

标记代码

N 和 *,比如 N123 [...G Code 写在这里...] *71。这是行码和标记码。RepRap的固件会以一个本地计算的值来对比标记码,如果两者值不同,就会要求重复输入该条指令。行码和检查码都可以去掉,RepRap仍会工作, 但它不会做检查。你必须同时使用,或同时放弃使用。检查码cs 是通过对对应的指令(包括它的的行码)的原始字节数据进行异或位运算得出的。

int cs = 0;

for(i = 0; cmd[i] != '*' && cmd[i] != NULL; i++) cs = cs ^ cmd[i]; cs &= 0xff; // Defensive programming...

检查码cs的值即是其*符号右边的十进制数字,RepRap固件希望每次命令的行代码都是逐次增加1的大小,不然的话,它会返回一个错误。当然你也可以发送一个M110命令(详情请看下面)强行重置机器。行码和检查码是为了减少信号干扰。

延时G 命令

RepRap固件接收到这些指令后,会先存储在一个循环队列缓存里再执行。这意味着固件在接收到一条指令后马上可以传输下一条。这也意味着一组线段可以没有间断的情况下连续打印。为了实现指令流的控制,当接受到可缓存的指令时,如果固件把它成功放到本地缓存里,就立即给出应答,如果本地缓存已满,则会延时等到缓存有空出的位置时,才给出应答,然后才可以传输指令。

G0: Rapid move 快速移动

比如G0 X10 Y20,如果使用绝对定位的话,就命令打印机喷头快速移动到X=10,Y=20的位置。G0指令不能包含挤丝参数,只能包含X、Y、Z参数,即所谓的空驶动作。

2

G1: Controlled move 可控移动

比如G1 X10 Y20 E2.4,G1指令中可以包含挤丝动作。Marlin会尝试从每一行指令中读取速度值,然后再移动开始之前加速或减速到这个速度值,然后执行移动指令,而不会在移动过程中改变速度。下面的几句指令告诉打印机速度先从当前的1500加速到3000,执行第二句的移动动作,然后再减速到1500,再执行第三句的移动动作。 G1 F1500 G1 X90.6 Y13.8 E22.4 F3000 G1 X80 Y20 E36 F1500 如果E轴坐标采用绝对定位的话,而当前行中的E坐标值小于上一个E坐标值,那么打印机就会回抽,这可以有效防止毛刺现象。

G2: Controlled Move Arc Clockwise可控顺时针圆弧移动

比如 G2 X100 Y100 I50 J60 E30,表示从当前点通过一个顺时针圆弧线移动到(100 ,100)位置,该圆弧的圆心的位置是当前点坐标平移(50,60)得到的位置,在此过程中还可以控制挤丝动作。

G3: Controlled Move Arc Counter-Clockwise 可控逆时针圆弧移动

比如 G2 X100 Y100 I50 J60 E30,表示从当前点通过一个逆时针圆弧线移动到(100 ,100)位置,该圆弧的圆心的位置是当前点坐标平移(50,60)得到的位置,在此过程中还可以控制挤丝动作。

G28: Move to Origin 移动到原点

该命令会是机器的挤出机回归到原点。准确的说,每个轴上移动到初始位置。需要注意,为了快速归位,移动过程会不断加速,当碰到限位开关之后,它会做一次大约1mm的往返移动,来保证归位位置的精确度。

3

如果在G28后面加上坐标轴参数,只有在涉及到的坐标轴方向上才会归位,比如G28 X10和G28 X0都会只让打印机在X轴上归位。而不会对Y方向和Z方向归位。(X后面的数字会被忽略)。而单纯的G28指令则会在三个轴上同时归位,顺序是X轴、Y轴、Z轴。

G29-G30: Bed probing 加热床探测(需要使用自动调平功能)

G29会让打印机在加热床的3个点或者4个点(根据固件配置是三角探测还是四角探测),该指令必须在归位之后才生效。

G30会让打印机在当前的XY点处进行Z探测。

即时G 指令

以下指令也可以被缓存, 但是直到所有之前缓存的指令被执行完,并且该指令执行后,才会给出应答。 因此主机会等待指令执行完毕(才收到的应答). 这些指令导致的短暂停顿不会影响机器的正常性能。

G4: Dwell 停顿

G4 P1000会让打印机停顿1000毫秒,在停顿过程中打印机仍然可以被控制,比如设置挤出头温度。G4 S10会让打印机停顿10秒。

G10: 根据M207的配置进行回抽

M207包含回抽距离,回抽速度,回抽时Z提升等信息。

G11: 根据M208的配置进行回抽后恢复

M208包含回抽后挤出距离和挤出速度等信息。

G20: Set Units to Inches 使用英寸作为单位

从现在开始,使用英寸作单位。

G21: Set Units to Millimeters 使用毫米作为单位

从现在开始,使用毫米作单位。

G90: Set to Absolute Positioning 设置成绝对定位

从现在开始,使用绝对坐标定位方式。即所有的坐标值都是基于一个统一的参考点给出的。

G91: Set to Relative Positioning 设置成相对定位

从现在开始,使用相对坐标定位方式。即所有当前指令的坐标值都是以上一个坐标位置为参考的。

4

G92: Set Position 设置位置

设置各轴当前的坐标值,比如G92 E15指定当前耗材的位置在15毫米处。G92 X100指定打印机喷头当前的X坐标值为100。这个指令可以用来指定绝对零点,特别是针对E轴。

即时M指令

M0/M 1: Unconditional Stop 停止

无条件停止打印机的一切动作,等待用户按LCD控制器上的按钮。

M17: Enable/Power all stepper motors 启动所有步进电机 M18: Disable all stepper motors 关闭所有步进电机

给所有的步进电机断电,从而可以手动移动滑块。M84指令也是这个功能。

M20: List SD card 读取SD卡

将SD卡根目录下的所有内容的名称做出列表,发送到串口,可以使用串口监视器看到。

M21: Initialize SD card 初始化SD卡

初始化SD卡。如果在打印机通电时插入SD卡,会默认初始化SD卡。使用SD卡其他指令时,SD卡一定要初始化。

M22: Release SD card 弹出SD卡

安全弹出SD卡。

M23: Select SD file 选择SD卡的文件

M23 filename.gco会选中filename.gco这个文件然后准备打印该文件。需要注意文件名要满足8.3格式约定(即主文件名不能超过8个字符,扩展名不能超过3个字符)。

M24: Start/resume SD print 开始SD卡的打印

使打印机开始打印M23指令选中的文件。

M25: Pause SD print 暂停SD卡打印

打印机在当前位置暂停打印M23选中的文件。

M26: Set SD position 设置SD卡位置

以字节为单位设置SD卡的位置。

M27: Report SD print status 报告SD打印状态

5

M28: Begin write to SD card 向SD卡中写文件

M28 filename.gco将创建filename.gco文件(若存在,则覆盖)。

M29: Stop writing to SD card 停止写

M29 filename.gco 关闭M28打开的文件。

M30: Delete a file on the SD card 删除SD卡中的文件

M30 filename.gco 将删除该文件。

M31: Output time since last M109 or SD card start to serial

M31将输出时间,从上一个M109指令开始或SD卡安装成功开始计时。

M32: Select file and start SD print 选择SD卡中的一个文件并开始打印

当使用的是可以开关的电源才有效。

M80: ATX Power On 打开ATX电源

M81: ATX Power Off 关闭ATX电源 M82: 设置挤出机使用绝对坐标模式

这是默认的设置。

M83: 设置挤出机为相对坐标模式

与M82相反。

M84: 给所有步进电机断电

M84将给步进电机断电,直到下一次运动指令。M84 S<秒> 将过一段时间给步进电机断电,时间为S后面的数字,单位是秒。

M92: 设置 axis_steps_per_unit 参数

M92 X<> Y<> Z<> E <>将重新设置各坐标轴的分辨率,在调试校准打印机时非常有用。

M104 设置挤出头目标温度,并作出应答 M104 S210将喷头的目标温度设置为210°。

M105 读取当前的温度

M106 开风扇 M106 S<>会打开风扇并将风扇速度设置为S后面的参数,最小值为0,最大值为255。

M107 关闭风扇 M107会关闭风扇,M106 S0也可以达到相同的效果。

6

M109: 设置挤出机温度

M109 S<温度> 设置喷头目标温度,然后在加热的过程中等待。M109 R<温度>设置喷头目标温度,在同时加热和风扇冷却过程中等待。如果使用自动调温功能,那么M109 S<最小温度> B<最大温度> F<因子>将会自动调整喷头温度,笔者在前面的Marlin的优势中已经提到。

M112: 紧急停止

所有进行中的动作都会被立即终止,然后关掉打印机。所有电机和加热器都会被关掉.,可以按Reset按钮(板上)以重启。

M114: 获取当前位置

M114将获取当前的坐标值,将结果发送到串口。结果以X:0.00 Y:0.00 Z:0.00 E:0.00的形式显示。

M115: 获取固件信息

将固件信息以FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:https://github.com/ErikZalm/Marlin/ PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1 UUID:00000000-0000-0000-0000-000000000000的形式发送到串口。

M117: 显示消息

M117 hello会将字符串hello显示在显示屏上(如果硬件带有显示屏的话)。

M119 获取限位开关状态

M119会向打印机请求限位开关状态,并发送到串口。显示结果的形式为

x_min: open x_max: open y_min: open y_max: open z_min: open z_max: open。

M140 设置加热床目标温度并给出应答

M140 S50 会将打印机加热床的目标温度设置为50°,然后给出应答,接收下一条指令。

M190 设置加热床目标温度并等待,使用方法和M109类似,但不支持自动温度控制。 M201 - 设置最大打印加速度 M202 - 设置最大移动加速度

使用方法为M201 X1000 Y1000,单位为毫米/秒平方。

M203 - 设置电机最大速度

M203 X200 Y200,单位是毫米/秒

M204 - 设置默认加速度

M204 S3000 T7000表示将普通XY运动加速度设置为3000,挤出加速度为7000,单位为毫米/秒平方。

7

M205 - 高级设置

M205后面可以接S、T、B、X、Z、E参数。S表示最小打印速度,单位为毫米/秒;T表示最小空驶速度,单位为毫米/秒;B表示最小线段打印时间,单位为毫秒;X表示最大xy_jerk速度,Z表示最大z_jerk速度;E表示最大e_jerk速度。B参数的存在是为了防止缓存区掏空,而jerk的意思为猛拉,按笔者理解,应该表示当速度改变不大于jerk的值时,不需要通过加速或减速去改变速度,而是直接改变速度。

M206: 设置归位偏差

M206 X10.0 Y10.0 Z-0.4会对之前的归位位置的坐标值加上M206后面相应的参数,如果原来的归位坐标值为(0,0,0),那么现在归位位置的坐标值为(10.0,10.0,-0.4)。G92也可以达到相同的效果,比如G28 G92 X10.0 Y10.0 Z-0.4。这个功能还可以用来简化调平工作,如果打印平台的初始位置不在Z=0的位置,可以通过设置归位偏差来校正。

M207:设置回抽

M207 S<长度> F<速度> Z<提升距离>会在使打印机做出回抽动作。回抽长度为S参数,单位是毫米,回抽速度为F参数,单位是毫米/秒,可以选择在回抽时抬升打印机喷头,抬升高度为Z参数,单位是毫米。

M208 设置回抽后恢复

M208 S<长度> F<速度>会在回抽之后恢复,即挤出之前回抽的长度与S参数之和,挤出速度为F参数。

M218 设置喷头偏移量

M218是针对多喷头打印机设置的。M218 T<喷头索引> X Y指明了第T个喷头相对于第一个喷头的位置。

M220 设置速度倍率

M220 S<百分比>将设置打印头运动速度倍率,即打印头运动的速率会乘以这个百分比。

M221 设置挤出速度倍率

M220 S<百分比>将设置挤出速度倍率,即挤出的速率会乘以这个百分比。控制出丝量就是通过这个参数去控制。

M226 等待

M226 P<引脚> S<状态>会让打印机等待直到P引脚达到S状态。

M250 设置LCD显示屏对比度

M250 C<对比度> 会将LCD显示屏的对比度设置为C值,范围为0—63。

M300 播放声音

M300 S<频率> P<时间>将播放一段声音,时间为P毫米,频率为S参数。这需要打印机带有蜂鸣器。

8

M301 设置喷头温控PID参数

M301 P1 I2 D3将打印机喷头温度控制PID参数设置为P=1,I=2,D=3。

M302 允许冷挤出

使打印机喷头温度低于Marlin固件中设置的冷挤出温度时,也可以进行挤出回抽动作。用于在调试打印机时,校准挤出机分辨率和挤出机电机转向。

M303 调试喷头的PID参数

M303 S<温度> 会自动调试PID参数,S参数是目标温度,默认为150°。

M304 设置加热床PID参数

M500: 保存修改,将数据保存在EEPROM上 M501: 从EEPROM读取设置

echo:Hardcoded Default Settings Loaded echo:Steps per unit:

echo: M92 X94.11 Y88.88 Z400.00 E101.91 echo:Maximum feedrates (mm/s):

echo: M203 X500.00 Y500.00 Z5.00 E25.00 echo:Maximum Acceleration (mm/s2): echo: M201 X3000 Y3000 Z100 E5000

echo:Acceleration: S=acceleration, T=retract acceleration echo: M204 S1000.00 T2000.00

echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)

echo: M205 S0.00 T0.00 B20000 X20.00 Z0.40 E5.00 echo:Home offset (mm):

echo: M206 X0.00 Y0.00 Z0.00 echo:PID settings:

echo: M301 P22.20 I1.08 D114.00

M502: 重置为出厂模式

还需要M500来保存这个设置。

M503 读取当前设置

9

M999 由于错误导致关机重启

官方所有代码解释

G代码:

G0 G1 - > 的协调运动的X、Y、Z E G2 连续弧 G3 逆时针圆弧 G4 S或P停留 G10 收缩长丝根据设置的207 G11 收回恢复丝根据设置的m208 G28 家所有的轴详细z-probe G29 床在3点探针。你必须在家的位置,这正确工作。 G30 单Z探针,探针床目前XY定位。 G31 船坞Z探针雪橇(如果已启用) G32 Z探针雪橇移除(如果已启用)在使用绝对坐标 为使用相对坐标 G92 集当前位置到坐标给出 M码 M0 M1 M17 M18 M20 M21 M22 M23 M24 M25 M26 M27 M28 M29 M30 M31 M32 M42 用。 M80

无条件停止-等待用户按下一个按钮,在液晶显示器(只有ultra_lcd启用) 同M0

启用/功率步进电机

禁用所有的步进电机;同M84 列表SD卡 初始化SD卡 释放SD卡

选择SD文件(m23文件名。G) 启动/恢复SD打印 暂停SD打印

组SD位置的字节(M26 s12345) 报告SD打印状态

启动SD写(M28文件名。G) 停止SD写

删除文件从SD(M30的文件名。G) 输出时间自去年M109或SD卡启动序列 选择文件和启动SD打印(可以用在SD卡)

改变引脚状态通过显示使用M42 PX SY设置引脚X Y值,当省略PX车载LED将被使打开电源

10

M81 关闭电源

M82 集E码绝对(默认)

M83 集E码相对而在绝对坐标(G90)模式 M84 禁用步进到下一步的行动,或使用的指定一个闲置超时,之后,步进电机将被禁用。S0禁用超时。

M85 集闲置关机定时器参数S来禁用设置零(默认) M92 集axis_steps_per_unit -相同的语法G92 M104 集挤出机的目标温度 M105 读取当前温度

M106 风扇新时代-风扇关掉

M109 Sxxx等挤出机电流温度达到目标温度。只有当加热等准等挤出机电流温度达到目标温度。在加热和冷却时 M112 紧急停止

M114 输出当前位置到串口 M115 能力字符串 M117 显示消息

M119 输出开关状态的串行端口

m126 电磁空气阀打开(baricuda支持jmil)

M127 电磁风阀关闭(baricuda发泄的jmil大气压力) M128 停止开放(baricuda ETOP =电空气压力传感器的jmil)指令- ETOP关闭(baricuda ETOP =电空气压力传感器的jmil) M140 套床的目标温度

M190 Sxxx等待当前温度达到目标温度的床。只有当加热等准等床电流温度达到目标温度。在加热和冷却时D组M200长丝直径和集E轴单位立方毫米(使用S0设置回毫米)。学-设置最大加速度的单位/ ^ 2打印动作(学X1000 1000)目的建立最大加速度的单位/ ^ 2旅游移动(M202 X1000 1000)未在马林!!

M203 集最大进给速度你的机器可以维持(M203 X200其Z300 e10000)在毫米/秒

M204 设置默认加速度:正常移动T灯丝才动作(M204 S3000能T7000)我毫米/秒^ 2还套在MS最小时间段(b20000)防止缓冲区欠载和过载M20最小速度

m205 高级设置:最低行驶速度=打印时T =旅行只,B =最小段时间x =最大XY的混蛋,Z = Z的最大冲击,E =最大的混蛋 M206 设置额外的本地偏移

M207 集缩长度的[正] [进给率f毫米毫米/分钟] [额外Z zlift /跳],停留在毫米的M200设置

m208 集恢复= unretract长度的[积极毫米剩余的207 * ] [进给率f毫米/分钟]

M209 的< 1 =真实/ 0 = false >启用自动缩回检测如果切片机不支持G10 / 11:每一个正常的挤压只移动将被归类为收回取决于方向。 m218 集hotend偏移(mm):t x y M220 的集速度因子覆盖率 m221 的集挤压因子覆盖率 M240 触发相机拍一张照片

M280 位置RC伺服P S,ommit的回来报告当前角度 M300 扮演beepsound S P M301 设定PID参数P、I、D

11

M302 m304 M400 M401 m402 m404 M405 M406 m407 M500 m501 M502 允许冷挤压PID继电自整定的操作设定的目标温度。(默认目标温度= 150C) 设定PID参数P、I、D床 完成所有动作

下z-probe如果存在 -提高z-probe如果存在

N输入名义灯丝(3mm,宽度1.75mm)或无参数显示名义灯丝宽度 打开丝传感器挤压控制。可选的D设置在传感器和挤出机之间厘米延迟 关闭灯丝传感器挤压控制 -显示测量细丝直径 在EEPROM存储参数

-从EEPROM中读取参数(如果你需要复位后你改变是暂时的)。 -恢复为默认的“出厂设置”。你

12