注释
|
我是 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 或类似的数值。您将看到什么,如果有的话,在很大程度上取决于您的仪表。 |


一些像 CNCJS 这样的客户端使用 hello 消息来确定连接是否存在。
使用 GRBL (Arduino Nano) 进行测试时,行为始终相同:在与 COM 端口建立连接后,会发送欢迎消息。关闭连接并再次打开——然后再次发送欢迎消息。
使用 USB 连接 GRBL/ESP32 时,并不总是发送问候消息,结果是客户端不工作。
我已经检查了代码,我的理论是 init() 代码发送“hello”消息,而不是在与 COM 端口建立连接时发送,它最终进入发送缓冲区。如果客户端快速连接,它会被刷新到客户端并工作——但这意味着后续调用和重新连接不起作用。(这正是我看到的行为)。
我没有修复这个问题,因为我不知道这是否真的是因为连接断开而导致的预期行为,你想在其中恢复而不是从头开始。无论哪种方式,我猜想在第一次连接时发送问候消息始终是所需的行为。
— 拔下,快速连接 —
CNCjs 1.9.22 [Grbl]以 115200 VMDPV_1|1_VMDPV 的
波特率连接到 COM7 [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 spindle Output: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
—