计算已经切片的文件的估计打印时间


10

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

该程序可以正常运行。

其工作方式如下:

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

假设这是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打印机上的某些设置,尤其是Acceleration X,Acceleration Y,Acceleration Z,Jerk和Z-Jerk。

我希望可以使用这些值来更准确地计算打印时间。但是,我不明白这些值如何影响移动时间:

  1. 应该如何考虑加速度和加速度率;以及它们如何加快或减慢打印时间?
  2. 为了在打印时间计算中包括加速和加加速度,应该如何编辑公式?

您需要多精确?是的,您可以插入加速器,并补偿电动机在减速之前从未达到全速的短期运行,依此类推,但是如果最终结果仅下降了2%,您在乎吗?尝试打印一些简单的东西,例如方形金字塔,然后将您的预测与现实进行比较。
卡尔·威索夫特

我想尽可能精确...现在,在9个小时的打印中,预测与现实之间的差异为10-15分钟,这是很多。我将看一下marlin源代码,以查找在打印时如何处理加速度和加速度率
BackSlash 2016年

也许您可以检查slic3r并查看它如何计算这些参数。我记得切片时得到了时间估计。
FarO

@FarO我使用Slic3r,但从未见过时间估算。也许我没有找到合适的位置,但是有很多用户在网上要求该功能,所以我担心Slic3r无法知道打印时间。
BackSlash

@BackSlash我通常在输出日志中切片末尾的Repetier中看到它。我猜那是来自Repetier本身!
FarO

Answers:


5

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

我怀疑加速度设置不会对打印时间产生太大影响。他们似乎并没有改变我慢速打印的小字。如果您以较大的速度以较大的速度打印较大的打印件,并且喷嘴有时间加速和减速,那么我怀疑您会注意到时间上的差异更大。

我发现预测时间与实际时间之间的最大误差是机器花费在处理指令上的时间。当打印具有许多短时动作的模型时,需要将其发送到打印机,并且需要由打印机处理和计算,我注意到打印机将暂停一秒钟。看到打印机动作的差异还不够长,但足以引起人们的注意。我怀疑在便宜的打印机上,这会导致比加速更大的错误。

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


谢谢您的回答,我会继续寻找。感谢您为我指明了正确的方向:我可以阅读Marlin源代码并搜索加速和加加速度控制部分,它一定会有所帮助,我没有考虑过!谢谢!
BackSlash

3
“我怀疑加速设置不会对打印时间产生太大影响。” <-这再错不过了。每当打印速度和细节尺寸之间的比率很高时(即快速设置速度或细节太小或两者兼有),加速度是影响打印时间的主要因素。如此之多,以至于将[最大]速度设置提高2倍,甚至不可能减少5%的打印时间。
R .. GitHub停止帮助ICE,

5

首先,有一些不错的用JavaScript编写的开源分析器,您可以在https://www.gcodeanalyser.com/http://gcode.ws/上在线使用或阅读源代码。他们的预测与实际的打印机固件并不完全匹配,但是他们所做的工作相当合理,阅读它们将为您提供有益的信息。

基本上,加速度和加加速度背后的故事是您无法立即更改打印头的速度(速度或方向)。加速和减速需要时间。加速度是打印头速度可以改变的最大速率。混蛋是一种误称/破解,是两个线段/曲线交界处所允许的最大假瞬时变化速度。混蛋的目的是通过在每个微小的角处加速/减速来避免在沿着由许多线段组成的曲线上移动时产生断断续续的运动。请注意,对于加速度和加速度率有两种设置:

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

  • 机器限制的每轴绝对值(标准1D绝对值),通常在打印机的设置或打印机的启动gcode配置文件中设置,并且从未更改。

限制移动以始终尊重两组设置。

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

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


混蛋是加速的衍生物。
Trish

1
@trish:除非不是。请参阅我的问题3dprinting.stackexchange.com/questions/10369/…
R .. GitHub停止帮助ICE,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.