注释
|
我还注意到同样的问题,即在我的大部分(如果不是全部)雕刻上,刨床缓冲区始终为零。 |
|
在运行 GRBL 1.1 的 CNC.js 中,如果规划器缓冲区为 0,则表示它已满,这是一件好事。在小文件上,我在规划器缓冲区上得到 0,一切运行顺利,但在大文件上,缓冲区在 14 和 15 之间跳跃,这意味着 GRBL 数据不足并导致它断断续续。 |
|
我已经在我的树莓派上使用 python 脚本“stream.py”测试了相同的 357,000 行文件,并且在整个时间内保持 CPU 使用率低于 5% 没有问题。 |
|
我刚刚更新到V1.8.8,仍然有同样的问题。 |
|
抱歉来晚了,这两周我一直很忙。下周我应该有时间调查 RPi2 上的大型 G 代码文件的性能问题。一旦我找到一些线索,我会及时通知你。 |
|
你好@mayhem2408, 我可以知道您的完整 Grbl 设置($$),尤其是以下内容:
我尝试了“ Zac – RIP – Y0-Y3.9.nc ”和“ Zac – RIP – Full.nc ”文件,但在状态报告中两者都无法达到 2000 毫米/分钟的进给率。规划器缓冲区也没有得到充分利用。 |
|
我通过在解析 G 代码命令时删除不必要的正则表达式来减少文件加载时间,从而提高了性能。加载速度将比当前版本快 10 倍。 |
|
$32=1;激光模式 我所有的雕刻都是使用新的 M4 模式而不是 M3 完成的。但这不会影响流。 我刚刚尝试了 V1.8.12,但在处理较大文件时仍然存在速度问题。 |
|
性能增强的代码改动仍在本地开发中,将在1.8.13或1.9.0发布。 |
|
@cheton 我读过 shift() 方法在大型数组上可能非常慢。我打算看一下代码,看看是否可以使用单个数组和一个索引变量来代替具有移位和推送的两个数组,这意味着大型数组一旦加载就不必更改。我会等待你的下一个版本,看看它是如何进行的。 |
|
@cheton我还读到如果你 reverse() 数组然后 pop() 离开数组的末尾,它会更快,但我还没有测试这个理论。 |
|
正如您所说,我使用单个数组 ( [STREAMING_PROTOCOL_CHAR_COUNTING]: () => {
if (this.transmitDataQueue.length > 0) {
const dataLength = this.transmitDataQueue.shift();
this.transmitDataLength -= dataLength;
}
while (this.sent < this.total) {
const line = this.lines[this.sent];
this.transmitLine = this.transmitLine || stripLine(line);
if (this.transmitLine.length + this.transmitDataLength >= this.transmitBufferSize) {
break;
}
const gcode = this.transmitLine;
this.transmitLine = ''; // clear transmitLine
this.sent++;
this.emit('change');
if (gcode.length > 0) {
this.transmitDataLength += gcode.length;
this.transmitDataQueue.push(gcode.length);
this.emit('gcode', gcode);
} else {
this.ack(); // Ack for empty lines
}
// Continue to the next line if empty
}
}
|
|
还对gcode-parser、gcode-interpreter和gcode- toolpath进行了显着的性能改进。它将加快加载时间至少比早期版本快 5 倍。 我的基准测试表明,在 Mac Book Air ’12 上将 10MB 的 gcode 文件渲染到 3D 视图中的时间将从 40 秒减少到 5 秒。 |
|
@cheton我已经从大师和WOW那里下载并手动安装了1.8.13。有什么不同。Raspberry Pi 与时俱进,并有空闲空间。CPU 使用率现在仅在 20-30% 之间,并且 Planner 和 Serial 缓冲区仍处于满状态。 加载和渲染时间的改进是巨大的。 做得好。很棒的工作。 |
|
@cheton我虽然我会用我的一些较大的文件来锻炼它。下一个是 650,000 行和 12Mb。它的加载和渲染时间为 33 秒,流式传输没有性能影响,将 Raspberry Pi CPU 保持在 20-30%,缓冲区已满。 |
|
您可以尝试关闭G 代码小部件吗?此小部件在加载大型 G 代码文件时也可能会消耗大量内存。 更好的解决方案是使用所谓的延迟加载机制而不是一次处理所有行,这将节省浏览器中的大量内存。 |
|
已在 1.8.13 中修复。 对于大文件支持(即 >20MB),我将创建另一个问题以供将来增强。 |





我的 Raspberry pi 2 上的 CNC V1.8.7 遇到了速度问题。特别是大文件。我发现 CNC 无法足够快地将数据馈送到我的 Arduino,并且规划器缓冲区和串行缓冲区徘徊在空的附近。然而,如果我只有一小部分相同的 G 代码文件,CNC 可以毫无问题地将它提供给我的 Arduino,并且规划器缓冲区保持良好和完整,并且串行缓冲区大部分时间大约为 60-80%。
一个例子是激光光栅,大小为 6.6MB,包含 357,000 行 G 代码。从它开始的那一刻起,CNC 就努力以足够快的速度将数据从树莓派传送到 Arduino。但是,如果我使用同一个文件的前 15,000 行,它会以足够快的速度提供数据以保持计划程序缓冲区已满。
在同一 Arduino 上的 Windows 版本上运行的同一文件没有问题。这只是树莓派上的问题。有没有其他人经历过这个。
我附上了一个包含两个 G 代码文件的 ZIP 文件。一个是完整文件,一个是前 15,000 行。
我还附上了一些运行过程的屏幕截图。如您所见,完整文件仅执行了 3300 行,但较小的文件在相同的时间内执行了 13280 行相同的代码。
作为参考,完整的 G 代码文件在 Windows 10 中的 Windows CNC 1.8.7 上干净地执行,大约需要 42 分钟。但是在树莓派上,它卡顿很多需要 2 个多小时。
扎克-RIP.zip