评论
这是一个简短的程序,它会触发 GRBL 状态管理的几个问题(所有控制器都存在类似问题)。
这是理想情况下应该发生的事情:
相反,会发生这种情况:
我有一个版本的 cncjs-shopfloor-tablet 似乎可以正常工作,但它很复杂,涉及以控制器相关的方式查看serialport:read、workflow:state、sender:status和controller :state。Marlin 因缺乏可靠的插队馈线而受到阻碍,但或多或少仍然有效。 我正在开发一个服务器模组,它应该能让这一切变得更容易。这个想法是引入一个新的workflow:held消息,当控制器达到空闲或保持状态时发送。 workflow:held的有效负载以正确的顺序报告特定保留的原因(错误、M0、M6、用户暂停等)。使用该 mod,应该可以使用简单的独立于控制器的代码来实现工作流控制。希望我可以避免对现有消息序列进行任何更改,以便 UI 可以在时间允许的情况下迁移到新方案。至少计划中是这么说的:-) |
我正在考虑一种方法,UI 可以通过多个通知弹出窗口独立显示错误消息和 M0/M1/M6 消息,并且仅当收到的 acks 数等于行数时才会显示 M0/M1/M6 消息发送(即 否则,还需要修改Workflow.js以支持错误时暂停和一般暂停操作(M0/M1/M6,用户暂停),这样它们就不会互相阻塞。 以上只是我的粗略想法。如果您已有 PoC,则可以创建拉取请求或创建新分支。希望我们能找到一种更好的方法来按预期顺序报告错误。 |
我正在取得进展,它确实涉及 Workflow.js 的模组。 |
使用最新版本(但这个问题可能不是新问题)我在尝试使 cncjs-shopfloor-tablet 正确报告控制器发出的错误时遇到以下情况。假设我们使用带有以下 GCode 的 GRBL
(%wait 是自动生成的)。发件人很快将前两行发送到 GRBL,并在 %wait 时进入发件人保持状态。GRBL 处理 JUNKJUNK 行并发送一条错误消息。这会导致工作流暂停,并且工作流暂停处理程序调用 sender.hold,将错误消息传递给它。但是发件人已经处于保持状态,因此它会忽略错误消息。
我可以通过解析 serialport:read 消息来解决这个问题,但如果可以在工作流状态转换级别报告错误以便更好地同步它们会更好。
想法/想法?