注释
很乐意测试它。有构建发布了吗? |
我正在尝试在 Arduino IDE 中编译最新的开发版本 (0.9e),但出现了 TIMER0_OVF_vect 的多重定义错误。由 Arduino wiring.c 文件和 grbl 的 stepper.c 文件使用 wiring.c 位于此处(在 Mac 上):/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/wiring.c |
@Mgilbride: 是的。我刚刚在 grbl-builds 仓库中上传了一个测试固件。这是一个链接。右键另存为。请注意,您的设置将被覆盖,因为它有一个新的设置结构。因此,请确保在闪光之前将它们打印出来。 @Scott216: 我不直接通过 Arduino IDE 编译,所以我无法告诉你发生了什么。很可能它在编译时将所有 Arduino 库绑定到其中。请使用 Wiki 中列出的方法。我使用 Mac 方法,它仍然使用 Arduino IDE 的编译器,但通过命令行,因为它没有添加所有额外的东西。 |
我更习惯使用 Arduino IDE。我可以对 TIMER0_OVF_vect 名称进行简单更改还是可以避免多重定义?我什至无法弄清楚它在哪里被定义。我只是看到 grbl 将它与 ISR() 一起使用,而 wiring.c 也是如此。 |
@mschorer: 还没有。这是列表中的下一个。我一直在仔细考虑,并一直在考虑使用“%”程序起始字符作为保持循环启用直到程序结束或检测到另一个“%”的方法。它会起作用,但对于新用户来说,确保“%”字符在那里并不是很明显。 顺便说一句,我很乐意尝试将您的 i2c 内容包含在 v1.0 中。我认为这对于将来释放更多引脚是必要的(比如在 Arduino Zero 上)。我认为我们可以使用 i2c 作为所有运行时命令甚至主轴/冷却液控制输出的接口。所有实时的东西都将保留在板上,例如步进针和可能的限制针。 |
@chamnit:我觉得我们应该看看整体状态管理。还记得前一段时间在问题中发布的状态图 alden(指向包含 a 的 pdf 的链接)吗? 在我(简化的)记忆中——混合了我自己的想法——它有两个有限状态机:
他们有一个“接触点”,一个新的 gcode 命令被解析并准备就绪,机器可以将下一个命令放入规划器缓冲区。 在当前代码中,状态是全局的,状态管理无处不在,状态是按位定义的(它们是标志吗?),……我发现很难获得和调试。 不要误会我的意思,我不是在抱怨,我也没有仔细考虑等等,但是在做我的插件时,我觉得状态管理应该更容易和更明显。 关于 i2c:我想是时候让代码准备好共享了。它只不过是一个似乎最有效的 hack … |
@mschorer:我看过奥尔登的状态图。在大多数情况下,Grbl 一直这样做,即使它不是很清楚。有一些我不同意的小事,即它是满眼的,但它是一个好的开始。 很久以前,我看着制作一个状态机,惊讶地发现在错误的地方设置的东西很少。大多数状态都由实时命令协议或 Grbl 内部命令设置。它通常由一组标志控制,以向主程序指示需要更改和执行的内容。标志的目的是允许主程序在准备就绪时运行该命令,并充当中断和主程序之间的接口,因为它们需要可变变量才能相互通信。这使挥发物保持在绝对最低限度。 我认为它令人困惑的原因是中断过程和主程序的重叠。当主程序需要运行实时命令模块来执行事情、改变状态并保持步进缓冲区满时,重叠会导致代码中出现一些难以理解的断点。这些有时很难区分什么是什么。我认为,如果我努力让事情变得更清楚,那么解决这个问题将大有帮助。 解决这一切的第一件事是使 g 代码解析器模块化,这是本次更新的重点。如果我愿意,我现在可以将每个部分从解析、错误检查和执行分解为不同的过程。通过这样做,我可以使执行的序列化清晰并确定性地显示实时命令协议何时需要运行。 主轴控制暂停的状态机问题并不完全是状态机问题。这是 Grbl 如何同步流式命令的问题。每当某些进程需要按时运行某些东西时,我们就会清空计划器缓冲区,例如发出主轴/冷却液命令。因为规划器缓冲区是空的,所以状态机认为循环已经完成,但实际上并没有。下一个流式命令需要继续并在它进来时执行。我认为为此我们需要做的就是区分我们何时处于“程序流模式”与“手动用户输入”。这应该由 cycle-auto start 设置来处理,但我认为使用 ‘%’ 字符来区分它会更好。 |
我正在尝试在 Arduino IDE 中编译 0.9e,如果我的 .ino 文件只是 int main()
{ startGrbl(); }
其中 startGrbl() 是 main.c 中我重命名为 startGrbl 的原始 main() 函数。 |
您好, 干得好! 谢蒂尔 |
@SixthGenie:感谢您测试和报告它的工作原理。您能否概述需要更改的内容以使其与 Atmel Studio 兼容并转换为 cpp?当 Arduino Zero 出现时(或在 Due 上工作),我可能会搬到 Atmel Studio。 |
@chamnit不多,真的。除了将文件重命名为 .cpp 之外,由于本地定义的变量,我不得不将 gcode 文件(第 619 行)中的一个案例更改为用大括号括起来。至于 AtmelStudio,我认为唯一特别的是将 F_CPU 定义为 16000000。我没有使用任何主轴/冷却液控制的东西,所以我不能对此发表评论…… 因为我有一块 Mega2560 和一块中国的 TB6550 板;步进器启用引脚更改为支持 3 个引脚,我添加了一些 M 代码来读取我的温度。传感器和控制 4 继电器模块,因为 2560 上有可用的引脚。 |
我注意到 .9c 中复杂 gcode 的锁定是这个版本应该有助于阻止它吗? |
还为此主要修改了哪些文件。我将尝试用它来迁移我现有的代码。 |
@SixthGenie: 谢谢(你的)信息。我会把这些东西牢记在心。 @timryder: 不知道你所说的锁定是什么意思。唯一已知的错误是 Grbl 在需要缓冲区同步(暂停和冷却剂/主轴控制)的命令时暂停。这个还在制作中。您还可以通过提交历史检查更改的内容。 |
我正在尝试让 0.9e 运行,但我遇到了问题。我将 hex 文件闪存到我的 uno 并与 UGS 连接。但是 UNO 没有响应我从 UGS 输入的命令。我输入 $ 然后 $$,但它没有在控制台中返回任何内容。我重新启动了 UNO,但这没有帮助。 |
我发现了问题。我需要将 UGS 中的波特率从 9600 更改为 115200 |
step 端口反转掩码和 dir 端口反转掩码有什么区别?我将 step port invert mask 设置为我在 0.8c (11111100) 中的相同值。默认的 dir port invert mask 是 11000000。 哪个反转限制引脚设置与 0.8c 相同? |
我的 Uno 上装了 0.9e。我在我的 Win 7 笔记本电脑上使用 UGS。当我点击主页按钮时,所有 3 个轴都正常并后退 1 毫米。但是 UGS 将其作为机器位置: 我的起始位置是机器的左前方($26=96),所以它应该给我 |
我使用的是 UGS 1.07,当我慢跑时,grbl 经常忽略我的慢跑命令。UGS 将发送类似:G91 G0 Y2。并且 grbl 将响应正常,但机器不会移动。这种情况经常发生。我必须进行软重置才能使其再次慢跑。 |
@Scott216:感谢您的报告,但您遇到的许多问题都在已关闭或未解决的问题线程中。在发送大量问题之前,请先检查这些。我们都在空闲时间维护 Grbl。 另外,请记住这是开发分支。会有错误和已知的现有错误,我只是没有时间去解决或目前正在处理这些错误。通常,我建议更熟悉 Grbl 内部工作原理的更高级用户执行一些这些测试请求并使用开发版本。不太熟悉的用户,我建议使用 master 分支,直到开发版本被推送到 master。 为了回答您的问题,这两个反转掩码只是拆分了旧端口反转掩码。像对待旧的那样对待这些位。归位现在将根据最大轴行程将机器空间设置为所有负空间。请参阅有关解释的问题线程。您的慢跑问题是状态机问题,这是我的首要任务。当快速连续发出命令时,这个错误往往会突然出现。现在,不要那样做。同样,这更像是一个 g 代码解析器测试请求,而不是对现有和已知错误的测试。 |
这是一个奇怪的问题。如果我手动按下限位开关使其进入警报模式,然后单击软复位按钮然后单击 $x 按钮清除警报,然后单击发送 G91 G0 x-1 的 x-jog 按钮,x 轴转到-1 位置。GRBL 认为它处于绝对位置而不是相对位置。如果我第二次点击慢跑按钮,它就会正常工作。 此外,UGS 中的坐标似乎使用 grbl 0.9e 更新得更慢 这是我的设置: |
我从 shapeoko 2 hello world 文件的第 34 行开始得到“无效的 gcode ID:33”。
并非每一行都在第 34 行之后失败,但大多数都会失败。查看 report.h 文件,这似乎是一个“无效目标”错误。 grbl 安装在 Arduino UNO 上,通过通用 gcode 发送器 1.0.7 从带有 arduino 1.0.5-r2 驱动程序的 Windows 7 PC 发送 gcode |
@chamnit– 感谢您提供的信息,我会调查打开/关闭的问题。我确实注意到上次我慢跑时机器冻结(你的状态机问题)状态从空闲变为运行。也许你已经知道了。有没有一个地方列出了 0.9e 中的已知问题? |
@tenaku:我找到了 ShapeOko2 ‘hello world’ g 代码程序。我复制了这个问题。结果证明是 NIST 对无效目标的定义存在问题。EMC2 (linuxcnc) 此后将其从 (>0.002mm) 放宽到 (>0.005mm AND 0.1% radius OR >0.5mm)。我已经更新了固件版本并推送了源代码修复。测试 g 代码现在应该可以正常工作了。 |
@chamnit我下载并重新编译了 dev 分支,在同一行 gcode 上仍然出现错误 33。我似乎没有像以前那样在文件处理过程中遇到那么多错误,但仍然有很多。 |
@tenaku: 诡异的。我能够毫无问题地运行 shapeokos 网站上的整个程序。你对剧本有什么改动吗?你有你正在运行的程序的链接吗?同时发送您的设置。 |
@tenaku: 没关系,我找到了错误的根源。与该计算的数学有关。失败多了。正在为它修复并在推送时更新你。 |
经过“大量”工作(超出预期),我已经彻底检修了 Grbl 开发分支中的 g 代码解析器。Grbl v0.9e 应该 100%(或接近)符合 g 代码标准。这是一个重大变化。
在消除一些错误方面,我已尽我所能,但我无法测试所有内容。我需要一些帮助并希望有一些志愿者来测试新的 g 代码解析器并让我知道任何问题。
您应该注意的最大变化是:
如果有什么不正常或奇怪的地方,请告诉我!提前致谢!