开源改变世界

来自 GRBL 的可能响应问题 #816

推推 grbl 2年前 (2023-01-23) 115次浏览

关闭
109JB 开了这个issue 2015 年 10 月 13 日 · 6条评论
关闭

来自 GRBL 的可能响应问题#816

109JB 开了这个issue 2015 年 10 月 13 日 · 6条评论

注释

来自 GRBL 的可能响应问题 #816

我通过我的 GUI 运行一个相当大的文件(1,049,930 行)进行测试,大约有 800,000 行,我得到了一个错误。结果是来自 GRBL 的状态响应在没有行尾字符的单行上返回回声(我在 config.h 中启用了回声)。我得到的线如下:

<运行,MPos:3.1925,3.5375,1.1634,WPos:3.1925,3.5375,1.1634,Buf:17,RX:[回显:X2.5546Z0.8951]

我在字符计数流模式下运行,因此计划程序缓冲区已满或几乎已满。这实际上是我正在测试的,缓冲区在一个长程序中保持多满,高速移动。重新运行表明,除了缓冲区最初填充或清空最后几行的程序开始和结束外,缓冲区在 99% 的运行中保持在 16 或 17。

我的 GUI 使用 VB.NET 中的 readline 函数读取串行流,因此它一直读取直到看到 EOL 字符。GUI 阻塞了,因为它读取的行不是它识别的格式。此外,由于接收到的字符串的 RX 缓冲区信息被截断,因此看起来由于某种原因 GRBL 在发送回显之前可能没有完成状态报告。另一种可能性是 VB readline 函数出现故障。由于它在 1+ 百万行代码文件中发生了 800,000 行,因此几乎不可能重现,但我想我会引起注意。我查看了我的代码,但在 GUI 代码中没有发现任何问题。作为旁注,我重新运行了程序并且它没有问题地完成了,所以我猜这可能是一个与状态请求的时间相关的真正巧合的问题,

来自 GRBL 的可能响应问题 #816
成员

@109JB:这似乎与文件大小与此问题无关,而是它允许更多时间通过以发现罕见的随机错误。在将任何内容写回 GUI 时,串行写入代码有一个 wait-if-full 语句。因此,就 Grbl 源代码的编写方式而言,这毫无意义。

但是,我最近确实发现了在结构中放置易失性变量的问题。在这种情况下,volatile 是未定义的,所以当闪存和内存接近极限时,真正奇怪的事情开始出现在最近的开发版本中(默认的主版本似乎没问题)。例如,状态报告只会打印乱码值、偶尔出现随机软重置、g 代码解析器状态未正确更新等。我上周发布了一个修复程序。如果您还没有更新,您可能会在启用 Grbl 的 echo 时遇到这个问题。

来自 GRBL 的可能响应问题 #816
作者

谢谢。我确实在我加载的先前版本中的 $I 请求中看到了一些奇怪的字符,并且我加载了一个新版本。我看到的是带有一堆 ?????? 的版本响应。在右括号之前。

我刚刚对当前加载的版本运行了一个 $I 请求并得到了这个:

[0.9j.20150930:4G0]

这对于版本响应是否正确?最后的 G0 看起来像我的 $N0 的尾端,它是:

$N0=G90G20G54G0

来自 GRBL 的可能响应问题 #816
成员

@109JB: 陌生又陌生。这也不应该发生。如果您发送一条$I=命令来清除 $I 构建信息字符串,N0 是否会被截断?这意味着 EEPROM 映射由于某种原因关闭。

其次,您还在使用 Arduino Nano 吗?您最终是否将引导加载程序更新为 Optiboot?我想知道它是否与引导加载程序和剩余闪存空间有关。

来自 GRBL 的可能响应问题 #816
作者

$N0 不会被截断。看起来不错。我只是尝试了几件事。首先,我决定在 Arduino IDE 串行监视器中尝试它,以消除我的 GUI 的可能性。当然在 IDE 上,它会自动执行软重置。然后我运行 $I 得到与上面相同的结果。然后我发送一个 $N0= 来清除它,然后再次运行 $I。同样的结果。然后我执行了硬重置,并运行 $I 得到相同的结果。我检查了 $N0,grbl 报告它现在是空的,$N1 也是。

我仍在使用 nano,但我从来没有抽出时间为它做 optiboot 加载程序。我将下载最新的 grbl 并重新刷新并再次检查。我会回来报告的。我还将检查 IDE 对所用闪存空间的说明。

来自 GRBL 的可能响应问题 #816
作者

我下载并重新刷新,这就是我现在从 $I 后面跟着 $N 并关闭回声得到的结果。

Grbl 0.9j [‘$’寻求帮助]
[0.9j.20150930:4G0]
ok
$N0=
$N1=
ok

然后我使用 Arduino IDE 完全清除 EEPROM 并重新刷新 GRBL。这似乎已经纠正了它,因为现在从软重置后的 $I 开始,我得到:

Grbl 0.9j [‘$’寻求帮助]
[0.9j.20150930:]
好的

我讨厌我的 $N0=G90G20G54G0 字符串并重新运行 $I,现在一切看起来都很好。

什么会导致此 eeprom 数据像这样损坏?
:

来自 GRBL 的可能响应问题 #816
成员

不确定这是怎么发生的。这个 EEPROM 字符串一直保留在那里,直到被覆盖或清除,所以它可能在过去的任何时候发生过。有可能之前的 $N0= 写入命令在 EEPROM 中写入了错误的位置,可能是通过我谈到的这个错误,也可能是其他原因。或者,Grbl$I=4G0在某个时候以某种方式收到了命令。也就是说,我没有在 Grbl 中安装太多正确的输入检查,因为它们占用了太多的闪存空间。尤其是 $Nx 和 $I 命令。这些并不经常使用,一旦设置,用户通常不会弄乱它们。

喜欢 (0)