注释
此 EStop 功能与边缘分支上的安全门功能有何不同? |
@poelstra: 我大约每月一次收到这个问题,最近更频繁。这是我的立场。
|
@ashelly:@chamnit完美地解释了它(第三个项目符号):) @chamnit: 我同意 EStop 应该主要在硬件中处理(这确实是我所做的)。不过我不同意,将其连接到 Arduino 的复位引脚是最好的设置。 我实际上认为将 EStop 连接到 Arduino 的重置甚至是一个坏主意,因为当它处于重置状态时,我无法验证它是否实际启动正确,是否具有正确的配置,与 GUI 的通信是否符合我的预期,等等。 验证这一点的唯一方法是释放我的硬件 EStop 信号,然后它会启动我的驱动程序并同时启动 Arduino,这将有一个(短暂)周期的未初始化输出引脚,甚至可能看起来已经闪烁错误的固件/设置… 我确实同意,如果 GUI 也知道这种行为,并且可以例如在 $DIS 模式被释放之前保持禁用诸如 Homing 之类的按钮,那将非常有用,但我不介意必须在其上输入 $EN(ABLE) ‘命令行’暂时;) |
@poelstra:我认为显而易见的一件事是,根据他们对急停应该是什么的解释,有很多方法可以实施急停。 对于您提到的物理按钮问题,我认为这不是问题。这是 Grbl 上电时的标准行为。您已经有一个现有的过程来处理这个问题。e-stop 表现出相同的行为并非不现实。 虽然不是每个人都会连接(或知道如何)一个物理按钮,但我能做的最好的事情就是提供工具来在 GUI 端实现一个。让 GUI 解释他们自己版本的急停行为。每台机器都不同,可能需要这种类型的灵活性。 最后,Grbl 本身并不是 LinuxCNC 的多合一替代品。它需要一个 GUI,编写一个相当简单。IMO,Grbl 应该尽其所能保持灵活性,并让 GUI 确定特定行为,如急停甚至工具更换。 |
对于 HW Estop on Reset 引脚,需要下拉,或者在 2015-02-19 16:15 GMT,Sonny Jeon notify@github.com:
|
@chamnit是的,Grbl 已经支持了广泛的机器和功能,我认为你在所有这些之间取得了很好的平衡! 我一直在思考更多,我同意我正在寻找的大部分内容确实可以通过 GUI 完成(例如,只要“EStop”处于活动状态,就根本不发送运动命令,并且总是发送 $DIS当检测到 Grbl 重置时),尽管来自 Grbl 的固件支持肯定会帮助那些不支持该功能的 GUI 的情况,并使其更可靠。 如前所述,我很高兴为 PR 提供我建议的更改的建议。仅所有三个编译时选项,我认为它们都不过是不同的初始化值或额外的“如果”。 @cri-s我没有以任何方式将限位开关连接到我的 EStop,而且我也没有尝试将硬限制用作 EStop。所以我担心我无法跟随你? |
@poelstra: 我不确定我是否同意 Grbl 的固件支持会使 GUI 更可靠。如果我们安装您的一些可选建议,这意味着 GUI 必须考虑这些可选条件才能正常工作。需要某种方式来告诉 GUI 构建配置是它所处理的。 关于你的三个建议:
我认为我们可以使用现有的警报机制之一来制定基于软件的急停。喜欢@cri-s提到,硬限制是一种做你想要的急停的方法。触发后,它会完全阻止 Grbl 执行任何操作,直到您发送重置命令。也许,可以有一个像“Ctrl-E”或“Ctrl-Esc”这样的实时命令来触发同样的停止/重置机制。 |
如果您只有 E-Stop,并且希望 gui 能够识别 E-Stop,只需将 DTR 或任何 对于固件支持,当检测到复位作为 avr 的启动原因时,可能会发出警报。 |
@chamnit谢谢你的想法!我对可靠性的推理是,GUI 已经“需要”处理启动时的初始归位警报、安全门和您建议的 $DIS 状态等状态。可选条件所做的唯一事情是在此类模式变为活动状态时发生变化,这是 GUI 可以自动处理的事情。所以我认为一切都可以以对任何 GUI 透明的方式实现,只要 GUI 正确处理状态(空闲、警报、禁用……)。
是的,当前的硬限制行为在某种程度上有点像我想象的那样,但不同之处在于它完全“锁定”了 Grbl:我不能要求设置等。我猜如果硬限制警报机制仍将允许“正常”交互(但当然会阻止移动),这也可能会达到我的目标。 添加 Ctrl-E 或 Ctrl-Esc 当然也是一个好主意,因为它确实与现有的 Ctrl-X 不同,因为 Ctrl-X 可能会启用步进器,而 Ctrl-Esc 也可以禁用它们,就像“硬重启”就可以了。不过,我可能总是使用我的硬件 EStop 按钮,但它可能对想要 EStop 但没有硬件电路的人有用。 @cri-s好吧,我有硬限制和 EStop。我想触发硬限制是否也应该强制 EStop ‘模式’是有争议的,但我的接线方式,它们不可能完全相同:当我的 EStop 处于活动状态时,我的驱动程序没有电源,但我如果之前达到了限制,则“需要”给他们权力以将他们赶出硬限制(“强制限制覆盖模式”)。 请注意,我非常感谢您对此的所有意见!因此,如果我的某些言论由于措辞不当而显得严厉,请原谅,它们绝不是这样的:) |
@poelstra: 在急停(或硬限制)期间,与 Grbl 交互的目的是什么?这是紧急状态,应该不会有其他事情发生。 至于$DIS,的确,它可能是一个额外的状态,但它对Grbl的整体操作来说是相当透明的。我仍在思考如何实现它,保持对 GUI 的向后兼容,并确保它在所有场景中都能正常运行。目前,这只是一个提议。 |
在我的情况下(外部参考:#580),我的机器附带的并行端口驱动器盒包括一个不会切断任何电源的急停开关。我理解你对此的立场,@chamnit的,并且希望有一天能弄清楚如何为盒子制作这样的模组……但现在我试图不修改它的内部电路,这仍然给了我一些基本的“紧急按钮”功能。 我的问题仍然是我可以在按钮仍处于锁定状态时恢复 Grbl,这通常会在我下次需要它时造成糟糕的情况。也许我在这里的用例只是缺乏经验/幼稚,但到目前为止,我使用它的时间并不是完全保证丢失步骤的紧急情况 – 只是想修改部分夹紧或在继续之前仔细检查这个或那个. 添加一个物理提要保持按钮可能真的是我所追求的更多,但即使这样可以解决我的用例,它仍然困扰着我,软件(Grbl 或 PC)无法帮助我记住弹出紧急按钮以备下次使用。 当我正在为这台机器的 Grbl 控制编写自己的界面时(主要是为了体验),我想知道(仍然禁止任何其他解决方案)你是否可以简单地暴露 pin 状态——然后我的 UI 可以拒绝发送任何 $X 直到解决了,没有任何您认为与安全相关的更改? |
@chamnit确实,在 EStop 发生的那一刻,有一个紧急状态。所以我然后解决问题,并(软)重置 Grbl(Ctrl-X)。在当前情况下没有真正的麻烦,虽然我认为 GUI 总是可以请求当前状态是很好的。例如,如果我决定 GUI 也处于错误状态(可能是我点击 EStop 的原因),我首先想重新加载它,它需要一种方法来询问当前状态(就像它目前也可以例如,当它正在等待执行归位时)。 但是,在 Grbl 软重置后,我的物理 EStop 仍然处于活动状态。在这个时间点,它可能不再是真正的“紧急情况”,所以我们可以称之为正常的“停止/禁用”状态。然后我希望能够与 Grbl 通信(例如,验证 GUI 确实看到正确的状态,即:禁用/EStop’ish),所以现在我可以安全地通过按下我的物理开始按钮来移除 EStop ,从而让 Grbl 控制我的步进器。 请注意,当时硬限位开关可能仍然处于活动状态(即使我释放了 EStop),我希望有可能将步进器从硬限位中移出。当然,这应该只能通过手动覆盖来实现,例如输入 $X。LinuxCNC 有一个“覆盖限制”复选框,允许您进行一次点动操作,如果硬限制仍然存在,它会再次进入自己的硬限制模式。 我知道 $DIS 仍然是一个提案,这就是为什么我将此场景添加为讨论的输入,特别是对于它确实需要成为额外状态的情况:) |
@poelstra:将您的物理急停按钮连接到 Arduino 重置引脚将完成您想要的一切。当你释放时,Grbl 会重新启动到它的加电状态。当您的物理急停处于活动状态时,Grbl 操作没有潜在问题,因为您已经提出。 正如您的长帖子所示,软件急停要复杂得多。没有一个干净简单的解决方案,它可能会涉及 Grbl 操作方式的大量变化。您仍然可以让 GUI 完全按照您的需要进行操作。Grbl 唯一不报告其状态的情况是出现严重警报(硬/软限制),并且 Grbl 明确指出存在警报及其原因。我发现那里没有问题。 我认为你想太多了,我真的不认为有什么问题。请记住,Grbl 不是 LinuxCNC,反之亦然。Grbl 必须谨慎选择,因为它只是 CNC 控制器的一半。另一半是 GUI,就像我之前多次说过的,软件急停应该是一个 GUI 协议。为了帮助解决问题,也许应该发布关于编写软件 E-stop 的推荐方法的 Wiki 描述。 至于硬限制问题,您可以通过“$”设置禁用硬限制,然后点动机器。之后重新启用它们。就个人而言,我认为在使用硬限制时赋予用户移动机器的权力是危险的。最好让他们手动处理问题,因为 Grbl 不可能知道那台特定机器上的情况。如果有人不断达到硬性限制,那么他们真的应该重新评估他们如何使用他们的机器。 @natevw:我听说过关于物理急停开关的反馈问题,但急停确实不应该经常发生,您可以随时连接闪光灯以指示紧急情况。让 Grbl 在检测到急停时提供反馈会很好,但实际上没有必要,特别是考虑到我们必须为其专用一个输入引脚。 |
@poelstra我不确定我是否理解您为什么不只是使用我们已经拥有的提要保持和恢复输入,为什么不制作一个 grbl 吊坠(可能像这个https://lunaticcharade.wordpress.com/2014/11/ 15/grbl-吊坠/ ) 然后将 estop 连接到主轴和电机电源?这样,在我看来,您可以做任何您想做的事情,暂停机器,恢复,停止,关闭电源更改设置? |
@poelstra: 一切都没有丢失。我仍在考虑可能的解决方案。
总的来说,我认为这不会进入 v0.9,而是进入 v1.0。让这个对话继续下去,并尝试提出一个简单优雅的解决方案,该解决方案既可以向后支持,也可以为当前的 GUI 轻松更新。 |
那时,如果我打开盒子备份并进行自定义修改,我可能应该分析一下我是否可以在紧急停止按钮被锁定时以某种方式至少切断主轴电源。(当我看到它时,看看我的步进器启用情况到底是什么……) 我想要的是能够以“软件闪光灯”的形式做到这一点。
我有点困惑你在这里说什么?我将我的 E-Stop 连接到已经为 保留的引脚 A0, |
@chamnit是的,这正是我的想法!(加上仅在它们从非活动状态变为活动状态时触发中止/重置和限制,并且只要中止/重置处于活动状态,就可以防止退出警报状态。) |
@poelstra: 有点像你的建议。:) 急停仍然连接到 Arduino 硬复位线,而不是 Grbl 的软复位。
|
作为参考,这是LinuxCNC 的 Integrator’s Manual(第 54 页)对此的说法,这是在我的机器上以这种方式接线的灵感:
|
@poelstra: 是的。首先,Grbl 不是 LinuxCNC。其次,您可以通过将急停装置连接到 Arduino 硬复位引脚来获得这种精确的行为。 |
@poelstra: 另外,如果 Grbl 没有响应状态报告实时命令并且没有通知您警报和原因,那么 GUI 可以假设 Grbl 出于某种原因禁用。就像一个E-stop。GUI 只需要声明“Check Grbl”或“Check E-stop”。 |
@chamnit是的,Grbl 不是 LinuxCNC,但是你在兼容它的很多概念方面做得非常好,而且你现在吸引了不少前 LinuxCNC 的人 我明白你关于让使用“简单”机器的用户保持简单的观点。 现在,我开始明白为什么我们对此的看法可能会有所不同。我想我认为 Grbl 不仅仅是一个步进脉冲发生器。对我来说,它也是管理机器整体状态的软件部分。我认为 Grbl GUI 更像是对该状态的“视图”。所以这将包括有关加电的知识 -> 启用步进器 -> 哎呀,EStop -> EStop 已发布 -> 重新启用步进器 -> 等等。 在我看来,将 EStop 连接到 Arduino 的重置,类似于将 EStop 连接到我的 LinuxCNC PC 的重置按钮(如果 PC 仍然有这样的东西 ;))。也就是说,如果我点击 EStop,整个 PC 会变为空白,直到我释放 EStop,之后它会慢慢启动,在其并行端口上发出一些毛刺脉冲,然后再次显示它的 GUI。 我不认为软重置应该清除“硬限制”类型的警报,即使它仅由 GUI 命令激活。原因是软复位也是“重新同步”Grbl 的“line -> ok”协议所必需的。因此,每个 GUI 都应始终发出软复位,以刷新由于先前的 GUI 通信而存在的任何未决行。我之前并没有真正想到这一点,这确实使是否应该在像这样的软重置时进入禁用模式(警报状态)成为值得商榷的。 拥有这样的东西有意义吗?
当然,只有当人们有限位开关和/或 EStop/Abort/Reset 线时,Abort 和 Disabled 状态才有意义。我们已经定义了“需要$H / $X”模式,所以我们需要另一个定义人们是否有Abort,以及它是低电平有效还是高电平有效。 关于不遗漏例如对引脚更改的硬限制:这是一个很好的观点,我确实在#542 (comment)中阅读了关于它的讨论。 我认为这种竞争条件在实践中并不是一个真正的问题,因为作为@matthijskooijman还注意到,如果人们有弹跳线,则开关将“最终”永久进入其活动状态,并且每次弹跳都会不断发生引脚更改中断,因此最终总会被拾起。 在离开 Abort(并清除硬限制)时没有意外重置 Grbl 很容易胜过让 Grbl 提前几个滴答检测到嘈杂的限制,IMO。 我希望明天有时间对代码进行一些试验,看看我的想法是否真的可行。 |
@poelstra: 我觉得你软复位的目的有点糊涂了。它的主要目的是提供一种无需重启即可将 grbl 重置为默认状态的方法。这也恰好清除了缓冲区,因此可以同步流式传输。 软重置永远不会清除硬限制警报,它只会退出任务暂停以强制用户确认问题。之后 Grbl 恢复到 ALARM 状态。这会阻止所有 g 代码命令,但允许用户发送一小组“$”命令来执行他们需要的操作,如果他们需要访问它。’$X’ 仅用于中止警报。软重置不应该释放警报。只有 ‘$X’ 和 ‘$H’ 归位。 此外,如果您在 Grbl 运动时对其进行软重置,则执行此操作时会发出警报,因为用户强制 Grbl 立即停止,并且 Grbl 无法再保证位置(可能丢失步数)。这是唯一一次重置会引起警报,而且它肯定会保持这种状态。 我还认为您忽略了用户不会总是使用软复位引脚的考虑,并且可以通过串行协议发送实时字符命令来执行它。如果你试图在开关处于活动状态的情况下强制 Grbl 不释放,那么在根本没有开关的情况下你会怎么做?您必须应对两种不同的情况,这会使事情变得不必要地复杂。 我不同意您的 PC 类比,因为您没有关闭 PC 和 Grbl GUI。这有点极端。而是根据您的类比禁用 LinuxCNC 实时内核。同样,我认为使用硬重置没有问题,因为用户已经有了处理这种情况的上电序列。 我强烈建议您在周末剩下的时间里查看 ALARM 功能以及软重置如何在源代码中与它交互。然后再回来讨论这个。我们已经在这上面浪费了太多的精力和时间。 就目前而言,我仍然认为 Grbl 有一个足够的急停解决方案,带有硬复位引脚,用于那些实际连接到物理急停并有 GUI 模拟的人。我们不能要求 GUI 突然改变 Grbl v0.9 的一切。 后来对于 Grbl v1.0,一年后,我认为我们可以提出一个令人满意的解决方案,让 GUI 更容易知道 Grbl 在紧急停止期间正在做什么。这将使他们有时间追赶和接受。但就目前而言,我认为您的建议在当前条件下行不通,尤其是当您必须处理物理 e-stop 和基于 GUI 的 e-stop 的结合以及它们如何协同工作时,同时保持它尽可能简单。 我的直觉是,Grbl 需要一个专用的急停销来处理像你这样的情况,但我们必须决定为此使用有价值的销是否真的很重要。可以稍微调整警报处理,以便为 GUI 提供更好的事件洞察力。 底线是你在哪里画线?Grbl 和 GUI 做什么?很明显,我们不同意这一点。我的总体理念是 Grbl 需要管理的越多,它就越不灵活。如果我们不能达成任何协议,你可以随时分叉并做你想做的事,就像许多其他人所做的那样。Grbl 将继续前进并保持其专注于运动控制的核心竞争力。 |
我知道软重置目前做了什么,我对不让它改变警报状态的回应是对你的评论:
我已经说过我会停止说话并开始编码,但是你说
并且实际上想出了几乎正是我想要的! 我很困惑,如果我浪费了你的时间,我很抱歉。 |
@poelstra 我和你一样看待 Grbl 和 Gui。 |
@poelstra: 我想解决这个问题,但我们必须小心行事。我不同意你的建议的确切实施和一些细节。但是,我认为有一种方法可以通过对警报处理进行一些调整来实现,而不是使用软复位。我认为我们仍然需要继续进行这种对话,但是对于一个轻松的周末来说,它变得有点紧张。我只是建议,在这一点上,退后一步。仔细考虑一下。查看/破解代码。让我们在有机会让事情陷入困境之后重新审视这个问题。就像我之前说的,我们无法更改 v0.9,但需要为 v1.0 实现一些东西。我们有时间。 |
@poelstra: 好的。我有一些时间让这一切沉入其中,并与我的机械师朋友详细讨论了这一切。
想法? |
@gerritv谢谢,会做的:) @chamnit感谢您的详细回复!这个周末我自己一直在玩代码,确实遇到了你提到的一些问题,特别是警报状态处理的实现与我脑海中形成的不同,而是从外部观察行为。不过,我真的不会称其为“疯狂” 而且我看到您已经进行了相当多的重构以使事情适应未来。
顺便说一句:暂且不谈我想要仅激活中止/复位引脚的触发。它已经这样工作了……看看硬限制代码,我认为中止/重置引脚逻辑也是如此,特别是考虑到我也在我的机器上看到了这种情况(以前从未在 LinuxCNC 上看到过) . 看来我在那个继电器电路上有一些弹跳:-/ 很抱歉上面的噪音!
我在玩代码时弹出的一些东西(注释和结构都很好,顺便说一句,感谢一百万:))
嗯,又话太多了。 |
软限制警报是否可以是一个简单的“错误:命令超出软限制”,类似于我发送不受支持或无效的命令? 谢谢,顺便说一下,我应该如何将现有的急停按钮连接到 Arduino 的硬件复位引脚而不是 A0。我正在研究用于将 Grbl 连接到我的机器的屏蔽适配器,我很高兴我在走得太远之前就意识到了这一点。 |
对于它的价值,这是对我有用的设置。我在 Mega 上运行修改后的 Grbl。我有一个常高的 E-Stop 开关,当它变低时它会将驱动芯片复位,从而切断电机的电源。我在一个备用引脚上监视相同的信号,当它变低时,我设置了关键事件警报位,就好像它是一个硬限制一样。 如果我没有备用 IO,我可能会重新使用引脚 A0。鉴于存在相同的串行命令和 Arduino 板的复位按钮,我还没有发现需要专用的硬件复位/中止线。 |
嗨桑尼, 作为自 1970 年代后期以来一直从事 CNC 工作的人! 在不需要的时候,你的时间被用来保护 Grbl,真是太可惜 您创建的所有功能都显示了 所以我说;让我们都让桑尼继续编程,不要 问候, 莲花包 发件人:Sonny Jeon [ mailto:notifications@github.com ] @poelstra https://github.com/poelstra :好的。我有一些时间让
想法? 直接回复此邮件或在 |
@chamnit我已经提交并将我的建议推送到https://github.com/poelstra/grbl/tree/wip/estop。 我已经使用 Chilipeppr 对它们进行了测试,它无需更改即可接受它们。当它激活时,它的“串行控制台小部件”上可以看到关于中止锁的反馈,但我不敢在它停用时花费更多字节来发送“中止解锁”消息。 我刚刚注意到你已经自己实现了一些,没想到这么快!谢谢。 我的实现与您的实现略有不同,因为当您没有连接中止引脚时,中止锁定选项是“透明的”,硬限制边沿触发也可以处理多个开关同时处于活动状态的情况(没什么大不了的对于硬限制,但同样的技巧可能对处理控制引脚有用)。 如果您愿意,我很乐意为您的边缘分支提供 PR。 @ashelly大概那时我们也有类似的想法。ABORT_LOCK 的作用几乎相同。 @LotusPack我实际上同意你的看法。我从来没有打算让这个线程像这样爆炸。我只是希望提供我刚刚所做的 3 次提交,希望对某人有用。以后可能还会有其他一些“琐碎的建议”,但只是作为“如果你喜欢就点击合并”的 PR,确实是为了让 Sonny 专注于重要的事情。 |
@poelstra: 谢谢。我有几分钟的时间来查看代码。
一般来说,这些变化,除了我昨晚添加的你的建议之外,是更多的补丁来创建你想要的行为。可能有更好的方法来做到这一点,它不涉及需要考虑所有这些编译时选项的 GUI。我认为将协议更改为可以捕获这些不同场景的单一标准化想法会更好。我将不得不考虑以后的版本。 |
我有点缺席讨论。 … // 进一步初始化 if (ResetSrc & PORF) 这允许测试它是 SW-Reset (WDT)、Hw-Reset、powerup 还是 BOD( 格林威治标准时间 2015 年 2 月 25 日 3:50,Sonny Jeon通知@github.com :
|
@cri-s: 有趣的。你知道这个复位源寄存器是否是所有 MCU 的标准功能吗?如果是这样,这将是让 Grbl 知道正确处理它们的好方法。 |
@chamnit看来这是一个标准的 atmega 功能。一个快速的 grep 显示几乎每个 avr-libc 支持的处理器都至少有一个 PORF,除了这些:
请注意,我排除了包含其他 io*.h 文件的 io*.h 文件,因为 |
@matthijskooijman: 谢谢,但我间接的意思是如果 ARM 有它。 |
啊对。那里没有经验:-) |
是的,这是每个 MCU(微控制器)都有的功能。 刚刚用STM32F103C8测试过。 上电后设置 PINRSTF 和 PORSTF。 测试代码: // 重置测试: if (RCC->CSR & RCC_CSR_PINRSTF) // 上电:软复位 2015-02-25 14:57 GMT,Matthijs Kooijman notifications@github.com:
|
这是一个古老的讨论,但我有一个问题。 如何使用继电器,以便在按下 EStop 时,其中一个限位开关关闭?这将停止 GRBL 并通知 GUI 警报。 警报的文本将不正确(“警报:硬限制”),但除此之外,不是所有期望的行为都在那里吗? |
波尔斯特拉 评论 on 19 Feb 2015
在我的机器上,我有一个带有继电器和物理按钮的电路来禁用我的步进驱动器。该电路的状态也被馈送到我的控制器上的输入引脚(以前是 LinuxCNC,现在是 Grbl)。在 LinuxCNC 上,该引脚为 EStop,在 Grbl 上,它被重置/中止。
当 EStop 处于活动状态时,LinuxCNC 知道它不能做任何事情(并且应该中止任何挂起的操作)。
如果 EStop 引脚变为非活动状态,它仍然不会做任何事情,直到我按下循环启动按钮(Axis 中的绿色按钮)。只要 EStop 处于活动状态,此按钮就会被禁用。
我真的很想在 Grbl 中也有这个功能,我认为#597(评论)中提出的 Suspended 状态为其添加了基础。
一些额外的(小)事情是必要的(如果人们同意,我会很乐意自己实现):
这样,如果 EStop(连接到复位/中止)在运行时变为活动状态,则 Grbl 将复位,从而重新进入挂起状态。循环启动被阻止,直到 EStop 再次被清除。正是我拥有的工作流程,并且非常喜欢:)
请让我知道你的想法!