开源改变世界!!

G代码错误处理 #32

推推 grbl 2年前 (2023-01-31) 150次浏览
关闭
chamnit 打开了这个问题 2015 年 5 月 10 日 · 31条评论
关闭

G代码错误处理#32

chamnit 打开了这个问题 2015 年 5 月 10 日 · 31条评论

注释

G代码错误处理 #32

@vlachoudis: 我一直在想g代码错误的问题。我认为处理错误的最好方法是提示用户遇到错误时该怎么做。

例如,一个弹出窗口报告有问题的 g 代码行并询问用户是继续并忽略它还是取消作业。

在工具更改的情况下,此窗口还可以用作查询和控制 GUI 工具更改的方式。假设该行中有 M6 命令,弹出窗口可以添加一个新按钮来执行工具更改宏,这可以像向上移动 z 轴一样简单,也可以像移动触摸一样复杂关闭板和停车区域进行换刀。

我将对 Grbl 接口 wiki 进行编辑,使其成为标准协议。

G代码错误处理 #32
所有者

这是我能做到的。用户可以为 grbl 抱怨的内容动态创建命令和用户自定义操作的数据库。……我把它留到我回家的时候:)

G代码错误处理 #32
作者

@vlachoudis: 一些 ShapeOko 用户今天一直在评论这个,并提出了类似的解决方案。一些 g 代码是惰性的,如 G40,但其他的则不是,如 G41/42。他们每个人都需要特殊处理。( http://www.shapeoko.com/forum/viewtopic.php?p=47086#p47086 )

G代码错误处理 #32
所有者

@chamnit我对根据 gcode 行的内容记录操作的方法有点怀疑。我的意思是,我很难理解 grbl 不喜欢的违规行中的哪个命令。它将在很大程度上取决于 grbl 版本。

根据 grbl 将返回的错误代码记录用户操作 [stop,ignore,feed-hold,wait-user] 会更正确

G代码错误处理 #32
作者

@vlachoudis:也许你是对的,但 Grbl 的错误并不能告诉你整个故事。Grbl 将在它检测到的第一个错误时做出响应,而不是所有错误都在一个块中。我仍然赞成让用户通过继续忽略、中止或重新发送修改来确定遇到错误时要做什么。

我也赞成使用 Grbl 的检查模式来预扫描错误并在运行作业之前将它们显示给用户。然而,Grbl 的检查模式并不是一个干净的实现,因为它在完成后软重置 Grbl。我正在研究一种沙盒检查模式的方法。也许,这应该是将来我可以解决它的标准协议。

G代码错误处理 #32
所有者

@chamnit也许我不太清楚,bCNC 和 Grbl 报告的错误会提示用户(继续,忽略,…),如果用户选择它,将来会记录类似消息的操作。然而,动作的记录将基于错误代码,grbl 返回而不是行内的违规命令。

检测一行中有问题的命令是什么,gui 需要知道 grbl 接受什么,这取决于 grbl 的版本。

一种选择可能是 grbl 返回以及返回字符串中的违规命令。

我也赞成在发送之前“预检查”gcode

G代码错误处理 #32
作者

@vlachoudis: 不幸的是,许多错误代码在命令和输入词之间共享,例如某些词的负值或当一行中的两个命令使用轴词时。对于 Grbl 来说,提供导致错误的确切命令或命令集同样困难,尤其是对于输入词(P、L、R 等),因为它们对于不同的命令意味着不同的东西。

另一个问题是某些错误代码可能具有与其他错误代码不同的含义。例如,错误代码 20 for unsupported g-code command 未定义哪个 gcode 不受支持。假设它是一个您想忽略的惰性命令。问题是错误码20也是用来报M6换刀指令不支持的,所以不能随便忽略这个错误码。

您还必须重新发送一个“固定的”gcode 块,因为 Grbl 在响应错误时丢弃了该块:。

IMO,由于错误代码的定义方式以及多方面的 g 代码定义方式,因此没有很好的灵丹妙药解决方案。正典中的所有内容都有大量非常特殊的压倒一切的意义,这在很大程度上取决于以前的状态。实际上,最好将这种解释留给用户来决定。但是,允许用户定义忽略或特殊处理哪些。对于 bCNC,您可能只需要预定义少数几个自动忽略的典型命令,例如 M6。

G代码错误处理 #32
所有者

@chamnit我明白了,它变得比我最初想象的更棘手。另一个“gui”做什么。默默地忽略错误?

在这种情况下,我更倾向于编写一个 gcode-checker 并在加载期间报告所有这些违规命令。因此用户必须在开始运行之前更正它们。你怎么认为?

G代码错误处理 #32
作者

@vlachoudis: 是的。默认情况下,几乎所有这些都只是忽略错误。我认为有些人可以选择在出错时停止。Chilipeppr 在遇到 M6 换刀时为您提供一些控制。

使用解析器编写完整的 g 代码检查器将非常艰巨,但这是 Grbl 检查模式的预期功能。这减轻了 GUI 维护兼容代码列表的负担。在 Grbl 的检查模式下流式传输与波特率一样快,非常快。遇到 M0/2/30 时会出现错误。Grbl 在不该暂停的时候暂停。这很快就会得到解决。

如果您确实安装了检查器,我会说您需要做的就是根据不兼容代码列表扫描文档,例如M6,这可能就是您的意思。我认为让 GUI 告诉您程序中可能存在不兼容的 g 代码会很好。虽然,这可能是很多工作,但收获不大。

实际上,大多数用户只需要检查他们的程序几次。一旦他们弄清楚了他们的工作流程,他们就可以改变他们的 CAM 后处理器以自动删除有问题的命令或手动执行。在 bCNC 中拥有一个自动过滤器可能会成为以后问题的根源,因为它会对新用户不期望的程序进行操作。

所以,回来了。我认为 bCNC 只需要在程序运行期间更好地处理错误。

  • 调出一个对话框,询问如何处理此错误(忽略、暂停或重新发送)。
  • 有一个自动忽略或暂停错误选项作为首选项。
  • 提供一个例外列表,如 M6 工具更改,以便 bCNC 稍后可以插入一个 mini-g 代码程序来执行工具更改。
  • 并且,当有人需要进行程序兼容性检查时,让 Grbl 检查模式更加突出和可用。例如,您运行一个检查,在 bCNC 的编辑器中,问题行以红色突出显示。在实践中,您可能必须对整个程序进行一些检查才能发现一个块中的多个错误。保持这一点独立,而不是在加载时自动执行,会降低一些可感知的开销/滞后。
G代码错误处理 #32
所有者

@chamnit好的,我会往这个方向走。

G代码错误处理 #32

我赞成告诉用户 g 代码有问题并让他们重新处理 g 代码并重新开始。我认为这就是 grbl 的“检查 G 代码”功能的全部思想。

我认为“忽略”或“重试”选项可能存在安全隐患。我知道在小型机器上,错误/错误的 g 代码命令最多是破坏工具和/或工件,但通常只会使步进电机失速。这在大型机器上可能完全不同。并且没有理由认为更大的机器不会用 grbl 进行改装。我可以很容易地看到旧的 Bridgeport BOSS CNC 或大型 Mill/Drill 型机器正在改装 grbl。对于这种尺寸的机器,错误的 g 代码命令可能会导致不好的事情……

只是我的观点。

布鲁斯

G代码错误处理 #32
作者

@1bigpig: 我完全赞成你。但是,这些小型机器的用户并不关心忽略 g 代码所涉及的安全隐患。大多数情况下,这些主要是 M6 换刀命令。或者,他们不知道如何更改他们的 CAM 后期,或者他们的 CAM 软件没有后处理器。通过启用或禁用它的选项并具有检查 g 代码功能,它应该涵盖所有基础。

G代码错误处理 #32
贡献者

我发现阅读这个问题真的很有趣,我喜欢你通过深入分析找到的解决方案。我相信它还涵盖了一些特殊情况,例如带有添加命令的自定义 grbl 版本。
我想扔掉我的 2 美分,然后问@chamnit如果有可能得到 grbl 对支持的命令的响应,允许在根据使用的版本发送 gcode 之前对其进行一些检查。

G代码错误处理 #32
所有者

@chamnit我已经开始研究了。现在有一个配置(目前仅在 .ini 中)命令跳过/剥离和阻止的位置。默认设置现在会跳过 M6 命令,但将来我会对其进行更适当的操作。

G代码错误处理 #32
贡献者

第一次运行后
[Error]
M6 = 1
部分从 ini 文件中删除,但无论如何都会跳过 M6

G代码错误处理 #32
所有者

@effer这是一项新功能。该程序现在从配置中删除与默认行相同的行。原因是要有一个更干净的 ini 文件,最重要的是,如果我更改默认配置文件中的某些内容,如果他们没有接触该功能,它将更新给每个人。

G代码错误处理 #32
贡献者

我会尽快在 wiki 上报告。

G代码错误处理 #32
作者

@vlachoudis: 仅供参考,刚刚发布了一个新的 Grbl 版本。有几个小方法会影响 bCNC。

  • M0 程序暂停现在显示暂停HOLD时的状态。它曾经让IDLE主要用户认为 Grbl 已被锁定。你会把它当作一个 feed hold 并发送一个~简历角色。bCNC 需要通过“运行”或“暂停”GUI 按钮来处理此问题。截至目前,我认为它需要按两次“暂停”按钮才能发送~字符以恢复流。
  • M2/30 不再进入HOLD状态。它只是发回一条[Pgm End]消息,现在不会自动软重置。这是不正确的。根据 M2/M30 的 LinuxCNC 描述,它仅重置几个 g 代码状态。此时 G92 被保留,不会丢失。bCNC 用户应该能够Run再次点击以重新开始工作。
G代码错误处理 #32
所有者

谢谢@chamnit, 一旦我回来,我会在我的 CNC 上测试它。因此,如果我在进入 HOLD 状态时理解正确,我应该切换内部状态以与 grbl 匹配,然后单击一次就足够了。

G代码错误处理 #32
作者

@vlachoudis: 是的先生。这样就足够了。

G代码错误处理 #32
所有者

@chamnit现在我正在更正状态以反映 grbl 状态代码

G代码错误处理 #32

你好

我们在圣诞节尝试了 bCNC,但无法让它在我们的 RPi 上运行,当我发现你有多忙并且今天下午我们让它运行我们的 eShapeoko 时,我很高兴。有点小问题,但这可能是我们(我们也是新来的,老公是数控机械和电子,我被拖进了“软件”,因为我的 LED 灯闪烁了一次!)

你激励我变得勇敢,并提供了一些我一直在努力做的事情。(但不要指望你的水平)

重新检查 gCode 是否有错误。基于“pre-grbl”python 代码的东西会有帮助吗(抱歉,我不知道如何添加链接)我有一些你可能认为非常“学前”的东西,但欢迎你使用它。我使用了 pre-grbl 算法并将“输出”放入一个“ok/error”代码数组中,这些代码使用 tkinter treeview 在 gcode 行旁边显示。我们可以直观地扫描哪些行有效,哪些行无效(对于它相关的 grbl 版本 – 到目前为止,使用 9g 是可以的)。

G代码错误处理 #32
所有者

@daisyfox这可能很有趣,尤其是在编辑器中突出显示所有有 g 代码错误的行/路径。然而,正如我们在上面讨论的那样,对 grbl 接受内容的 gcode 检查应该留在 grbl 上。

G代码错误处理 #32

没问题,我会把它留给我自己的。只是觉得有总比没有好(尤其是在短期内),还有我们使用 grbl 的方式,我们真的不想在我们用来编译 gcode 的计算机和 cnc 机器之间传输文件,只是为了查明是否存在是错误(通常由 cam 生成但 grbl 不支持)然后必须返回非 cnc 机器重写 gcode。
—– 原始消息 —–
发件人:Vasilis Vlachoudis
收件人:vlachoudis/bCNC
抄送:daisyfox
发送时间:2015 年 6 月 8 日星期一上午 6:13
主题:回复:[bCNC] G 代码错误处理(# 32 )

@daisyfox这可能很有趣,尤其是在编辑器中突出显示所有有 g 代码错误的行/路径。然而,正如我们在上面讨论的那样,对 grbl 接受内容的 gcode 检查应该留在 grbl 上。


直接回复此电子邮件或在 GitHub 上查看。

G代码错误处理 #32

最后一个问题。但我首先要重申,我知道我对编码知之甚少,所以这是一个关于可行性的问题,而不是“什么时候做某事”。

如果我对 9g 发送的响应的理解是模糊正确的(我调整它们以提供 4 个不同的“ok”消息,所以我从“实时执行 ok”中知道“gcode 执行 ok”)提供报告的 ​​grbl 模块反馈给report.c的有system.c、protocol.c、gcode.c和setting.c。

问:是否有可能复制这些模块以提供/支持 python 库,以便重新使用 grbl 代码/模块(然后可以在更新 grbl 时刷新库)

再次感谢您所做的一切,这太棒了,我通过阅读代码(RPi 上的 bCNC 和 Arduino 上的 grbl)学到了很多东西

G代码错误处理 #32
所有者

@daisyfox可能我的回答不清楚。您的代码可能有助于检查 bCNC 编辑器中的 gcode 错误并突出显示它们,我想看看它。对于不代表“错误”(相对于 gcode 标准)但 grbl 不接受它们的 gcode,我们必须将其留给 grbl 进行检查。

可以从 python c 模块调用并检查代码。我不知道这会涉及多少工作。此外,它将与特定版本的 grbl 链接,可能不是用户安装的版本。最后,它需要为每个操作系统分发代码的编译版本。

@chamnit 一个想法是,如果其中一个 grbl 模拟器可以使用新版本的 grbl 并让 bCNC 连接到模拟器并通过 $G 检查代码。

G代码错误处理 #32

帮助你自己,我意识到如果我有 RPi sd 故障和/或意外 usb 删除我将无法重现多少,我还是上传了。

提到的内容在 PyGrbl-WiP-/PyGrbl_gCodeChecker_Treeview.py 中(请原谅存储库名称,由于不再支持我的浏览器而无法编辑的新手拼写错误,或其他一些问题)

认为最好也警告你,我也一直在 RPi 上的 python 2.7 和 3.2 之间徘徊,因为我玩过各种库试图让 wiimote 工作以慢跑机器。

感谢您对我的问题的回答。我希望有一天能够理解到足以尝试制作 Python 库。我们坚定地坚持使用 RPi for Grbl(尺寸和成本),所以对我来说只有一个平台 ;-)

再次感谢并祝你的项目的其余部分好运。

G代码错误处理 #32
作者

@vlachoudis @daisyfox:我想我们在这篇文章的前面讨论了进行 in-bCNC g 代码检查的问题。问题是各种 Grbl 版本支持不同的 g 代码,在 v0.9 中,g 代码解析器被完全重写以完全符合标准。它的行为有很大不同。检查 gcode 的最好和最可靠的方法仍然是使用 Grbl 的检查模式。虽然这是一个额外的步骤,但这使版本控制独立于 bCNC 必须支持的内容。

G代码错误处理 #32

你好,我们又见面了

我已经能够使用 bCNC.py 的调整版本获得 gcode-checker 工作。它很简单,只保留两个列表(已发送的块和 grbl 回复),然后将它们作为匹配对显示在文本屏幕(如“终端”)上。

如果 grbl 发出多行回复,它就会失调!它看起来不像“编辑器”那么漂亮,它确实添加了重复(在“终端”/“检查器”上发送/记录,当然在“终端”上不同步,在“编辑器”/上也有 gcode 列表’检查员’)

我需要做笔记,以便我可以在 bCNC 的未来版本中重现,因为我们需要一些东西来让老公的儿子证明他的 gcode(他将在访问期间使用机器,他住在其他地方)

我想知道您是否也可以使用注释(添加的代码)。

G代码错误处理 #32
所有者

@daisyfox我有一些关于如何实施的想法,但我暂时没有做任何事情。等待完成函数评估,这可以在运行时更改 gcode。
我不得不考虑如何在终端甚至编辑器中集成
,但我可以使用您的笔记/代码来获得想法。

G代码错误处理 #32
所有者

这个也用新界面修复了。单击机器状态以获取错误信息。