注释
是的,很容易到达,即使在恐慌中也很难错过。 速度罐已经在 wiki 的愿望清单上了。但正如您所说:这是更高级的挑战之一。 |
西门,我真的很喜欢那个按钮!:) 当我开始编写运行时命令时,我已经考虑过如何实现紧急停止。急停通常应始终采用硬件接线,并设计为切断电源或立即禁用所有功能,直到释放急停。我喜欢将限位开关销与限位销结合使用的想法,因为它已经存在,而且它会承担双重责任。如果我们为 grbl 中止使用一个 pin,急停也应该与此相关联。我们可能需要对中止代码进行一些小的重新安排,以防止中止在参与时循环。 所以我想问题是:我们如何做限位开关?并且会为想要添加自己漂亮的红色大按钮的用户提供简单的接线图吗?也,如果限位开关禁用了电机,我们将如何进行归位循环,更不用说移动轴以便它们通过 grbl 命令脱离限位开关,而不是物理移动它们? 可变进给率会很麻烦,尤其是涉及到规划器时。可能需要大量的独创性和重构才能使某些东西实时工作。最简单的做法是强制暂停进给,重新计划新的进给率,然后继续。不是实时的,而是一个平庸的解决方案。 |
在研究这个主题时,我发现限位开关和归位开关是两种不同的东西,它们的行为完全不同,经常被混为一谈。例如,在某些情况下(尤其是在大型机器上)归位开关在行程的中间,而限制在末端。因此,如果您为这两种功能共享开关,了解开关何时用于归位以及何时用作限位开关会很有用。此外,如果您想将它们用作限位开关,重要的是能够支持常闭开关(以及 NO 开关),因为通常限位在故障安全回路中串联连接。 在做 TinyG 时,我的解决方案只是在收到 G28 或 G30 时将限位开关置于归位模式。这改变了中断采取的分支。每个轴我都有独立的开关,但我不确定这是必要的,除非你想同时在多个轴上进行归位。欢迎任何见解。 |
硬连线以中断步进驱动器的启用引脚的按钮是唯一安全的解决方案。Alden 曾经提到过将非硬连线的东西称为“紧急停止”可能涉及的责任。但是那时限位开关是个问题。 |
我同意。对于任何被称为 Estop 的东西,它必须完全在固件之外工作。它唯一的工作就是尽可能快地停止机器,即使控制器已经变得 bat-sh*t-crazy,它也必须工作。Estop 应该通过某种继电器以电气方式关闭电机,甚至可以对系统的某些部分应用机械制动。固件还可以执行中止(由外部 Estop 触发),尽管到那时它真的无关紧要,因为电机应该断开连接。 我在这里写了一些:http |
我同意奥尔登关于硬件急停的观点。那里有一个责任问题。 在传统的 CNC 上,有一个“重置”按钮可以像您描述的 Jens 那样立即停止。它的目的是在不关闭电源的情况下停止和重置所有内容,这与急停不同。我放入 v0.8a 中的系统中止执行完全相同的操作。它停止电机,强制 grbl 退出回到main.c循环,然后重新初始化系统(不重置机器位置)。 所以我们可以做的是将系统中止命令固定下来(也将其保留为软件运行时命令),并将其与急停按钮一起使用以告诉 grbl 重置。主要是因为grbl是通过电脑USB口供电,不能快速断电,也不能轻易断电。然后,我们所要做的就是修改主循环,使其在释放限制/急停引脚之前不完成重新初始化 grbl。 |
我希望硬件按钮重置调用相同的例程,运行时命令也是如此。这就像一个穷人的急停按钮,我认为对于许多 DIY 爱好者来说已经足够了。 在按下按钮(并可能释放)后进入的任何流式 gcode 都必须被忽略,直到发出干净开始(循环开始?)的信号。 你怎么认为? |
不是真正的穷人急停。重置按钮是 CNC 机器上存在的真实功能。要实现真正的急停,用户只需添加一个电路即可关闭其他一切。 有一些细节需要解决。一是如何管理各种类型的重置,并确定要阻止的内容以及重置后的时间。现在,在重置/中止时,grbl 将刷新串行和规划器缓冲区,但这不会在刷新后阻止任何新的传入串行数据。那么你是否阻止了所有串行数据,从而切断了与 grbl 的所有通信?这与限位开关有什么关系?限位开关也应该强制 grbl 重置吗?…. 这开始让我头晕目眩。 |
为了阻止头脑旋转如何打开一个 wiki 页面,我们在其中记录各种情况下所需的行为。有些人可能会称这些要求:) |
好的,最后一个微调器。adlen 发表评论时我正在打字。 任何触发直接步进器禁用的事情都应该在将机器位置设置为零之后进行,因为我们可能已经丢失了步数,因此无论如何都不知道我们在哪里。我认为这同样适用于复位和限位开关。 之后,只有在收到特殊的 gcode 命令后才能恢复 gcode 的处理(我使用的是 M30)。这迫使用户明确承认发生了一些特殊的事情。运行时命令不会执行,因为某些接口程序可能会将命令插入仍在运行的流的中间。相反,gcode 命令将在所有“丢失命令”的末尾正确排队。 |
Jens:人不会一直失步。如果用户在重置之前发出进给保持,机器位置仍然是正确的。当您意识到 g 代码程序有错误并且您不想重新找到或已经加工掉您的零件零位置时,这尤其有用。您应该能够返回到第零部分,修复您的程序,然后重新启动它。我想我们只能在机器在重置之前移动或碰到限位开关时重置机器位置,否则在我们知道正确的情况下保留它。 此外,以非标准方式使用 M30 可能不是一个好主意。当磁带仍在使用并在节目结束时倒带时,它基本上是一个遗留节目结束。在今天的 CNC 上,这只会让您回到程序的开始,这不适用于 grbl,因为我们流式传输所有内容。我首先想到的是实现一个需要“y\n”响应的重置字符串,以确认用户了解位置可能会丢失并且所有串行流应该停止。我认为这比帮助更令人困惑,所以我没有这样做。 另一方面,我们是否应该让用户自己处理所有这些事情?我的意思是,很容易得意忘形,不断添加和添加可能需要或不需要的东西。在这一点上,它开始偏离 Simen 最初的愿景,即提供一个非常简单、便携、可破解的 CNC 软件,我是坚定的支持者。我真的很想提出一个遵循这一愿景的简单好用的解决方案,即使它花费的时间比它应该的要长。我将考虑一下这个问题,看看是否有一些我们可以做的简单的事情可以容纳每个人和 grbl。 Alden:启动需求列表的好主意。以这种方式查看和理解一切肯定会更容易。你要开始还是我开始? |
今天早上我想到了一个可能的解决方案:
大家怎么看? |
有趣的想法。我不确定你是否需要标志,如果它们是互斥的,它可能只是一个状态变量枚举——更容易处理。我一直在使用以下状态枚举:“reset”、“run”、“stop”、“hold”和“homing”。“resume”也被用作在保持后恢复速度的瞬态。可以加上“慢跑”。 我很乐意为开始和停止创建一个需求页面,但我希望你们也能进行大量编辑!我可能只是移植了很多我在 TinyG wiki 上的内容作为修改的起点。 |
嘿伙计们,我很高兴听到 estop/limit 支持即将到来。在过去的 6 个月里,我一直心烦意乱,但我仍然对 grbl 的未来和方向很感兴趣,我希望我能在某个时候做出贡献。我只是想扔掉我的红色蘑菇 estop 按钮,它有一个 NO 和一个 NC 侧(这些蘑菇按钮的一个共同特征)——http: //www.amazon.com/gp/product/B004U4911Q/ref= oh_o06_s01_i00_details 这个想法是 NC 为步进器供电,NO 侧将信号引脚接地到控制器以通知它急停。按下按钮会切断步进电源并将 arduino 的引脚接地。这显然会丢失步骤,但确实实现了紧急停止的“硬连线”方式。我想为主轴功率增加一个极点会更好,但我计划在停止停止时使用继电器来中断它。 |
gregrebholz:感谢您提供的信息!很高兴知道。 在与我的机械师朋友迈克交谈并回顾了 EMC2 和 Mach3 的作用后,我们绝对应该在紧急停止和触及限位开关(称为硬限位)后强制执行归位循环。所有定位都应重置并丢失。Grbl 将保持冻结状态,直到限制/急停销被释放,然后它将返回到初始化提示。我认为,如果我们让用户处理限位开关的释放方式(通过手动控制点动或其他方式),这将是最不容易混淆和最容易实现的。我认为这应该相对容易做到。 那么,这就留下了一个问题,如果使用限位开关,我们现在如何处理归位周期?我们是否使归巢周期完全独立于系统的其余部分并让它做它的事情? |
我认为您将它们视为完全独立的操作,只是恰好使用相同的开关(或不使用)。如果机器共享开关(大多数情况下会这样),那么当发布 G28 或 G30 时,这些开关将成为归位开关。它们保持该模式直到归位操作完成,然后它们再次恢复到限制状态。 |
我同意奥尔登。限位开关中断应区分是回原点操作有意触发还是意外触发。 在归位模式下,运动停止,并通知归位功能清除开关并将相应的轴位置设置为零。在硬限制模式下,行为与急停相同。尽管我仍然想要自动清除硬限制违规的选项。 顺便说一句:与现在的实现方式相反,归位功能应该使用普通的(很长的)缓冲移动来驱动机器进入极限。这样,归位可以以最大速度运行。 |
将归位保持为单独的操作听起来是个好主意。我认为将其放入规划器/缓冲系统中确实会使事情复杂化。这也将帮助人们根据需要编写自己的归位例程,因为我们不能真正说一种归位方式对每台不同的机器都是正确的。 我在想,因为归位非常像慢跑,因为我们一次只移动一个轴。我们拥有在设置中计算我们自己的加速度限制和急流进给率所需的所有信息。我们可以保证整个过程中的最大速度。将一些慢跑和归位的运动代码组合在一起可能是个好主意。 Jens:对于自动清除硬限制违规,我想不出一个真正简单的方法来处理硬限制跳闸。我想做这样的事情,但可能更容易不让用户点击 grbl 重置/中止并且只允许归位循环(重新配置限位开关)移动轴。 其次,假设我们有两个要使用的引脚:grbl abort/reset(与运行时命令相同)和 limit/e-stop 引脚。问题是当遇到急停时,这些引脚中的每一个如何协同工作,达到硬限制,在归位周期期间,最重要的是,在归位周期和急停期间。我们是否应该强制要求始终将急停连接到 limit 和 grbl abort 引脚? |
我一直在将归巢整合到规划器中,因为我认为重要的是要确保过程中不会丢失任何步骤,而且我需要减速才能正常工作。我一直在向规划器发出增量模式 (G91) 命令来执行此操作。这说明了更通用的“固定循环”功能,用于执行归位、探测和可能的钻孔循环,以及处理点动的方法。我一直在使用归位周期作为粗略处理的方法。 |
我不同意。我曾尝试将归位和慢跑集成到规划器和步进器模块中,但它使步进器模块变得臃肿且笨拙。 归位和慢跑都是特殊的运动情况,它们不需要使用规划器。(通过切换开/关或旋转拨盘进行慢跑,而不是 g01 可以执行的明确移动。)探测也可以这样说。最重要的是,对于归位和探测,您必须在达到极限时立即突然停止。发生这种情况时,您会丢失步骤。对于归位来说,这不是什么大问题,因为无论如何你都在定位零,但探测可能需要一些特殊处理以避免丢失步骤。 对于钻孔等其他固定循环,使用规划器很好,因为它都是计划运动的一部分。 |
好吧,好吧,想出去走走——“外面”到底在哪里? 这就是为什么以及如何使用规划器进行归巢。我很容易在这一点上错了,但这是逻辑。如果您在初始高速搜索时卡在开关上时丢失步骤可能并不重要,但我确实认为您想要一个可重复的锁存阶段,以便尽可能地控制停止 – 所以我喜欢干净的减速在这一点上。可能是为了实现这一点,您需要一个与正常操作不同且更快的加速(减速)配置文件来归位,但我认为您无论如何都需要一个可重复的配置文件。 至于膨胀规划器 – 我相信你所要做的就是利用已经存在的东西,而不是添加任何新东西。你发出一个动作,然后在按下开关时强制一个进给(尽管是快速减速进给)。然后你重置坐标,清除规划器,然后重新开始。规划器本身不需要更改。 你认为这有道理吗——或者它是否矫枉过正或者可能是错误的逻辑? |
我对“want to step outside”这句话的理解是出去吵架或呼吸新鲜空气。我猜不是后者。让我们在这里文明一点。我们都在这里自愿利用我们的空闲时间来从事这个项目。 至于讨论,有很多方法可以做到这一点。你的方法可能是正确的。分离一切的想法也是如此。另一个是完全使用计划器。相反,让归位、慢跑和探测例程将显式块写入缓冲区是非常短的段。然后就可以访问和使用步进模块,而对效率和可读性的更改和命中最少。关闭加速计划时,与 v0.6 类似。 哪个适合 grbl 及其对简单性和可黑客性的关注?很难说,直到我可以审查每个人需要什么。 |
这只是我蹩脚的幽默尝试。抱歉,如果它以任何方式被误导。我很感激我们都在业余时间做这件事,我真的很享受来来回回。 我同意,除非您尝试一些事情,否则很难知道什么是正确的实施方法。如果您可以利用规划器,这可能是最简单的。如果它使计划者复杂化,那么它可能不值得。 |
没问题。无论如何,讽刺并不能很好地通过文本翻译。 Jens:您说过您将考虑将限制/急停引脚移植到 grbl v0.8 中。优惠还有吗?我想看看你是如何配置引脚并让它们触发的。我们或许可以将其直接集成到 v0.8 中,暂时停止,稍后再处理其他细节。不过,它需要很好地适应当前的归巢周期。 |
你好。我有一些建议,但我不知道这是否是提出/说出它们的正确“地点”。首先,介绍一下我的机器。我正在改装一台小型 CNC 路由器,该路由器开始使用 DOS 控制器和专有控制器。从那以后,我将控制箱更改为一些现成的步进驱动器,并使用 Mach3 作为控件。这很好用,但现在越来越难找到可以运行 Mach3 并具有并行端口的计算机/笔记本电脑。所以,我正在尝试使用 grbl 作为并行端口的替代品。我想用我的 Arduino 控制一个主轴、3 个归位开关和 3 个运动轴。 就像 Simon 最初计划的没有很多花哨功能的简单 G 代码解释器一样,我希望 grbl 从 Vectric 的 Aspire 获取输出,而无需我过多干预。我确实看到用户干预的地方是将工具头放到切割工作位置的开始位置。我正在努力让 grbl 中现有的归位例程在我的机器上运行。它们开始工作了,但我认为我们需要实现去抖动功能,而且我不确定现在编写这些例程的最佳方式。 阅读此线程后,现在有一些观察。大多数 grbl 将成为控制器的爱好机器都不是大型机器。我不认为 grbl 需要一个特殊的 E-stop 来关闭步进驱动器。如果您处于逃跑状态,我见过的大多数 Arduino 开发板都有一个 RESET 开关,可以成为非常有效的急停按钮。此外,步进电机系统不易失控。DC Servo 系统是,但 grbl 并不是驱动此类系统的真正候选者,因为它不具备高脉冲率。 我也不知道有多少小型 3 轴机器实际上具有可反转主轴。我想这些机器中的大多数都将某种类型的 Dremel 或 A/C 路由器作为主轴运行,并且这些电机只会单向运行。 其次,我看到了另一个关于使用手动控制器和需要额外的引脚来实现慢跑的“问题”。我在这里可能是错的,但为什么不创建一个特殊的 G 代码,在用户选择的方向上启动用户可选择的轴,直到串行端口接收到任何数据。说“G100 X25 F50” 此命令将启动 X 轴以 F50 的命令进给率沿正方向移动,直到任何数据进入串行端口。如果在 X=25 时串口没有接收到数据,则机器自行停止。这也适用于 -25,沿递减方向移动轴,直到在串行端口上接收到数据或获取位置。这将在软件中实现 JOG 功能,并使您仍然可以从终端程序或专用的 G 代码滴灌程序轻松设置/慢跑。好处是,如果你做了一个专用的控制程序,你可以在 KEYDOWN 命令上发出点动命令,并在相应的 KEYUP 命令上中断运动。 最后,(目前)我希望看到 XON/XOFF 的实现,因为我可以使用任何终端程序来滴灌控制器 G 代码。顺便说一句,看到串行缓冲区大小正在减小,我并不是很兴奋。我的路由器运行速度约为 1500 毫米/米,我担心数据不足。 布鲁斯 |
您好,感谢您的投入。 |
我认为立即关闭所有运动的大红色按钮是下一个版本的必需品。(您是否曾经看到一个错误的程序损坏了您的切割器,而您却因为无法触及电源开关而无法做出反应?)。该按钮可以与限位开关串联,这样限位开关也会触发立即停止。不确定,但我认为一些 DIY 机器在导螺杆过度扭曲时会损坏。限位开关/急停输入引脚应配置为中断。它已经在我的 jgeisler0303 分支中。如果大家都同意,我会尽快将它移植到 v0.8。