问题标签 [g-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
14 浏览

python - 从字体中的点中提取点的坐标

我正在尝试为点针机制作软件。对于每一个字母,我需要一组点,这些点应该被标记为那个字母。然后,我将为每个字母使用这些点集,并对它们应用缩放和移动,以获得所有组合字母的点集,然后为其生成 GCODE。我需要从 tff 或 svg 字体中提取点的位置。这是一个示例虚线字体 虚线字体

我也可以使用图像中的字母而不是 tff 或 svg 字体,但我需要一个关于如何获取每个字母的点集的方向。我可以使用任何东西来提取点(python、java、MATLAB 或其他任何东西),但最后我将在 python 中制作一个软件来生成点喷的 gcode。

0 投票
0 回答
57 浏览

twincat - TwinCAT 3 - 通过 GCode / program M 命令管理 I/O

我想要实现的是通过 gcode 调用打开和关闭特定的 I/O。在我之前工作过的一些运动控制器中,可以使用 M 指令(即 M10Pn,其中 n 表示引脚地址)来完成。

例如:

  • 移动到位置 X10 Y10
  • 开启冷却
  • 移动到位置 X0 Y0
  • 关闭冷却

假设冷却连接到专用的 ethercat 模块,我该如何解决?我浏览了 beckhoff infosys,看起来 M 命令是起点,但我不确定如何对其进行编程。

有谁知道在哪里可以找到一个例子?

0 投票
2 回答
214 浏览

python - X,Y 坐标到 gcode

我正在研究一个计算机科学项目,它是一个 CNC 绘图仪,基本上我看到的所有获取 Gcode 的方法都使用 Inkscape。我已经编写了将普通图像仅转换为黑白边缘的软件,并且我已经从图像中提取了坐标。有什么方法可以使用 X,Y 坐标生成 Gcode 吗?还是我必须使用 Inkscape。

0 投票
1 回答
44 浏览

parsing - 将 YACC 应用于 GCODE (GRBL)

GCode 是用于告诉多轴 (CNC) 机器人如何移动的语言。它看起来像这样:

我已将这些命令放在句子中,但每个标记都可以在单独的行上。事实上,没有关于将数字连接到它们各自的代码字母的规则。然而,我已经有一个 LEX 解析器,它可以让我得到如下所述的令牌。

请注意,某些命令(M 或 G 代码)具有参数。在 M3 的情况下,它可以有一个 S(主轴速度)参数。G0 和 G1 可以有 X,Y,Z,F 等。G3 可以有 X,Y,Z,I,J,R... 但是每个 G 代码不需要所有这些参数,只需一个、多个或全部。

这里要注意的一件事是,我们正在切割一条路径,然后提升 z 轴。也就是说,我们移动到工作表面上方的位置,穿透,切割路径然后升空。我将其称为“块”或“路径”,而这正是我感兴趣的。

我需要能够以任何混乱的格式解析 GCode,然后创建一个“块”结构,其中一个块是 z 轴上下之间的任何一系列“命令”。

我可以使用 LEX(​​特别是 python PLY)标记这种语言。并得到:

现在使用 Lexx,我需要一个名为“命令”的规则。

命令是任何注释,或: 'G' 或 'M' 代码后跟任何适当的参数代码(X、Y、Z 等) 当遇到另一个命令(注释、G 或 M)时,命令结束。

然后我需要一个称为“块”的东西,其中块是在 Z 向下和 Z 向上之前出现的任何“命令”集。

有 100 个 G 代码和 100 个 M 代码和 25 个参数代码(AZ 减去 G 和 M)

“命令”的规则可能如下所示:

然后我们将如何定义块!?

我意识到这是一篇很长的帖子,但是如果有人可以给我一个关于 YACC 是否可以做到这一点的想法吗?否则,我将编写一些将 lex 标记手动转换为树的代码。

附录@rici

感谢您花时间理解这个问题。作为反馈:我的全部任务是让 YACC 完成繁重的工作,根据不同的用例将代码块分成块。

例如,当“雕刻”时,一个块通常代表一个字母或其他一些形状(在 xy 平面上)。因此,块将由 z 轴进出 xy 平面的移动来定义。

我希望能够发布流程块:

  • 填充一个“块”。这将涉及一些相当复杂的路径边界计算、这些边界的切线、刀具直径等。这是最紧迫的用例,我还没有一个好的解决方案,但我知道它可以完成,因为它可以完成Inkscape(矢量图形应用程序)
  • 旋转 n 度。一个相当简单的坐标翻译,我已经有一个解决方案。
  • 迭代加深(拉伸)。在每次迭代中复制块并调整 Z 深度。简单的。
  • 等等
0 投票
1 回答
57 浏览

python - 缩放不规则多边形的算法

一种称为“gcode”的语法用于告诉 CNC 雕刻机如何移动。gcode的一个例子如下:

如您所见,我们可以从 x、y 和 z 平面中的坐标以直线 (G0,G1) 和圆弧 (G2,G3) 描述工具的移动。使用这种机制,我们可以绘制(雕刻)路径,通常它们是闭合路径,如下所示:

在此处输入图像描述

在这张图片中,我们看到一条黑色的封闭路径(字母 a)。绿色轮廓是相同的路径但“向上缩放”,红色路径是相同的路径但向下缩放。在 Inkscape 中,我们可以使用“动态偏移”工具来做到这一点。

我正在寻找一种算法,我可以将其应用于 gcode(如上所述)以按所述缩放路径。我的第一个想法是从字面上只缩放每一行和 arc :

假设我们按 'n'% 缩放 本质上,我们会让每条线长 n%,每条弧长 n%。但是最终的路径会以什么为中心呢?

有谁知道这个算法的名称,或者有任何链接或示例说明如何在 SVG 或任何其他基于坐标的系统中实现这一点(如果可能的话,最好在 python 中)。

附录:

向内和向外缩放多边形的过程主要有两个不同的名称:“膨胀”和“偏移”。

请参阅此处以获取此问题的近似答案

0 投票
0 回答
10 浏览

g-code - 3D打印机Gcode中的E指令

我正在查看我的 3D 打印机的 Gcode,我注意到命令 E0.25,用于挤出 0.25 的灯丝。现在,我正在尝试更改编程,以便可以使用 E 命令从连接的注射泵中喷射流体。有没有办法做到这一点?

0 投票
1 回答
37 浏览

python-3.x - 按行查找、乘法和替换字符串中的数字

我正在为我的 CNC 激光功率输出缩放 Gcode。激光的“S”值最大为 225,当前文件比例为 1000。我需要仅/所有 S 值乘以 0.225,省略 0 的 S 值,并在每行的字符串中替换。Gcode 中有预先指定的“M”、“G”、“X”、“Y”、“Z”、“F”和“S”,用于轴运动和机器功能。

注意:我不能手动执行此操作,因为有 7.5k 行代码。

希望 .py 的结果类似于(前 3 行):

示例文件代码:

试过这个:

输出:

测试.rtf 文件:

0 投票
0 回答
35 浏览

python - 如何通过 pySerial 无延时发送多个 g 代码命令

我有一个 python 脚本,可以创建到我的 Arduino-Mega (ramps1. 4) 的串行连接。我正在使用 pyserial 库,通过 COM 发送 G 代码命令。那里的“Marlin 2.0x”读取输入并作用于任何 G 代码。

到目前为止一切正常。我可以通过serial.write()编写任何 G 代码,Marlin 可以理解。但不幸的是,如果我想对多个命令采取行动,我必须添加时间延迟。有没有一种很好的方法来规避它?

这是两次挤出 1mm 长丝的示例代码。

理想情况下,它看起来像这样没有延迟:

但是随后命令被跳过。

0 投票
1 回答
22 浏览

svg - 如何将 g 代码弧转换为 SVG 贝塞尔弧

我正在尝试找出一种将 g 代码解释为 SVG 图像的方法。我可以想象很容易使用坐标来绘制直线,但我正在努力使用弧线。我不知道如何将 IJ 系统解释为 SVG 中的弧线。

这是我对上面代码的理解,它是相对的,所以我将从 -74,585 开始,然后移动 -1,0,然后开始一个弧线,该弧线在 -735.2,736.2 的起点处远离弧线的起点。弧中心将基于 I 和 J 信息。由于这是相对的,I 和 J 是否相对于弧的起点?

对于弧的中心,这将如何转化为 svg 弧?我是否认为对于 SVG 贝塞尔曲线 (Q),控制点位于曲线的“外部”,而对于 g 代码,中心位于内部?

我可以解析我拥有的数据并生成以下 SVG:

我没有添加我用来生成它的脚本(用 PHP 编写),因为它很冗长并且从数据库中提取数据,所以并没有真正的帮助。方向是错误的,但我可以通过对整个 SVG 进行变换来解决这个问题。负责圆弧的线中有 Q,这是我一生无法根据 g 代码中点的 IJ 值在数学上计算出来的控制点值。任何帮助或建议将不胜感激。