开源改变世界

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

推推 grbl 3年前 (2023-01-21) 135次浏览

关闭
cspwcspw 打开了这个问题 2017 年 1 月 21 日 · 9条评论
关闭

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小?#98

cspwcspw 打开了这个问题 2017 年 1 月 21 日 · 9条评论

注释

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

Grbl 0.9 报告串行缓冲区中使用的字节数,0 表示缓冲区为空。在 V1.1 中,报告更改为“空闲串行字节数”。这使得发件人的一些任务更容易。

我正在查看这个问题 [https://github.com/grbl/grbl/wiki/Interfacing-with-Grbl]
当 Grbl 将数据存储到 EEPROM 时,AVR 要求在此写入过程中禁用所有中断,包括串行 RX ISR。这意味着如果 g 代码或 Grbl $ 命令写入 EEPROM,则写入期间发送的数据可能会丢失。这通常很少见,通常在程序内部不恰当地流式传输 G10 命令时发生。为了稳健性,GUI 应该跟踪和检测这些 EEPROM 写入命令,并在发送更多数据之前等待队列完成执行来适当地处理它们。 ”

所以我想知道串行队列是否为空。以前这很容易。有没有办法确定串行缓冲区在实现中有多大,以便我可以判断它何时为空?(间接地,我想强制处理器重置然后查询状态将显示可用容量。我真的不想走那条路。)是否有其他建议或是否有检测缓冲区容量的简单方法?

谢谢

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

嗨皮特
你的 GUI 连接 Arduino 的那一刻将重置,所以你的第一个状态请求会告诉你缓冲区大小,我想。

然而,一个人真的不应该在工作中发送 EEPROM 存储命令……

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98
作者

谢谢戴夫。

我不想相信用户行为良好(而且我也想行为不端),所以我有一些原因要流式传输 EEPROM 命令。

我已经有一个机制来等待我的 V0.9 发送器中的空缓冲区,所以它只是我对 V1.1 的更新触发了我的帖子。我认为最简单的解决方法是记住我在状态报告中看到的任何空闲字节的高潮,并假设当我再次看到它时它意味着“空缓冲区”。

我想要流式传输 EEPROM 写入(或读取)的用例是我在车库里有一台机器,我的桌子上有另一个 Arduino(没有防护罩或电机),我可以在那里空运行作业和测试代码生成。(但我也将桌面 Arduino 用于一些非 grbl 项目,因此它经常被覆盖。)所以我的 GUI 希望能够获取或安装设置到 grbl。对于 XYZ 限制等设置,我发现自己必须在 3 个地方使它们保持一致:车库 grbl、桌面 grbl 和 GUI,以便 GUI 中的画布或 3D 空间与机器的限制概念完全匹配。因此,能够自动询问它们或将它们传输到 grbl 听起来很吸引人,即使它们在 EEPROM 上的播放效果不是很好……

你知道 Mega 在访问其 EEPROM 时是否也有同样的中断锁定吗?

谢谢皮特
_

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

好吧,只要你知道你在做什么(-:

我相信 Mega 具有相同的限制,因为它属于同一个 uP 系列。

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

PS:我一定要过来看看这台机器!

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

在 EEPROM 读取期间不禁用中断,仅在写入期间禁用。
我这里没有要测试的 Arduino,但我假设在 EEPROM 写入期间禁用中断时,您根本不会收到对状态命令的任何响应。并且很确定您也只会在写入完成后得到 ok 响应。
最大的问题是,当中断被禁用时,串行字符很可能会丢失,因为接收缓冲区无法清空。因此,如果您知道哪些命令导致 EEPROM 写入,您只需要避免进一步流式传输,直到您获得“确定”和/或再次开始获得状态响应。

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98
贡献者

不幸的是,串行缓冲区和规划器缓冲区的大小是我忘记添加到 v1.1 中的内容。我打算将它放入 $I 构建信息字符串中,以便 GUI 可以查询 Grbl 以获取该数据。当我接触到它时它会在 v1.2 中,但我正忙于移植到 ARM。

如果您使用发送-响应协议,您可以流式传输 Grbl 设置并安全地写入它们。这是安全的,因为在您发送保存命令后它不会发送更多串行 RX 数据。您可以使用 simple_stream.py 脚本进行测试。有用。我一直这样做。

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98
贡献者

@cspwcspw @cprezzi: 供参考。今天发布的 Grbl v1.1f 在$I构建信息字符串中包括总规划器块和串行 RX 字节。有关详细信息,请参阅发行说明。

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98

@chamnit谢谢桑尼的信息!

我的 GUI 如何确定 GRBL 实现中串行缓冲区的大小? #98
作者

欣赏这个!再次感谢您付出的巨大努力。

喜欢 (0)