开源改变世界

重置输入行为 #479

推推 grbl 3年前 (2023-01-22) 71次浏览

关闭
zsoden 打开了这个问题 2018 年 6 月 20 日 · 8条评论
关闭

重置输入行为#479

zsoden 打开了这个问题 2018 年 6 月 20 日 · 8条评论

注释

重置输入行为 #479

在调试我的新机器时,我不小心将急停接线错误(它连接到 A0 复位输入),因此它给出了相反的信号。其结果是,只有在按下进给保持或循环启动硬件按钮时,机器才会像紧急停止一样运行。

查看代码我发现,虽然检测这些按钮的 ISR 仅在其中一个输入的状态发生变化时触发,但 ISR 函数随后会读取所有状态:

ISR(CONTROL_INT_vect)
{
  uint8_t pin = system_control_get_state();
  if (pin) {
    if (bit_istrue(pin,CONTROL_PIN_INDEX_RESET)) {
      mc_reset();
    } else if (bit_istrue(pin,CONTROL_PIN_INDEX_CYCLE_START)) {
      bit_true(sys_rt_exec_state, EXEC_CYCLE_START);
      } else if (bit_istrue(pin,CONTROL_PIN_INDEX_FEED_HOLD)) {
        bit_true(sys_rt_exec_state, EXEC_FEED_HOLD);
    }
  }
}

(我删除了#defines 以提高可读性)

这意味着控制器将只检测复位输入的状态变化。一旦控制器复位,即使复位引脚仍然有效,机器仍将继续运行。

我认为这是设计使然,但我宁愿看到机器在开始任何动作之前总是检查复位引脚状态。这将使基于引脚状态而不是基于转换。我还想记录这种行为,以防其他人遇到与我遇到的问题相同的问题。

重置输入行为 #479
危机 评论了 2018 年 6 月 20 日 通过电子邮件
重置输入行为 #479
作者

嗨,克里斯,

是的,我看到并理解了 system_control_get_state() 的操作,但正如您所说,只有在检测到引脚状态发生变化时才会执行检查。因此,如果重置输入与急停按钮一起使用,则 grbl 只会在初始按下时做出反应。在重置急停按钮之前,机器应保持禁用状态:

  1. 程序启动
  2. 按下紧急停止按钮(并锁定)
  3. 机器停止并进入报警状态
  4. 重置警报 ($X) <—- 但急停按钮未重置
  5. 程序启动
  6. 机器停止并进入报警状态
  7. 重置警报 ($X)
  8. 重置急停按钮
  9. 程序启动
  10. 程序运行完成

目前系统运行如下:

  1. 程序启动
  2. 按下紧急停止按钮(并锁定)
  3. 机器停止并进入报警状态
  4. 重置警报 ($X) <—- 但急停按钮未重置
  5. 程序启动
  6. 程序运行完成

因此,为什么我觉得在 ISR 之外定期执行输入引脚状态检查是明智的。

问候,

扎克

重置输入行为 #479
贡献者

AVR 仅检测引脚变化。它不会告诉您触发更改的端口上的哪个引脚或哪个方向。如果没有需要备用计时器的软件去抖例程,则无法可靠地轮询引脚。与其试图解决可能引入错误的软件问题,我强烈建议您要么重新布置安全门开关以切断电源。你总是可以从 A0 切断安全门开关的痕迹,因为它无论如何都是错误的。

重置输入行为 #479
作者

我了解更改功能中断的工作原理,但我很感谢您解释为什么决定这样操作。

我的急停按钮可以同时执行这两项操作——它会切断驱动器的电源并触发复位引脚。我只是希望能够使用复位引脚通过警报状态向操作员指示紧急停止已被触发。没问题,这只是一个建议,正如我所说,我想为遇到与我相同问题的其他人记录这种行为(无论是否正确)。

重置输入行为 #479
危机 评论了 2018 年 6 月 21 日 通过电子邮件
重置输入行为 #479
作者

谢谢你的提示,克里斯。是的,我将光耦合器用于步进驱动器的启用、步进和方向引脚。

你是对的,这主要取决于紧急停止立法。这只是在商业车间使用的小型机器,在评估要求后,我决定只让急停停止步进驱动器和主轴驱动器,而不是控制电子设备。急停按钮有两个触点:一个切断驱动电源,一个向控制器发送信号。

重置输入行为 #479
危机 评论了 2018 年 6 月 21 日 通过电子邮件
重置输入行为 #479
作者

谢谢克里斯,这是有道理的。

事实上,大型系统的安全性变得非常复杂。我记得几年前,一位同事在一家大型工厂工作,不得不处理光幕、安全继电器和其他类似系统。使用这样的设备有很多“陷阱”!

对于这台机器,我已经为 GRBL 添加了一项功能,因此为重置输入添加状态检查可能比重新配置机器接线更容易。我为 GRBL 添加了一个功能,告诉 g 代码发送者如果机器空闲,循环启动按钮已被按下。因此,g 代码发送器将基于按下按钮开始发送程序,而不是在 g 代码发送器软件中选择“运行”。这在机器重复相同操作的生产环境中会更好。

喜欢 (0)