Contact me: hankecnc@gmail.com

在 UGS 中连续慢跑 #745

推推 grbl 3年前 (2023-01-23) 293次浏览

关闭
布雷勒 打开了这个问题 2019 年 10 月 24 日 · 8条评论
关闭

在 UGS 中连续慢跑#745

布雷勒 打开了这个问题 2019 年 10 月 24 日 · 8条评论

注释

在 UGS 中连续慢跑 #745
布雷勒 评论了 2019 年 10 月 24 日  

我一直在努力尝试在 UGS 中实现连续慢跑,如果用户按住慢跑按钮,它将进入连续模式,并且在释放按钮后应该停止。

所以它似乎在大多数时候都有效,只要按下点动按钮,我们就会将点动命令排队,每次以固定的间隔填充缓冲区中的一个命令。释放按钮后,我们将发送点动取消命令,它会按预期停止。

但是我发现很难找到一个很好的平衡点来保持规划器缓冲区充满 GRBL,这样它就会以所需的进给速度保持慢跑,而不是填充它。似乎一旦它被填满,它就无法取消并完全清除计划缓冲区。我试着按照这里的讨论#95,但没有确定的解决方案?

当我开始慢跑时,命令正在填充缓冲区:

[verbose] <Idle|MPos:268.290,0.000,0.000|Bf:15,128|FS:0,0>
[verbose] <Idle|MPos:268.290,0.000,0.000|Bf:15,128|FS:0,0>
[verbose] <Idle|MPos:268.290,0.000,0.000|Bf:15,128|FS:0,0>
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:268.310,0.000,0.000|Bf:14,128|FS:84,0>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:268.620,0.000,0.000|Bf:12,128|FS:186,0|WCO:0.000,0.000,0.000>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:269.340,0.000,0.000|Bf:10,128|FS:300,0|Ov:100,100,100>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:270.480,0.000,0.000|Bf:8,128|FS:426,0>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:272.040,0.000,0.000|Bf:6,128|FS:546,0>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:274.020,0.000,0.000|Bf:4,128|FS:672,0>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:276.420,0.000,0.000|Bf:2,128|FS:792,0>
>>> $J=G20G91X1.667F1000
ok
>>> $J=G20G91X1.667F1000
ok
[verbose] <Jog|MPos:279.230,0.000,0.000|Bf:0,128|FS:912,0>
>>> $J=G20G91X1.667F1000
[verbose] <Jog|MPos:282.460,0.000,0.000|Bf:0,128|FS:1038,0>

**** Canceling file transfer. ****

现在发出了取消点动命令(0x85),它将减速:

[verbose] <Jog|MPos:286.060,0.000,0.000|Bf:0,128|FS:1110,0>
[verbose] <Jog|MPos:289.690,0.000,0.000|Bf:0,128|FS:990,0>
[verbose] <Jog|MPos:292.950,0.000,0.000|Bf:0,128|FS:864,0>
[verbose] <Jog|MPos:295.730,0.000,0.000|Bf:0,128|FS:744,0>
[verbose] <Jog|MPos:298.130,0.000,0.000|Bf:0,128|FS:624,0>
[verbose] <Jog|MPos:300.170,0.000,0.000|Bf:0,128|FS:498,0>
[verbose] <Jog|MPos:301.780,0.000,0.000|Bf:0,128|FS:372,0>
[verbose] <Jog|MPos:302.890,0.000,0.000|Bf:0,128|FS:258,0>
[verbose] <Jog|MPos:303.640,0.000,0.000|Bf:0,128|FS:132,0>
[verbose] <Jog|MPos:303.990,0.000,0.000|Bf:0,128|FS:0,0>

但随后我会收到一条 ok 消息并再次开始加速,它会继续运行:

ok
[verbose] <Jog|MPos:304.070,0.000,0.000|Bf:14,128|FS:96,0>
[verbose] <Jog|MPos:304.490,0.000,0.000|Bf:14,128|FS:216,0>
[verbose] <Jog|MPos:305.330,0.000,0.000|Bf:14,128|FS:336,0>
[verbose] <Jog|MPos:306.570,0.000,0.000|Bf:14,128|FS:456,0|Ov:100,100,100>
[verbose] <Jog|MPos:308.210,0.000,0.000|Bf:14,128|FS:576,0>
[verbose] <Jog|MPos:310.260,0.000,0.000|Bf:14,128|FS:696,0>
[verbose] <Jog|MPos:312.740,0.000,0.000|Bf:14,128|FS:822,0>
[verbose] <Jog|MPos:315.630,0.000,0.000|Bf:14,128|FS:942,0>
[verbose] <Jog|MPos:318.940,0.000,0.000|Bf:14,128|FS:1062,0>
[verbose] <Jog|MPos:322.670,0.000,0.000|Bf:14,128|FS:1188,0>
[verbose] <Jog|MPos:326.850,0.000,0.000|Bf:14,128|FS:1308,0>
[verbose] <Jog|MPos:331.350,0.000,0.000|Bf:14,128|FS:1428,0>

我知道在这个例子中我使用了太大的步长和不合理的进给率,但这只是为了说明一个问题,否则会是间歇性的。

我们可能可以在 UGS 中解决这个问题并跟踪规划器缓冲区的使用情况。但这将要求我们的用户设置 $10=3,所以我认为这不是最佳设置。你还有其他建议吗?

我在 1.1e.20161219 和 1.1h.20190825 中得到了相同的结果

在 UGS 中连续慢跑 #745

”’
我们或许可以在 UGS 中解决这个问题并跟踪规划器缓冲区的使用情况。但这将要求我们的用户设置 $10=3,所以我认为这不是最佳设置。你还有其他建议吗?
”’
我认为这只是目前在 Android 应用程序“Grbl Controller”中实现并且运行良好的最佳解决方案

在 UGS 中连续慢跑 #745
作者

是的,它似乎通过解析规划器缓冲区的大小并确保不填充它来工作。
它并不优雅,但如果它是预期的行为或者如果不能以更好的方式修复那么我想那没关系。

在那种情况下,我可以在 wiki 上写几行吗?
https://github.com/gnea/grbl/wiki/Grbl-v1.1-Jogging

在 UGS 中连续慢跑 #745

我在慢跑模式下为“自动进给”所做的是不发送短移动,但是当按下键开始移动时,发出慢跑命令以移动到轴行程的最远范围;当您按下停止键时,它会发出点动停止命令。

在 UGS 的特定情况下;您正在使用的 API 是否可以区分按键、按键重复和按键事件?如果是这样,我会做的是:

按下键时:发送当前点动步长的移动。
按键重复:如果这是按键按下后的第一个事件,则将移动一直发送到轴的最远范围。
在 Key-Up 上:发送点动取消命令。

在 UGS 中连续慢跑 #745

我这样做的方式是在按钮按下(或操纵杆移动)事件上,我将发送方线程切换到一种特殊的“实时慢跑模式”,它的工作方式不同于正常的流媒体模式。按下按钮事件(或操纵杆返回原位)请求发送方线程取消实时慢跑模式。

实时慢跑模式基本上可以:

虽然我们没有被要求取消慢跑{根据问题#741
中描述的算法发送带有请求的进给率和距离的慢跑命令。 等待确定。 } 发送取消点动实时命令,然后发送 G4P0 等待 OK。 返回正常发送模式

循环迅速将缓冲区填满,但取消慢跑命令将其刷新。有必要发送 G4 并等待它完成,然后再发送任何其他内容,否则可能会发生奇怪的事情(请参阅前面的线程)。

在 UGS 中连续慢跑 #745

看看你上面的日志,我想你可能没有等到最后的点动命令回复 OK 就发送了点动取消实时命令?因此,最终命令可能仍在管道中,并且在取消命令将其刷新后完成处理并进入队列。

在 UGS 中连续慢跑 #745
作者

谢谢@AlexHolden,是的,这很有意义,我理解这是 GRBL 中的设计(现在一分钱掉了)。我怀疑情况会是这样,你证实了这一点。

我现在需要弄清楚哪种替代方案最有前途,这样它就可以重新用于其他控制器,例如 Marlin、TinyG 和 g2core,并且对用户来说也是最直观的。

还有谢谢@zeevy@bdurbrow对于其他选择。

在 UGS 中连续慢跑 #745

你好亲爱的朋友们,

我有个问题 ; 为什么 GRBL 中没有专用的 JOG 引脚?
你的解决方案不是像用右手展示你的左耳吗

为什么 GRBL 没有在软件中解决这个问题?
例如像 home pin 这样的专用 jog pin

谢谢你

在 UGS 中连续慢跑 #745
格雷厄姆JB 评论了 2022 年 2 月 22 日  

一个 Pin 控制所有,一个 Pin 找到它们,一个 Pin 把它们全部带走,并在运动中计算出它应该向哪个轴和方向移动?
Grbl 确实在软件中解决了这个“问题”。

喜欢 (0)