Nomar记录一段历史
计算已切片文件的估计打印时间

我开始编写一个应用程序,它根据 G 代码文件为已经切片的模型计算估计的总打印时间。

该程序有效并且非常准确。

它的工作原理如下:

  1. 它扫描整个 G 代码文件以识别所有动作
  2. 它通过将段距离除以速度(以 mm/s 为单位)来计算每次移动的时间。

让我们假设这是 G 代码:

 G28 ; home all axes G1 Z0.200 F5400.000 G1 X158.878 Y27.769 E6.65594 F900.000

这是它所做的计算:

 totalTime = 0 # G28 ; home all axes currentX = 0 mm currentY = 0 mm currentZ = 0 mm # G1 Z0.200 F5400.000 newZ = 0.2 mm mmPerSecond = 5400 / 60 = 90 mm/s deltaZ = newZ - currentZ = 0.2 - 0 = 0.2 mm segmentLength = deltaZ = 0.2 mm moveTime = segmentLength / mmPerSecond = 0.2 / 90 = 0.002 s totalTime = totalTime + moveTime = 0 + 0.002 = 0.002 s # G1 X158.878 Y27.769 E6.65594 F900.000 newX = 158.878 mm newY = 27.769 mm mmPerSecond = 900 / 60 = 15 mm/s deltaX = newX - currentX = 158.878 - 0 = 158.878 mm deltaY = newY - currentY = 27.769 - 0 = 27.769 mm segmentLength = square_root(deltaX² + deltaY²) = 161.287 mm moveTime = deltaZ / mmPerSecond = 161.287 / 15 = 10.755 s totalTime = totalTime + moveTime = 0.002 + 10.755 = 10.757 s

在本例中,打印大约需要 10.7 秒。

更一般地,对于每个动作,使用的公式是:

 moveTime = segmentLength / mmPerSecond

通过总结所有的移动时间,我们得到了总的估计打印时间。

我看到有些论坛说 3D 打印时间还取决于 3D 打印机的一些设置,尤其是加速度 X、加速度 Y、加速度 Z、Jerk 和 Z-Jerk。

我想让使用这些值更准确地计算打印时间成为可能;但是,我不明白这些值如何影响移动时间:

  1. Acceleration 和 Jerk 应该如何考虑;以及,他们如何加快或减慢打印时间?
  2. 我应该如何编辑我的公式以便在打印时间计算中包括加速度和加速度?
你需要多准确?是的,您可以插入加速度,并补偿电机在减速前从未达到全速的短运行,等等,但如果最终结果仅下降 2%,您在乎吗?尝试打印一些简单的东西,比如方形金字塔,并将你的预测与现实进行比较。
我想尽可能精确……现在在 9 小时的打印中,预测和现实之间的差异是 10-15 分钟,这是很多。我将查看 marlin 源代码以了解在打印时如何处理加速度和加加速度
也许您可以检查 slic3r 并查看它如何计算这些参数。我记得在切片时得到了一个时间估计。
@FarO 我使用 Slic3r,但我从未见过时间估算。也许我没有找到正确的地方,但是有很多用户通过网络要求该功能,所以恐怕无法知道 Slic3r 中的打印时间。
@BackSlash 我通常在输出日志中切片结束时在 Repetier 中看到它。我想那是来自 Repetier 本身!

2个回答

我曾尝试查看打印机固件以了解加速设置如何影响机器运动。据我所知,根据我查看的固件,加速的实现方式似乎有所不同,并且还受到打印机上使用的设置的影响。我没有再看下去,因为为每个不同的固件编写不同的规则似乎太麻烦了。也许对此有更多了解的人会知道大多数固件是否使用相同的计算。

我怀疑加速度设置不会对打印所需的时间产生太大影响。它们似乎对我以低速打印的小印刷品没有影响。如果您以更快的速度打印更大的打印件,并且喷嘴有时间加速和减速的长路径,那么我怀疑您会注意到时间的差异更大。

我发现预测时间和实际时间之间最大的误差是机器处理指令所花费的时间。在打印需要发送到打印机并需要由打印机处理和计算的大量短运动的模型时,我注意到打印机会暂停几分之一秒。时间不够长,无法看到打印机运动的差异,但足够明显,可以听到。我怀疑在更便宜的打印机上,这会导致比加速更大的错误。

如果有人能找出打印机如何计算加速度设置以及可以使用什么 G 代码命令从打印机中获取加速度设置,我真的很想了解更多相关信息。

谢谢你的回答,我会继续找的。感谢您为我指出正确的方向:我可以阅读 Marlin 源代码并搜索加速和加加速度控制部分,它肯定会有所帮助,我没想到!谢谢!
“我怀疑加速度设置不会对打印所需的时间产生太大影响。” <-- 这简直是大错特错。每当打印速度和细节尺寸之间的比例很高(即快速设置或小细节或两者兼有)时,加速度是打印时间的主要因素。将 [最大] 速度设置提高 2 倍,即使打印时间减少 5% 也不太可能。

首先,有一些用 JavaScript 编写的不错的开源分析器,您可以在线使用,或在https://www.gcodeanalysisr.com/http://gcode.ws/ 上阅读源代码。他们的预测并不完全符合实际的打印机固件,但他们的工作相当接近,阅读它们会提供丰富的信息。

基本上,加速度和加加速度背后的故事是您无法立即改变打印头的速度(速度或方向)。加速和减速需要时间。加速度是打印头速度可以改变的最大速率。 Jerk 有点用词不当/hack,它是两个线段/曲线交界处允许的最大假瞬时速度变化。 jerk 的目的是通过在每个小角落加速/减速来避免沿由许多段组成的曲线移动时出现断断续续的运动。请注意,加速度和加加速度都有两组设置:

  • 一个最大绝对值(3D 矢量长度),它经常作为 gcode 的一部分改变,以便使用不同的加速度配置文件进行打印移动与移动移动、墙壁与填充等。

  • 机器限制的每轴绝对值(标准 1D 绝对值),通常在打印机的设置或打印机的起始 gcode 配置文件中设置,永远不会改变。

运动被限制为始终尊重两组设置。

打印机固件使用加速度和加加速度设置以及即将到来的运动命令的前瞻来决定如何实际操作电机。当它开始运动时,它必须在加速度约束内加速到配置的最大速度。它也必须在中途开始放慢速度,除非它知道下一个运动将在完全相同的方向上继续;它必须减速多少取决于运动矢量的差异。如果下一个运动将在大致相同的方向上进行,则可以通过使用加加速度裕度在拐角处进行“瞬时”速度变化来避免减速。只有当您进行长时间(相对于速度)线性或近似线性运动时,您才能真正达到要求的速度。

因此,要估计打印时间,您需要对此进行建模。在处理/模拟 gcode 时跟踪打印头速度,对于每个运动命令,使用加速度限制(以它们允许的最大速率加速)计算作为时间函数的速度。您还需要确定结束运动的最终速度,以便能够开始下一个运动命令,以及在必要时开始减速的点。

Jerk 是加速度的导数。
@trish:除非不是。请参阅我的问题 https://3dprinting.stackexchange.com/questions/10369/why-does-jerk-have-units-of-mm-s-rather-than-mm-s%c2%b3。

随机文章