注释
我也在寻找一种方法来获取有关当前执行状态的反馈。我在想一个非常简单的解决方案是让 grbl 在完成一个 gcode 行后,向主机发送一个表示它已经完成一行的单个字符。这最大限度地减少了 AVR 在通信例程中花费的时间,根据 gcode,这些时间可能会变得不必要地大。 对于由大量快速完成的命令组成的 gcode,包含一个除数设置可能会很有用,该设置会将“行完成”传输的频率降低到总数的一部分(即,发送“行完成”指示符每 10 个 gcode 行一次)。 |
快速 g 代码的问题现在应该在边缘分支中解决,因为传输现在是中断驱动的,并且不会停止 g 代码处理。 至于对当前执行命令的反馈,由于 g 代码被处理成可能对应于或不对应于特定 g 代码行的执行块,因此有点复杂。但我看到图形客户端软件对此的需求。也许每个执行块都可以用行号标记,并且每次启动新块时客户端都会收到有关此行号的通知。有时客户端软件上的“当前命令”指示器会跳过一两行,但这可能不是问题。如果一个很好的客户出现,一个实现者表明需要这个,我会考虑实现它。 |
我目前正在使用带有文件和工具路径 客户端的目的是允许使用功能更全面的 gcode。 2011 年 6 月 5 日星期日下午 3:16,simen <
|
极好的。我期待看到它!因此,如果“当前执行块”反馈机制可用,您会使用它吗? |
确实。我很好奇什么样的命令被阻止在一起。如果我 2011 年 6 月 6 日星期一下午 12:49,simen <
|
哦,这很简单:任何导致工具物理运动的线都是执行块。其余的只是在解析器中作为状态处理或导致同步操作。所以这: g0 x10 f100 是三个执行块。我建议希望获得关于正在执行的行的反馈的客户在他们的输入中提供行号给 grbl。这由 g 代码标准支持,然后 grbl 可以在每次执行编号的行时发出一点通知。这避免了任何无关的配置设置。 唉,我刚刚发现 TurboCNC 不是开源的——所以你的客户永远不可能是开源的?:-/ 无论如何,我将重新打开这张票并添加作为待办事项 |
好的,该阻塞将很容易处理。 TurboCNC 代码就是我所说的“可用资源”,因为您 我的应用程序当前在“引擎”配置中使用它,因此我可以 2011 年 6 月 6 日星期一下午 1:08,simen <
|
嗨,使用 Nx 作为行号作为 grbl 的输入,并在从 grbl 处理后使用行号响应对我来说似乎是一个很好的解决方案。将输入和输出与之匹配非常简单。 |
是的,这对我来说是理想的。我的 grbl 输出模块仅在 2011 年 6 月 7 日星期二凌晨 2:23,urbanlink <
|
我来回应要求查询当前状态的命令的评论。 具体来说,我希望有一个简单地返回“忙碌”或“完成”状态的命令,以及一个返回轴当前位置的命令。能够查询电机位置与紧急停止命令相结合以允许恢复和恢复尤为重要。 |
我会优先考虑这一点,但它需要一些设计考虑来保持简单,所以请不要屏住呼吸。 |
出于我的目的,我只需要在缓冲区为空时提供反馈,因为对于我的应用程序,我一次只发送几个命令,然后等待它们完成,所以我在缓冲区是空的。我是 git 新手,所以我还没有弄清楚如何检查更改。(或让评论格式工作) 斯坦
|
谢谢。这是一件好事。当我添加状态功能时,我会包括这个。 |
刚刚向我的 fork 提交了一个经过测试的版本,它通过在单独的行上打印“@line_number”来报告与当前正在处理的块相关联的行号(如果给定而不是 0)。 |
我也期待 N 响应块何时完成。如果有一种方法可以询问 Grbl 当前关于位置的想法,那也很好。就像如果我可以发送 $P 并且 Grbl 会回显 3.422,235.3,23.103 或其他很棒的东西。这对于通过长 gcode 行查看我的机器位置估计对进展的效果非常有用。有一种方法可以确定我的程序和 Grbl 的立场是一致的,这一点很重要。 你认为每隔一两秒轮询一次这样的事情会不会太多?我不清楚输出和列车对串行通信的敏感程度。我想一旦我把我的测试 arduino 连接起来并计算输出脉冲,我就可以自己运行一些测试。 您对与 Grbl 一起使用的最佳波特率有任何直觉吗?(就不会在输出中引起打嗝而言)现在我只是在默认的 9600 下运行,但最终速度更快很重要,我想知道您是否有任何建议来尝试更快的标准速度? |
现在发生了很多事情,很抱歉这些天我在这里的回复很少。我认为每秒钟左右的轮询状态对于 grbl 来说是没有问题的。实际上,如果可以将 grbl 设置为定期报告状态,而不必浪费循环传输 poll 命令,那可能会更好。但我必须对此进行测试才能确定。 说到波特率,我不知道。FTDI 驱动程序和 OS X 之间有一些东西使我无法使用任何其他速率,所以我坚持使用它。 |
是的,无论如何我必须在流式传输命令时处于特殊模式,因此能够设置广播位置更新的模式就可以了。哦,你被困在 9600 真是太可惜了。我想这是一个很好的理由来尝试确保它在 9600 上运行良好。我想我只会担心更快的连接速度,如果这成为问题的话。我想如果一个人在处理 gcode 的微小步骤时非常快速地流下来,它可能已经是一个瓶颈,但我暂时不会担心这个问题。 |
这是我对问题#15的回应的后续行动,关于实时反馈和命令(即状态查询、重置/暂停、启用/禁用块删除或加速规划器、速度限制等) 我开始认为解决这个问题的方法是重写睡眠模式的处理方式,并让串行协议管理所有执行。代码中有很多地方会强制 Arduino 进入睡眠模式,主要是在规划器中。如果每个有效的 gcode 块都被迫等待缓冲区可用性在串行协议中处理,而不是在规划器中。这允许串行协议继续运行,接受外部命令并立即处理它们,无论缓冲区有多满。任何实时命令都可能有近乎立即的响应,因为 gcode 块应该在几毫秒内处理。 这种方法不应该影响 grbl 的行为方式,除了 G02/03 弧。目前,arc 会生成大量行并将它们直接馈送到规划器和缓冲区,绕过串行协议。为此,arc 也需要重新编写。但这并不像看起来那么糟糕。弧线的好处是它们具有已知的长度、半径和速度以及已知的入口和出口方向。意思是,您可以事先计算向心加速度。换句话说,您可以通过 v_arc = sqrt(a_max * R_arc) 计算机器可以处理的最快进给率。因此,通过一些重新排列和更多的数学运算,您应该能够将弧线视为规划器中的一条线。 |
Simen,我一直在 OSX 上以 115,200 的速度运行 FTDI,没有任何问题(除了 OMG-FTDI-crashed-my-entire-system-when-I-unplugged-the-USB-port-or-powered-it -down-while-still-connected 问题。)如果您愿意,我们可以交换笔记。- 奥尔登 |
Arduino Uno 似乎没有使用 FTDI 驱动程序。它显示为 USB 调制解调器。您还可以通过使用用户模式 libFTDI 驱动程序来避免“OMG—”问题,尽管我听说它们还有其他问题 斯坦 2011 年 8 月 20 日晚上 9:07,aldenhart 写道:
|
有趣的。感谢您的提醒。 |
嗨 – 我试图实现 stwspoon 的编辑,但显然没有在正确的地方得到声明。例如,如果我画一个连续的圆圈,我希望最后会看到一个“完成”(或您喜欢的任何文本)。我相信,在队列被填满之后,我会持续“完成”。我知道有一个排队 M 命令的请求,但似乎这个功能正确完成,将允许 GUI/上传器知道运动何时完成。对此有任何 eta,或者有人可以正常工作吗?谢谢! |
我做了以下模组。我的应用程序不使用圆圈,所以我不会看到这个。此外,我必须添加一个更改,队列永远不会填满,因为请求的移动长度为零并且得到优化。 斯坦 diff ./planner.c /Users/stanw/Documents/Compass Scanner/Software/simen-grbl-74576a8/planner.c < };
diff ./stepper.c /Users/stanw/Documents/Compass Scanner/Software/simen-grbl-74576a8/stepper.c 2011 年 9 月 27 日上午 9:36,ghartc 写道:
|
我不确定您要做什么,但是圆圈会在 我目前正在调查状态问题。尝试将 2011 年 9 月 27 日星期二下午 2:44,stwspoon <
|
万德普路伊姆 评论 on 9 Mar 2011
您好,此时您从 grbl 获得的反馈是关于命令缓冲区的。
对于用户反馈,当前正在执行的命令也很有帮助。我认为这在当前设置中是不可能的。我已经尝试过计算“确定”响应的数量,但这并没有真正奏效。
你对此有何看法?这是我可以在当前设置中实现的东西,你会考虑它还是它超出了 grbl 的核心?