开源改变世界

更强大的通信 #436

推推 grbl 3年前 (2023-02-05) 215次浏览
关闭
anethema 打开了这个问题 2013 年 3 月 26 日 · 13条评论
关闭

更强大的通信#436

anethema 打开了这个问题 2013 年 3 月 26 日 · 13条评论

评论

更强大的通信 #436

我注意到很多与我交谈的使用 mendelmax 2 的人都有类似的问题,即使使用不同的电子设备也是如此。

基本上,当尝试在 PC 上使用 USB 进行长打印时,打印通常会停止。通常您只需断开并重新连接即可解决问题,但您的打印件已经损坏。

如果可能的话,是否有一种方法可以与 pronterface 和 repetier-host 合作,以实现更强大的通信。更多具有良好校验和、更好的错误恢复等的 a-la TCP?不要只是停下来,检查你在哪条线上,然后立即恢复,等等。

我知道 repetier 的人已经用二进制实现了他们自己的通信协议,但不确定是否可以在 marlin 中作为一个选项来实现它是否足够?或者,如果没有,也许可以在社区内工作,以实现更强大的功能,并且如果确实发生错误,则更不容易冻结中间打印。从格式错误的数据包等中恢复应该是相当微不足道的。

谢谢!

-麻醉

更强大的通信 #436
贡献者

如果错误出在 USB 协议级别,则您必须断开连接并
重新连接,因为 USB 是基于连接的协议。就此而言,TCP 也是如此

2013 年 3 月 26 日 04:42,anethema notifications@github.com写道:

我注意到很多与我交谈的使用 mendelmax 2
的人都有类似的问题,即使使用不同的电子设备也是如此。

基本上,当尝试在 PC 上使用 USB 进行长打印时,
打印通常会停止。通常您只需断开并重新连接即可解决
问题,但您的打印件已经损坏。

如果可能的话,是否有一种方法可以与 pronterface 和
repetier-host 合作,以实现更强大的通信。
更多具有良好校验和、更好的错误恢复等的 a-la TCP?不要只是
停下来,检查你在哪条线上,然后立即恢复,等等。

我知道 repetier 的家伙已经
用二进制实现了他们自己的通信协议,但不确定是否可以在 marlin 中作为一个
选项来实现它是否足够?或者,如果没有,也许可以在
社区内工作,以实现更强大的功能,并且如果确实发生错误,则更不容易冻结中间打印。 从格式错误的数据包等
中恢复应该是相当微不足道的。

谢谢!

-麻醉


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/436

更强大的通信 #436
贡献者

我已经做了相当多的调查,并尽可能多地构建 Cura GCode 发送器部分的稳健性。不过,最常见的错误是 USB 连接突然中断,无法恢复。

在 Windows 上,这甚至会导致 USB 设备的“读取”调用永远挂起。无论您配置的超时时间如何,它仍然会挂起。
Mac 和 Linux 只是不再返回数据,而是进入超时状态。在这种情况下,仍然无法进行任何交流。

当您重新连接到 Arduino 时,Arduino 会重置,因此没有任何理智的方法可以从中恢复。

(这不是 Marlin 级别的错误,而是电子/USB/驱动程序级别的错误)

更强大的通信 #436

我们使用带有 FT232BM 芯片的读卡器。PC 每秒发送大约 10 个 3 字节的查询并得到响应。当我们使用 com 端口驱动程序时,通信确实偶尔会卡住(每个设备大约一个月一次)。切换到 d2xx 驱动程序并在出现错误时重新启动设备后,我没有收到应用程序冻结/持续通信问题的报告(大约 50 台设备,每天使用 8 小时,至今已超过 4 年)。

因此,为 FTDI 芯片使用 d2xx 接口可能更可靠,并且迁移非常简单(d2xx 支持与 Windows 串行 api 几乎相同的功能)。

更强大的通信 #436
作者

难道不能让主机识别出了问题,然后尝试终止并重新初始化连接吗?然后恢复?

就像我说的,我不必断开电源​​线,为了再次与 ardunio 通话,我所做的就是在 repetier-host 中点击断开连接,然后再次点击连接。不知道为什么这不能在必要时在后台处理。

更强大的通信 #436
贡献者

对于某些板,重新连接将重置 Arduino。在 Melzi 上有
一个跳线需要移除。

2013 年 3 月 26 日 16:12,anethema notifications@github.com写道:

难道不能让主机识别出了
问题,然后尝试终止并重新初始化连接吗?然后恢复?

就像我说的,我不必断开电源​​线,
为了再次与 ardunio 通话,我所做的就是在 repetier-host 中点击断开连接,然后
再次点击连接。不知道为什么这不能在
必要时在后台处理。


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/436#issuecomment-15468053

更强大的通信 #436
作者

即使ardunino重置我不明白为什么,因为打印头没有移动,无法重新建立连接发送命令加热床和打印头,发​​送命令告诉打印头它当前在哪里,然后恢复你的gcode?

更强大的通信 #436
贡献者

是的,但主持人对临时工和职位一无所知。它
只是喷射 gcode 文本。

2013 年 3 月 26 日 16:34,anethema notifications@github.com写道:

即使ardunino重置我不明白为什么,因为打印头没有
移动,无法重新建立连接发送命令加热
床和打印头,发​​送命令告诉打印头它
当前在哪里,然后恢复你的gcode?


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/436#issuecomment-15469529

更强大的通信 #436
作者

Repetier-host 肯定知道这两者,因为它不断显示报告的温度、设置点是什么,以及当前打印头位置,因为它在打印过程中绘制了 gcode/打印头位置。

更强大的通信 #436
贡献者

Repetier 知道它发送给机器的最后位置,但那并不是机器的确切位置。由于可能已收到也可能未收到最后一条消息。您也可能在移动过程中重置机器,让您不知道打印机头在哪里。
如果恢复可以完成,你可以向你保证,我会做到的。但它不能以可重复的方式。(此外,windows-driver-hanging 问题需要您拔掉 USB 数据线才能执行任何操作)

重置还会使您失去电机的微步位置。

更强大的通信 #436
作者

我想知道那时是否可以进行某种更实时的位置报告?就像移动到 x、y、z 等等的命令。然后 ACK 打印机收到命令和校验和 ok。然后另一个 ack 成功执行该命令?也许我只是在做梦,USB 串行接口可能有点啰嗦。

更强大的通信 #436
贡献者

如果收到命令但没有收到 ack 怎么办?(打印机发送 OK 作为 ack)任何协议都会有这个问题,当通信中断并且一侧需要重置时,您永远无法 100% 确定最后执行的位是什么。

更强大的通信 #436

请参阅以下解决此问题的问题帖子(发布于 2013 年 4 月 15 日):

Creater 打印机在打印中途停止问题