开源改变世界

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

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

关闭
derFrickler 打开了这个问题 2013 年 4 月 12 日 · 10 条评论
关闭

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序#219

derFrickler 打开了这个问题 2013 年 4 月 12 日 · 10 条评论

注释

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

在 Grbl 0.9a 中触发 M08 或 M09 命令时,程序会在命令触发之前暂停。
如果我然后发送一个 ~ Cycle start 程序将继续。

我想这是一个错误,还是 grbl 意味着在打开或关闭冷却时暂停?
也许 M08/M09 被解释为 M06 (Toolchange) 存在一些问题,但我没有在代码中看到问题…

谢谢
约翰内斯

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

做了一些更多的测试。
这个运行槽:

G90
M08
G0 X10.000 Y10.000
G01 X20.000 Y10.000 F100.000000
G01 X20.000 Y20.000
G01 X10.000 Y20.000
G01 X10.000 Y10.000
G0 X0.000 Y0.000
M09
M30

这一个在 M08 和 M09 之前暂停并将机器状态设置为 QUEUED:

G90
G0 X10.000 Y10.000
M08
G01 X20.000 Y10.000 F100.000000
G01 X20.000 Y20.000
G01 X10.000 Y20.000
G01 X10.000 Y10.000
M09
G0 X0.000 Y0.000
M30

所以问题似乎是执行M命令时的位置?
如果我在第二个示例中使用 M03/M05,则会发生完全相同的事情。

如果执行 M 命令时队列中有 G 命令,我猜这可能是队列问题。

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

主轴开/关和冷却液开/关是顺序点,即所有先前编码的运动必须在执行之前完成(否则您会在时间之前溢出冷却液或在切削结束之前停止冷却液并毁坏工具)。
此外,Spindle On 有一个更微妙的行为,它还应该保持执行,直到主轴达到规定的速度(S 字)和/或同步。幸运的是,对于 Grbl,它不支持控制主轴速度(更不用说反馈了),所以这还不适用……还不适用。

所以,如果说 Grbl 有 bug,那就是和等待 planner 队列清空的功能有关。

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

是的,你完全正确,但我会说这绝对是一个错误。

G0 运动完成,
然后执行M08,但在指令发出之前程序暂停。
当您再次开始循环时,冷却开始并完成以下 G01 运动。
直到下一个 M 命令再次暂停。

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219
成员

@derFrickler: 不错的收获。这绝对是一个错误。Grbl 应该跟踪运行状态并保持运行状态,但正如您发现的那样,事实并非如此。我会尝试修复,但目前,您必须点击循环开始以手动恢复程序。

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

谢谢 ;-)

我认为它不像 grbl 8c 中那样 – 但不确定,我会测试它。
我用 grbl 的冷却针驱动我的新廉价激光雕刻机上的激光:http://der-frickler.net/technik/lasergravierer
所以
我猜会有很多循环开始 ;-)

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

是的,已确认,在 grbl_v0_8c 中它工作正常!
所以我暂时保留这一点。

一般来说,0.9a 是否已经可用于铣削(不是生产,只是为了好玩和测试)?

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219
成员

感谢您检查这个!v0.9a 有一个新的状态变量,可以稍微组织系统进程,但我忘了为这些功能保持循环。我认为修复应该相当简单。不过,在我推动修复之前,我会考虑一下这个问题。

至于 v0.9 的可用性,我没有收到关于发现的任何重大错误的太多反馈,除了这个错误和步进频率非常低的设置可能存在的轻微抖动问题。我仍在处理一个已知错误。它与归巢有关,以及在归巢周期中如何不考虑加速度和速度限制……有很多事情要做,但我认为如果你能容忍这些事情,使用它应该没问题。

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

@chamnit嗨,我在一个分支中使用命令“M3”和“M5”,其中主轴速度用于设置我的 cnc 激光器的强度。您认为将机器设置为排队的主轴控制会有修复吗?

最好的问候,蒂姆
(顺便说一下,其余的工作非常出色!谢谢)

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

@chamnit嗨,只是检查一下您是否有运气(或时间!)调查/解决 0.9c 中暂停 GRBL 的 M3 和 M5?

M (03/05/08/09) 命令在 Grbl 0.9a 队列中有 G 命令时暂停程序 #219

使固定:

似乎如果缓冲区在 M[345789] 命令之间没有被填充,则机器不会在 protocol_buffer_synchronize() 之后自动继续。
我在手动创建的 gcode中测试运动和主轴交互- 我的 cnc 工具似乎创建了更冗长的 gcode,M[345789] 与运动代码的比率较低。

修复(在 gcode.c ~267 行,当前开发分支):

    // [M3,M4,M5]: Update spindle state
    if (bit_istrue(modal_group_words,bit(MODAL_GROUP_7))) {
      if (sys.state != STATE_CYCLE) protocol_auto_cycle_start();    // added this one
      protocol_buffer_synchronize();                                // pulled out of spindle_run
      spindle_run(gc.spindle_direction, gc.spindle_speed);
    }
    // [*M7,M8,M9]: Update coolant state
    if (bit_istrue(modal_group_words,bit(MODAL_GROUP_8))) {
      if (sys.state != STATE_CYCLE) protocol_auto_cycle_start();    // added this one
      protocol_buffer_synchronize();                                // pulled out of coolant_run
      coolant_run(gc.coolant_mode);
    }

这是与#352相同的问题

喜欢 (0)