Contact me: hankecnc@gmail.com

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

推推 grbl 3年前 (2023-01-22) 128次浏览
关闭
Elmi77 开启了这个问题 2018 年 8 月 8 日 · 45条评论
关闭

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥#503

Elmi77 开启了这个问题 2018 年 8 月 8 日 · 45条评论

注释

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

我不明白为什么我的错误总是在我对它们做出反应之前关闭。所以这是错误#500#502的后续:

此外,当完全不使用 EEPROM 命令而只使用我的“G0”序列时,GRBL 会在一段时间后死亡,再次通过串行接口发送大量垃圾。
这肯定不是 EEPROM 故障,它被指定至少工作 100000 个写周期,而我远低于此。

那么这可能是当前 GIT 软件中的一个问题,因为我确实从那里直接使用它,而不是任何官方版本?或者还有什么问题?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

因为它们是同一问题的重复,涉及不推荐的流式设置数据方式。您仍然可以在已关闭的问题中发布回复,并将在需要时重新打开。而且,是的,EEPROM 有很多写周期,但很容易通过意外的 for/while 循环达到数千个写周期。也不保证 100,000 次循环额定值。这只是一个统计确定性值,因此制造缺陷可以将其降低到远低于这个数字。

您现在在这里声明您在没有 EEPROM 写入的情况下看到随机问题,这意味着这是不同的。Grbl 一直很稳定,在相当长的一段时间内没有报告非外部原因导致的通信错误。更有可能涉及其他变量。如果您消除这些问题,例如不以 wiki 中推荐的方式编译和安装它,使用自定义 GUI(尝试 bCNC、UGS 或 Grbl stream.py 脚本),使用具有适当驱动程序,使用具有不良电气特性的 Arduino 克隆或已知会损坏串行数据的不良 USB 串行芯片,或者仍然将其连接到其他电子设备(最好使用裸露的 Arduino 和 Grbl 进行测试)以消除 EMI 问题。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

Arduinos 已经是原装的,所以没有廉价的中国克隆产品,甚至更便宜的 USB 接口。我尝试了两种不同的 ArduinoNano,它们都按照描述进行了编程。

但可能有一些我正在做的不同:我不使用 GRBL 作为 CNC 设备,而只是以保证速度限制驱动一些轴,该速度限制由先前编程的 $11x-speed-values 定义。所以我的测试应用程序中的移动序列看起来像这样

?$X
G0X10.000Y11.000Z12.000
??????????
$X
G0X1.000Y1.000Z1.000
????????
-> 从所有位置 +1 开始继续

对“$X”的调用只是禁用未决警报的初步方法。“?” 不时调用以获取和显示当前位置。

这可能有点不寻常,但它应该是有效的命令?还是禁止只用G0?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
危机 评论了 2018 年 8 月 8 日 通过电子邮件
当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

这 ????????块不是一次性发送的,而是有几百毫秒的延迟。我的发送函数确保 128 字节的接收缓冲区不会溢出。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@Elmi77: 为什么不使用进给率 F 字来定义速度?这似乎是一个奇怪的解决方法。$11x 最大速率值用于定义每个轴在运行条件下丢步之前的绝对最大速度。一切都应该小于通过进给率 F 字定义的。另外,你为什么要强加 $X 命令?是否有什么东西导致警报被调用?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

@chamnit我猜想使用 F 字会使他的轴以难以确定的速度移动——据我所知,他的应用不是协调运动,而是三个恒速驱动器。我想知道整数计算中是否有某些东西可能会一直在限速极限下出错

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@biasedlogic: 找到 F 字值并不难。这只是向量加法。

但你是对的,最高速度可能是个问题。@Elm77 你的 $$ Grbl 设置是什么以及你正在编程的值的范围是什么?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@biasedlogic这是正确的:我没有 CNC 式设备,其中三个组合轴 X、Y 和 Z 具有最终的进给率。我有三个独立的轴,我知道每个轴的最大允许速度是多少以及它们必须移动到哪里。老实说,我不知道应该如何根据三个最大速度值和三个运动距离来计算进给率……

@chamnit我当前设置的摘录(我尝试了不同的变体,但没有发现任何差异):

$0=10
$1=25
$2=0
$3=0
$4=1
$5=0
$10=1
$11=0.010
$20=0
$21=0
$22=1
$23=0
$26=250
$27=1.000
$30=1000
$31=0
$32= 0
$100=300.000
$101=300.000
$102=300.000
$110=600.000
$111=600.000
$112=600.000
$120=10.000
$121=10.000
$122=10.000
$130=5000.000
$130.050
$130=500

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者
香奈儿 评论了 2018 年 8 月 9 日  

@Elmi77:关于设置,我看到的唯一潜在问题是行进距离长。您非常接近 Grbl 在某些内部浮点计算中可以解析的最大距离。

通过此计算计算矢量 F 进给速率:sqrt( vx^2 + vy^2 + vz^2 )
其中 vx = dx/dt 或最大轴速度。
dx、dy、dz 只是每个轴的增量行程,dt 是运动需要经过的大致时间。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@chamnit我使用 5000 毫米的限制,因为我在某处读到 GRBL 支持的最大值是 10000 毫米,所以我通过使用一半来增加一些额外的安全级别。但是:问题似乎远远超出了这个限制,它最近发生在 300 毫米的距离,但有时已经在 50 毫米之后

关于进给率的计算:我从哪里得到 dt?我可以根据恒定速度计算时间,但有一个加速阶段,我真的无法计算……

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@Elmi77:您是否消除了所有其他变量,例如使用其他一些 GUI 和/或主机?它也可能是您主机上的串行驱动程序。

您可以从多个来源计算 dt,例如您想要到达的位置以及您希望轴到达那里的速度。dt = dx/vx。

当您更改 $11x 设置时也会出现加速。这本质上是一个进给速率限制。在内部,Grbl 不会将 F 进给速率和最大速率视为任何不同。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@chamnit是的,我在 Windows 和 Linux 中尝试过,另外还使用绕过 USB 芯片的直接串行连接(在最后一种情况下问题更严重,然后有时响应“ok\r\n”也已损坏并包含一些垃圾)

关于进给率:我会尝试的。但是 G0 是一个常规的 G 代码命令,这不应该也有效吗?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
加尔特 评论了 2018 年 8 月 10 日 通过电子邮件
当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@Elmi77:是的,G0 是一个常规的 g 代码命令,但它会生成一个内部 F 进给速率以移动,该速率受任何一个轴的最大速度限制。它使用的计算是相同的。如果您可以自己进行计算,则使用 G1 和一个正常的 F 进给率字会给您更大的灵活性。

此时,很难诊断您的问题,因为我们似乎已经排除了大多数情况。如果您可以创建一个我可以重现的测试场景,那么我将能够判断它是否与 Grbl 源或其构建方法相关。但是,您必须使用 wiki 构建过程,提供所有版本(Arduino IDE、Grbl、Windows/Mac、任何相关驱动程序),并使用 Grbl stream.py 脚本或信誉良好的 GUI,如 UGS 或 bCNC。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

您是否消除了所有其他变量,例如使用其他一些 GUI和/或主机?

如果您尝试过不同的 GUI,您永远不会回答。Grbl 对很多人来说都运行良好,所以这个基本的东西是固件问题的结果的可能性似乎很低。正如我所见,它更可能是您的硬件或您的 GUI。像 Arduino 这样的 MCU 对电噪声也非常敏感,那么会不会是噪声导致 arduino 剥落?此外,我曾遇到过一次 EEPROM 损坏并导致运行时出现问题,即使运行时未使用 EEPROM。解决方案是使用 $RST 命令重置 EEPROM。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@109JB我不使用任何 GUI,而是使用自己的测试程序。尽管如此:我正确地检查了缓冲区,现在我只发送了很少的命令。还假设我的程序做错了什么——GRBL 不应该以这种方式挂断吗?当我发送不正确的东西时,我会期望出现错误或警报,但不会完全失败。

EEPROM 也被刷新/恢复/重写了好几次,我也尝试过只使用默认参数操作(但仍然使用我的 G0 命令序列)。

顺便说一句:我得到的这些“444444444444444444444”是什么 – 任何一种特殊的错误代码?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@Elmi77: 再说一次,在您创建一个我可以自己重现的测试用例之前,我无法为您提供帮助。这需要您使用经过审查的流媒体程序来帮助消除一些变量。另请发布您的 Grbl $I 构建信息字符串。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

你有没有用一个裸露的arduino试过,不同于那些遇到消除布线问题的人,噪音,还有一个坏的arduino?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

我绝对推荐尝试大师们要求的东西……另一方面,放弃噪音选项我会用你的图形用户界面试试你的硬件,但没有“电源”……只是控制(3.3 或 5V)。
结合这一点,我认为用标准 UGS 测试你的硬件是一件非常容易测试的事情,也是一种非常有用的丢弃东西的方法……祝你好运!

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@109JB @SailWithChips我使用的是裸 Arduino,注意连接到它(甚至没有 LED 来检查输出),只有 USB 电缆。此外,它位于我桌面的中间,甚至离我的笔记本电脑很远。
另一方面,我也尝试使用没有串行 USB 芯片的 Arduino 并直接与 RX/TX 连接。然后事情更糟,有时我会得到损坏的答案(所以我收到的不是“ok\r\n”,而是“oxxxxx\r\n”,其中 x 是一些垃圾 – 但这个垃圾总是一样的,不会改变即使串行波特率不同,所以我猜这不是电气干扰的问题)

@chamnit我已经在尝试创建一个可以轻松重现此问题的测试场景,以便您可以使用它 – 只要我有东西,我就会在这里发布。目前看起来“F”和“G1”而不是“G0”确实解决了问题——但这还不确定,因为崩溃不是那么容易重现(有时它发生在 50 个运动命令之后,有时我发送500 个运动命令,一切都很好)。

但要重复我的另一个问题:这个“44444444444444444444444444444444444”是什么,我在崩溃的情况下返回 – “4”是任何特殊错误代码吗?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

没有崩溃代码。你收到的四肢很奇怪而且很垃圾。我不确定你为什么要得到它们,这就是为什么我一直要求你创建一个我可以测试的场景。

另一个问题。您使用哪个版本的 Arduino IDE 来编译 Grbl?如果是 Windows,您使用的是 App Store 版本吗?

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

回顾你的 Grbl $$ 设置,你为什么缺少一些设置?6、12、13、24 和 25 不在列表中。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
作者

@chamnit我使用 Ubuntu 18.04 中的 avr-gcc / 从命令行编译 GRBL。缺少的 $-settings 已被删除,因为我认为它们不相关,它们都是默认值。

顺便说一句:你提到下一个版本的 GRBL 支持不使用 EEPROM 的参数设置 – 这个开发是在哪里完成的?在哪里可以找到相关的存储库?

感谢您的所有努力!

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

@Elmi77: 当我问你是否按照推荐的方法编译和烧写 Grbl 时,这意味着你是否通过 Arduino IDE 编译和烧写了 Grbl。我问这个是因为 Arduino IDE 有一套特定的标准化工具,它们都是相同的版本。如果您使用不同版本的 avrgcc,您可能会遇到奇怪的问题。

下一个 Grbl 版本尚未公开。直到准备好发布 Beta 版后才会发布,很快就会发布。这有多种原因,我已经在其他问题线程中进行了介绍。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

@Elmi77我可以确认 GRBL 在某些情况下会变得不稳定。我从来没有发现它是否是由于绕过 arduino 上的 USB 芯片引起的,因为你已经尝试过它,以 20 MHz 运行它,或者它是否只是一个错误。我的解决方法是:当从 GRBL 接收到的行不包含“错误”且不包含“警报”时,并且当它在“\r\n”之前有一些文本时,它一定是“确定”。有了这个,您就不必为损坏的响应而苦恼。至少对我来说这是完美的

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503
贡献者

我应该补充一点,以 20 MHz 的频率运行 Grbl 是自定义模组,而不是受支持的构建选项。16MHz 是 Arduinos 的标准频率,以 20 MHz 运行通常需要定制硬件以及更改源代码才能为其编译。这样做的用户可能会遇到来自各种来源的问题。

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

肯定是的 – 在 Makefile 中有一个参数 CLOCK,在这种情况下必须将其从 16000000 更改为 20000000。但这很明显,如果不进行此修改,USART 波特率将完全错误,并且无法再与 GRBL 通信。此时钟值还用于其他相关的时序计算,例如输出周期。所以 GRBL 在 20 MHz 下工作,但我提到的问题完全是随机的。如前所述,我不确定它是由 20 MHz 时钟还是绕过 USB 或其他原因引起的。忽略损坏的响应是可能的,并且在这里工作顺利

当不使用 EEPROM 代码时,GRBL 也会因非法响应而崩溃/泛滥 #503

@Elmi77– 再说一遍,你是在另一个 Arduino 上试过还是只是在出现错误的那个上试过?

@Sortland – I would add that it is not wise to accept damaged responses. The communication is 2-way and if you are receiving damaged responses at the GUI end, how do you know if Grbl is receiving correct messages on its end. The communication protocol in Grbl is there for this exact reason and in my experience it works perfectly. If you are receiving “damaged” responses

喜欢 (0)