Nomar记录一段历史
给出串行命令时打印作业停止

我想访问 3D 打印机的床温。我能够使用串行连接获取温度(感谢 Demetris 的帮助( 通过串行连接访问 3D 打印机的温度传感器数据))。我现在面临的问题是,一旦我发出命令,我就会得到温度值,但是打印作业会停止。有办法解决吗?我想在打印作业进行时获取温度值。蒂亚!

我认为最好还原您的编辑,因为有关编程的问题不是本网站的主题。 “为什么我的打印机在我通过串行连接时停止打印”提出了一个合理的问题,但“这是我的代码,请让它按照我的意愿行事”不是(这甚至不会被编程 SE 接受)。
谢谢汤姆。我不是在寻找您的代码解决方案,我只是想说这就是我正在做的事情,并且只需要从这里开始朝着正确的方向指出一点,因为初学者从一开始就很难正确解释所有内容。我不是要你让它做我想做的事,我自己可以做到。我想你误会了。无论如何,感谢您的帮助。

1个回答

打开与打印机的串行连接通常会重置微控制器,停止打印。

串行接口有一条称为请求发送 (RTS) 的线路,它向微控制器指示计算机已准备好接收数据。当端口关闭时,这条线为 HIGH(表示计算机未准备好),当您打开串行连接时,该线变为 LOW(表示计算机现在已准备好)并且从 HIGH 到 LOW 的转换触发复位。

有多种方法可以防止这种情况:

  • 在软件中:禁用关闭时挂断 (HUPCL)。这可以防止 RTS 线在您关闭后变为高电平,从而允许其随后打开而不会导致复位。但是,这不适用于第一次尝试(第一次初始连接仍会导致重置)。如何配置取决于您的软件/驱动程序设置,但它得到广泛支持。

  • 在软件中:首先禁用 RTS 线变为低电平。我不确定这是否可以通过常见的串行驱动程序轻松实现。

  • 在软件中:修改您的工作流程以始终保持连接打开,防止发生相关的重置。

  • 在硬件中:您的打印机主板上有一些电路,可以将 RTS 线从高电平转换为低电平以触发复位,通常以 RTS 和 RST 之间的单个电容器的形式实现。 RST 通常用一个上拉电阻(大约 10k 左右)拉高,当 RTS 转换为低电平时,电容器短暂地允许一些电流流动,将 RST 拉低。防止这种情况的一种方法是包括一个更强的上拉电阻,以克服与 RTS 线变低相关的电流消耗。 DisablingAutoResetOnSerialConnection建议在 VCC 和 GND 之间使用 330 欧姆电阻。

  • 在硬件中:拆焊前面提到的电容器。

谢谢汤姆非常详细和翔实的答复。我对这个领域很陌生。我正在尝试使用简单的 python 代码并发送 M105 命令来访问 3D 打印机的床温。你能帮我解决这个问题吗?
@TomvanderZanden 我认为串行通信仅限于总线和软件之间的单一连接。如果您使用串行连接来运行打印机并尝试推送命令,则可能会覆盖之前的连接。因此,可能最好的办法是使用带有包装器 API 的切片软件。像 Cura 引擎这样的东西可能会像这样工作。
我假设他是从 SD 打印的,否则在打印期间尝试访问串行接口将是疯狂的,因为在任何合理的实现中它确实仅限于一个并发连接。

随机文章