Contact me: hankecnc@gmail.com

如果在文件加载后执行手动命令则跳过行 #26

推推 grbl 3年前 (2023-01-25) 376次浏览
新问题

如果在文件加载后执行手动命令则跳过行 #26

关闭
alpharesearch 打开了这个问题 2012 年 11 月 18 日 · 6条评论

注释

如果在文件加载后执行手动命令则跳过行 #26

我发现了一个小错误,好消息是它是可重复的。

  1. 连接到 GRBL
  2. 加载 gcode 文件
  3. 输入手动命令:$h 开始归位循环
  4. 按发送按钮发送文件
  5. 它会倒数一行,并且会忘记从文件中发送一行 gcode

解决方法

  1. 连接到 GRBL
  2. 输入手动命令:$h 开始归位循环
  3. 加载 gcode 文件
  4. 按发送按钮发送文件
  5. 工作正常
如果在文件加载后执行手动命令则跳过行 #26

我有一个可用于重现错误的文件。默认的 python 脚本运行一整天都没有问题,因此我确定这不是 Grbl 问题。我猜 Universal Gcode Sender 如果缓冲区有一些问题,因为如果它设置为 127,我会跳过链接,但我发现如果我将缓冲区更改为 60,它总是发送所有行。

这是我的测试文件,有时缺少带有“X0 Z-15.7”的行:

G55
G0 X0 Y0 Z-13
G4 P1
G1 Z-15
X10 Z-15.05
Y10 Z-15.1
X-10 Y-10 Z-15.3
G0 Z-13
X10
G4 P1
G1 Z-15.4
Y10 X-10 Z-15.6
Y0 Z-15.65
X0 Z-15.7
G0 X-80 Y80 Z20

I use Grbl V0.8 edge and I don’t need to run my CNC to reproduce the issue, the new gcode test mode with $C also shows the issue. You will see the missing line in the command table.

PS: I use 115200 baud this may triggers the bad behavior more often?

如果在文件加载后执行手动命令则跳过行 #26 ghost assigned winder 2012 年 11 月 21 日
如果在文件加载后执行手动命令则跳过行 #26

From some debugging I think the bug is part of streamCommands()… it looks like sometimes it jumps to the next line without sending anything?
I added a debug print line right after the while and I remember the next index in the class and I look at the index now… normaly this numbers should match up… and if everything work OK they do… but at one point it gets out of sync???

here is a good case

**** Connected to /dev/ttyUSB0 @ 115200 baud ****
ok
DEBUG: 0; 0; G55

>>> G55
DEBUG: 1; 1; G0 X0 Y0 Z-13

>>> G0 X0 Y0 Z-13
DEBUG: 2; 2; G4 P1

>>> G4 P1
DEBUG: 3; 3; G1 Z-15

>>> G1 Z-15
DEBUG: 4; 4; X10 Z-15.05

>>> X10 Z-15.05
DEBUG: 5; 5; Y10 Z-15.1

>>> Y10 Z-15.1
DEBUG: 6; 6; X-10 Y-10 Z-15.3

>>> X-10 Y-10 Z-15.3
DEBUG: 7; 7; G0 Z-13

>>> G0 Z-13
DEBUG: 8; 8; X10

>>> X10
DEBUG: 9; 9; G4 P1

>>> G4 P1
DEBUG: 10; 10; G1 Z-15.4

>>> G1 Z-15.4
DEBUG: 11; 11; Y10 X-10 Z-15.6

>>> Y10 X-10 Z-15.6
DEBUG: 12; 12; Y0 Z-15.65

>>> Y0 Z-15.65
ok
ok
DEBUG: 13; 13; X0 Z-15.7

>>> X0 Z-15.7
ok
ok
DEBUG: 14; 14; G0 X-80 Y80 Z20

>>> G0 X-80 Y80 Z20
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok

**** Finished sending file. ****

and here is a bad case


ok
DEBUG: 15; 15; G55

>>> G55
DEBUG: 16; 16; G0 X0 Y0 Z-13

>>> G0 X0 Y0 Z-13
DEBUG: 17; 17; G4 P1

>>> G4 P1
DEBUG: 18; 18; G1 Z-15

>>> G1 Z-15
ok
DEBUG: 19; 19; X10 Z-15.05

DEBUG: 19; 19; X10 Z-15.05

>>> X10 Z-15.05
>>> X10 Z-15.05
DEBUG: 20; 20; Y10 Z-15.1

DEBUG: 20; 21; X-10 Y-10 Z-15.3

>>> X-10 Y-10 Z-15.3
>>> X-10 Y-10 Z-15.3
DEBUG: 22; 22; G0 Z-13

DEBUG: 22; 23; X10

>>> X10
>>> X10
DEBUG: 24; 24; G4 P1

DEBUG: 24; 25; G1 Z-15.4

>>> G1 Z-15.4
>>> G1 Z-15.4
DEBUG: 26; 27; Y0 Z-15.65

>>> Y0 Z-15.65
ok
DEBUG: 28; 28; X0 Z-15.7

>>> X0 Z-15.7
ok
ok
DEBUG: 29; 29; G0 X-80 Y80 Z20

>>> G0 X-80 Y80 Z20
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok

**** Finished sending file. ****

ok

如果在文件加载后执行手动命令则跳过行 #26

看起来像某种竞争条件???如果我增加 25 毫秒的睡眠,它又不能工作了???

// Load the next command.
            if (this.commandBuffer.hasNext()) {
                this.commandBuffer.nextCommand();
                try
                {
                    Thread.sleep(25);
                }
                catch ( Exception e )
                {
                    e.printStackTrace();
                }
                //while(!CommUtils.checkRoomInBuffer(this.activeCommandList, this.commandBuffer.currentCommand()));
            }
如果在文件加载后执行手动命令则跳过行 #26
所有者

@alpharesearch你能检查一下最新的提交是否解决了这些问题吗?我无法用您的测试文件重现该问题。

如果在文件加载后执行手动命令则跳过行 #26

好消息,随着这些变化,我不再跳过一行 gcode!
我确实像以前一样使用了 $e 选项,它总是失败 4 次中有 1 次——我确实运行了至少 50 次而没有出现问题。我也在 Shapeoko 上毫无问题地运行它。这解决了我的问题,这个案例可以关闭。谢谢你的帮助。

如果在文件加载后执行手动命令则跳过行 #26
所有者

伟大的!感谢您的协助。