评论
如果错误出在 USB 协议级别,则您必须断开连接并 2013 年 3 月 26 日 04:42,anethema notifications@github.com写道:
|
我已经做了相当多的调查,并尽可能多地构建 Cura GCode 发送器部分的稳健性。不过,最常见的错误是 USB 连接突然中断,无法恢复。 在 Windows 上,这甚至会导致 USB 设备的“读取”调用永远挂起。无论您配置的超时时间如何,它仍然会挂起。 当您重新连接到 Arduino 时,Arduino 会重置,因此没有任何理智的方法可以从中恢复。 (这不是 Marlin 级别的错误,而是电子/USB/驱动程序级别的错误) |
我们使用带有 FT232BM 芯片的读卡器。PC 每秒发送大约 10 个 3 字节的查询并得到响应。当我们使用 com 端口驱动程序时,通信确实偶尔会卡住(每个设备大约一个月一次)。切换到 d2xx 驱动程序并在出现错误时重新启动设备后,我没有收到应用程序冻结/持续通信问题的报告(大约 50 台设备,每天使用 8 小时,至今已超过 4 年)。 因此,为 FTDI 芯片使用 d2xx 接口可能更可靠,并且迁移非常简单(d2xx 支持与 Windows 串行 api 几乎相同的功能)。 |
难道不能让主机识别出了问题,然后尝试终止并重新初始化连接吗?然后恢复? 就像我说的,我不必断开电源线,为了再次与 ardunio 通话,我所做的就是在 repetier-host 中点击断开连接,然后再次点击连接。不知道为什么这不能在必要时在后台处理。 |
对于某些板,重新连接将重置 Arduino。在 Melzi 上有 2013 年 3 月 26 日 16:12,anethema notifications@github.com写道:
|
即使ardunino重置我不明白为什么,因为打印头没有移动,无法重新建立连接发送命令加热床和打印头,发送命令告诉打印头它当前在哪里,然后恢复你的gcode? |
是的,但主持人对临时工和职位一无所知。它 2013 年 3 月 26 日 16:34,anethema notifications@github.com写道:
|
Repetier-host 肯定知道这两者,因为它不断显示报告的温度、设置点是什么,以及当前打印头位置,因为它在打印过程中绘制了 gcode/打印头位置。 |
Repetier 知道它发送给机器的最后位置,但那并不是机器的确切位置。由于可能已收到也可能未收到最后一条消息。您也可能在移动过程中重置机器,让您不知道打印机头在哪里。 重置还会使您失去电机的微步位置。 |
我想知道那时是否可以进行某种更实时的位置报告?就像移动到 x、y、z 等等的命令。然后 ACK 打印机收到命令和校验和 ok。然后另一个 ack 成功执行该命令?也许我只是在做梦,USB 串行接口可能有点啰嗦。 |
如果收到命令但没有收到 ack 怎么办?(打印机发送 OK 作为 ack)任何协议都会有这个问题,当通信中断并且一侧需要重置时,您永远无法 100% 确定最后执行的位是什么。 |
请参阅以下解决此问题的问题帖子(发布于 2013 年 4 月 15 日): Creater 打印机在打印中途停止问题 |
我注意到很多与我交谈的使用 mendelmax 2 的人都有类似的问题,即使使用不同的电子设备也是如此。
基本上,当尝试在 PC 上使用 USB 进行长打印时,打印通常会停止。通常您只需断开并重新连接即可解决问题,但您的打印件已经损坏。
如果可能的话,是否有一种方法可以与 pronterface 和 repetier-host 合作,以实现更强大的通信。更多具有良好校验和、更好的错误恢复等的 a-la TCP?不要只是停下来,检查你在哪条线上,然后立即恢复,等等。
我知道 repetier 的人已经用二进制实现了他们自己的通信协议,但不确定是否可以在 marlin 中作为一个选项来实现它是否足够?或者,如果没有,也许可以在社区内工作,以实现更强大的功能,并且如果确实发生错误,则更不容易冻结中间打印。从格式错误的数据包等中恢复应该是相当微不足道的。
谢谢!
-麻醉