开源改变世界

grbl 0.9c – 批处理一些 gcode 命令后停止工作 #336

推推 grbl 3年前 (2023-01-21) 139次浏览
关闭
metropt 打开了这个问题 2014 年 1 月 23 日 · 31条评论
关闭

grbl 0.9c – 批处理一些 gcode 命令后停止工作#336

metropt 打开了这个问题 2014 年 1 月 23 日 · 31条评论

注释

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

您好,
grbl 的 0.9c 版本不能正常工作。如果我们从文件发送命令,甚至在 Universal GcodeSender 等应用程序上使用键盘,开发板就会停止工作,我们需要断开连接并重新连接才能正常工作。

Grbl 0.9c ['$' for help]
[verbose]<Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000>
[verbose]<Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000>
[verbose]<Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000>
[verbose]<Idle,MPos:0.000,0.000,0.000,WPos:0.000,0.000,0.000>
>>> G91 G0  X5
ok
[verbose]<Run,MPos:0.146,0.000,0.000,WPos:0.146,0.000,0.000>
>>> G91 G0  Y5
[verbose]<Run,MPos:1.359,0.000,0.000,WPos:1.359,0.000,0.000>
>>> G91 G0  X-5
[verbose]<Run,MPos:3.473,0.000,0.000,WPos:3.473,0.000,0.000>
>>> G91 G0  Y-5
[verbose]<Run,MPos:4.934,0.000,0.000,WPos:4.934,0.000,0.000>
>>> G91 G0  X5
ok
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
>>> G91 G0  Y5
>>> G91 G0  X-5
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
>>> G91 G0  Y-5
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
>>> G91 G0  X5
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
>>> G91 G0  Y5
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
>>> G91 G0  X-5
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
[verbose]<Queue,MPos:5.001,0.000,0.000,WPos:5.001,0.000,0.000>
**** Connection closed ****

还有其他人有同样的问题#334我刚刚创建了另一个来关注这个问题。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

我认为我在 V0.8c 上遇到了相同或相似的问题。我将运行一个程序(在 la Skapeoko 的简单 3 轴 CNC 工作台上),在我重新获得对机器的控制之前,它会在强制硬重置的过程中部分冻结。UGCS 注意到一个报警故障。我安装了限位开关但禁用了,因为尽管 LS 线路上有屏蔽电缆、电容器和铁氧体,它们仍然太紧张。(我只是在设置期间启用限制和归位,然后在运行部件之前禁用,这样错误的触发就不会让生活变得更加困难)。我会从字面上完美地切割一部分,然后再次运行程序并让它随机冻结。

我真的很困惑是什么原因造成的。除了触发限位开关之外,还有哪些其他情况会引发警报?想知道我是否在触发警报的电机信号线上受到间歇性干扰。

渴望追查这个问题的根源。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336
成员

@Mgilbride: 据我所知,Grbl v0.8c 非常稳定,您不应该遇到这些类型的错误。Grbl v0.9b-c 的开发版本仍然存在一些问题,因此这里出现了停止问题。绝大多数时候,此类问题是由外部来源引起的,至少是过去的用户问题引起的。首先,我会消除可能导致这种情况的任何外部电噪声源,因为如果您有嘈杂的限位开关,那么这是一个明确的指标,表明某些东西没有正确接地或其他东西。确保所有东西都通过星形接地共享同一接地,以防止接地环路。确保所有电缆,尤其是与 Grbl 通信的 USB 电缆,远离任何潜在的电气干扰源。(如果没有,请尝试使用屏蔽 USB 电缆。它们更粗。) 最后,将您的流媒体节目作为变量消除。在我们的 repo 或使用不同库的其他一些 GUI 中尝试我们的 Python 流脚本。

如果您仍有问题,请不要犹豫,发布您的发现。另外,如果你解决了它,请告诉我们你做了什么来解决它。谢谢!

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

谢谢。我会试试这些。特别是消除软件并
添加(或确定我是否正在使用)屏蔽 USB 电缆到混音中。

我正在使用星地,但会再次审查它。

我的电子设备与电源一起封装在一个外壳中。一个
可能不寻常的细节是我有一个 110 插座连接到我的
控制器/驱动器盒。它由为电源供电的同一主线
供电。我目前使用该插座为我的修剪路由器供电。我唯一
关心的其他细节是两条电机信号线和一条限位
开关线确实在拖链中平行运行。一切都被屏蔽了。
路由器的电源线上有铁氧体。只是还没有想出一个
实用的替代路由。其他细节是我的装备很大。
基本上是 4×5 英尺。所以我的信号线变得很长,这肯定
会使事情复杂化。

我只能说的另一件事是,我认为,但不确定,这
总是发生在电弧期间。我记得这种情况发生的所有时间都是
在弧形或圆形切割期间。但是,我很确定我疯了,因为这些程序确实可以完美运行, 除了重置之外
没有任何硬件、软件或编程更改。

将及时向大家发布。感谢您的精彩固件!

2014 年 1 月 25 日星期六下午 1:45,Sonny Jeon notifications@github.com写道:

@Mgilbride https://github.com/Mgilbride:据我所知,Grbl v0.8c 非常稳定,
您不应该遇到这些类型的错误。
Grbl v0.9b-c 的开发版本仍然存在一些问题,因此
这里出现了停止问题。绝大多数时候,此类问题
是由外部来源引起的,至少是过去的用户问题引起的。首先,我
会消除可能
导致这种情况的任何外部电噪声源,因为如果您有嘈杂的限位开关,那么这
是一个明确的指标,表明某些东西没有正确接地或其他
东西。确保所有东西都通过星形接地共享同一接地,以
防止接地环路。确保所有电缆,尤其是 USB 电缆
与 Grbl 通信,远离任何潜在的电气干扰
源。(如果没有,请尝试使用屏蔽 USB 电缆。它们
更粗。)最后,将您的流媒体程序作为变量删除。 在我们的存储库或使用不同库的其他一些 GUI 中尝试
我们的 Python 流媒体脚本。

如果您仍有问题,请不要犹豫,发布您的发现。
另外,如果你解决了它,请告诉我们你做了什么来解决它。谢谢!


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ /issues/336 #issuecomment-33296412

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

你好

我有同样的问题。
我在 Arduino Mega 2560 和 GrblController 上使用 grbl 进行 GCode 上传。

http://zapmaker.org/projects/grbl-controller-3-0/

grbl 通常在批量上传后冻结在完全相同的位置。
我以多种方式编译了 grbl,具有不同的波特率、缓冲区大小等……它们没有影响。

GrblController 有一个选项,“Aggresive Preload”…当我将其设置为 OFF 时,它不会再冻结…但这有一个缺点,即命令之间有短暂的延迟(GrblController 在发送下一个命令之前等待 OK ).

我什至尝试手动发送命令。一次发送一个命令时,它们会完美执行。但是当它们被批量发送时……这就是它发生的时候。

目前我没有安装限位开关。

锁定后,我必须重置连接才能让 grbl 再次工作。

谢谢!

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336
成员

@robertnino: 你用的是哪个版本的grbl?您是否尝试过使用不同的流媒体程序?你还在你的流中发送任何 G54-59 命令吗?访问 EEPROM 的某些命令尤其会导致 v0.9c 出现某些问题。我现在也在努力解决这个问题。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

去年我在使用 0.8c、Zapmaker 和 UNO 上的积极预加载时遇到了同样的问题。我需要预加载,因为标准加载的命令序列太慢了。它通常会在序列结束前锁定。经过大量测试后,我发现它取决于我在代码结束前立即使用的浮点命令的数量和精度。这不是缓冲区溢出。就我而言,我经常使用 G4 Px.xx 来精确计时转台和相机快门。Zapmaker 说这是因为 GRBL 如何处理 G4 命令,这与模态操作有关。我有一个 100% 可重复的短代码序列。如果有人感兴趣,我可以挖掘它。

-安迪

发件人:Robert Voinea [ mailto:notifications@github.com ]
发送时间:2014 年 1 月 28 日星期二凌晨 1:30
收件人:grbl/grbl
主题:回复:[grbl] grbl 0.9c – 在批处理一些 gcode 命令后停止工作(# 336 )


,我有同样的问题。
我在 Arduino Mega 2560 和 GrblController 上使用 grbl 进行 GCode 上传。
http://zapmaker.org/projects/grbl-controller-3-0/
grbl 通常在批量上传后冻结在完全相同的位置。
我以多种方式编译了 grbl,具有不同的波特率、缓冲区大小等……它们没有影响。
GrblController 有一个选项,“Aggresive Preload”…当我将其设置为 OFF 时,它不会再冻结…但这有一个缺点,即命令之间有短暂的延迟(GrblController 在发送下一个命令之前等待 OK ).
我什至尝试手动发送命令。一次发送一个命令时,它们会完美执行。但是当它们被批量发送时……这就是它发生的时候。
目前我没有安装限位开关。
锁定后,我必须重置连接才能让 grbl 再次工作。
谢谢!

直接回复此电子邮件或在 GitHub #336(评论)上查看。图片已被发件人删除。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

我忘了补充。Zapmaker 在他的下载器中添加了几行代码(在 3.something 中),基本上是说“IF G4 Px,等待“OK””。这解决了 grbl-controller 的问题,但让我的代码太慢了。

安迪

发件人:Andy Nobbs [ mailto:andy_nobbs@yahoo.com ]
发送时间:2014 年 1 月 28 日星期二上午 8:17
收件人:’grbl/grbl’
主题:回复:[grbl] grbl 0.9c – 在批处理一些 gcode 命令后停止工作(#336

去年我在使用 0.8c、Zapmaker 和 UNO 上的积极预加载时遇到了同样的问题。我需要预加载,因为标准加载的命令序列太慢了。它通常会在序列结束前锁定。经过大量测试后,我发现它取决于我在代码结束前立即使用的浮点命令的数量和精度。这不是缓冲区溢出。就我而言,我经常使用 G4 Px.xx 来精确计时转台和相机快门。Zapmaker 说这是因为 GRBL 如何处理 G4 命令,这与模态操作有关。我有一个 100% 可重复的短代码序列。如果有人感兴趣,我可以挖掘它。

-安迪

发件人:Robert Voinea [ mailto:notifications@github.com ]
发送时间:2014 年 1 月 28 日星期二凌晨 1:30
收件人:grbl/grbl
主题:回复:[grbl] grbl 0.9c – 在批处理一些 gcode 命令后停止工作(# 336 )


,我有同样的问题。
我在 Arduino Mega 2560 和 GrblController 上使用 grbl 进行 GCode 上传。
http://zapmaker.org/projects/grbl-controller-3-0/
grbl 通常在批量上传后冻结在完全相同的位置。
我以多种方式编译了 grbl,具有不同的波特率、缓冲区大小等……它们没有影响。
GrblController 有一个选项,“Aggresive Preload”…当我将其设置为 OFF 时,它不会再冻结…但这有一个缺点,即命令之间有短暂的延迟(GrblController 在发送下一个命令之前等待 OK ).
我什至尝试手动发送命令。一次发送一个命令时,它们会完美执行。但是当它们被批量发送时……这就是它发生的时候。
目前我没有安装限位开关。
锁定后,我必须重置连接才能让 grbl 再次工作。
谢谢!

直接回复此电子邮件或在 GitHub #336(评论)上查看。图片已被发件人删除。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336
成员

@lakeside53: 请发布您的示例代码的链接。我很好奇是什么导致了这个问题。这听起来主要是流媒体客户端方面的流媒体协议问题,主要是由于可疑的“IF G4”声明。这可能意味着 Zapmaker 使用的流媒体协议可能不完全兼容。对于某些命令,如 G4 驻留或 M3/4/5 主轴控制,Grbl 必须清空其缓冲区以完成队列中的所有运动以按时按程序执行命令。G2/3 arcs 暂停流式传输以将小线段注入规划器缓冲区。如果流媒体程序并不总是考虑到“OK”响应,您将遇到您所描述的问题。正如我们的高级流媒体脚本中所述,通过跟踪发送的字符和“ok”响应的数量,同时保持 Grbl 的串行输入缓冲区已满,可以通过一些方法来改进和稳健的流媒体性能。不过,我仍将针对我们的流媒体脚本进行测试,以确保它不在 Grbl 的末端。

仅供参考,Grbl 的模态操作主要是由于内存限制,但如果正确地流式传输到 Grbl,它不应该真正影响性能或操作方式。使 Grbl 成为非模态的仍然是可能的,因为我一直在为此寻找简单干净的解决方案,但这不是优先事项。基本上,它涉及必须在内存中存储任何非运动 g 代码块命令,并在步进模块完成前一个块时执行它们。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

我搞砸了——Zapmaker 修复了“if Mx”,而不是“if G4”。抱歉,那是去年四月的事,自从他们 J 之后发生了很多事情

我可以发送整个文件,但它们只是重复序列——旋转表执行短序列、旋转表等。

问题是程序序列如何终止。我可以为它提供足够的数据以全速长时间(几小时?)执行下面的操作,并且它不会失败直到退出。

以下两个示例之间的唯一区别是 G4 P0.11 工作,而 G4 P0.1 失败 – 但仅在程序退出时。需要明确的是——每个命令都按预期工作,但我无法重新获得对 GRBL 的控制我在后来的实验中发现我可以通过简单地添加一些“什么都不做”G 代码来解决这个问题(比如定位一个不存在的Z 轴)在最后一个序列之后,但在 M30 之前(参见上一个示例)。如果使用“激进的预加载”,这只是一个问题;命令的标准加载速度较慢,但​​它可以工作。我是将 M30 移除还是留在里面都没关系。

Zapmaker 放入的“if M7”修复程序只是帮助我解决问题的快速破解,但我必须删除它,否则我的速度优势就会消失。就我而言,积极的预加载是可行的方法。我必须查看他的最新代码,看看它是否仍然存在。如果您想知道……速度和设置延迟的能力很重要。在下面“积极预加载”的序列中,我可以在大约 30 秒内拍摄 90 张高分辨率照片(相机是限制因素);没有预加载大约需要 1.5 分钟(grbl 限制)。将其乘以数千个序列,然后……

为了清楚起见,我伪造了一个旋转轴

这每次都有效(grbl 0.8c)

G92 X0(零 X = 当前位置)
G0 X-2(后退一点以设置正向间隙)

G0 X0(从这里开始)
G4 P0.11(宝石稳定延迟)
M8(快门释放 – 打开,使用洪水冷却控制)
G4 P0.12(在运动前等待图像读出,并允许快门速度)
M9(快门释放 – 关闭)

G0 X4(下一个位置(4 毫米/英寸 = 度)
G4 P0.11
M8
G4 P0.12
M9

G0 X8
G4 P0.11
M8
G4 P0.12
M9

…..
为清楚起见删除了代码 通过将 X 递增 4 – “度”步来重复序列。
……

G0 X352
G4 P0.11
M8
G4 P0.12
M9

G0 X356
G4 P0.11
M8
G4 P0.12
M9

M30(停止)

每次退出时都失败(grbl 0.8c):

G92 X0(零 X = 当前位置)
G0 X-2(后退一点以设置正向间隙)

G0 X0(从这里开始)
G4 P0.1(宝石稳定延迟)
M8(快门释放 – 打开,使用洪水冷却控制)
G4 P0.12(在运动前等待图像读出,并考虑快门速度)
M9(快门释放 – 关闭)

G0 X4(下一个位置(4 毫米/英寸 = 度)
G4 P0.1
M8
G4 P0.12
M9

G0 X8
G4 P0.1
M8
G4 P0.12
M9

…..
为清楚起见删除了代码 通过将 X 递增 4 – “度”步来重复序列。
……

G0 X352
G4 P0.1
M8
G4 P0.12
M9

G0 X356
G4 P0.1
M8
G4 P0.12
M9

M30(停止)

这“修复”了退出上述“总是失败”序列的问题:
与上面相同的代码,但有 4 行“什么都不做”(对于我的情况)。不确定我是否需要这一切,但是
……

……

G0 X356
G4 P0.1
M8
G4 P0.12
M9

(停止前暂时什么都不做)

G92 Y0
G0 Y10
G0 Y-10
G0 Y0

M30(停止)

发件人:Sonny Jeon [ mailto:notifications@github.com ]
发送时间:2014 年 1 月 28 日星期二上午 10:09
收件人:grbl/grbl
抄送:lakeside53
主题:回复:[grbl] grbl 0.9c – 在批处理一些 gcode 后停止工作命令(#336

@lakeside53 https://github.com/lakeside53 : 请发布您的示例代码的链接。我很好奇是什么导致了这个问题。这听起来主要是流媒体客户端方面的流媒体协议问题,主要是由于可疑的“IF G4”声明。这可能意味着 Zapmaker 使用的流媒体协议可能不完全兼容。对于某些命令,如 G4 驻留或 M3/4/5 主轴控制,Grbl 必须清空其缓冲区以完成队列中的所有运动以按时按程序执行命令。G2/3 arcs 暂停流式传输以将小线段注入规划器缓冲区。如果流媒体程序并不总是考虑到“OK”响应,您将遇到您所描述的问题。正如我们的高级流媒体脚本中所述,通过跟踪发送的字符和“ok”响应的数量,同时保持 Grbl 的串行输入缓冲区已满,可以通过一些方法来改进和稳健的流媒体性能。不过,我仍将针对我们的流式脚本进行测试,以确保它不在 Grbl 的末端。
仅供参考,Grbl 的模态操作主要是由于内存限制,但如果正确地流式传输到 Grbl,它不应该真正影响性能或操作方式。使 Grbl 成为非模态的仍然是可能的,因为我一直在为此寻找简单干净的解决方案,但这不是优先事项。基本上,它涉及必须在内存中存储任何非运动 g 代码块命令,并在步进模块完成前一个块时执行它们。

直接回复此电子邮件或在 GitHub #336(评论)上查看。图片已被发件人删除。

grbl 0.9c - 批处理一些 gcode 命令后停止工作 #336

我检查了 Zapmakers 的最新代码 – 仍然有 M9 的陷阱。我必须对此发表评论以获得我需要的性能,我感觉有点糟糕,因为我是他为其添加它的人(不确定他是否有其他人有问题):-) 当然,我的应用程序使用 m8 /m9 有点不寻常。是的,它“解决”了这个问题,但我只是在接近尾声的地方添加了几行“对我什么都不做”的代码,也解决了这个问题。

这里的代码片段来自他的 https://github.com/zapmaker/GrblHoming GrblHoming / gcode.h

类 CmdResponse
{
public:
CmdResponse(const char *buf, int c, int l) : cmd(buf), count(c), line(l)
{
waitForMe = false;
如果 (buf[0] == ‘M’)
{
int value = cmd.mid(1,-1).toInt();
如果(值 == 9)
waitForMe = true;
}
}
公共:
QString 命令;
整数计数;
内线;
布尔等待我;
};

-安迪

发件人:Andy Nobbs [ mailto:andy_nobbs@yahoo.com ]
发送时间:2014 年 1 月 28 日星期二上午 11:08
收件人:’grbl/grbl’
主题:回复:[grbl] grbl 0.9c – 在批处理一些 gcode 命令后停止工作(#336

我搞砸了——Zapmaker 修复了“if Mx”,而不是“if G4”。抱歉,那是去年四月的事,自从他们 J 之后发生了很多事情

我可以发送整个文件,但它们只是重复序列——旋转表执行短序列、旋转表等。

问题是程序序列如何终止。我可以为它提供足够的数据以全速长时间(几小时?)执行下面的操作,并且它不会失败直到退出。

以下两个示例之间的唯一区别是 G4 P0.11 工作,而 G4 P0.1 失败 – 但仅在程序退出时。需要明确的是——每个命令都按预期工作,但我无法重新获得对 GRBL 的控制我在后来的实验中发现我可以通过简单地添加一些“什么都不做”G 代码来解决这个问题(比如定位一个不存在的Z 轴)在最后一个序列之后,但在 M30 之前(参见上一个示例)。如果使用“激进的预加载”,这只是一个问题;命令的标准加载速度较慢,但​​它可以工作。我是将 M30 移除还是留在里面都没关系。

Zapmaker 放入的“if M7”修复程序只是帮助我解决问题的快速破解,但我必须删除它,否则我的速度优势就会消失。就我而言,积极的预加载是可行的方法。我必须查看他的最新代码,看看它是否仍然存在。如果您想知道……速度和设置延迟的能力很重要。在下面“积极预加载”的序列中,我可以在大约 30 秒内拍摄 90 张高分辨率照片(相机是限制因素);没有预加载大约需要 1.5 分钟(grbl 限制)。将其乘以数千个序列,然后……

为了清楚起见,我伪造了一个旋转轴

这每次都有效(grbl 0.8c)

G92 X0(零 X = 当前位置)
G0 X-2(后退一点以设置正向间隙)

G0 X0(从这里开始)
G4 P0.11(宝石稳定延迟)
M8(快门释放 – 打开,使用洪水冷却控制)
G4 P0.12(在运动前等待图像读出,并允许快门速度)
M9(快门释放 – 关闭)

G0 X4(下一个位置(4 毫米/英寸 = 度)
G4 P0.11
M8
G4 P0.12
M9

G0 X8
G4 P0.11
M8
G4 P0.12
M9

…..
为清楚起见删除了代码 通过将 X 递增 4 – “度”步来重复序列。
……

G0 X352
G4 P0.11
M8
G4 P0.12
M9

G0 X356
G4 P0.11
M8
G4 P0.12
M9

M30(停止)

每次退出时都失败(grbl 0.8c):

G92 X0(零 X = 当前位置)
G0 X-2(后退一点以设置正向间隙)

G0 X0(从这里开始)
G4 P0.1(宝石稳定延迟)
M8(快门释放 – 打开,使用洪水冷却控制)
G4 P0.12(在运动前等待图像读出,并考虑快门速度)
M9(快门释放 – 关闭)

G0 X4(下一个位置(4 毫米/英寸 = 度)
G4 P0.1
M8
G4 P0.12
M9

G0 X8
G4 P0.1
M8
G4 P0.12
M9

…..
Code removed for clarity Repeat the sequences by incrementing X by 4 – “degree” steps.
……

G0 X352

喜欢 (0)