开源改变世界

内部调用 feed/rapid override #260

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

关闭
dastultz 打开了这个问题 2017 年 8 月 28 日 · 6条评论
关闭

内部调用 feed/rapid override#260

dastultz 打开了这个问题 2017 年 8 月 28 日 · 6条评论

注释

内部调用 feed/rapid override #260

您好,我正在为我的硬件定制 GRBL,一台 Sanguino/644p CNC 机器。我有许多按钮和一个用于慢跑和覆盖的滑块(pot)。我已经进入protocol_main_loop运行我的代码。我慢跑效果很好。我试图按一下按钮发出覆盖命令。我认为这会很简单。我在 ISR 中看到serial.c传入的 RT 命令导致调用system_set_exec_state_flag. 所以我试过了,但它似乎没有用。我想也许事情可能会在下一个循环的顶部重置,所以我尝试protocol_execute_realtime在行为没有变化的情况下调用。考虑一下:

printString("feed coarse plus\r\n");
system_set_exec_motion_override_flag(EXEC_FEED_OVR_COARSE_PLUS);
protocol_execute_realtime();

打印语句在控制台中可见,但不会发生覆盖。

从 GRBL (1.1f) 中触发快速/进给覆盖的最佳方法是什么?

谢谢。

内部调用 feed/rapid override #260

你正在做的事情看起来应该对我有用,但我自己还没有尝试过。Sonny 可能是为数不多的对代码有足够了解的人之一,但他很忙,不能花太多时间来帮助解决这种分心的问题。

当您正在处理听起来像是高度定制的版本时,这可能会引入我们不知道的各种复杂性,我建议您采用标准的 1.1f 代码(最好是在 328P 上)并进行最小的更改来测试这个一点逻辑。

内部调用 feed/rapid override #260

顺便说一句,如果这是由按下按钮触发的,您是否实施了某种去抖动和反重复处理?否则,您可能会在释放按钮之前多次设置该覆盖标志。

内部调用 feed/rapid override #260
贡献者

谢谢@electrokean. 我很忙,但我仍在尽力回答问题。

@dastultz: 你在做什么应该工作。我不清楚为什么不是。它不应该的唯一原因是新计算的覆盖与当前的覆盖没有什么不同,或者您正在中断内调用 protocol_execute_realtime() 函数(这种方式不起作用)。

内部调用 feed/rapid override #260
作者

我正在轮询主循环中的按钮,不涉及中断,并且正在对它们进行去抖动。

如果你说它应该有效,那么我会坚持下去。给我一个星期的时间来解决这个问题,我会用我的发现更新这个问题。

谢谢。

内部调用 feed/rapid override #260
作者

好的,我发现代码确实有效,但它非常参差不齐,所以我一定是早些时候错过了它。如上所述,我从protocol_main_loop轮询按钮、锅和设置灯的地方调用自己的服务例程。它非常适合慢跑,反应灵敏。但是一旦我开始一个循环(通用 G 代码发送器),似乎我的服务例程被调用 FAR 的频率降低了,这可能是因为系统非常忙于运行,但也可能是因为它主要在定时器和中断上运行?

当然我可以在中断时设置我的按钮,但是去抖动要复杂得多(对我来说)。是否有一个安全的定时器中断例程,我可以利用它来调用我的服务例程?

内部调用 feed/rapid override #260
贡献者

感谢更新。执行可能暂时不会回到主循环。如果它已满并且在添加下一行动作之前必须等待它清空,我可能会被规划器阻止。参见 mc_line()。

喜欢 (0)