开源改变世界

G代码优化? #179

推推 grbl 3年前 (2023-01-31) 208次浏览
关闭
TilTisback 打开了这个问题 2015 年 12 月 24 日 · 20条评论
关闭

G代码优化?#179

TilTisback 打开了这个问题 2015 年 12 月 24 日 · 20条评论

注释

G代码优化? #179

嗨,
我知道这不是真正的问题报告,但我不知道在哪里发布它。
所以事情是这样的:有没有办法在 bCNC 中实现 g 代码优化?
有一些基于命令行的优化器可以解决旅行商问题,但如果在程序本身中有这样的工具会非常好。就像加载 gcode 一样,点击优化并直接在主视口中查看结果。
我真的很感激!

G代码优化? #179
贡献者

@TilTisback
已经存在的东西,也许有点隐藏:

G代码优化? #179

来自代码描述:
使用遗传算法重新安排一组块以最小化快速移动。

这是你要找的吗?

G代码优化? #179
作者

好的,我还没有看到,但它似乎不起作用?
或者我做错了什么?
我加载我的钻孔文件,选择所有内容并点击优化。–>没有任何反应
然后我看到它只有一个块,所以我加载了一个包含大约 209 个块的隔离文件,选择它,点击优化,但仍然没有任何反应。

优化应该也适用于单个块,对吗?
这是我的 drillfile 的样子。旅行比实际钻井需要更多的时间。
G代码优化? #179

编辑:
对于那些想知道的人:我正在铣削电路板。

G代码优化? #179
贡献者

选择所有块(es:Ctrl+A)然后使用优化。
它应该工作,我已经做了这个测试:

前:
G代码优化? #179

后:
G代码优化? #179

G代码优化? #179
所有者

@effer 是正确的,您必须只选择要优化的 gcode 块。也许我应该把之前没有选择任何东西的选项作为一个选项。
该算法将第一个块保留为起始位置,并尝试优化随后选择的块。

根据你想做什么,你可以先重新排序你想要开始的块,然后选择你想要优化的

G代码优化? #179
贡献者

@vlachoudis如果没有选择任何内容,我喜欢 selectAll()。

也许添加一种我觉得编辑器中缺少的反转选择(Ctrl+I?)的方法可能会有用。还添加了几个按钮供选择将使命令更容易找到。

G代码优化? #179
所有者

@effer我已经实施了 SelectAll。但是,如果有代码控制块,那就有点危险了。例如开始停止主轴或换刀。我认为如果未选择任何内容而不是重新排序代码,则发出消息更安全

Ctrl-I 和选择功能当然是编辑器的必备功能。也许应该为此创建一个新的按钮组。

G代码优化? #179
贡献者

我对这类问题并不强硬。走安全的路。

一个新的小组将很适合

G代码优化? #179
贡献者

嗨,
我认为这个实现引入了一个错误。我现在无法启动 bCNC(我尝试用法语启动):程序已启动但立即关闭。

thierry@thierry-M70Vn:/HD3_docs/CNC/Logiciels/github/bCNC$ ./bCNC
Traceback (most recent call last):
  File "./bCNC.py", line 2158, in <module>
    application = Application(tk)
  File "./bCNC.py", line 186, in __init__
    page = cls(self.ribbon, self)
  File "/HD3_docs/CNC/Logiciels/github/bCNC/CNCRibbon.py", line 106, in __init__
    self.register()
  File "/HD3_docs/CNC/Logiciels/github/bCNC/EditorPage.py", line 535, in register
    (EditorFrame,))
  File "/HD3_docs/CNC/Logiciels/github/bCNC/CNCRibbon.py", line 120, in _register
    w = g(self.master._ribbonFrame, self.app)
  File "/HD3_docs/CNC/Logiciels/github/bCNC/EditorPage.py", line 78, in __init__
    image=Utils.icons["select_all"],
KeyError: 'select_all'

问候

G代码优化? #179
贡献者

它应该在最后一次提交时修复@ThierryM

G代码优化? #179
贡献者

谢谢(我在发布后看到了最后一次提交…)。
问候

G代码优化? #179

有没有办法在单个块内进行优化?Flatcam 以 bCnc 视为一个巨大块的格式输出钻孔运动,我不知道如何将其拆分。

G代码优化? #179
所有者

通常 bCNC 在 g0 垂直运动之间拆分 gcode。你能给我一个 gcode 的例子,看看它为什么不拆分吗?

G代码优化? #179

@vlachoudis 试试这个。它很短,但应该展示我所看到的:http: //pastebin.ca/3334828

G代码优化? #179
所有者

行。我看到 flatcam 使用 G1 而不是 G0 缩回主轴。恐怕如果我更改算法以接受 G1 垂直运动,那么它会将正常的 3D 剪辑分解为人工代码块。我会说在你的情况下,最简单的方法是在任何文本编辑器中将“G01 Z1.0000”替换为“G00 Z1.0000”,然后一切正常。或者从 linux 命令行
sed -e "s/^G01 Z1.0000/G00 Z1.0000/" flatcam.ngc > newfile.ngc

G代码优化? #179
贡献者

我在使用 FlatCAM 生成的 gcode 来钻 PCB 时遇到了同样的问题:gcode 无法优化,因为它被解释为多个钻孔的单个块。

目前bCNC的做法如下:https ://github.com/vlachoudis/bCNC/blob/master/CNC.py#L1944

        # rapid move up = end of block
        if self._blocksExist:
            self.blocks[-1].append(line)
        elif self.cnc.gcode == 0 and self.cnc.dz > 0.0:
            self.blocks[-1].append(line)
            self.blocks.append(Block())
        elif self.cnc.gcode == 0 and len(self.blocks)==1:
            self.blocks.append(Block())
            self.blocks[-1].append(line)
        else:
            self.blocks[-1].append(line)

问题在于,当从 PCB 上提起钻头时,Z 轴运动不必很快。我建议只要 Z 高于 Z=0 (self.cnc.zval > 0.0) 也分成块

        # tool raised to Z>0 = end of block
        if self._blocksExist:
            self.blocks[-1].append(line)
        elif (self.cnc.gcode == 0 or self.cnc.zval > 0.0) and self.cnc.dz > 0.0:
            self.blocks[-1].append(line)
            self.blocks.append(Block())
        elif self.cnc.gcode == 0 and len(self.blocks)==1:
            self.blocks.append(Block())
            self.blocks[-1].append(line)
        else:
            self.blocks[-1].append(line)

我刚刚测试过它并且似乎工作正常。
再次感谢 Vasilis 的辛勤工作!!:-)

G代码优化? #179
贡献者

我刚刚更新了包含 self.cnc.zval 检查的评论,以保证 dZ>0 和 Z>0。抱歉多次编辑!
此外,代码现在保留 G0 检查以保持与以前系统的兼容性。

G代码优化? #179
贡献者

对不起@vlachoudis,直到现在才看到你的留言。

Changing the algorithm to accept also the G1 vertical motion will break normal 3D cuts into artificial blocks of code

我同意,这就是为什么后面的代码不会拆分 Z=0 以下的任何内容。
这只会导致过度分裂,如果某些[邪恶的]人在被铣削的材料之外加载了带有 3D 运动的 g 代码文件(我假设如果有人真的加载这种 g 代码 – 用于 3D 打印机? – 她不会’无论如何,真的不需要优化器……)

就个人而言,此功能可以为我节省一些长期时间(这包括为其他也需要优化 FlatCam 的钻头的用户提供支持 :P)。但如果您认为它实际上可能有问题,请随意丢弃它

G代码优化? #179
所有者

我不同意 z=0 条件。没有什么能阻止某人开始使用 z>0 的库存材料。
也许我可以检查 dz>0 和 dx=dy=0,最后 z=safe z。所以有一个清晰的垂直运动,不会切割任何东西。
如果用户在块上执行任何其他操作,bCNC 将采用快速运动 g0 而不是 g1。

G代码优化? #179
贡献者

这是有道理的,我错误地假设每个用于铣削的 gcode 都应该将 Z=0 作为材料的表面。
您的解决方案听起来像是一种稳健的方法,唯一的细节是用户需要在 FlatCAM 和 bCNC 中匹配 safeZ,但这是一个合理的要求。

G代码优化? #179
贡献者

看来他们会在 FlatCAM 中解决这个问题:https
://bitbucket.org/jpcgt/flatcam/issues/141/retract-rates-for-gcode-files-from-exelon 将让你发布任何更新:)