Calcul de la durée d'impression estimée d'un fichier déjà découpé

10

J'ai commencé à écrire une application qui calcule le temps d'impression total estimé à partir du fichier G-code pour un modèle déjà découpé en tranches.

Le programme fonctionne et il est assez précis.

Cela fonctionne comme suit:

  1. Il scanne l'intégralité du fichier G-code pour identifier tous les mouvements
  2. Il calcule le temps pour chaque mouvement en divisant la distance du segment par la vitesse en mm / s.

Supposons que c'est le code G:

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

Voici le calcul qu'il fait:

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

Dans cet exemple, l'impression prendra environ 10,7 secondes.

Plus généralement, la formule utilisée est, pour chaque mouvement:

moveTime = segmentLength / mmPerSecond

En additionnant tous les temps de déplacement, nous avons le temps d'impression total estimé.

J'ai vu que certains forums déclarent que le temps d'impression 3D dépend également de certains paramètres de l'imprimante 3D, en particulier Acceleration X, Acceleration Y, Acceleration Z, Jerk et Z-Jerk.

J'aimerais pouvoir utiliser ces valeurs pour calculer plus précisément le temps d'impression; cependant, je ne comprends pas comment ces valeurs affectent le temps de déplacement:

  1. Comment considérer l'accélération et la secousse; et comment accélèrent-ils ou ralentissent-ils le temps d'impression?
  2. Comment dois-je modifier ma formule afin d'inclure l'accélération et la secousse dans le calcul du temps d'impression?
BackSlash
la source
À quel point devez-vous être précis? Oui, vous pouvez brancher les accélérations et compenser les courts trajets où les moteurs n'atteignent jamais leur pleine vitesse avant de décélérer, etc. Essayez d'imprimer quelque chose de simple comme une pyramide carrée et comparez votre prédiction à la réalité.
Carl Witthoft
Je voudrais être aussi précis que possible ... Actuellement, sur une impression de 9 heures, la différence entre la prédiction et la réalité est de 10 à 15 minutes, ce qui est beaucoup. Je vais regarder le code source de marlin pour trouver comment l'accélération et la secousse sont gérées lors de l'impression
BackSlash
Vous pourriez peut-être vérifier slic3r et voir comment il calcule ces paramètres. Je me souviens d'avoir obtenu une estimation du temps lors du découpage.
FarO
@FarO J'utilise Slic3r et je n'ai jamais vu d'estimation de temps. Peut-être que je ne cherche pas au bon endroit, mais il y a beaucoup d'utilisateurs qui demandent cette fonctionnalité sur le Web, donc je crains qu'il n'y ait aucun moyen de connaître le temps d'impression dans Slic3r.
BackSlash
@BackSlash Je le vois généralement dans Repetier à la fin du découpage dans le journal de sortie. Je suppose que ça vient de Repetier lui-même!
FarO

Réponses:

5

J'ai essayé d'examiner le micrologiciel de l'imprimante pour voir comment le paramètre d' accélération affecte le mouvement de la machine. D'après ce que j'ai pu voir, l' accélération semblait être implémentée différemment selon le micrologiciel que j'ai regardé et était également affectée par les paramètres utilisés sur l'imprimante. Je n'ai pas cherché plus loin car écrire des règles différentes pour chaque firmware différent me semblait trop compliqué. Peut-être que quelqu'un qui en sait plus à ce sujet saurait si la plupart des micrologiciels utilisent les mêmes calculs.

Je soupçonne que le paramètre d'accélération ne fera pas beaucoup de différence avec le temps nécessaire à l'impression. Ils n'ont pas semblé faire de différence sur les petits tirages que j'ai faits avec des vitesses lentes. Si vous imprimiez de plus grandes impressions à des vitesses plus rapides qui avaient de longs trajets où la buse avait le temps d'accélérer et de ralentir, je soupçonne que vous remarqueriez une plus grande différence avec le temps.

J'ai constaté que la plus grande erreur entre le temps prévu et le temps réel a été le temps que la machine passe à traiter les instructions. Lors de l'impression d'un modèle comportant de nombreux mouvements courts qui doivent être envoyés à l'imprimante et qui doivent être traités et calculés par l'imprimante, j'ai remarqué que l'imprimante s'arrêtera pendant une fraction de seconde. Ce n'est pas assez long pour voir une différence dans les mouvements des imprimantes, mais c'est assez perceptible pour l'entendre. Je soupçonne que sur des imprimantes moins chères, cela provoquerait une erreur plus importante que l'accélération.

Si quelqu'un peut savoir comment les paramètres d'accélération sont calculés par l'imprimante et quelle commande de code G peut être utilisée pour obtenir les paramètres d'accélération de l'imprimante, je serais vraiment intéressé d'en savoir plus à ce sujet.

user802599
la source
Merci pour votre réponse, je continuerai à chercher. Merci de m'avoir pointé dans la bonne direction: je peux lire le code source de Marlin et rechercher les pièces de contrôle d'accélération et de secousse, ça va sûrement aider, je n'y ai pas pensé! Je vous remercie!
BackSlash
3
"Je soupçonne que le paramètre d'accélération ne fera pas beaucoup de différence avec le temps nécessaire à l'impression." <- cela ne pourrait pas être plus mal. L'accélération est le facteur dominant dans le temps d'impression chaque fois que le rapport entre la vitesse d'impression et la taille des détails est élevé (c'est-à-dire un réglage de vitesse rapide ou de petits détails ou les deux). Tant et si bien que l'augmentation du réglage de la vitesse [max] d'un facteur 2x est peu susceptible de réduire même le temps d'impression de 5%.
R .. GitHub STOP HELPING ICE
5

Tout d'abord, il existe de jolis analyseurs open source écrits en JavaScript que vous pouvez utiliser en ligne ou lire la source sur https://www.gcodeanalyser.com/ et http://gcode.ws/ . Leurs prédictions ne correspondent pas entièrement au micrologiciel réel de l'imprimante, mais elles font un travail raisonnablement proche, et leur lecture serait informative.

Fondamentalement, l'histoire derrière l'accélération et la secousse est que vous ne pouvez pas changer la vitesse (vitesse ou direction) de la tête d'impression instantanément. Il faut du temps pour accélérer et ralentir. L'accélération est la vitesse maximale à laquelle la vitesse de la tête d'impression peut changer. Jerk est quelque chose de mal approprié / hack, et est le changement faux-instantané maximum de vitesse autorisé à la jonction de deux segments / courbes. Le but de la secousse est d'éviter les mouvements saccadés lors du déplacement le long d'une courbe composée de nombreux segments en accélérant / décélérant à chaque petit coin. Notez qu'il existe deux ensembles de paramètres pour l'accélération et la secousse:

  • une valeur absolue maximale (longueur de vecteur 3D) qui changeait fréquemment dans le cadre du gcode afin d'utiliser différents profils d'accélération pour les mouvements d'impression contre les déplacements, les murs contre le remplissage, etc.

  • des valeurs absolues par axe (valeur absolue 1D standard) pour les limitations de la machine, qui sont généralement définies dans les paramètres de l'imprimante ou le profil de démarrage du gcode pour votre imprimante et ne sont jamais modifiées.

Le mouvement est contraint de toujours respecter les deux ensembles de paramètres.

Le micrologiciel de l'imprimante utilise les paramètres d'accélération et de sursaut ainsi que l' anticipation des commandes de mouvement à venir pour décider comment réellement faire fonctionner les moteurs. Lorsqu'il démarre un mouvement, il doit accélérer jusqu'à la vitesse maximale configurée dans les contraintes d'accélération. Il doit également commencer à ralentir à mi-parcours, à moins qu'il ne sache que le prochain mouvement va continuer dans la même direction; combien il doit ralentir dépend de la différence dans les vecteurs de mouvement. Si le prochain mouvement va être à peu près dans la même direction, il peut être en mesure d'éviter de ralentir en utilisant la tolérance de secousse pour effectuer un changement "instantané" de vitesse au coin. Ce n'est que si vous avez de longs mouvements linéaires (ou relativement linéaires) que vous atteindrez réellement la vitesse demandée.

Donc, pour estimer le temps d'impression, vous devez modéliser cela. Gardez une trace de la vitesse de la tête d'impression pendant le traitement / la simulation du gcode, et pour chaque commande de mouvement, calculez la vitesse en fonction du temps en utilisant les limites d'accélération (accélération à la vitesse maximale autorisée). Vous devez également déterminer la vitesse finale avec laquelle vous souhaitez terminer le mouvement afin de pouvoir démarrer la commande de mouvement suivante, et un point pour commencer à décélérer si nécessaire pour y parvenir.

R .. GitHub ARRÊTEZ D'AIDER LA GLACE
la source
Jerk est le dérivé de l'accélération.
Trish
1
@trish: sauf quand ce n'est pas le cas. Voir ma question 3dprinting.stackexchange.com/questions/10369/… .
R .. GitHub STOP HELPING ICE