Contact me: hankecnc@gmail.com

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705

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

关闭
bdurbrow 打开了这个问题 2019 年 8 月 10 日 · 8条评论
关闭

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作?#705

bdurbrow 打开了这个问题 2019 年 8 月 10 日 · 8条评论

注释

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705

来自 config.h:

// This option causes the feed hold input to act as a safety door switch. A safety door, when triggered,
// immediately forces a feed hold and then safely de-energizes the machine. Resuming is blocked until
// the safety door is re-engaged. When it is, Grbl will re-energize the machine and then resume on the
// previous tool path, as if nothing happened.
// #define ENABLE_SAFETY_DOOR_INPUT_PIN // Default disabled. Uncomment to enable.

好的,但是在 system.c 的 ISR 中它似乎禁用了进给保持输入引脚,并启用了安全门输入引脚?

    #ifndef ENABLE_SAFETY_DOOR_INPUT_PIN
      if (bit_istrue(pin,CONTROL_PIN_INDEX_FEED_HOLD)) {
        bit_true(sys_rt_exec_state, EXEC_FEED_HOLD);
    #else
      if (bit_istrue(pin,CONTROL_PIN_INDEX_SAFETY_DOOR)) {
        bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
    #endif
    }

在我看来,为了遵循 config.h 中的文档;它应该是这样的:

    if (bit_istrue(pin, CONTROL_PIN_INDEX_SAFETY_DOOR))
      bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
    
    #ifdef ENABLE_SAFETY_DOOR_INPUT_PIN
      if (bit_istrue(pin, CONTROL_PIN_INDEX_FEED_HOLD))
        bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
    #else
      if (bit_istrue(pin, CONTROL_PIN_INDEX_FEED_HOLD))
        bit_true(sys_rt_exec_state, EXEC_FEED_HOLD);
    #endif

所以…

  • 始终检查安全门销。
  • 如果定义了 ENABLE_SAFETY_DOOR_INPUT_PIN,则将进给保持销映射到安全门行为。
  • 否则将进给保持引脚映射到进给保持行为。

还; 基于记录的 ENABLE_SAFETY_DOOR_INPUT_PIN 行为;它的名字似乎不好……也许它应该是这样的MAP_FEED_HOLD_INPUT_TO_SAFETY_DOOR_BEHAVIOR

这有意义吗?

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
贡献者

你错过了 #ifndef 中的 n。

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
作者

不,我没有错过’n’。FWIW,我使用了常规的#ifdef 而不是#ifndef,因为我认为阅读源代码的人更清楚。

确实错过的是,在 ‘328 版本上,您假设(或者我从 cpu_map.h 收集到)CONTROL_FEED_HOLD_BIT 和 CONTROL_SAFETY_DOOR_BIT 将始终相同。

在 mega 上,它们不是……并且考虑到它们作为两个单独的项目在配置标头中,有人尝试单独映射它们并不是不合理的……所以我认为代码的主体应该处理这个问题大小写正确(这可以通过预处理器完成;所以它不应该对 ‘328 版本的闪存占用空间产生影响。

顺便说一句,grbl-mega 的官方发行版仍然有在#543中修复的损坏的 ISR

考虑到上述……也许更像这样的东西是适用的:

    #ifdef MAP_FEED_HOLD_INPUT_TO_SAFETY_DOOR_BEHAVIOR
      if (bit_istrue(pin, CONTROL_PIN_INDEX_FEED_HOLD))
        bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
    #else
      if (bit_istrue(pin, CONTROL_PIN_INDEX_FEED_HOLD))
        bit_true(sys_rt_exec_state, EXEC_FEED_HOLD);
      
      #ifdef SEPERATE_CONTROL_SAFETY_DOOR_PIN
        if (bit_istrue(pin, CONTROL_PIN_INDEX_SAFETY_DOOR))
          bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
      #endif
    #endif

这将被添加到 cpu_map.h 大约第 91 行左右的地方:

  // Enables support for having a separate safety door input.
  // Disabled by default because the standard Arduino Uno pin mapping does not have the extra pin required.
  // #define SEPARATE_CONTROL_SAFETY_DOOR_PIN
ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
贡献者

在 Grbl 的 328p 版本上,是的,由于缺少可用的销,安全门销取代了进给保持销。它是为请求此选项的供应商特意以这种方式编写的。

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
贡献者
香奈儿 评论了 2019 年 8 月 10 日  

我可以稍微清理一下以避免将来混淆,但 config.h 确实声明进给保持销充当安全门开关。我从来没有打算让用户在这个版本上有单独的进给保持和安全门输入引脚。

对于 Mega 分支,如果我没记错的话,安全门销和进给保持销位于不同的销上。所以这个问题在那里没有实际意义。

至于更新 Mega 分支,是的,它有点落后。我打算在审查和发布此双轴功能后更新所有内容。

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
作者
黑眉 评论了 2019 年 8 月 11 日  

嗯……好吧……

所以这个问题在那里没有实际意义。

好吧,如果 ENABLE_SAFETY_DOOR_INPUT_PIN 在 grbl-mega 上不存在……所以……我想我们可以这样做吗?

我将从我的 fork 中完全删除它,为了让你更容易,我将为 grbl-mega 生成一个新的 fork 和 pull 请求,它修复了 ISR 和配置文件(我现有的 fork 已经偏离了很远官方 grbl-mega 的一部分,我认为在那里创建一个新分支不会很容易……因此新的分支只是为了制作旨在返回到主要官方存储库的补丁)。

在 ‘328 上,目前我认为最好删除 CONTROL_SAFETY_DOOR_BIT,并在代码主体中 CONTROL_SAFETY_DOOR_BIT 出现的地方;用 CONTROL_FEED_HOLD_BIT 替换它…这将删除 CONTROL_SAFETY_DOOR_BIT 作为重新固定的诱人目标。

这看起来合理吗?

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705
贡献者

在 Mega 分支中,ENABLE_SAFETY_DOOR_INPUT_PIN 出现在 config.h 中是对的,但它没有做任何事情。已为下一次推送到 Mega 分支而删除。无论如何,正如我告诉过你的,代码本身是正确的,并且为每个代码假定了单独的引脚。所以,再次,讨论点。

随意对你的 Grbl 分支做任何你想做的事。这都是开源的。我会继续做我认为适合这个回购协议的事情。

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705

看起来 FeedHold 引脚没有行为(常开),这对于 SAFETY_DOOR_InterLOCK 类型的场景是不安全的(接触松动或电缆被老鼠咬伤会使安全互锁失效)。赋予它 NC 行为的最佳方法是什么?在 config.h 中启用 ENABLE_SAFETY_DOOR_INPUT_PIN 会实现这一点吗?

ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705

等待回复。限位开关具有配置为 NC 的选项。这个发送到 FeedHold 引脚 A1 的 Safety_Door_Interlock 信号怎么样。如何赋予此信号 NC(常闭)行为?GRBL 中有任何选项吗?任何代码更改都会实现这一点?

喜欢 (0)