注释
我也在寻找一种方法来获得有关当前执行状态的反馈。我在想一个非常简单的解决方案是让 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 <
|
我来回应要求查询当前状态的命令的评论。 具体来说,我希望有一个命令可以简单地返回“忙碌”或“完成”状态,以及一个可以返回轴当前位置的命令。能够查询电机位置与紧急停止命令相结合以允许恢复和恢复尤为重要。 |
我会优先考虑这个问题,但是为了保持简单需要一些设计考虑,所以请不要屏住呼吸。 |
出于我的目的,我只需要缓冲区为空时的反馈,因为对于我的应用程序,我一次只发送几个命令,然后等待它们完成,所以我添加了一个“print ‘Done\n’”语句缓冲区是空的。我是 git 的新手,所以我还不知道如何签入更改。(或让评论格式起作用) 斯坦
|
谢谢。这是一件好事。我会在添加状态功能时包括它。 |
刚刚向我的叉子提交了一个测试版本,它通过在单独的行上打印“@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进入休眠模式,主要是在planner中。如果每个有效的 gcode 块都被迫等待缓冲区可用性在串行协议中进行处理,而不是在规划器中。这允许串行协议继续运行,接受外部命令并立即处理它们,无论缓冲区有多满。任何实时命令都可能有近乎即时的响应,因为 gcode 块应该在几毫秒内处理。 这种方法不应该影响 grbl 的行为,除了 G02/03 弧。目前,arcs 生成大量线并将它们直接馈送到规划器和缓冲区,绕过串行协议。为此,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—”问题,尽管我听说他们还有其他问题:-(我仍然以 9600 运行,因为这对我的应用程序来说很好。 斯坦 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 <
|
您好,目前您从 grbl 获得的反馈是关于命令缓冲区的。
对于用户反馈,当前正在执行的命令也很有帮助。我不认为这在当前设置中是可能的。我已经尝试过计算“ok”响应的数量,但这并没有真正起作用。
你对此有何看法?这是我可以在当前设置中实现的东西,你会考虑它还是它超出了 grbl 的核心?