GM指令详解.docx
- 文档编号:6870253
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:10
- 大小:101.87KB
GM指令详解.docx
《GM指令详解.docx》由会员分享,可在线阅读,更多相关《GM指令详解.docx(10页珍藏版)》请在冰豆网上搜索。
GM指令详解
概述
众所周知,3D打印机执行的是一堆指令,这一堆指令都来源于一个指令集,即G-M指令集。
而固件就负责解释这些指令,并将命令指派给电子原件,从而完成打印任务。
因此,固件和指令集必须相互配合,否则打印机不会正常工作。
开源的3D打印机使用的固件多种多样,但和这些固件匹配的指令集绝大多数指令都相同,即RepRapG-M指令集。
由于Marlin固件使用的最为广泛,笔者就以Marlin固件的指令集为例作叙述。
了解G-M指令有什么用?
这用处可大了。
帮助使用者更方便地调试打印机,检测打印机的问题,扩展打印机菜单功能…反正好处多多,不管你信不信,反正我是信了。
废话不多说,进入正题。
G-M指令集就是一些以G或M开头的代码,有时候还会掺杂一些以其其他字母以标示参数意义,比如T、S、F、P等。
具体意义见下表,表中nnn表示数字。
字母
意义
Gnnn
标准GCode命令,例如移动到一个坐标点。
Mnnn
RepRap定义的命令,例如打开一个冷却风扇
Tnnn
选择工具代码。
在RepRap中,工具通常是挤出头(extruder)。
Snnn
命令参数,例如马达的电压。
Pnnn
命令参数,频率:
1次每毫秒。
Xnnn
X坐标,通常用于移动命令。
Ynnn
Y坐标,通常用于移动命令。
Znnn
Z坐标,通常用于移动命令。
Ennn
挤出长度,用于控制挤出线材的长度.
Innn
参数-现在仍未使用(定义)。
Jnnn
参数-现在仍未使用(定义)。
Fnnn
打印头移动速度单位:
毫米每分钟
Rnnn
参数-温度相关。
Qnnn
参数-现在仍未使用(定义)。
Nnnn
行码,在发送错误情况后,用来重复输入某行代码(命令)。
*nnn
校验码(Checksum).用于检测通信错误
因此,能够被Marlin固件识别的代码应该是像下面的样子:
详解
注释
G-Code一行中分号“;”后面的内容为解释性语句,即注释。
固件会忽略其内容。
为了减少通信量,可以把注释信息都去掉。
标记代码
N和*,比如N123[...GCode写在这里...]*71。
这是行码和标记码。
RepRap的固件会以一个本地计算的值来对比标记码,如果两者值不同,就会要求重复输入该条指令。
行码和检查码都可以去掉,RepRap仍会工作,但它不会做检查。
你必须同时使用,或同时放弃使用。
检查码cs是通过对对应的指令(包括它的的行码)的原始字节数据进行异或位运算得出的。
检查码cs的值即是其*符号右边的十进制数字,RepRap固件希望每次命令的行代码都是逐次增加1的大小,不然的话,它会返回一个错误。
当然你也可以发送一个M110命令(详情请看下面)强行重置机器。
行码和检查码是为了减少信号干扰。
延时G命令
RepRap固件接收到这些指令后,会先存储在一个循环队列缓存里再执行。
这意味着固件在接收到一条指令后马上可以传输下一条。
这也意味着一组线段可以没有间断的情况下连续打印。
为了实现指令流的控制,当接受到可缓存的指令时,如果固件把它成功放到本地缓存里,就立即给出应答,如果本地缓存已满,则会延时等到缓存有空出的位置时,才给出应答,然后才可以传输指令。
G0:
Rapidmove快速移动
比如G0X10Y20,如果使用绝对定位的话,就命令打印机喷头快速移动到X=10,Y=20的位置。
G0指令不能包含挤丝参数,只能包含X、Y、Z参数,即所谓的空驶动作。
G1:
Controlledmove可控移动
比如G1X10Y20E2.4,G1指令中可以包含挤丝动作。
Marlin会尝试从每一行指令中读取速度值,然后再移动开始之前加速或减速到这个速度值,然后执行移动指令,而不会在移动过程中改变速度。
下面的几句指令告诉打印机速度先从当前的1500加速到3000,执行第二句的移动动作,然后再减速到1500,再执行第三句的移动动作。
如果E轴坐标采用绝对定位的话,而当前行中的E坐标值小于上一个E坐标值,那么打印机就会回抽,这可以有效防止毛刺现象。
G2:
ControlledMoveArcClockwise可控顺时针圆弧移动
比如G2X100Y100I50J60E30,表示从当前点通过一个顺时针圆弧线移动到(100,100)位置,该圆弧的圆心的位置是当前点坐标平移(50,60)得到的位置,在此过程中还可以控制挤丝动作。
G3:
ControlledMoveArcCounter-Clockwise可控逆时针圆弧移动
比如G2X100Y100I50J60E30,表示从当前点通过一个逆时针圆弧线移动到(100,100)位置,该圆弧的圆心的位置是当前点坐标平移(50,60)得到的位置,在此过程中还可以控制挤丝动作。
G28:
MovetoOrigin移动到原点
该命令会是机器的挤出机回归到原点。
准确的说,每个轴上移动到初始位置。
需要注意,为了快速归位,移动过程会不断加速,当碰到限位开关之后,它会做一次大约1mm的往返移动,来保证归位位置的精确度。
如果在G28后面加上坐标轴参数,只有在涉及到的坐标轴方向上才会归位,比如G28X10和G28X0都会只让打印机在X轴上归位。
而不会对Y方向和Z方向归位。
(X后面的数字会被忽略)。
而单纯的G28指令则会在三个轴上同时归位,顺序是X轴、Y轴、Z轴。
G29-G30:
Bedprobing加热床探测(需要使用自动调平功能)
G29会让打印机在加热床的3个点或者4个点(根据固件配置是三角探测还是四角探测),该指令必须在归位之后才生效。
G30会让打印机在当前的XY点处进行Z探测。
即时G指令
以下指令也可以被缓存,但是直到所有之前缓存的指令被执行完,并且该指令执行后,才会给出应答。
因此主机会等待指令执行完毕(才收到的应答).这些指令导致的短暂停顿不会影响机器的正常性能。
G4:
Dwell停顿
G4P1000会让打印机停顿1000毫秒,在停顿过程中打印机仍然可以被控制,比如设置挤出头温度。
G4S10会让打印机停顿10秒。
G10:
根据M207的配置进行回抽
M207包含回抽距离,回抽速度,回抽时Z提升等信息。
G11:
根据M208的配置进行回抽后恢复
M208包含回抽后挤出距离和挤出速度等信息。
G20:
SetUnitstoInches使用英寸作为单位
从现在开始,使用英寸作单位。
G21:
SetUnitstoMillimeters使用毫米作为单位
从现在开始,使用毫米作单位。
G90:
SettoAbsolutePositioning设置成绝对定位
从现在开始,使用绝对坐标定位方式。
即所有的坐标值都是基于一个统一的参考点给出的。
G91:
SettoRelativePositioning设置成相对定位
从现在开始,使用相对坐标定位方式。
即所有当前指令的坐标值都是以上一个坐标位置为参考的。
G92:
SetPosition设置位置
设置各轴当前的坐标值,比如G92E15指定当前耗材的位置在15毫米处。
G92X100指定打印机喷头当前的X坐标值为100。
这个指令可以用来指定绝对零点,特别是针对E轴。
即时M指令
M0/M1:
UnconditionalStop停止
无条件停止打印机的一切动作,等待用户按LCD控制器上的按钮。
M17:
Enable/Powerallsteppermotors启动所有步进电机
M18:
Disableallsteppermotors关闭所有步进电机
给所有的步进电机断电,从而可以手动移动滑块。
M84指令也是这个功能。
M20:
ListSDcard读取SD卡
将SD卡根目录下的所有内容的名称做出列表,发送到串口,可以使用串口监视器看到。
M21:
InitializeSDcard初始化SD卡
初始化SD卡。
如果在打印机通电时插入SD卡,会默认初始化SD卡。
使用SD卡其他指令时,SD卡一定要初始化。
M22:
ReleaseSDcard弹出SD卡
安全弹出SD卡。
M23:
SelectSDfile选择SD卡的文件
M23会选中这个文件然后准备打印该文件。
需要注意文件名要满足8.3格式约定(即主文件名不能超过8个字符,扩展名不能超过3个字符)。
M24:
Start/resumeSDprint开始SD卡的打印
使打印机开始打印M23指令选中的文件。
M25:
PauseSDprint暂停SD卡打印
打印机在当前位置暂停打印M23选中的文件。
M26:
SetSDposition设置SD卡位置
以字节为单位设置SD卡的位置。
M27:
ReportSDprintstatus报告SD打印状态
M28:
BeginwritetoSDcard向SD卡中写文件
M28.gco将创建文件(若存在,则覆盖)。
M29:
StopwritingtoSDcard停止写
M29.gco关闭M28打开的文件。
M30:
DeleteatheSDcard删除SD卡中的文件
M30将删除该文件。
M31:
OutputtimesincelastM109orSDcardstarttoserial
M31将输出时间,从上一个M109指令开始或SD卡安装成功开始计时。
M32:
SelectstartSDprint选择SD卡中的一个文件并开始打印
M80:
ATXPowerOn打开ATX电源
当使用的是可以开关的电源才有效。
M81:
ATXPowerOff关闭ATX电源
M82:
设置挤出机使用绝对坐标模式
这是默认的设置。
M83:
设置挤出机为相对坐标模式
与M82相反。
M84:
给所有步进电机断电
M84将给步进电机断电,直到下一次运动指令。
M84S<秒>将过一段时间给步进电机断电,时间为S后面的数字,单位是秒。
M92:
设置axis_steps_per_unit参数
M92X<>Y<>Z<>E<>将重新设置各坐标轴的分辨率,在调试校准打印机时非常有用。
M104设置挤出头目标温度,并作出应答
M104S210将喷头的目标温度设置为210°。
M105读取当前的温度
M106开风扇
M106S<>会打开风扇并将风扇速度设置为S后面的参数,最小值为0,最大值为255。
M107关闭风扇
M107会关闭风扇,M106S0也可以达到相同的效果。
M109:
设置挤出机温度
M109S<温度>设置喷头目标温度,然后在加热的过程中等待。
M109R<温度>设置喷头目标温度,在同时加热和风扇冷却过程中等待。
如果使用自动调温功能,那么M109S<最小温度>B<最大温度>F<因子>将会自动调整喷头温度,笔者在前面的Marlin的优势中已经提到。
M112:
紧急停止
所有进行中的动作都会被立即终止,然后关掉打印机。
所有电机和加热器都会被关掉.,可以按Reset按钮(板上)以重启。
M114:
获取当前位置
M114将获取当前的坐标值,将结果发送到串口。
结果以X:
0.00Y:
0.00Z:
0.00E:
0.00的形式显示。
M115:
获取固件信息
将固件信息以FIRMWARE_NAME:
MarlinV1;Sprinter/grblmashupforgen6FIRMWARE_URL:
PROTOCOL_VERSION:
1.0MACHINE_TYPE:
MendelEXTRUDER_COUNT:
1UUID:
00000000-0000-0000-00000的形式发送到串口。
M117:
显示消息
M117hello会将字符串hello显示在显示屏上(如果硬件带有显示屏的话)。
M119获取限位开关状态
M119会向打印机请求限位开关状态,并发送到串口。
显示结果的形式为
x_min:
openx_max:
openy_min:
openy_max:
openz_min:
openz_max:
open。
M140设置加热床目标温度并给出应答
M140S50会将打印机加热床的目标温度设置为50°,然后给出应答,接收下一条指令。
M190设置加热床目标温度并等待,使用方法和M109类似,但不支持自动温度控制。
M201-设置最大打印加速度
M202-设置最大移动加速度
使用方法为M201X1000Y1000,单位为毫米/秒平方。
M203-设置电机最大速度
M203X200Y200,单位是毫米/秒
M204-设置默认加速度
M204S3000T7000表示将普通XY运动加速度设置为3000,挤出加速度为7000,单位为毫米/秒平方。
M205-高级设置
M205后面可以接S、T、B、X、Z、E参数。
S表示最小打印速度,单位为毫米/秒;T表示最小空驶速度,单位为毫米/秒;B表示最小线段打印时间,单位为毫秒;X表示最大xy_jerk速度,Z表示最大z_jerk速度;E表示最大e_jerk速度。
B参数的存在是为了防止缓存区掏空,而jerk的意思为猛拉,按笔者理解,应该表示当速度改变不大于jerk的值时,不需要通过加速或减速去改变速度,而是直接改变速度。
M206:
设置归位偏差
M206X10.0Y10.0Z-0.4会对之前的归位位置的坐标值加上M206后面相应的参数,如果原来的归位坐标值为(0,0,0),那么现在归位位置的坐标值为(10.0,10.0,-0.4)。
G92也可以达到相同的效果,比如G28G92X10.0Y10.0Z-0.4。
这个功能还可以用来简化调平工作,如果打印平台的初始位置不在Z=0的位置,可以通过设置归位偏差来校正。
M207:
设置回抽
M207S<长度>F<速度>Z<提升距离>会在使打印机做出回抽动作。
回抽长度为S参数,单位是毫米,回抽速度为F参数,单位是毫米/秒,可以选择在回抽时抬升打印机喷头,抬升高度为Z参数,单位是毫米。
M208设置回抽后恢复
M208S<长度>F<速度>会在回抽之后恢复,即挤出之前回抽的长度与S参数之和,挤出速度为F参数。
M218设置喷头偏移量
M218是针对多喷头打印机设置的。
M218T<喷头索引>X
M220设置速度倍率
M220S<百分比>将设置打印头运动速度倍率,即打印头运动的速率会乘以这个百分比。
M221设置挤出速度倍率
M220S<百分比>将设置挤出速度倍率,即挤出的速率会乘以这个百分比。
控制出丝量就是通过这个参数去控制。
M226等待
M226P<引脚>S<状态>会让打印机等待直到P引脚达到S状态。
M250设置LCD显示屏对比度
M250C<对比度>会将LCD显示屏的对比度设置为C值,范围为0—63。
M300播放声音
M300S<频率>P<时间>将播放一段声音,时间为P毫米,频率为S参数。
这需要打印机带有蜂鸣器。
M301设置喷头温控PID参数
M301P1I2D3将打印机喷头温度控制PID参数设置为P=1,I=2,D=3。
M302允许冷挤出
使打印机喷头温度低于Marlin固件中设置的冷挤出温度时,也可以进行挤出回抽动作。
用于在调试打印机时,校准挤出机分辨率和挤出机电机转向。
M303调试喷头的PID参数
M303S<温度>会自动调试PID参数,S参数是目标温度,默认为150°。
M304设置加热床PID参数
M500:
保存修改,将数据保存在EEPROM上
M501:
从EEPROM读取设置
echo:
HardcodedDefaultSettingsLoaded
echo:
Stepsperunit:
echo:
M92X94.11Y88.88Z400.00E101.91
echo:
Maximumfeedrates(mm/s):
echo:
M203X500.00Y500.00Z5.00E25.00
echo:
MaximumAcceleration(mm/s2):
echo:
M201X3000Y3000Z100E5000
echo:
Acceleration:
S=acceleration,T=retractacceleration
echo:
M204S1000.00T2000.00
echo:
Advancedvariables:
S=Minfeedrate(mm/s),T=Mintravelfeedrate(mm/s),B=minimumsegmenttime(ms),X=maximumXYjerk(mm/s),Z=maximumZjerk(mm/s),E=maximumEjerk(mm/s)
echo:
M205S0.00T0.00B20000X20.00Z0.40E5.00
echo:
Homeoffset(mm):
echo:
M206X0.00Y0.00Z0.00
echo:
PIDsettings:
echo:
M301P22.20I1.08D114.00
M502:
重置为出厂模式
还需要M500来保存这个设置。
M503读取当前设置
M999由于错误导致关机重启
后记
这些G、M代码是笔者从Marlin源代码中提取出来的,绝大多数被列举出来,还有一些指令时针对自动调平、Delta机器以及其他很不常用的指令,没有列举出来。
希望这些中文解释能够为3D打印机玩家带来一些帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GM 指令 详解