1. 什么是G代码?
G代码是CNC(计算机数控)机床的编程语言。G代码代表“几何代码”。我们使用这种语言来告诉机器该做什么或如何做某事。G代码命令指示机器移动到哪里,移动的速度以及遵循的路径。
对于车床或铣床等机床,切削刀具由这些命令驱动,遵循特定的刀具路径,切割材料以获得所需的形状。
同样,在增材制造或3D打印机的情况下,G代码命令指示机器逐层沉积材料,形成精确的几何形状。
2. 如何阅读G代码命令?
乍一看,当您看到 G 代码文件时,它可能看起来很复杂,但实际上并不难理解。
如果我们仔细查看代码,我们可以注意到大多数行具有相同的结构。似乎G代码的“复杂”部分就是我们看到的所有数字,它们只是笛卡尔坐标。
让我们看一下一行并解释它是如何工作的。
G01 X247.951560 Y11.817060 Z-1.000000 F400.000000
该行具有以下结构:
G## X## Y## Z## F##
- 首先是G代码命令,在这种情况下是G01,意思是“直线移动到特定位置”。
- 我们用 X、Y 和 Z 值声明位置或坐标。
- 最后,使用 F 值,我们设置进给速率或执行移动的速度。
总而言之,G01 X247.951560 Y11.817060 Z-1.000000 F400 告诉 CNC 机床以 247 mm/min 的速度从其当前位置直线移动到坐标 X951560.11、Y817060.1 和 Z-000000.400。单位是mm/min,因为如果我们回顾一下G代码示例图像,我们可以看到我们使用了命令G21,它将单位设置为millimiters。如果我们想要以英寸为单位的单位,我们改用 G20 命令。
3. 最重要/最常见的 G 代码命令
因此,现在我们知道了如何读取一行 G 代码,我们可以看看最重要或最常用的 G 代码命令。我们将通过几个示例了解它们中的每一个是如何工作的,在本教程结束时,我们将能够完全了解 G 代码的工作原理、如何阅读、如何修改甚至如何编写我们自己的 G 代码。
3.1 G00 – 快速定位
G00 命令以最大行驶速度将机器从当前位置移动到指定点或命令指定的坐标。机器将同时移动所有轴,以便它们同时完成行程。这会导致直线移动到新位置点。
G00是一种非切割运动,其目的是将机器快速移动到所需位置以开始某种工作,例如切割或打印。
3.2 G01 – 线性插值
G01 G 代码命令指示机器以设定的进给速率或速度直线移动。我们使用 X、Y 和 Z 值指定结束位置,并使用 F 值指定速度。机器控制器计算(插值)要通过的中间点以获得该直线。尽管这些G代码命令简单易懂,但在它们背后,机器控制器每秒执行数千次计算以进行这些运动。
与仅用于定位的 G00 命令不同,G01 命令在机器执行其主要工作时使用。在车床或铣床的情况下,直线切割材料,在3D打印机的情况下,直线挤出材料。
3.3 G02 – 顺时针圆形插值
G02 命令告诉机器以圆形顺时针方向移动。它与 G01 命令的概念相同,在执行适当的加工过程时使用。除了端点参数,这里我们还需要定义旋转中心,或者弧起点到弧中心点的距离。起点实际上是上一个命令的终点或当前点。
为了更好地理解,我们将在上一个示例中的 G02 命令之后添加 G01 命令。
因此,在示例中,首先我们有 G01 命令,它将机器移动到 X5、Y12 点。现在,这将是 G02 命令的起点。使用 G02 命令的 X 和 Y 参数,我们设置终点。现在,为了使用圆周运动或圆弧到达此终点,我们需要定义其中心点。我们使用 I 和 J 参数来做到这一点。I 和 J 的值相对于上一个命令的起点或终点。因此,为了使中心点指向 X5 和 Y7,我们需要沿 X 轴偏移 0,沿 Y 轴偏移 -5。
当然,我们可以在其他任何地方设置中心点,因此我们将得到一个不同的弧,它在同一端点结束。下面是一个示例:
因此,这里我们仍然具有与上一个示例相同的终点(X10,Y7),但中心点现在位于不同的位置(X0,Y2)。有了这个,与前一个相比,我们得到了更宽的弧线。
另请参阅:如何使用Arduino设置GRBL和控制CNC机床
3.4 G00、G01、G02 示例 – 手动 G 代码编程
让我们看一个简单的CNC铣削示例,使用这三个主要的G代码命令G00,G01和G02。
要获取上图所示形状的刀具路径,我们需要遵循 G 代码命令:
G00 X5 Y5 ; point B G01 X0 Y20 F200 ; point C G01 X20 Y0 ; point D G02 X10 Y-10 I0 J-10 ; point E G02 X-4 Y-8 I-10 J0 ; point F G01 X-26 Y-2 ; point B
Code language: Arduino (arduino)
使用第一个 G00 命令,我们可以快速将机器从其初始位置或初始位置带到 B(5,5) 点。从这里开始,我们使用 G200 命令以 01 的进给率“切割”。我们可以在这里注意到,为了从点 B(5,5) 到点 C(5,25),我们使用相对于起始 B 点的 X 和 Y 值。因此,Y 方向上的 +20 个单位将使我们到达点 C(5,25)。实际上,这取决于我们是否选择了机器来将坐标解释为绝对坐标或相对坐标。我们将在后面的部分中对此进行解释。
一旦我们到达点 C(5,25),我们还有另一个 G01 命令来到达点 D(25,25)。然后我们使用 G02 命令(圆周运动)到达点 E(35,15),中心点 (25,15)。对于下一个 G25 命令,我们实际上有相同的中心点 (15,02),以到达点 F(31,7)。但是,我们应该注意,I 和 J 参数与前面的命令不同,因为我们从最后一个端点或点 E 偏移中心。我们使用另一个 G01 命令完成刀具路径,该命令将我们从点 F(31,7) 返回到点 B(5,5)。
所以,这就是我们如何手动编程G代码来制作这个形状。但是,我们需要注意这不是一个完整的 G 代码,因为我们缺少一些更基本的命令。我们将在后面的示例中制作完整的 G 代码,因为我们首先需要解释这些 G 代码命令。
就像G02一样,G03 G代码命令定义了机器以圆形模式移动。这里唯一的区别是运动是逆时针的。所有其他功能和规则与 G02 命令相同。
因此,使用这三个主要的 G 代码命令 G01、G02 和 G03,我们可以为我们想要的任何形状生成刀具路径。 您现在可能想知道这怎么可能,但这实际上对于计算机和 CAM 软件来说是一项简单的任务。是的,我们有时确实可以手动制作G代码程序,但大多数时候我们使用适当的软件来做到这一点,这些软件更容易,更安全。
尽管如此,现在解释一些更重要和常用的命令,最后做一个真正的G代码示例。
3.5 G20/ G21 – 单位选择
G20 和 G21 命令定义了 G 代码单位,英寸或毫米。
- G20 = 英寸
- G21 = 米
我们需要注意,必须在程序开始时设置单位。如果我们不指定单位,机器将考虑上一个程序设置的默认值。
3.6 G17/ G18/ G18 – G 代码平面选择
使用这些G代码命令,我们选择机器的工作平面。
- G17 – XY飞机
- G18 – XZ 飞机
- G19 – YZ 飞机
G17 是大多数 CNC 机床的默认型号,但另外两个也可用于实现特定运动。
3.7 G28 – 返回家园
G28 命令告诉机床将刀具移动到其参考点或起始位置。为了避免碰撞,我们可以包含一个带有 X、Y 和 Z 参数的中间点。该工具将在转到参考点之前通过该点。 G28 X## Y## Z##
初始位置可以使用命令 G28.1 X## Y## Z##定义。
3.8 G90/ G91 – 定位 G 代码命令
通过 G90 和 G91 命令,我们告诉机器如何解释坐标。G90 用于绝对模式,G91 用于相对模式。
在绝对模式下,刀具的定位始终从绝对点或零开始。因此,无论之前的位置如何,命令 G01 X10 Y5 都会将工具带到该确切点 (10,5)。
另一方面,在相对模式下,工具的定位相对于最后一个点。因此,如果机器当前处于点 (10,10),命令 G01 X10 Y5 会将工具带到点 (20,15)。此模式也称为“增量模式”。
4. 更多命令和规则
因此,我们上面解释的 G 代码命令是最常见的命令,但还有更多。有刀具补偿、缩放、工作坐标系、停留等命令。
除了G代码之外,还有M代码命令,用于生成真正成熟的G代码程序。以下是一些常见的 M 代码命令:
- M00 – 程序停止
- M02 – 程序结束
- M03 – 主轴开启 – 顺时针
- M04 – 主轴开启 – 逆时针
- M05 – 主轴挡块
- M06 – 换刀
- M08 – 防洪喷垛剂开启
- M09 – 防洪灯关闭
- M30 – 程序结束
如果是 3D 打印机:
- M104 – 开始挤出机加热
- M109 – 等到挤出机达到 T0
- M140 – 开始加热床
- M190 – 等到床达到 T0
- M106 – 设置风扇速度
其中一些命令需要适当的参数。例如,当用 M03 打开主轴时,我们可以使用 S 参数设置主轴速度。因此,M30 S1000 系列将以 1000 RPM 的速度打开主轴。
我们还可以注意到,许多代码是模态的,这意味着它们在取消或被另一个代码取代之前一直有效。例如,假设我们有一个线性切割运动 G01 X5 Y7 F200 的代码。如果下一个动作再次是线性切割,我们可以只输入 X 和 Y 坐标,而不在前面写 G01。
G01 X5 Y7 F200 X10 Y15 X12 Y20 G02 X5 Y5 I0 J-5 X3 Y6 I-2 J0
Code language: Arduino (arduino)
这同样适用于进给速率参数 F。我们不必在每一行都包含它,除非我们想改变它的值。
在某些 G 代码文件中,您还可以在命令前面看到“N##”。N 字很容易对代码行或代码块进行编号。这有助于在大型程序中出错时识别特定行。
5. 简单的G代码程序示例
尽管如此,在阅读了所有这些之后,现在我们能够手动制作真实的实际代码。下面是一个示例:
简单的CNC铣削程序示例 - G代码基础知识
% G21 G17 G90 F100 M03 S1000 G00 X5 Y5 ; point B G01 X5 Y5 Z-1 ; point B G01 X5 Y15 Z-1 ; point C G02 X9 Y19 Z-1 I4 J0 ; point D G01 X23 Y19 Z-1 ; point E G01 X32 Y5 Z-1 ; point F G01 X21 Y5 Z-1 ; point G G01 X21 Y8 Z-1 ; point H G03 X19 Y10 Z-1 I-2 J0 ; point I G01 X13 Y10 Z-1 ; point J G03 X11 Y8 Z-1 I0 J-2 ; point K G01 X11 Y5 Z-1 ; point L G01 X5 Y5 Z-1 ; point B G01 X5 Y5 Z0 G28 X0 Y0 M05 M30 %
Code language: Arduino (arduino)
G代码程序的描述:
- 代码初始化。此字符 (%) 始终出现在程序的开头和结尾。
- 安全线:设置公制编程(所有尺寸均以毫米为单位),XY平面,绝对定位和100英寸/分钟的进给率。
- 主轴顺时针以 1000 RPM 的速度打开。
- 快速定位至 B(5,5)。
- 在同一位置上控制运动,但将工具降低到 -1。
- 线性切割运动到位置 C(5,15)。
- 顺时针圆周运动到点 D(9,19),中心点在 (9,15)。
- 线性切割到点 E(23,19)。
- 线性切割到点 F(32,5)。
- 与点 G(21,5) 的直线切割相同。
- 再直切到H点(21,8)。
- 逆时针圆形插值到位置 I(19,10),中心点位于 (19,8)。
- 线性切割到点 J(13,10)。
- 逆时针圆形切割到位置 K(11,8),中心点位于 (13,8)。
- 线性切割到位置 L(11,5)。
- 最终线性切割移动到位置 B(5,5)。
- 举起工具。
- 转到初始位置。
- 主轴关闭。
- 主程序结束。
以下是此代码如何准备通过通用 G 代码发送器软件发送到我们的 CNC 机床:
因此,使用上面解释的这些主要的 G 代码命令,我们设法编写了我们自己的成熟 G 代码。当然,这个例子非常简单,对于更复杂的形状,我们肯定需要使用CAM软件。下面是马形状的复杂 G 代码的示例:
相比之下,此代码大约有 700 行,但所有代码都是自动生成的。G代码是使用Inkscape作为我的DIY Arduino CNC泡沫切割机的示例制作的。形状是这样出来的:
您可以查看我的特定教程以获取有关此机器的更多详细信息。
6. 结论
因此,我们介绍了G代码的基础知识,解释了最重要和最常见的G代码命令,并手动制作了我们自己的实际G代码。毕竟,我认为理解G代码并不难。当然,我们应该注意CNC加工或3D打印中使用的许多其他命令和功能,但在其他一些教程中会有更多介绍。