注释
我是 CNCjs 和 Grbl_ESP32 项目的开发人员,因此,如果有足够的时间,我应该能够对此给出明确的答案和解决方案。我会深入挖掘。 |
我每次都能重现,并且多年来一直是专业的软件开发人员,所以如果您需要更多详细信息(有或没有代码位置),请给我留言。 |
缺少以下信息,我无法复制您的设置:
在我的设置中,我有时会看到不一致的启动行为,但大多数情况下它都能正常工作。我已经将问题至少部分追溯到以下有趣的硬件行为。首先需要注意的是,几乎所有的ESP模块都将SoC的EN(高电平有效,低电平复位)线和IO0“下载模式”线连接到串口芯片的DTR和RTS线,使DTR高,RTS低将复位 CPU。 当程序连接到串行端口时,只要连接持续,EN 信号就会保持高电平。但是当没有连接的程序时,我会在 EN 上看到周期性的低脉冲。该模式是一个持续 3 us 的脉冲,然后是 750 ms 延迟和另一个脉冲。两脉冲模式每 5 秒重复一次,直到打开连接。此外,关闭连接时也会有脉冲,但打开连接时不会。 这表明 USB 驱动程序或堆栈中的某些东西正在定期探测,结果是 ESP32 芯片每 5 秒进行一次双重重置 – 至少在这个带有 CP2102 USB 串行芯片的 Windows 10 系统上。 我尝试绕过计算机和 CP2102 之间的 4 端口 USB 集线器;没变。 |
Windows 10 专业版 x64。我运行它的电脑是戴尔 XPS 15、9550。
Windows 安装程序(https://github.com/cncjs/cncjs/releases),桌面应用程序,x64,1.9.22。
ESP32 DevkitC rev 4 WROOM-32
CP2102 根据数据表。
重新连接时我没有看到重置发生。我相信这正是问题所在。当我重新连接时,我可以执行 $$ 之类的 GRBL 命令来获取当前设置。
我没有使用集线器,它直接连接到PC。
嗯,听起来可行。我无法使用示波器,但可以在 EN 和 GND 之间放置一个万用表,看看它是否变低。如果它仍然很高,则存在不同的问题。将不得不回复你。 |
每个脉冲 EN 仅下降 3 微秒,并且脉冲相对于其宽度间隔很大,因此您不太可能用万用表清楚地看到它们。用我的万用表,我不时会说电压骤降,从 3.215 到 3.212 或类似的量级。你会看到什么,如果有的话,很大程度上取决于你的仪表。 |
地图册 评论 2020 年 7 月 13 日
像 CNCJS 这样的一些客户端使用 hello 消息来确定连接是否存在。
使用 GRBL (Arduino Nano) 进行测试时,行为始终相同:与 COM 端口建立连接后,将发送欢迎消息。关闭连接并再次打开——然后再次发送欢迎消息。
使用 USB 连接 GRBL/ESP32 时,并不总是发送 hello 消息,结果是客户端无法工作。
我检查了代码,我的理论是 init() 代码发送“hello”消息,而不是在与 COM 端口建立连接时,它最终在发送缓冲区中。如果客户端快速连接,它会被刷新到客户端并工作——但这意味着后续调用和重新连接不起作用。(这正是我看到的行为)。
我没有解决这个问题,因为我不知道这是否是由于断开连接而导致的实际预期行为,您想要恢复而不是从头开始。无论哪种方式,我猜想在第一次连接时发送 hello 消息始终是所需的行为。
— 拔掉插头,快速连接 —
CNCjs 1.9.22 [Grbl]
连接到 COM7,波特率为 115200
VMDPV_1|1_VMDPV
�
[MSG:Grbl_ESP32 Ver 1.2a Date 20200613]
[MSG:Compiled with ESP32 SDK:v3.2.3-14-gd3e562907]
[MSG:Using machine:ESP32_V4]
[MSG:Axis count 3]
[MSG:RMT Steps]
[MSG:PWM 主轴输出:15, Enbl:2, Dir:-1, Freq:5000Hz, Res:13bits]
VMDPE_1:2:4062:0 :4062|4064_VMDPE
Grbl 1.2a [‘$’寻求帮助]
— 关闭,再次打开(任何后续尝试) —
CNCjs 1.9.22 [Grbl]
以 115200 的波特率连接到 COM7
—