开源改变世界

M6换刀实施 #79

推推 grbl 2年前 (2023-01-21) 256次浏览

关闭
mariusl 打开了这个问题 2012 年 3 月 16 日 · 4条评论
关闭

M6换刀实施#79

mariusl 打开了这个问题 2012 年 3 月 16 日 · 4条评论

注释

M6换刀实施 #79

你好,
我需要实现M6换刀功能的代码。我不确定如何在不搞砸缓冲区中已经存在的命令的情况下处理这个问题。你能建议一条合适的路线吗?如果有的话,我应该使用什么内部功能。

谢谢您的帮助

M6换刀实施 #79
成员

mc_dwell在 motion_control.c 中查看。根据您的分支,它将调用st_synchronize(master) 或plan_synchronize(edge)。此方法将确保当前缓冲的操作被完全执行,直到控制权返回给您的代码。在边缘分支中,您会看到它定期调用 以protocol_execute_runtime支持 Grbl 的实时“多任务处理”方面。这在工具更改期间不是必需的,我猜,但是当您在代码中阻塞 Grbl 的主执行线程时,它构成了“最佳实践”。

M6换刀实施 #79
作者

谢谢西门,我会检查一下。
你如何建议 grbl 知道工具更改何时完成?我有一个自定义前端,它已经做了很多事情,所以我可以输入自定义消息。我已经实现了一条消息 Que,以 300 毫秒的间隔在后台进行状态报告。这独立于 gcode 握手运行。

M6换刀实施 #79
成员

如果换刀是手动的,我猜它在很多方面在语义上类似于 FEED_HOLD 状态?也许您可以等待CMD_CYCLE_START事件发生并重新定位工具,然后继续工作?查看用于异步命令字符处理的行164,以及用于此事件的标准处理的行。然后,您的前端会发送一个波浪号,表示 Grbl 可以继续。serial.cprotocol_execute_runtime158~

M6换刀实施 #79
作者

FEED_HOLD 是一个不错的选择。这样我就不会干扰任何其他代码。谢谢西门。

喜欢 (0)