开源改变世界

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

推推 grbl 2年前 (2023-01-21) 167次浏览
关闭
chamnit 打开了这个问题 2014 年 5 月 26 日 · 80条评论
关闭

请求:Grbl v0.9e 测试新的 g 代码解析器#411

chamnit 打开了这个问题 2014 年 5 月 26 日 · 80条评论

注释

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员

经过“大量”工作(超出预期),我已经彻底检修了 Grbl 开发分支中的 g 代码解析器。Grbl v0.9e 应该 100%(或接近)符合 g 代码标准。这是一个重大变化。

在消除一些错误方面,我已尽我所能,但我无法测试所有内容。我需要一些帮助并希望有一些志愿者来测试新的 g 代码解析器并让我知道任何问题。

您应该注意的最大变化是:

  • 没有更多的默认进给速率设置。这已被删除,因为它不合规。如果尚未对使用进给率 (G1/2/3/38.2) 的命令进行编程,Grbl 现在将出错。
  • 如果发现错误,则删除整个 g 代码块。这意味着块中设置的任何命令都不会传递到运行状态。Grbl 的旧解析器将允许其中一些通过并可能改变系统的运行方式。
  • 错误反馈更详细。对于不太常见的错误,Grbl 将报告一个可以在已发布的错误代码列表中查找的代码(尚未编写,但现在请查看 report.h 了解详细信息)。

如果有什么不正常或奇怪的地方,请告诉我!提前致谢!

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

很乐意测试它。有构建发布了吗?

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我正在尝试在 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

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@Mgilbride: 是的。我刚刚在 grbl-builds 仓库中上传了一个测试固件。这是一个链接。右键另存为。请注意,您的设置将被覆盖,因为它有一个新的设置结构。因此,请确保在闪光之前将它们打印出来。

@Scott216: 我不直接通过 Arduino IDE 编译,所以我无法告诉你发生了什么。很可能它在编译时将所有 Arduino 库绑定到其中。请使用 Wiki 中列出的方法。我使用 Mac 方法,它仍然使用 Arduino IDE 的编译器,但通过命令行,因为它没有添加所有额外的东西。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我更习惯使用 Arduino IDE。我可以对 TIMER0_OVF_vect 名称进行简单更改还是可以避免多重定义?我什至无法弄清楚它在哪里被定义。我只是看到 grbl 将它与 ISR() 一起使用,而 wiring.c 也是如此。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

@chamnit:我已经合并了我的 i2c/status_led 东西,一旦我得到它就会开始测试。
将在周三或周四。

顺便说一句,你有没有设法查看/修复问题#352#410

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@mschorer: 还没有。这是列表中的下一个。我一直在仔细考虑,并一直在考虑使用“%”程序起始字符作为保持循环启用直到程序结束或检测到另一个“%”的方法。它会起作用,但对于新用户来说,确保“%”字符在那里并不是很明显。

顺便说一句,我很乐意尝试将您的 i2c 内容包含在 v1.0 中。我认为这对于将来释放更多引脚是必要的(比如在 Arduino Zero 上)。我认为我们可以使用 i2c 作为所有运行时命令甚至主轴/冷却液控制输出的接口。所有实时的东西都将保留在板上,例如步进针和可能的限制针。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

@chamnit:我觉得我们应该看看整体状态管理。还记得前一段时间在问题中发布的状态图 alden(指向包含 a 的 pdf 的链接)吗?

在我(简化的)记忆中——混合了我自己的想法——它有两个有限状态机:

  • 一个用于 gcode(主机通信、缓冲、解析、错误等)
  • 一个用于机器状态(移动、按钮/手动控制、限制等)

他们有一个“接触点”,一个新的 gcode 命令被解析并准备就绪,机器可以将下一个命令放入规划器缓冲区。
拥有两个 FSM 应该将状态保持在最低限度并且“关注点分离”。

在当前代码中,状态是全局的,状态管理无处不在,状态是按位定义的(它们是标志吗?),……我发现很难获得和调试。

不要误会我的意思,我不是在抱怨,我也没有仔细考虑等等,但是在做我的插件时,我觉得状态管理应该更容易和更明显。
我希望我有时间贡献更多…

关于 i2c:我想是时候让代码准备好共享了。它只不过是一个似乎最有效的 hack … :-)

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@mschorer:我看过奥尔登的状态图。在大多数情况下,Grbl 一直这样做,即使它不是很清楚。有一些我不同意的小事,即它是满眼的,但它是一个好的开始。

很久以前,我看着制作一个状态机,惊讶地发现在错误的地方设置的东西很少。大多数状态都由实时命令协议或 Grbl 内部命令设置。它通常由一组标志控制,以向主程序指示需要更改和执行的内容。标志的目的是允许主程序在准备就绪时运行该命令,并充当中断和主程序之间的接口,因为它们需要可变变量才能相互通信。这使挥发物保持在绝对最低限度。

我认为它令人困惑的原因是中断过程和主程序的重叠。当主程序需要运行实时命令模块来执行事情、改变状态并保持步进缓冲区满时,重叠会导致代码中出现一些难以理解的断点。这些有时很难区分什么是什么。我认为,如果我努力让事情变得更清楚,那么解决这个问题将大有帮助。

解决这一切的第一件事是使 g 代码解析器模块化,这是本次更新的重点。如果我愿意,我现在可以将每个部分从解析、错误检查和执行分解为不同的过程。通过这样做,我可以使执行的序列化清晰并确定性地显示实时命令协议何时需要运行。

主轴控制暂停的状态机问题并不完全是状态机问题。这是 Grbl 如何同步流式命令的问题。每当某些进程需要按时运行某些东西时,我们就会清空计划器缓冲区,例如发出主轴/冷却液命令。因为规划器缓冲区是空的,所以状态机认为循环已经完成,但实际上并没有。下一个流式命令需要继续并在它进来时执行。我认为为此我们需要做的就是区分我们何时处于“程序流模式”与“手动用户输入”。这应该由 cycle-auto start 设置来处理,但我认为使用 ‘%’ 字符来区分它会更好。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我正在尝试在 Arduino IDE 中编译 0.9e,如果我的 .ino 文件只是

int main()
{ startGrbl(); }

其中 startGrbl() 是 main.c 中我重命名为 startGrbl 的原始 main() 函数。
这编译得很好,但是在 Arduino 论坛上我被告知这样做时我需要初始化所有 PWM、ADC 等定时器。这些东西是否已经被 grbl 代码初始化了?如果没有,我将根据 wiki 进行刷写,但如果我可以在没有太多麻烦的情况下让它与 IDE 一起工作,我会更喜欢它。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

您好,
今天从 09.d 升级到 0.9e。我在 2560 上运行,但由于我包含的 i2c/one-wire 内容,我将代码转换为 cpp。我只从 Atmel Studio 编译/部署。由于更严格的 cpp 语法,一些小的变化,否则它只是按预期工作。这次运行了几个冗长的 gcode 文件并且没有锁定。此外,由于我尝试自动调平我的床,我必须做的探测工作似乎按预期工作。归位也有效。

干得好!

谢蒂尔

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@SixthGenie:感谢您测试和报告它的工作原理。您能否概述需要更改的内容以使其与 Atmel Studio 兼容并转换为 cpp?当 Arduino Zero 出现时(或在 Due 上工作),我可能会搬到 Atmel Studio。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

@chamnit不多,真的。除了将文件重命名为 .cpp 之外,由于本地定义的变量,我不得不将 gcode 文件(第 619 行)中的一个案例更改为用大括号括起来。至于 AtmelStudio,我认为唯一特别的是将 F_CPU 定义为 16000000。我没有使用任何主轴/冷却液控制的东西,所以我不能对此发表评论……

因为我有一块 Mega2560 和一块中国的 TB6550 板;步进器启用引脚更改为支持 3 个引脚,我添加了一些 M 代码来读取我的温度。传感器和控制 4 继电器模块,因为 2560 上有可用的引脚。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我注意到 .9c 中复杂 gcode 的锁定是这个版本应该有助于阻止它吗?

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

还为此主要修改了哪些文件。我将尝试用它来迁移我现有的代码。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@SixthGenie: 谢谢(你的)信息。我会把这些东西牢记在心。

@timryder: 不知道你所说的锁定是什么意思。唯一已知的错误是 Grbl 在需要缓冲区同步(暂停和冷却剂/主轴控制)的命令时暂停。这个还在制作中。您还可以通过提交历史检查更改的内容。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我正在尝试让 0.9e 运行,但我遇到了问题。我将 hex 文件闪存到我的 uno 并与 UGS 连接。但是 UNO 没有响应我从 UGS 输入的命令。我输入 $ 然后 $$,但它没有在控制台中返回任何内容。我重新启动了 UNO,但这没有帮助。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我发现了问题。我需要将 UGS 中的波特率从 9600 更改为 115200

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

step 端口反转掩码和 dir 端口反转掩码有什么区别?我将 step port invert mask 设置为我在 0.8c (11111100) 中的相同值。默认的 dir port invert mask 是 11000000。
我所有的轴都只在一个方向上移动,不管我慢跑的方向如何。

哪个反转限制引脚设置与 0.8c 相同?

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我的 Uno 上装了 0.9e。我在我的 Win 7 笔记本电脑上使用 UGS。当我点击主页按钮时,所有 3 个轴都正常并后退 1 毫米。但是 UGS 将其作为机器位置:
X -199.01
Y -199.05
Z -1

我的起始位置是机器的左前方($26=96),所以它应该给我
X 1
Y 1
Z -1

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我使用的是 UGS 1.07,当我慢跑时,grbl 经常忽略我的慢跑命令。UGS 将发送类似:G91 G0 Y2。并且 grbl 将响应正常,但机器不会移动。这种情况经常发生。我必须进行软重置才能使其再次慢跑。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@Scott216:感谢您的报告,但您遇到的许多问题都在已关闭或未解决的问题线程中。在发送大量问题之前,请先检查这些。我们都在空闲时间维护 Grbl。

另外,请记住这是开发分支。会有错误和已知的现有错误,我只是没有时间去解决或目前正在处理这些错误。通常,我建议更熟悉 Grbl 内部工作原理的更高级用户执行一些这些测试请求并使用开发版本。不太熟悉的用户,我建议使用 master 分支,直到开发版本被推送到 master。

为了回答您的问题,这两个反转掩码只是拆分了旧端口反转掩码。像对待旧的那样对待这些位。归位现在将根据最大轴行程将机器空间设置为所有负空间。请参阅有关解释的问题线程。您的慢跑问题是状态机问题,这是我的首要任务。当快速连续发出命令时,这个错误往往会突然出现。现在,不要那样做。同样,这更像是一个 g 代码解析器测试请求,而不是对现有和已知错误的测试。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

这是一个奇怪的问题。如果我手动按下限位开关使其进入警报模式,然后单击软复位按钮然后单击 $x 按钮清除警报,然后单击发送 G91 G0 x-1 的 x-jog 按钮,x 轴转到-1 位置。GRBL 认为它处于绝对位置而不是相对位置。如果我第二次点击慢跑按钮,它就会正常工作。

此外,UGS 中的坐标似乎使用 grbl 0.9e 更新得更慢

这是我的设置:
$0=40.020 (x, step/mm)
$1=40.200 (y, step/mm)
$2=320.000 (z, step/mm)
$3=500.000 (x max rate, mm/min)
$4=500.000 ( y 最大速率,毫米/分钟)
$5=500.000(z 最大速率,毫米/分钟)
$6=25.000(x 加速度,毫米/秒^2)
$7=25.000(y 加速度,毫米/秒^2)
$8=25.000( z 加速度,mm/sec^2)
$9=200.000(x 最大行程,mm)
$10=200.000(y 最大行程,mm)
$11=200.000(z 最大行程,mm)
$12=30(步进脉冲,usec)
$13= 4 (step port invert mask:00000100)
$14=224 (dir port invert mask:11100000)
$15=255 (step idle delay, msec)
$16=0.050 (junction deviation, mm)
$17=0.100 (arc tolerance, mm)
$18= 3 (n-decimals, int)
$19=0(报告英寸,布尔)
$20=1(自动启动,布尔)
$21=0(反转步进启用,布尔)
$22=0(反转限制引脚,布尔)
$23=0(软限制,布尔)
$24=1 (硬限制,布尔)
$25=1(归位周期,布尔)
$26=96(归位方向反转掩码:01100000)
$27=25.000(归位进给,mm/min)
$28=250.000(归位搜索,mm/min)
$29= 100(归位去抖,毫秒)
$30=1.000(归位牵引,毫米)

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

我从 shapeoko 2 hello world 文件的第 34 行开始得到“无效的 gcode ID:33”。

G3X0.4459Y0.6092I-0.282J-0.6397
错误:无效的 gcode ID:33
G3X0.3973Y0.6265I-0.4624J-1.2235
错误:无效的 gcode ID:33
G2X0.376Y0.6343I0.3353J0.9488
错误:无效的 gcode ID:33
G2X0.3546Y0.6427I0.3684J0.9724
错误:无效的 gcode ID:33
G2X0.3333Y0.6515I0.3967J0.9808
G2X0.3119Y0.661I0.4333J1.0077
错误:无效的 gcode ID:33
错误:无效的 gcode ID:33

并非每一行都在第 34 行之后失败,但大多数都会失败。查看 report.h 文件,这似乎是一个“无效目标”错误。

grbl 安装在 Arduino UNO 上,通过通用 gcode 发送器 1.0.7 从带有 arduino 1.0.5-r2 驱动程序的 Windows 7 PC 发送 gcode

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

@chamnit– 感谢您提供的信息,我会调查打开/关闭的问题。我确实注意到上次我慢跑时机器冻结(你的状态机问题)状态从空闲变为运行。也许你已经知道了。有没有一个地方列出了 0.9e 中的已知问题?

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@tenaku: 嗯,好像很奇怪。没错,当偏移模式弧具有无效目标时会生成此错误。当到当前位置的半径与到目标位置的半径之差大于 0.002 毫米时,就会发生这种情况。我检查检查这个的计算是否没有一些数学问题。我会假设弧线是正确的,但从我的角度来看很难说。

@Scott216: 是的,你是对的。重置时目标坐标生成有错别字。它正在查看最后一个 G90/91 距离模式,而不是发布的那个。现在将推送此修复程序并更新测试固件。不,不幸的是,没有一个中心位置可以列出所有这些东西。或许可以为此目的填充一个 Wiki 页面。我会看看我是否可以得到这个设置。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@tenaku:我找到了 ShapeOko2 ‘hello world’ g 代码程序。我复制了这个问题。结果证明是 NIST 对无效目标的定义存在问题。EMC2 (linuxcnc) 此后将其从 (>0.002mm) 放宽到 (>0.005mm AND 0.1% radius OR >0.5mm)。我已经更新了固件版本并推送了源代码修复。测试 g 代码现在应该可以正常工作了。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411

@chamnit我下载并重新编译了 dev 分支,在同一行 gcode 上仍然出现错误 33。我似乎没有像以前那样在文件处理过程中遇到那么多错误,但仍然有很多。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@tenaku: 诡异的。我能够毫无问题地运行 shapeokos 网站上的整个程序。你对剧本有什么改动吗?你有你正在运行的程序的链接吗?同时发送您的设置。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者

@tenaku: 没关系,我找到了错误的根源。与该计算的数学有关。失败多了。正在为它修复并在推送时更新你。

请求:Grbl v0.9e 测试新的 g 代码解析器 #411
成员作者
喜欢 (0)