加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

12、G、M代码详解

(2017-05-06 08:57:15)
标签:

开源软件

gcode

g代码

分类: 3D打印

介绍

本页面描述了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

在一条直线上从目前的(XY)点移动到点(90.613.8),挤出材料现在开始移动到22.4毫米的长度。

RepRap与材料进给都做出了反应。 因此:

 G1 F1500

 G1 X90.6 Y13.8 E22.4

将设置为1500毫米/分钟的进给率,那么进给速度会根据上面的去移动。 

 G1 F1500

 G1 X90.6 Y13.8 E22.4 F3000 

将设置为1500毫米/分钟的进给速度,然后根据上述加速到进给3000毫米/分钟。 挤压将加速沿XY运动,所以一切都保持同步。

RepRap只是以另一个变量(如,XYZE)进行线性插值去处理进给率。 这给了加速和减速的方式,以确保同时移动和大量材料是正确地挤在所有点上。

 G1 F1500

 G1 X90.6 Y13.8 E22.4 F3000 

 G1 X80 Y20 E36 F1500

第一个例子显示了如何获得一个恒定的速度运动。 第二个是如何加速或减速。 从而

会首先加速,然后从3000毫米/分钟减速至1500毫米/分钟。

挤出机倒退一个给定的数量(例如,以减少其内部的压力,同时空气在流动,以便它不会滴下),只需使用G1发送小于目前的挤压长度的E值。

G28:移动到原点

例如:G28

这将导致RepRap机器移动回其xyZ原点的限位开关,被称为归位的过程。 先加速很快到达那里, 但是,当它到达后会慢慢地(1毫米)在每个方向移动,然后向后移动缓慢停止。 这将确保更精确的定位。

如果添加坐标,则刚指定的坐标轴将被清零。 从而

指令G28 X0 Y72.3

将使XY轴都为零,但没有Z轴的,它的实际坐标值将被忽略。

无缓冲G命令

下面的命令没有缓冲。 当收到它存储的信息,但它未被主机确定,直到缓冲区耗尽,然后命令才被执行。 因此,主机在这个命令时将暂停,直到它执行。 这些命令和任何可能跟随他们 之间的的短暂停都不影响机器的性能。

Teacup Firmware缓冲G20G21G90G91。(Teacup FirmwareFiveD RepRap固件的一个完整的重写。它适合ATmega168-based,比如Arduino Diecimila,以及更大的控制器。

G4的:暂停

例如:G4 P200 

在这种状态下暂停200毫秒不工作。 在延时时的机器状态(例如其挤出机的温度)仍然会被保留和控制。

G20:设置单位为英寸

例如:G20

从现在开始单位是英寸。

G21:设置单位为毫米

例如:G21

从现在开始单位是毫米。 (这是的RepRap默认。)

G90:绝对定位

例如:G90

从现在起,所有的坐标是绝对的,相对的机器的原点。 (这是的RepRap默认。)

G91 :设置相对定位

例如:G91

从现在起,所有的坐标是相对最后一个位置的。

G92 :定义当前位置

例如:G92 X10 E90 

允许编程的绝对零点,通过重置当前位置为指定的值。 这将设置机器的X坐标为10和挤出坐标为90 没有物理运动发生。

若没有指定坐标的G92将重置所有轴为零。

缓冲的MT命令

M0的:停止

例如:M0

RepRap机器完成其缓冲区中留下任何动作,然后关闭。 所有的电动机和加热器关闭。 它可以由主控制器上按下复位按钮重新启动。 也可看到M112

M17的:使能/加速 全部步进电机

例如:M17 

M18的:禁止所有的步进电机

例如:M18

禁用步进电机,允许轴的自由移动。

M20的:列出SD

例如:M20

SD卡的根文件夹中的所有文件列出了串口。 排成一行就像这样:

确定文件:{SQUARE.GSQCOM.G}

后面的逗号是可选的。 注意:文件名是返回大写的,但当发送到M23命令(下同),他们必须是小写。 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有