开源改变世界!!

换刀/校准时出错 #671

推推 grbl 2年前 (2023-02-01) 125次浏览
打开
chaotix- 打开了这个问题 2017 年 10 月 8 日 · 20条评论
打开

换刀/校准时出错#671

chaotix- 打开了这个问题 2017 年 10 月 8 日 · 20条评论

注释

换刀/校准时出错 #671

在换刀过程中,bCNC 发出以下命令(使用“fastprbfeed”时):
在 CNC.py:toolChange() 和 ProbePage.py:calibrate() 中

g53 g0 z[toolprobez]
g91 [prbcmd] f%f z[-tooldistance]
g91 [prbcmdreverse] f%f z[tooldistance]

假设 z[toolprobez] 非常接近最大机器 Z,这会引发错误(至少对于 GRBL 1.1),因为 GRBL 认为它可能会在工作区域之外结束(如果 [prbcmdreverse] 在到达之前不会停止,这将是正确的z[工具距离])。

我认为用 g90 替换 g91 并移动到 z[toolprobez] 会解决这个问题,但它不会,因为 z[toolprobez] 在机器坐标系中。不幸的是,G53 不支持 G38.x 作为移动命令,所以没有办法(我可以看到)确保留在工作区域内。

作为妥协,我将最后一行替换为:
g91 [prbcmdreverse] f%f z2.0

我不喜欢这个解决方案,因为它只使用了一个随机常数。这就是为什么我没有创建 PR。
大多数时候它应该没问题(我猜),而且它显然比 z[tooldistance] 好,因为它有效。:-)

换刀/校准时出错 #671
作者

这有可能得到实施吗?在以下条件下,当前代码将始终抛出 GRBL 1.1 错误:
ztooldistance + “ztouchplate” > zmin

由于这会在探测功能期间引发错误,因此 bCNC 无法妥善处理它,需要完整的 Arduino 重新连接才能清除警报状态。

换刀/校准时出错 #671
作者

刚刚注意到一个问题z2.0……如果机器单位设置为英寸,那还有很长的路要走……

所以我想用 GRBL 1.1 中的新点动命令来解决这个问题。不幸的是,bCNC 认为“J”后面应该跟一个浮点数,并将“J=”替换为“J0”,这当然行不通。

这是一个完整的补丁。但因为它仅适用于 GRBL 1.1。我看到让它与 GRBL < 1.1 一起工作的唯一方法是添加一个用户可配置变量来设置“toolprobe pull-off”。即使这样,如果用户更改 G20/G21,它也会搞砸。虽然老实说方法中的所有变量都有同样的问题。我认为如果单位颠倒,即使转向触摸板也会搞砸。

diff --git a/CNC.py b/CNC.py
index 206e8fe..439e8ff 100644
--- a/CNC.py
+++ b/CNC.py
@@ -1630,6 +1630,9 @@ class CNC:
                                continue
 
                        for cmd in cmds:
+                               if cmd.upper() == 'J=':
+                                       newcmd.append(cmd)
+                                       continue
                                c = cmd[0]
                                try: value = float(cmd[1:])
                                except: value = 0.0
@@ -1684,7 +1687,9 @@ class CNC:
                                currentFeedrate = CNC.vars["fastprbfeed"]
                                while currentFeedrate > CNC.vars["prbfeed"]:
                                        lines.append("g91 [prbcmd] f%f z[-tooldistance]" % currentFeedrate)
-                                       lines.append("g91 [prbcmdreverse] f%f z[tooldistance]" % currentFeedrate)
+                                       #lines.append("g91 [prbcmdreverse] f%f z[tooldistance]" % currentFeedrate)
+                                       lines.append("g4 p1")   # wait a sec because $J needs GRBL to be idle
+                                       lines.append("$J=g91 g21 z1.0 f%f" % currentFeedrate)
                                        currentFeedrate /= 10
                        lines.append("g91 [prbcmd] f[prbfeed] z[-tooldistance]")
 
@@ -4128,6 +4133,9 @@ class GCode:
                                        continue
 
                                for cmd in cmds:
+                                       if cmd.upper() == 'J=':
+                                               newcmd.append(cmd)
+                                               continue
                                        c = cmd[0]
                                        try: value = float(cmd[1:])
                                        except: value = 0.0
diff --git a/ProbePage.py b/ProbePage.py
index 66dd796..b02cd00 100644
--- a/ProbePage.py
+++ b/ProbePage.py
@@ -1690,7 +1690,9 @@ class ToolFrame(CNCRibbon.PageFrame):
                        currentFeedrate = CNC.vars["fastprbfeed"]
                        while currentFeedrate > CNC.vars["prbfeed"]:
                                lines.append("g91 [prbcmd] f%f z[-tooldistance]" % currentFeedrate)
-                               lines.append("g91 [prbcmdreverse] f%f z[tooldistance]" % currentFeedrate)
+                               #lines.append("g91 [prbcmdreverse] f%f z[tooldistance]" % currentFeedrate)
+                               lines.append("g4 p1")   # wait a sec because $J needs GRBL to be idle
+                               lines.append("$J=g91 g21 z1.0 f%f" % currentFeedrate)
                                currentFeedrate /= 10
                lines.append("g91 [prbcmd] f[prbfeed] z[-tooldistance]")
                lines.append("g4 p1")   # wait a sec
换刀/校准时出错 #671
所有者

谢谢。

换刀/校准时出错 #671
合作者

这还是问题吗?

换刀/校准时出错 #671
作者

我真的不能说,因为我不再使用 bCNC。对不起。

(在一台新机器上,我需要比 GRBL 所能提供的更高的步进率,所以我切换到 LinuxCNC。)

换刀/校准时出错 #671

我相信是的。在使用校准和换刀功能时,我遇到了一堆不同的错误情况。当它工作时它很棒,但我从来没有能够连续运行它 3 次而没有出现问题。

有时,无论是 Calibrate 还是 Tool Change,工具都会移动到探头位置并冻结在那里,需要重置连接。有时它会到达一个完全不正确的位置并开始降低 Z 就像探测一样。我还没有弄清楚该位置信息的来源。它距离实际探头位置大约 16 英寸…

我会更多地尝试这个,我很乐意帮助解决问题。当它正常工作时,这个功能是惊人的!

换刀/校准时出错 #671
合作者

有时,无论是 Calibrate 还是 Tool Change,工具都会移动到探头位置并冻结在那里,需要重置连接。

我刚刚合并了听起来有点相关的PR #1139 。你能检查一下最新的 github master 版本是否解决了这个问题吗?否则我需要一些想法如何解决这个问题,这对我来说很难调试……

换刀/校准时出错 #671

我今天会试一试。仅供参考,我认为这与 G20/G21 有关。也就是说,事实证明,是什么导致它进入我上面提到的“完全错误的位置”。在将 G20 重置为 G21 的幕后出了点问题,然后发送探测命令并使用相对坐标(但使用公制而不是英制)到达“探测位置”。

FWIW,我不是 Python 专家,但我有一定的编码能力(iOS 开发工作,主要是……),所以我认为我可以很快上手,并且可能在这里成为额外的一员。我很想能够回馈。我会为此进行设置 – 对 IDE 等有什么建议吗?我主要是 Mac 用户,但我可以访问所有 3 个平台…至少,我会更好地提供良好的调试信息并尽量减少猜测。

仅供参考,我在 Rasp Pi B+ 上运行 bCNC,驱动在 Arduino Mega 2560 上运行的 GRBL 1.1。该机器是一台 DIY 3 轴 CNC 铣床,工作区为 17”x18”x7”,NEMA23 步进电机和 D542T 驱动器@36v. 我在所有 3 个轴上都有限位开关、用于工具长度偏移的探针板、Flood 和 Mist 冷却剂继电器输出、主轴速度控制等。这是一个很好的调试测试平台,因为它几乎实现了 GRBL 的所有功能。

谢谢!

换刀/校准时出错 #671
合作者
哈维 评论了 2019 年 2 月 4 日  

我不使用任何 IDE。只是我最喜欢的文本编辑器。由于 Python 是解释型的,因此不需要特殊设置。安装并运行 bCNC 后,您可以编辑 .py 文件并重新启动 bCNC 以测试更改。然而,最好运行 bCNC 的最新 git 版本,这样你就可以保持最新状态。如果你设法在一些旧版本中解决了这个问题,我们仍然可以尝试将它移植到最新的 git master。但是为了开发目的运行最新的代码更容易……

换刀/校准时出错 #671

啊,我被挂断了,不明白 GUI 是如何完成的——Tkinter……慢慢地,我正在学习……

现在我的机器已经基本建成,我可以专注于它的软件端。我会更好地记录我遇到的错误等。我一直在使用 UGS,直到最近才切换到 bCNC,我发现它非常优越,但也有它自己的错误。我真的很高兴看到正在积极开展这项工作。我会尽快跟上进度,尽我所能提供帮助。至少,我可以在文档和测试等方面提供帮助。

谢谢(你的)信息!

换刀/校准时出错 #671

我做了一些测试,但是当我遇到其他不相关的问题时需要做更多的事情。不过,在那之前,我能够在出现错误之前运行 5 或 6 次背靠背工具更改。这超过了我之前的最高分 3。在此修复之前,我可以完成 2 次完整的工具更改,然后它会崩溃或返回警报等。

这一次,在换了 5 或 6 个工具之后,我得到了一个看似随机的、无法解释的软限位错误。我不确定这与此有任何关系,但我不确定还有什么可能导致它,因为我所做的只是在工具更换后更换工具。明天我会尝试重复一遍。

换刀/校准时出错 #671
合作者

这一次,在换了 5 或 6 个工具之后,我得到了一个看似随机的、无法解释的软限位错误。

如果禁用软限制怎么办?您可以使用 bCNC 的“间谍”功能来检查是否发送了一些可能导致软限位错误的 g 代码命令?

换刀/校准时出错 #671

我想我可以禁用软限制,但我不认为这是一个合法的软限制错误,因为我只是在执行工具更改 – 除了工具更改代码中包含的任何内容之外,不发送任何 g 代码。我没有告诉机器去任何会触发旅行错误的地方。

我能想象的唯一可能发生的事情是,如果“零”被重置为执行工具更换之前的其他东西,并且在工具更换代码中,它会指示机器去它现在认为已经超出的地方的范围。该代码是告诉工具转到换刀位置、探测位置还是返回换刀之前的位置的部分,我不确定,但它似乎在中间变得混乱换刀操作。那有意义吗?

顺便说一句,我刚刚在新的 Raspberry Pi 上进行了全新安装。与我的实际机器运行的安装相比,我注意到此版本有几处不同。值得注意的是,配置;控制器; 字体;快捷方式等菜单现在位于 CAM 选项卡上,它实际上似乎在做一些事情!我无法让这些按钮执行任何操作,它们位于“文件”选项卡上。

我将继续记录我正在做的事情,包括使用非常酷的 Spy 功能,顺便说一下。我将重复“继续进行工具更改,直到出现问题”测试,看看昨天发生的事情是偶然的还是可重复的。我会尝试“监视”整个事情——谢谢你的提示!

换刀/校准时出错 #671

好的,进步了。我把机器更新到最新的,而不是在我拍了一张屏幕不同的照片之前,尽管报告了相同的版本号……

这一次,我在另一个终端窗口中使用间谍功能运行,并在工具更改时进行观察。我注意到的是,在循环结束时,在换刀位置第二次暂停后,按恢复键返回工作。它将工具发送到正确的工作位置,但一旦到达那里,GRBL 就会重置。当它发生时,您可以在串行流中看到有趣的字符,然后当它备份时,您会看到与 GRBL 首次启动时相同的提示。

幸运的是,我一直在 $N0 中设置 G20,所以当它恢复时,它发送了 G20,我又回到了英寸。之前,如果 G20 没有被重置,它会重新启动,然后出现在公制中,这会导致任何后续动作不正确。

问题是,为什么GRBL终于回到工作地点了还要重启呢?

换刀/校准时出错 #671
合作者

它发送了 G20,我又回到了英寸。

也许你在 bcnc.ini 中启用了英寸?检查你的配置:

换刀/校准时出错 #671

换刀/校准时出错 #671

我肯定会 – 我通常以英寸为单位工作。抱歉……美国……我所有的仪器都是千分之一……
;)
我所描述的可能是几天前发生的事情,当时机器在工具期间会随机进入一个“奇怪”的位置变化。基于观察 GRBL 出于某种原因在工具更换操作结束时重新启动,我的猜测是我以前没有 $N0=G20 并且它没有在配置中设置。因此,当发生这种随机重启时,我的 GRBL 将从英寸变为公制,然后到错误的位置。

GRBL 实际上应该在换刀结束时重置吗?这对我来说似乎不对。我将尝试重做此测试并将终端输出捕获到文件中。

换刀/校准时出错 #671
合作者

最近我添加了在工作完成后重置 GRBL 的代码。在与 GRBL 开发人员讨论后,我根据其他一些问题完成了此操作。如果它是在工具更改后在作业中触发的,那就是一个错误。

换刀/校准时出错 #671

好吧,我能够让这种行为重复,但好消息是它确实会重复再重复。我已经有一段时间没有失败了。在工具更换操作完成后,它似乎正在重置 GRBL,但由于我确实已正确设置所有内容,它以英寸为单位恢复并恢复正常工作。

附件是会话的输出。我在第 639 行看到第一个 Grbl 重置,然后在第 1368 行再次看到。我确信它在我执行工具更换的 5 或 6 次左右的每一次重复。在每次更换之间,我会稍微慢跑并运行主轴,只是为了在换刀之间发生一些事情。您还可以看出 GRBL 正在重置,因为 UI 会在几秒钟内处于非活动状态,没有可单击的按钮,然后它会恢复在线并正常工作。

你可能已经解决了这个问题!!我将尝试使用多种工具设置一个作业,看看它在更真实的场景中的表现。
TEST_SPY2.txt

换刀/校准时出错 #671
合作者

你可能已经解决了这个问题!!

但我没有改变任何东西……你改变了bCNC设置或版本吗?

换刀/校准时出错 #671

我确实认为我更改了版本,但我不确定我从/更改到哪个版本。我一直在使用的版本在更换工具时出现错误,配置、控制器、字体等菜单位于不同的位置,而不是像现在这样位于 CAM 选项卡上。自升级到最新版本以来,我已经能够连续进行 6 或 7 次工具更改而没有错误。从我之前的帖子中,您可以在附加的文本文件中看到 GRBL 在工具更换周期完成后重置,但它恢复正常。

不相关的,我也开始玩弄 Python 一点,我改变了 bCNC UI 以更好地与我的触摸屏一起工作。我将状态和控制框架更改为不再崩溃,这让我抓狂。我还使所有的用户和慢跑按钮更大,以尽量减少误触等。现在好多了!

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
项目

还没有

发展

没有分支机构或拉取请求

4人参加
换刀/校准时出错 #671换刀/校准时出错 #671换刀/校准时出错 #671换刀/校准时出错 #671

喜欢 (0)