RepRap 3D打印机G-code命令专家详解

更新时间:2023-10-08 08:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

【打印虎】RepRap 3D打印机G-code命令专家详解

玩过一段时间3D打印机的朋友,都会接触到G-code文件。所谓G-code文件, 指的是3D模型在进入3D打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。这种中间格式文件的内容,实际上每一行都是3D打印机固件所能理解的命令。而这些命令,也被称为G-code命令,是3D打印机和电脑之间最重要的命令交互界面。

上面的图,虽然是简化后的线框图,但清晰地表示了G-code命令所处的重要位置。事实上所有从计算机发送到3D打印机的内容,全部都是G-code命令,没有任何例外。不论计算机和3D打印机之间是如何连接的,用常见的USB线也好,用SD卡作为G-code文件介质也好,或是用比较新式的TCP/IP连接也可以,这个连接通道中的所有信息,都是G-code命令。这个特征非常重要,牢牢记住这个特征,可以在我们分析、解决很多3D打印机问题的时候,提供强有力的支撑。

既然所有3D打印机都使用G-code作为对外联系的唯一信息交互方式,那么这种“语言”的标准就很重要了。不幸的是,虽然所有的3D打印机,都使用G-code作为与计算机的交互语言,但实际上每种3D打印机“说出”的G-code,都多多少少有些不同。这也可以说,每种3D打印机都有自己的“方言”。我们要研究G-code,就要从一种最常见的“方言”,也可以说是“普通话”开始,先了解一种,然后再学习其他类似的语言,相互对比,就很容易了。

我们这篇文章,专门研究的是Repetier公司出品的Repetier-firmware固件所使用的G-code语法。如果这正是你需要的,那么就很方便了。如果你想研究的是其他3D打印机固件,比如marlin之类,那就不太巧了,有些内容可能不完全一致。不过,文章中提到的方法,仍然适用,你可以以这篇文章为基础,自己搞定对marlin的研究。

这篇文章主要面向具有一定技术水平的朋友,从第一节开始,我们就开始分门别类解释每一条G-code命令,这对于已经了解如何使用G-code的朋友会比较方便。但如果你还是初学者,不知道怎么使用G-code,甚至都没有见过“活的”G-code,也没有关系,在这篇文章最后面的第十五节和第十六节,我们会详细讲解如何在Repetier-host软件中单条执行G-code命令,以及如何观察、编辑、修改一个切片器切片之后的简单的G-code文件,满足初学者的学习要求。

在正式开始之前,我先给打印虎做一个小广告。日前,打印虎正式推出了自主研发的下一代3D打印机主板Salai,这个主板采用了32位ARM体系结构,CPU运行速度是传统8位主板的5倍,可以有效提高3D打印的质量,同时支持双挤出头,自带3.5英寸的TFT全彩触摸屏,配合大幅改进的Repetier-firmware固件,拥有丰富的操作功能和良好的用户

界面。这个产品的固件不仅功能丰富,还是开源的,可以满足深入学习的需求!这个产品不光性能高、颜值高,核心代码开源,价格还特别低,有兴趣的朋友,可以到打印虎的产品页面,看看更详细的信息,这里就不多说了。

第一节,基础运动

既然G-code是计算机指挥3D打印机干活用的一套语言,那么其中最重要的就是运动类的指令。 G0/G1 直线移动

虽然从名字上看,G0叫做“快速直线移动”,而G1叫做“直线移动”,但实际上在Repetier-firmware里面,G0和G1指令是完全等价的,没有任何区别。移动是否快速,完全是靠参数F来决定的(下面会详细介绍)。这条指令的作用也很简单,就是将挤出头线性移动到一个特定的位置。这条指令带有不少参数,完整的形式是这样的: G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn 或者

G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn

使用时,不需要所有的参数全部存在,但至少要有一个参数。其中, Xnnn表示X轴的移动位置; Ynnn表示Y轴的移动位置; Znnn表示Z轴的移动位置;

Ennn表示E轴(挤出头步进电机)的移动位置; Fnnn表示速度,单位是毫米/每分钟;

Snnn表示是否检查限位开关,S0不检查,S1检查,缺省值是S0; 举例来说, G1 F1500

G1 X50 Y25.3 E22.4

这样两行G-code,表示了首先将速度设置为1500mm/min,也就是25mm/s,然后将挤出头移动至x=50mm, y=25.3mm的位置上,z轴高度不变,并且将挤出头步进电机移动至22.4mm的位置上。这里,速度、xyz位置都比较好理解,但挤出头步进电机的位置怎么

理解呢?移动至22.4mm处,代表着挤出了多少耗材呢?实际上,这里挤出头的具体动作,要根据之前挤出头步进电机所在的状态(也就是位置)而定。比如在这两条语句之前,挤出头步进电机已经处于20mm的位置处,那么这里挤出头步进电机只要再前进2.4mm就可以了。

仔细想想,其实挤出头步进电机的工作方式,与xyz轴完全一样。xyz轴之所以比较好理解,是因为我们清楚的知道原点(0, 0, 0)的位置在哪里。而对于e轴来说原点的位置也会在打印开始处被初始化到0的位置。知道了原点的位置,就可以正确理解挤出头步进电机的工作方式了。实际上,挤出头步进电机仍然是以原点为基础,只不过是在整个打印过程中持续增加的。(思考:切片器的挤出头回抽动作,对应了什么样的G-code代码?) 再举一例, G1 F1500

G1 X50 Y25.3 E22.4 F3000

这个例子与上面的例子非常类似,唯一的区别,就是F参数了。而这两条语句的意义,除了对XYZE的移动之外,还会将打印速度,从语句执行开始时的1500mm/min,提高到语句执行结束时的3000mm/min。这里有两点需要注意。

第一点,F参数与XYZE参数一样,在语句执行的过程中线性插值;

第二点,在预先知道第一点的前提下,F参数使得计算机对3D打印机的控制更加深入和精准了。计算得当的情况下,切片器可以精确控制3D打印机的加速和减速过程,使得整个3D打印过程更加顺滑。 G2/G3 圆弧移动

这两条命令中,G2是顺时针圆弧移动,G3是逆时针圆弧移动。命令的完整形式是: G2 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn 或者

G3 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn 其中,

Xnnn表示移动目标点的X坐标; Ynnn表示移动目标点的Y坐标;

Innn表示圆心位置,值是圆心距离当前位置的X分量; Jnnn表示圆心位置,值是圆心距离当前位置的Y分量;

Rnnn表示圆形的半径长度;

Ennn表示E轴(挤出头步进电机)的移动位置; Fnnn表示速度,单位是毫米/每分钟;

根据勾股定理,R2 = I2 + J2。因此,如果提供了圆心位置参数,就不需要提供半径参数了。反之,如果提供了半径参数,也可以根据当前点和目标点计算出圆心位置,就不需要提供I/J参数了。其他几个的参数用法,与G0/G1是完全一样的。

G2/G3命令面临的最尴尬的问题,是常用的上位机切片器软件,包括Slic3r以及Cura engine,并不会生成这两条指令。所有3D模型中的圆弧,在STL文件中已经被转化为使用大量小线段拟合而成的曲线。这样,切片器自然也不会把这些小线段当做圆弧处理。最终的G-code输出结果,也只会存在G0/G1指令,而不会存在G2/G3指令。当然,据打印虎所知,如果你使用的是比较小众的上位机软件,比如artCAM等,因为这些软件的输入并不是STL文件,因此它们的输出G-code是很有可能出现G2/G3命令的。

如果确定了你的3D打印机只会接收到G0/G1直线移动命令,那么我们完全可以在3D打印机固件配置中,定义 #define ARC_SUPPORT 0

这样,所有与G2/G3指令相关的代码,就都不会编译,也不会包含在最终的固件代码中了。可以节省一些固件的空间,同时并不会影响任何3D打印机的功能。

还有一个问题留给大家思考:在上位机切片软件输出G2/G3命令的情况下,相比于上位机切片软件输出G0/G1命令的情况,是否3D打印机打印圆形物体时会更圆呢?(答案是不会。)那么其中的原理是什么? G4 暂停移动

这条命令让挤出机在当前位置停止一段时间。可能的参数包括: Pnnn表示停止移动的时间,以毫秒为单位,1000毫秒等于1秒。 Snnn也表示停止移动的时间,以秒为单位。 因此,G4 P2000命令与G4 S2命令是完全等价的。 G10/G11 回抽/反回抽

这两条命令使挤出头执行一个回抽(G10)或者相反的动作(G11)。所谓回抽,就是让E轴步进电机反转一小段。而反回抽则让E轴步进电机正转一小段。参数只有一个: Snnn表示回抽的距离。S1表示长回抽,S0表示短回抽。

实际上,目前的切片器并不太依赖于G10/G11指令执行回抽动作,而是利用G1 Ennn命令直接命令挤出头步进电机前进或倒退到某一个位置。因此,与G2/G3命令类似,

G10/G11命令基本上是个摆设,除非未来有专门的切片器可以生成这两条指令,否则完全可以将这两条指令关闭,节省内存空间。在固件配置中,定义 #define FEATURE_RETRACTION 0

可以关闭G10/G11功能,在编译期去除这段相关的代码。 G20/G21 设置距离单位

这两条命令非常简单,用于设置当前距离单位为英寸(G20)或者毫米(G21)。没有参数。 未设置时缺省值是毫米。 G28 归零

这条命令使3D打印机XYZ轴以及挤出头E轴归零。参数包括: X表示使X轴归零 Y表示使Y轴归零 Z表示使Z轴归零

E表示重置E轴的位置为0,与XYZ轴不同的是,如果使用了E参数,E轴步进电机并不运动,而是将当前的E轴位置直接设置为0,这样下面对E轴的运动指令,都会解释为相对0点的运动。

如果使用时没有任何参数,直接使用G28,等价于G28 XYZ命令。这时并不会对E轴进行重置为0的操作。

XYZ轴归零的顺序,由固件配置HOMEING_ORDER决定,比如定义为 #define HOMING_ORDER HOME_ORDER_XYZ 就代表着先归零X轴,然后是Y轴,最后是Z轴。 T 设置当前挤出头

对于拥有多个挤出头的3D打印机来说,需要使用T命令选择当前工作的挤出头。这条命令有一个无名参数,参数值直接跟在T后面。例如: T0表示选择第一个挤出头; T1表示选择第二个挤出头;

参数是T命令最特殊的一点。这与其他所有的G-code命令都不相同。

第二节,Z轴高度测试与自动调平

三角洲类型的3D打印机,由于其打印速度更快,受到很多3D打印用户的欢迎。与XYZ式3D打印机最大的一个不同,在于三角洲类型3D打印机的运动计算更加复杂,很难依赖人工调平达到较好的打印效果。因此,对Z轴的自动高度测试,以及自动调平相关的功能,就显得更加重要了。以下G-code命令,是Repetier-firmware对这方面进行支持的一组命令。当然,这些功能并不仅限于三角洲类型的3D打印机。如果是包含了Z轴高度测试微动开关的XYZ式3D打印机,也同样可以使用这些功能。 G29 Z轴高度三点测试

这条命令测试打印平面上三个点的Z轴高度,并在串口上输出结果。参数包括: Snnn测试结果的处理方式。S1表示更新内存中的Z轴高度值(重置系统会丢失),S2表示更新内存以及EEPROM中的Z轴高度值(重置系统不会丢失)。

无参数时,G29命令表示只从串口上输出结果,不更新内存或EEPROM中的Z轴高度值。

一般来说,只有使用高位限位开关(也就是说,Z轴的限位开关位于Z轴坐标最大处),且在挤出头上附带有Z轴高度测试微动开关的机型,适合使用G29命令测试Z轴高度。其他机械配置的机型,不适合使用G29命令。G29命令由固件配置 #define FEATURE_Z_PROBE 1

决定是否开启。如果这个配置项定义为0,则编译时会去除对G29命令的支持,节省内存的使用。

命令执行时,打印平面上的三个点,其XY坐标由以下固件配置参数决定: #define Z_PROBE_X1 -52 #define Z_PROBE_Y1 -30 #define Z_PROBE_X2 52 #define Z_PROBE_Y2 -30 #define Z_PROBE_X3 0 #define Z_PROBE_Y3 60

命令执行的开始和结束,分别会执行一段预定义的G-code。缺省的固件配置定义为:

#define Z_PROBE_START_SCRIPT “G28″ #define Z_PROBE_FINISHED_SCRIPT “”

可以看出,在缺省状态下,开始执行G29时,系统会自动对挤出头进行复位(G28命令)。结束执行G29时,没有特殊的动作。

G29命令的Z轴高度测试,通常由一个微动开关控制触发。这个开关的端口号,由Z_PROBE_PIN单独指定。 G29命令的输出,格式为: X:0.00 Y:0.00 Z:200.00 E:0.00 Z-probe:5.01 X:-52.00 Y:-30.00 Z-probe:13.04 X:52.00 Y:-30.00 Z-probe:12.77 X:0.00 Y:60.00 X:0.00 Y:60.00 Z:-98.48 E:0.00

从以上例子的输出可以看出,G29命令一共测试了三个坐标点,分别在(-52, -30), (53, 30)以及(0, 60)的位置,形成一个正三角形。三个点的Z轴高度相差比较悬殊,在第一个点正好是5mm的情况下,后两个点分别是13.04mm以及12.77mm。第一行和最后一行,是测试开始时以及测试结束时的挤出头坐标位置。 G30 Z轴高度单点测试(单步)

这条命令作为一个完整Z轴高度测试过程的一步,测试打印平面上一个点的Z轴高度,并在串口上输出结果。这个完整的Z轴高度测试过程,通常是由3D打印机控制软件连续发出的,通过参数控制G30的执行状态。因此在手动工作方式下,G30命令只适合不带参数运行(等价于G30 P3,见下面的参数说明)。 G30命令的参数包括:

Pnnn表示测试的状态,P1表示当前这步是整个Z轴高度测试过程的第一步;P2表示当前这步是整个Z轴高度测试过程的最后一步;P3表示当前这步是Z轴高度测试过程的唯一一步,也就是说既是第一步也是最后一步;P0表示当前这步是Z轴高度测试过程中的中间一步。无参数情况下,P的缺省值是3。 与G29命令类似,G30命令同样由固件配置 #define FEATURE_Z_PROBE 1 决定是否开启。

G30命令的输出,与上面的G29输出格式一致,但只有其中的一行,需要上位机软件多次发出G30命令,再综合处理所有的输出结果。 G31 输出Z轴高度测试微动开关状态

这条命令非常简单,没有参数。执行后会输出当前Z轴高度测试微动开关的当前状态: Z-probe state:L

其中L表示微动开关没有触发。如果是处于触发状态,这里会输出H。

G29命令、G30命令、G31命令只进行Z轴的高度测试,并不进行自动调平。有些上位机3D打印机控制软件,会通过这一组命令配合自动跳屏算法实现(上位机)热床自动调平功能。如果希望不通过上位机,只由3D打印机自身完成自动调平功能,需要使用G32命令。

G32 热床自动调平

这条命令在G29命令的基础上,不仅测试打印平面上三个点的Z轴高度,而且还会根据测试的结果,对3D打印机的机械参数进行调整,实现热床自动调平。G32命令使用的参数与G29命令是一致的:

Snnn测试结果的处理方式。S1表示更新内存中的相关参数值(重置系统会丢失),S2表示更新内存以及EEPROM中的相关参数值(重置系统不会丢失)。

G32命令执行完成时,不仅Z轴高度参数发生了改变,而且还会根据3D打印机的硬件配置,对热床进行相应的调平处理。

如果热床本身是使用步进电机进行高度控制的,那么程序会自动调整步进电机的位置,使热床自动调整为平整的状态;如果热床本身不能移动(这个应该是更常见的情况),那么G32命令会在3D打印机内存中构建一个转换矩阵(Transformation matrix),让未来3D打印机所处理的所有三维空间位置,都先经过这个矩阵的变换,保证在Z=0的情况下,正好与热床平面完全吻合。由于这里涉及到高深的计算机图形学知识,我们就不详细介绍了。有修改这方面代码需求的朋友,可以直接与打印虎进行联系。 G32命令,由固件配置

#define FEATURE_AUTOLEVEL 1 决定是否开启。

G32命令的输出,格式与G29命令类似: X:0.00 Y:0.00 Z:200.00 E:0.00 Z-probe:5.00 X:-52.00 Y:-30.00

Z-probe:12.97 X:52.00 Y:-30.00 Z-probe:12.76 X:0.00 Y:60.00

Info: 0.99709 -0.00319 -0.07628 0.00000 0.99912 -0.4191 0.07634 0.004179 0.99621 Info: Autoleveling enabled X:7.32 Y:64.08 Z:-95.66 E:0.00 X:0.00 Y:0.00 Z:200.00 E:0.00

除了与G29命令相似的测量信息之外,G32命令还输出了计算得到的自动调平矩阵,并且打开了自动调平功能。需要注意的一点是,G32命令虽然生成了自动调平矩阵,但并没将其保存在EEPROM中,因此下次开机这个信息将会丢失。可以配合M320 S1命令,将自动调平矩阵保存在EEPROM中。 M251 将当前Z轴位置保存为Z轴高度值

这条命令可以将当前的Z轴位置保存为Z轴高度值,以使前面的Z轴高度手动/自动测量的结果起作用。通常,M251命令只工作在三角洲机型上,并且应该与G29命令联合使用(自动测量Z轴高度)。这条命令没有相关的参数。

当3D打印机打开EEPROM支持时,这条命令还会将Z轴高度值同时保存在EEPROM中。

只有当固件配置定义 #define Z_HOME_DIR -1

也就是Z轴向正方向归位,并且定义

#define MAX_HARDWARE_ENDSTOP_Z true

也就是存在硬件的Z轴高位限位开关时,M251命令才会在编译中包含相关的代码。 通常,只有三角洲类型的3D打印机才能满足这两个条件限制。 M320/M321 开启/关闭自动调平

开启(M320)或者关闭(M321)自动调平功能,使自动调平转换矩阵起作用或不起作用。命令参数为

Snnn表示是否保存于EEPROM,没有S参数或者S0表示不保存于EEPROM,S1表示保存于EEPROM,在关闭自动调平(M321)命令中S3表示将自动调平矩阵清零且保存于EEPROM中;

M320的输出结果为: Info:Autoleveling enabled 表示自动调平已经打开。 M321的输出结果为: Info:Autoleveling disabled 表示自动调平已经关闭。 M322 清零自动调平转换矩阵

清零(M322)自动调平转换矩阵。显然,清零这个动作的同时自动调平功能也关闭了。命令参数为

Snnn表示是否保存于EEPROM,S0表示不保存于EEPROM,S1表示保存于EEPROM; 也就是说, M321 S3 命令等价于 M322 S1

命令,两者都是清零自动调平矩阵,关闭自动调平功能,并且将这个设置保存于EEPROM之中。

以上三条命令,与G32命令相同,由固件配置 #define FEATURE_AUTOLEVEL 1 决定是否开启。 M322的输出结果为: Info:Autolevel matrix reset

表示自动调平转换矩阵已经被清零。

第三节,坐标模式与坐标位置

G90/G91 设置坐标模式

这两条命令用于设置当前坐标模式为绝对坐标模式(G90)或者相对坐标模式(G91)。没有参数。

未设置时缺省值是绝对坐标模式。我们在这篇教程中,所有的例子也都是以绝对坐标模式给出的。

在相对坐标模式下,每次步进电机XYZE移动之后,当前位置都会重置为0。对于以下两条G-code命令 G0 X1 G0 X-1

如果3D打印机当前处于相对坐标模式下,那么X轴步进电机会先向正方向移动一个单位,再向反方向移动一个单位。第二条语句,实际移动距离是1个单位(向X轴反方向)。

而如果3D打印机当前处于绝对坐标模式下,那么X轴步进电机会先移动到X=1的位置处,再移动到X=-1的位置处。第二条语句,实际移动距离是2个单位(向X轴反方向)。 G92 设置位置

设置3D打印机内存中XYZE的位置值。不移动对应的步进电机。参数包括: Xnnn表示X轴的位置值; Ynnn表示Y轴的位置值; Znnn表示Z轴的位置值;

Ennn表示E轴(挤出机步进电机)的位置值;

第四节,辅助步进电机

一些3D打印机的机械设计,会在XYZE四个步进电机轴之外,使用更多的辅助步进电机。Repetier-firmware提供了一套辅助步进电机指令,让用户(以及上位机软件)可以操作这些辅助步进电机。由于辅助步进电机的用途、参数各异,为了让这套指令更加通用,这些指令被设计为非常简单的形式。 G201 移动步进电机位置

将步进电机P的位置移动到X位置处。参数包括:

Pnnn表示第P个辅助步进电机; Xnnn表示这个步进电机的目标位置; 这条命令与G1命令非常类似。 G202 设置当前位置

将X位置设置为步进电机P的当前位置。不实际移动步进电机。参数包括: Pnnn表示第P个辅助步进电机; Xnnn表示这个步进电机的当前位置; 这条命令与G92命令非常类似。 G203 报告当前位置

报告步进电机P的当前位置。参数包括: Pnnn表示第P个辅助步进电机; 这条命令与M114命令非常类似。 G203 开启/关闭步进电机

用于开启/关闭步进电机P。参数包括: Pnnn表示第P个辅助步进电机;

Snnn表示开闭标志,S0表示关闭步进电机,S1表示开启步进电机;

步进电机开启后,有两种可能的状态。一种是“运动”状态,也就是正在进行正向或反向的旋转。另一种是“保持位置”状态,也就是保持当前的位置不变。虽然步进电机关闭也不会主动移动位置,但“保持位置”状态与步进电机关闭状态仍有显著的区别。“保持位置”状态下,当步进电机受力时,会产生一个反向的力矩,使步进电机位置保持不变。

这条命令与“节能管理”一节中的M84命令有关。M84命令用于关闭XYZE步进电机,但不能打开这些步进电机。

第五节,SD卡管理

M20 列目录

显示SD卡所有目录内容。没有相关的参数。

M20命令的输出,格式为: Begin file list a.gcode TEST/ TEST/c.gcode b.gcode End file list

这个目录内容清单,说明了这张SD卡上目前有3个文件,分别是a.gcode,b.gcode以及c.gcode,其中,a.gcode和b.gcode都保存于根目录下,而c.gcode保存于一个名称为TEST的文件夹里面。 M21 加载SD卡

尝试加载SD卡,也就是执行Mount动作。没有相关的参数。 M22 卸载SD卡

卸载SD卡,也就是执行Unmount动作。没有相关的参数。 M23 选择文件

选择一个SD卡上的文件。参数为

filename表示被选择的文件名(包含目录名,以/分隔); 文件选择之后,可以执行打印、删除等动作。例如命令 M23 TEST/c.gcode

选定了SD卡TEST文件夹里面的c.gcode文件作为当前文件。 同时输出格式为:

File opened:c.gcode Size:1127565 File selected

表示文件已经顺利打开。 M24 开始SD卡打印

打印当前选定的SD卡文件。逐行读入SD卡文件内容G-code代码,并执行。没有相关参数。

M25 暂停SD卡打印

暂停当前的SD卡打印。没有相关参数。 M26 设置当前文件当前位置 设置当前文件的当前位置。参数为 Snnn表示当前位置的字节数。 M27 获取SD卡打印进度

获取SD卡打印进度。没有相关参数。 M27命令的输出,格式为: SD printing byte 11518/1127578

这条命令供上位机获取当前的3D打印进度信息,用于显示在电脑界面上。 M28 写SD卡文件

写一个SD卡文件。参数为:

filename表示待写入的文件名(包含目录名,以/分隔);

从执行M28命令开始,所有3D打印机接收到的G-code,除了M29命令以外,都会保存至指定的SD卡文件中,而不会被实际执行。这条命令可以将一个G-code文件从上位机3D打印控制软件复制到3D打印机的SD卡上,以供未来执行。 M29 结束写SD卡文件

结束以M28开始的“保存至SD卡文件”状态,将3D打印机恢复到正常状态。从此,所有接收到的G-code命令,都会被直接解释执行。没有相关参数。 M30 删除文件

删除一个SD卡中的文件。参数为:

filename表示待删除的文件名(包含目录名,以/分隔); M32 创建子目录

在SD卡上创建一个子目录。参数为:

filename表示待创建的子目录(包含目录名,以/分隔); 以上所有SD卡相关指令,都由固件配置 #define SDSUPPORT 1

决定是否开启。如果固件不需要支持SD卡,关闭这项固件配置,可以节省不少内存空间。

第六节,节能管理

M84 设置步进电机自动关闭时间

当3D打印机一段时间没有接收到步进电机运动指令之后,3D打印机(为了节能)会自动关闭步进电机。使用M84指令,可以设置这个自动关闭步进电机的时间。参数包括: Snnn表示步进电机关闭的时间,以秒为单位。

如果使用M84时没有指定S参数,则步进电机会立即关闭。 M84命令的缺省值是360秒。在固件配置中,缺省值由 #define STEPPER_INACTIVE_TIME 360L 控制。

M85 设置3D打印机自动关闭时间

当3D打印机一段时间没有接收到指令之后,3D打印机(为了节能)会自动关闭步进电机以及挤出头、热床等设备。使用M85指令,可以设置这个自动关闭3D打印机的时间。参数包括:

Snnn表示在关闭步进电机之前步进电机没有活动的时间,以秒为单位。

如果使用M85时没有指定S参数,或者使用了S0参数,则代表取消3D打印机自动关闭功能,挤出头、热床等在工作完成之后,一直会处于当前状态,而不会被自动关闭。 M85命令的缺省值是0(不自动关闭)。在固件配置中,缺省值由 #define MAX_INACTIVE_TIME 0L 控制。

第七节,温度管理

M104 设置挤出头目标温度

设置挤出头的目标温度。执行这条命令后,不需要等待达到这个温度,立即开始执行下一条G-code语句。相关参数包括: Snnn表示目标温度; Tnnn表示对应的挤出头;

P表示要等待前面的指令完成之后,再开始设置挤出头温度; Fnnn表示到达目标温度之后,是否触发蜂鸣器。F1表示要触发; 如果执行命令时没有带T参数,则针对当前挤出头设置目标温度。 M140 设置热床目标温度

设置热床的目标温度。执行这条命令后,不需要等待达到这个温度,立即开始执行下一条G-code语句。相关参数包括: Snnn表示目标温度;

Fnnn表示到达目标温度之后,是否触发蜂鸣器。F1表示要触发; M105 获取当前的温度

获取当前温度值,包括挤出头和热床的温度。相关参数包括: X表示输出AD转换输入的原始值; M105命令的输出,格式为: T:18.97 /0 B:18.75 /0 B@:0 @:0

可以看到,T:之后的部分,代表挤出头的当前温度/目标温度;B:之后的部分代表热床的当前温度/目标温度。

在PID温度控制模式下,B@:后面的数字代表热床当前的输出强度,是一个0~255的值,@:后面的数字,代表挤出头当前的输出强度,也是一个0~255的值。例子中,挤出头、热床都处于关闭状态,所以这个位置的值都是0。 M109 等待挤出头加热达到目标温度

设置挤出头的目标温度,并等待达到这个温度。相关参数包括: Snnn表示目标温度; Tnnn表示对应的挤出头;

Fnnn表示到达目标温度之后,是否触发蜂鸣器。F1表示要触发; 如果执行命令时没有带T参数,则针对当前挤出头设置目标温度。 M190 等待热床加热达到目标温度

设置热床的目标温度,并等待达到这个温度。相关参数包括: Snnn表示目标温度;

Fnnn表示到达目标温度之后,是否触发蜂鸣器。F1表示要触发; M116 等待温度达到目标温度

等待所有挤出头/热床到达由之前的M104/M140指令所指定的目标温度。没有相关参数。

第八节,其他常用指令

M92 设置分辨率

设置3D打印机内存中XYZE步进电机的分辨率。参数包括: Xnnn表示X轴的分辨率; Ynnn表示Y轴的分辨率; Znnn表示Z轴的分辨率;

Ennn表示E轴(挤出机步进电机)的分辨率; M106/M107 打开/关闭风扇

这两条命令用于打开(M106)或关闭(M107)风扇。相关的参数包括: Snnn表示打开风扇时风扇的转速,取值范围在0~255之间; P表示要等待前面的指令完成之后,再开始调整风扇转速; 在固件配置中,定义

#define FEATURE_FAN_CONTROL 1

表示支持风扇控制功能,在编译中会包含相关的代码。 M114 输出当前位置

输出挤出头当前位置。没有相关的参数。 M114命令的输出,格式为: X:20.00 Y:30.00 Z:10.000 E:0.0000 M115 输出3D打印机信息

输出3D打印机信息。没有相关的参数。 M115命令的输出,格式为:

FIRMWARE_NAME:Repetier_0.92.3 FIRMWARE_URL:… Printed filament:0.00m Printing time:0 days 0 hours 0 min SpeedMultiply:100 FlowMultiply:100

第一行是固件的版本信息,很长,我没有列完整。第二行是已经打印了多少米耗材,打印时间是几天几小时几分钟。第三行是速度系数,参考M220命令。第四行是流率系数,参考M221命令。 M119 输出限位开关状态

将当前限位开关状态输出。没有相关的参数。 M119命令的输出,格式为:

endstops hit: x_min:L y_min:L z_min:L

列出了XYZ三个轴的低位限位开关的当前状态。L代表限位开关没有触发。H代表限位开关被触发了。

M201/M202 设置最大加速度

这两条命令设置打印加速度。包括挤出头工作时(打印中)的运动加速度(M201),以及挤出头不工作时(移动中)的运动加速度(M202)。参数为

Xnnn表示X轴的加速度; Ynnn表示Y轴的加速度; Znnn表示Z轴的加速度; Ennn表示E轴的加速度; 在固件配置中,定义

#define RAMP_ACCELERATION 1

表示支持加速度功能,在编译中会包含相关的代码。 M203 监控温度

使用串口输出监控3D打印机的温度。参数为 Snnn表示是否监控,S0关闭监控,S1打开监控;

当监控处于打开状态,可以从串口定时获取当前的温度信息。 监控输出格式与M105命令的输出结果完全一致。 M204 设置PID参数

设置挤出头温度控制的PID参数,命令参数为

Snnn表示对应的挤出头,无S参数表示使用当前挤出头; Xnnn表示P参数; Ynnn表示I参数; Znnn表示D参数; M207 修改抖动(Jerk)值

修改当前的最大抖动值。命令参数为 Xnnn表示XY轴的最大抖动值; Znnn表示Z轴的最大抖动值; Ennn表示E轴的最大抖动值;

XY轴抖动指的是3D打印机同时在X轴和Y轴上移动时,产生的和速度最大值。比如,3D打印机加热头正在向X轴正方向全速移动,下一条指令变为向Y轴正方向移动。如果同时在X轴和Y轴上改变速度,那么实际产生的速度是X方向的速度和Y方向的速度的向量和,这个比较大的速度变化值,会对3D打印机的机械部件产生不利的影响,而且会造成比较大的噪音。这里的设置,就限制了这个XY轴上和速度的最大值。当然这个值也不能设置的太小,太小的话,首先打印速度会变得很慢,而且打印会产生更多的瑕疵。 Z轴抖动与XY轴抖动意义类似,不同点是Z-Jerk是Z轴方向不为0的抖动速度值。因为这项涉及到Z轴的运动,因此最大速度就低多了。 M207命令的输出,格式为: Jerk:20.00 ZJerk:0.30

这个输出意义很简单,表示XY轴抖动速度为20mm/s,Z轴抖动速度为0.3mm/s。 M220 设置速度

设置3D打印机运行速度系数。命令参数为

Snnn表示系数,是一个百分数,如果S参数不存在,则使用缺省值100;

3D打印机运行速度系数,是一个在25%到500%范围内变化的值。这个系数值在3D打印机运行过程中,与切片器给出的3D打印机运动速度基础值相乘,得到最终的3D打印机实际运动速度值。

M220命令的输出,格式为: SpeedMultiply:100 M221 设置流率

设置3D打印机的流率系数(Flow rate)。命令参数为

Snnn表示系数,是一个百分数,如果S参数不存在,则使用缺省值100;

3D打印机流率系数,是在上位机切片软件通过耗材直径、喷头直径、层高以及3D打印速度等因素综合计算得到的E轴运动速度的基础上,叠加的一个E轴运动速度系数。简单地说,就是控制挤出头耗材挤出量的多少。这个系数可以在25%到500%范围内变化。 M221命令的输出,格式为: FlowMultiply:100

M302 设置是否允许冷挤出

在最新版本的Repetier-Host 1.6.0中(打印虎本地下载,百度云下载),“手动控制”操作面板中,顶部是一个G-code输入框。想要单条执行G-code,可以在这里输入,并按下“发送”按钮,就可以了。

为了看到G-code的执行结果,可以按下工具栏上的“是否记录”按钮,这时,整个窗口下半部分,就会展现出通讯记录(也称为日志,Log)的内容。一部分G-code命令,是带有输出内容的。这时内容就可以从这个窗口中看到。可以看到,在通讯记录窗口的第一行,有一排蓝色的圆点按钮,我们建议初学者把所有按钮都点亮。未来对这个系统熟悉了,可以根据需要选择过滤掉一部分不需要的信息,加快工作速度。

比如,我现在希望知道XYZ三个坐标轴的限位开关状态,就可以在G-code输入栏中,输入“M119”,并且按下“发送”按钮。

按下“发送”按钮之后,通讯记录窗口就立刻显示出M119命令的执行结果:

可以看到,XYZ三个轴的限位开关,现在都处于未触发(L)状态。

如果你使用的不是Repetier-host 1.6.0版本,而是早期的一些版本,G-code输入框和“是否记录”按钮可能在Repetier-host软件启动的时候是隐藏的。这种情况下,需要先按下整个软件右上角的大按钮“Easy mode”,关闭简易模式之后,就可以看到G-code输入框和“是否记录”按钮了。

第十六节,一个G-code文件的解读

上一节我们解决了单步执行G-code命令的问题,这一节再进一步,给大家讲解一下切片器实际生成的G-code文件内容是怎样组织的。

还是以Repetier-host 1.6.0版本为例,下载、解压并在Repetier-host中载入打印虎网站模型库的“坐着的猫”3D模型之后,我们使用Cura Engine对这个模型进行了切片操作

(0.4mm挤出头,0.32mm层高,其他设置大都是缺省的),操作完成之后,在“Gcode编辑”标签页,我们可以看到这样的结果:

在G-code代码展示窗口中,可以看到一共生成了30,894行G-code命令代码。下面让我们一条一条读一下(其实当然不是每条都读,哈)。

第1行和第2行,以分号开头,很明显是一些注释信息,表示了切片器的名称和版本,会在上位机发送G-code代码时被直接忽略掉,没什么可仔细研究的。

第3行,是一条G28命令。执行归零操作。后面又是一个分号,仍然表示注释信息。以后的同类信息我们就不再解释了。

第4行,G1 Z15 F100,以100mm/s的速度,将Z轴上升15mm,在这里等待热床/挤出头加热。

第5行,M107,将风扇关闭。

第6行,G90,XYZ步进电机使用绝对定位模式。万一之前用户将3D打印机设置在相对定位模式的话,后面的移动位置用的G-code代码可就全乱了。所以一定要确保当前是绝对定位模式。

第7行,M82,同样的道理,挤出机步进电机E也得使用绝对定位模式。

第8行,M190 S60,等待热床加热到60℃。

第10行,M104 T0 S210,将第一个挤出头设定到210度,不等待到达这个温度,继续执行下面的G-code命令。

第11行,G92 E0,将当前E轴步进电机位置设置为0。结合上面的第7行M82考虑,可以理解这条命令的意义。

第13行,M109 T0 S210,等待挤出头加热达到210度。 再下面一段G-code命令是这样的:

第14行和第15行仍然是注释。不过这里的信息比较有趣,第14行表示总层数是125层,第15行表示第0层(计数从0开始)开始了。

第16行,M107,再次将风扇关闭(没有实际作用)。为什么会出现这样一条语句?因为对风扇的操作,是每一层打印G-code命令组的第一个动作。因为是程序自动生成的G-code代码,所以就会出现这样比较粗糙的重复执行动作的情况。

第17行,G0 F9000 X94.751 Y75.707 Z0.320,这是整个G-code文件出现的第一次移动指令,作用是将挤出头快速移动到实际打印第一笔开始的位置处。可以看到这条指令中没有对E轴的移动,说明这条语句不会挤出3D打印耗材。

第19行,G1 F1800 X95.368 Y75.083 E0.04670,从这条语句开始进行正式的3D打印,这条语句中没有Z轴的移动,说明挤出头是在一个水平面内移动。F速度值变小,适应于3D打印机打印速度。E轴开始移动,挤出耗材。

接下来,是大量的G0/G1语句,控制挤出头反复移动,在合适的机会下挤出耗材,完成整个3D打印的主体过程。

最后,在G-code执行到最后的时候,会执行这段代码:

这些结束代码我们就不逐一介绍了,大家可以按照我们的文章,对应起来看,就可以很容易理解了。

结束语

到此为止,我们的3D打印机G-code命令相关的内容就都介绍完了。希望读到这篇文章的朋友,获得所需的知识,并且对3D打印机有一个更深层次的认识。

最后,再给我们自己做个广告。打印虎作为国内最专业的3D打印机主板设计生产厂家,竭诚为广大用户提供最优质最便宜的3D打印机主板产品。目前主要提供Melzi主板,以及Melzi的升级产品Salai主板。除了主板之外,打印虎还提供3D打印机软件、硬件研发定制服务。无论您是3D打印机DIY玩家,或者是3D打印机的生产企业,都欢迎来打印虎选购产品,洽谈合作。我们会用专业的态度加精湛的技术帮助你解决3D打印机研发中的困难,提供最优质产品和服务。希望能够得到广大用户的认同和选择。我们的联系方式可以从打印虎网站获得。祝大家玩机愉快,每天都有好心情。

本文来源:https://www.bwwdw.com/article/b3ud.html

Top