Contact me: hankecnc@gmail.com

M226 Gcode命令实现 #1108

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

关闭
erosalesodev 打开了这个问题 2022 年 1 月 2 日 · 5 条评论
关闭

M226 Gcode命令实现#1108

erosalesodev 打开了这个问题 2022 年 1 月 2 日 · 5 条评论

注释

M226 Gcode命令实现 #1108

嗨,我正在尝试执行M226等待 pin 命令,到目前为止,我有一个解决方案,只不过是一个简单while的读取 pin 状态的解决方案,问题是循环阻塞,以防其他命令到达它正在执行的那一刻将不会被处理,有人有解决这个问题的想法。感谢您阅读。

M226 Gcode命令实现 #1108

您可以在循环中使用适当的参数调用protocol_execute_realtime()delay_sec()(并可能在 上退出sys.abort)。但它仍然会阻止新的 gcode 和 $ 命令——这是什么意图?

M226 的替代方法是实施M66或使用M0(在G4完成排队运动之后)等待循环开始输入。

M226 Gcode命令实现 #1108
作者

是的,我试过这个

 system_set_exec_state_flag(EXEC_FEED_HOLD); // Use feed hold for program pause.
   protocol_execute_realtime(); // Execute suspend.

  while(digitalRead(pinVal)!= stateVal){
   
  }
  printPgmString(PSTR("Pin ready\n"));
  system_set_exec_state_flag(EXEC_CYCLE_START); 
  protocol_execute_realtime(); // Execute.
  

pinVal是管脚号,stateVal是逻辑值
这个用在等离子切割中等待Arc Ok信号,表示切割电压稳定,需要等待它开始。
这就是为什么等待 pin 被实现,停止运动工作但仍然有重新启动运动周期的问题。
主要思想是尝试实现 waint for pin 命令,该命令允许等待 Arc Ok 信号并停止运动直到出现,并使用所有命令、停止队列和等待中接收的命令重新启动运动

M226 Gcode命令实现 #1108
作者

谢谢@terjeio对于这个想法,我会尝试sys.abortprotocol_exec发挥作用

M226 Gcode命令实现 #1108

选择使用 M66 的引脚是如何声明的?

M226 Gcode命令实现 #1108
作者

完毕

protocol_execute_realtime(); // Execute suspend.
  while(digitalRead(pinVal)!= stateVal){

  }
  protocol_exec_rt_system();  // Executes run-time command`
喜欢 (0)