开源改变世界

顺序错误报告 #472

推推 grbl 3年前 (2023-02-03) 168次浏览
打开
MitchBradley 打开了这个问题 2019 年 5 月 3 日 · 3条评论
打开

顺序错误报告#472

MitchBradley 打开了这个问题 2019 年 5 月 3 日 · 3条评论

评论

顺序错误报告 #472
贡献者
米奇布拉德利 评论了 2019 年 5 月 3 日  

使用最新版本(但这个问题可能不是新问题)我在尝试使 cncjs-shopfloor-tablet 正确报告控制器发出的错误时遇到以下情况。假设我们使用带有以下 GCode 的 GRBL

JUNKJUNK
G0 X0 Y0
%wait

(%wait 是自动生成的)。发件人很快将前两行发送到 GRBL,并在 %wait 时进入发件人保持状态。GRBL 处理 JUNKJUNK 行并发送一条错误消息。这会导致工作流暂停,并且工作流暂停处理程序调用 sender.hold,将错误消息传递给它。但是发件人已经处于保持状态,因此它会忽略错误消息。

我可以通过解析 serialport:read 消息来解决这个问题,但如果可以在工作流状态转换级别报告错误以便更好地同步它们会更好。

想法/想法?

顺序错误报告 #472
贡献者作者

这是一个简短的程序,它会触发 GRBL 状态管理的几个问题(所有控制器都存在类似问题)。

N1 g0 x0 y0
N2 g1 x10  y10 f60
N3 junk
N4 g1 x10 y0 f40
N5 m0
N6 g1 x0 y0 f40

这是理想情况下应该发生的事情:

  • 在 N2 行的执行过程中,大约需要 15 秒,用户应该能够通过暂停控件手动暂停。
  • N2 完成后,应该会出现有关错误命令“N3 junk”的错误消息,并启用恢复或停止控件。
  • 恢复后,N4 应该执行,并且用户应该能够再次在执行期间手动暂停。
  • N4 完成后,应出现“M0 程序暂停”通知,以及恢复停止控件。
  • N6 应该运行(启用暂停)并在完成后,控件应返回停止关闭

相反,会发生这种情况:

  • 当程序启动时,“M0 Program Pause”通知立即出现,而 N0 和 N2 运动仍在进行中。来自 N3 的错误状态丢失。
  • 控件会立即恢复-或 –停止,因此您不能手动暂停(尽管令人困惑的是,您可以单击resume,即使它正在运行。然后单击pause)。
  • 由于 N3 错误丢失,运动从 N2 继续到 N4,无需停止用户干预。
  • 当 N4 完成时,cncjs 显示 Hold,您可以单击resume完成程序。
  • 当程序完成时,控件不会返回开始关闭,而只会启用暂停。要返回开始关闭,您必须单击暂停然后停止
  • 在显示 M0 消息的 N2 和 N4 运动期间以及恢复– 或-停止的控件,如果您在 N4 完成之前单击恢复,则在运动继续时启用暂停,然后当 N4 完成时,cncjs 显示保持并且运动停止在M0 保持点,但仅启用暂停。(您可以通过先单击暂停(没有动作)来恢复-或 –停止)。

我有一个版本的 cncjs-shopfloor-tablet 似乎可以正常工作,但它很复杂,涉及以控制器相关的方式查看serialport:readworkflow:statesender:statuscontroller :state。Marlin 因缺乏可靠的插队馈线而受到阻碍,但或多或​​少仍然有效。

我正在开发一个服务器模组,它应该能让这一切变得更容易。这个想法是引入一个新的workflow:held消息,当控制器达到空闲或保持状态时发送。 workflow:held的有效负载以正确的顺序报告特定保留的原因(错误、M0、M6、用户暂停等)。使用该 mod,应该可以使用简单的独立于控制器的代码来实现工作流控制。希望我可以避免对现有消息序列进行任何更改,以便 UI 可以在时间允许的情况下迁移到新方案。至少计划中是这么说的:-)

顺序错误报告 #472
合作者

我正在考虑一种方法,UI 可以通过多个通知弹出窗口独立显示错误消息和 M0/M1/M6 消息,并且仅当收到的 acks 数等于行数时才会显示 M0/M1/M6 消息发送(即received === sent)。这也可以通过从 UI比较sent和状态来实现。received

否则,还需要修改Workflow.js以支持错误时暂停和一般暂停操作(M0/M1/M6,用户暂停),这样它们就不会互相阻塞。

以上只是我的粗略想法。如果您已有 PoC,则可以创建拉取请求或创建新分支。希望我们能找到一种更好的方法来按预期顺序报告错误。

顺序错误报告 #472
贡献者作者

我正在取得进展,它确实涉及 Workflow.js 的模组。
使用 received===sent 的问题是控制器内部的串行缓冲和规划器排队。您发送的内容可能远远领先于机器。
有关为什么我如此关注同步操作的示例,请观看此视频,其中显示了机器出现问题时可能发生的情况: https ://www.facebook.com/watch/?v=2294066584184740

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
项目
状态:进行中
发展

没有分支机构或拉取请求

3人参加
顺序错误报告 #472顺序错误报告 #472顺序错误报告 #472

喜欢 (0)