新浪博客

12、G、M代码详解

2017-05-06 08:57阅读:
介绍
本页面描述了G代码在RepRap固件中的使用,以及它们如何工作。
G代码还是可扩展的。
一个典型的G代码发送到RepRap机器:
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
(该行结束要标记。如果你想使用Arduino的串行接口手动输入reprap GCodes,在底部应选择
“NLCR”。)
这是不准确的,固件接受的单,以及单,或其组合。 主机应该接受所有四个组合
一、3D打印机的固件(firmware)介绍
此处是必要的介绍以下各个开源固件,因为在代码方面会有差异,目前还没有很好的通用协议让各个开源社区遵循此标准。
开源3D打印机固件目前主要有以下几种:Markbot、MarlinRepetier,主流的为MarlinRepetierMarlin 是国内最流行的固件之一,因为某台湾大神写了个非常详细的源码分析。Markbot后期已经不开源,免费资源很老。Repetier固件可在线生成,并且有免费的上位机软件,并且整合了3D切片软件。
二、代码详解
通用部分
1、前缀
字母
意义
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. 用于检测通信错误
2、注释:G-Code一行中分号;”后面的内容为解释性语句,即注释。固件会忽略其内容。为了减少通信量,可以把注释信息都去掉。
二、Marlin中G代码详解

介绍
G代码还是可扩展的。
一个典型的G代码发送到RepRap机器:
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
(该行结束要标记。如果你想使用Arduino的串行接口手动输入reprap GCodes,在底部应选择“NLCR”。)
这是不准确的,固件接受的单,以及单,或其组合。 主机应该接受所有四个组合
RepRapG代码字段
定义的数字nnn代表。 数字可以是整数,也可以包含一个小数点,根据上下文。 例如X坐标可以是整数(X175)或小数(X17.62),而试图选择挤出数2.76将毫无意义。
G代码的注释:
N3 T0*57 ;This is a comment
N4 G92 E0*67; So is this
N5 G28*22
将会被RepRap忽略,就如空白行。 但最好它能在发送命令前与电脑主机剥离, 这可以节省带宽。
个别命令
检查
N*
例如:N123 [G代码...] * 71
这些行号和校验。 RepRap固件对本地计算值的校验和检查,如果它们不同,就要求一个给定的数字线的重复传输。
你可以不要这两个 - RepRap仍然可以工作,但它不会做检查。你必须两个都要或者都不要。
The checksum 'cs' for a GCode string 'cmd' (including its line number) is computed by exor-ing the bytes in the string up to and not including the * character as follows:

int cs = 0;
for(i = 0; cmd[i] != '*' && cmd[i] != NULL; i++)
cs = cs ^ cmd[i];
cs &= 0xff; // 防御性编程...
这个值作为一个十进制整数*字符命令后追加值。
RepRap固件期望行数每行增加1,如果不发生,它是标记为错误。但你可以使用的M110(见下文)重置计数。
缓冲G命令
该的RepRap固件存储这些命令在一个环形缓冲区内部执行。 这意味着虽然一个命令被确认了且下一个就会被发送但没有(明显)的延迟。 反过来,这意味着线段序列会被划分但两个之间没有延时。 当这些缓冲命令被收到,它就被确认和在本地存储了。 如果本地缓冲区已满,这个确认就延迟,直到缓冲区空间可以存储。 这就是如何实现流量控制。
G0:快速移动
例如:G0 X12
在这种情况下快速移动到X = 12毫米。 事实上, RepRap固件快速控制动作(见下面的G1)使用的是完全相同的代码。 (区别来自一些旧机床,如果不是在一条直线轴驱动时移动速度更快。他们G0允许任何空间中的运动,以尽可能快地到达目的地。)
G1的:控制移动
例如:G1 X90.6 Y13.8 E22.4
在一条直线上从目前的(X

我的更多文章

下载客户端阅读体验更佳

APP专享