Calcolo del tempo di stampa stimato di un file già suddiviso


10

Ho iniziato a scrivere un'applicazione che calcola il tempo di stampa totale stimato dal file G-code per un modello già suddiviso.

Il programma funziona ed è abbastanza preciso.

Funziona come segue:

  1. Esegue la scansione dell'intero file G-code per identificare tutti i movimenti
  2. Calcola il tempo per ogni spostamento dividendo la distanza del segmento per la velocità in mm / s.

Supponiamo che questo sia il codice G:

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

Questo è il calcolo che fa:

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

In questo esempio, la stampa richiederà circa 10,7 secondi.

Più in generale, la formula utilizzata è, per ogni movimento:

moveTime = segmentLength / mmPerSecond

Sommando tutti i tempi di spostamento, abbiamo il tempo di stampa totale stimato.

Ho visto che alcuni forum affermano che il tempo di stampa 3D dipende anche da alcune impostazioni della stampante 3D, in particolare Accelerazione X, Accelerazione Y, Accelerazione Z, Jerk e Z-Jerk.

Vorrei rendere possibile l'uso di questi valori per calcolare in modo più preciso il tempo di stampa; tuttavia, non capisco come tali valori influenzino il tempo di spostamento:

  1. Come dovrebbero essere considerati Acceleration e Jerk; e come accelerano o rallentano i tempi di stampa?
  2. Come devo modificare la mia formula per includere Acceleration e Jerk nel calcolo del tempo di stampa?

Quanto devi essere accurato? Sì, puoi collegare le accelerazioni e compensare le corse brevi in ​​cui i motori non raggiungono mai la massima velocità prima di decelerare, e così via, ma se il risultato netto è spento solo, diciamo, del 2%, ti interessa? Prova a stampare qualcosa di semplice come una piramide quadrata e confronta la tua previsione con la realtà.
Carl Witthoft,

Vorrei essere il più preciso possibile ... In questo momento su una stampa di 9 ore la differenza tra previsione e realtà è di 10-15 minuti, che è molto. Esaminerò il codice sorgente di Marlin per scoprire come vengono gestiti l'accelerazione e il jerk durante la stampa
BackSlash,

Forse potresti controllare slic3r e vedere come calcola quei parametri. Ricordo di aver ricevuto una stima del tempo durante il taglio.
FarO,

@FarO Uso Slic3r e non ho mai visto una stima del tempo. Forse non sto guardando nel posto giusto, ma ci sono molti utenti che chiedono quella funzione sul Web, quindi temo che non ci sia modo di conoscere i tempi di stampa in Slic3r.
BackSlash,

@BackSlash Di solito lo vedo in Repetier alla fine della suddivisione nel registro di output. Suppongo che provenga dallo stesso Repetier!
FarO,

Risposte:


5

Ho provato a guardare nel firmware della stampante per vedere come l' impostazione di accelerazione influisce sul movimento della macchina. Da quello che ho potuto dire, l' accelerazione sembrava essere implementata in modo diverso a seconda del firmware che ho visto ed era anche influenzata dalle impostazioni utilizzate sulla stampante. Non ho cercato oltre perché scrivere regole diverse per ogni firmware diverso sembrava troppo disturbo. Forse qualcuno che ne sa di più potrebbe sapere se la maggior parte del firmware utilizza gli stessi calcoli.

Sospetto che l'impostazione dell'accelerazione non farà molta differenza rispetto al tempo impiegato dalla stampa. Sembra che non abbiano fatto la differenza per le piccole stampe che ho fatto a bassa velocità. Se stavi stampando stampe più grandi a velocità più elevate che avevano percorsi lunghi in cui l'ugello aveva il tempo di accelerare e decelerare, sospetto che noteresti una differenza più grande con il tempo.

Ho scoperto che l'errore più grande tra il tempo previsto e il tempo effettivo è stato il tempo impiegato dalla macchina per elaborare le istruzioni. Durante la stampa di un modello che presenta molti movimenti brevi che devono essere inviati alla stampante e devono essere elaborati e calcolati dalla stampante, ho notato che la stampante si fermerà per una frazione di secondo. Non è abbastanza lungo da vedere una differenza nei movimenti della stampante, ma è abbastanza evidente da sentire. Ho il sospetto che su stampanti più economiche questo causerebbe un errore più grande dell'accelerazione.

Se qualcuno può scoprire come le impostazioni di accelerazione vengono calcolate dalla stampante e quale comando G-code può essere utilizzato per estrarre le impostazioni di accelerazione dalla stampante, sarei davvero interessato a saperne di più su questo.


Grazie per la tua risposta, continuerò a cercare. Grazie per avermi indicato nella giusta direzione: posso leggere il codice sorgente di Marlin e cercare le parti di controllo dell'accelerazione e del jerk, sicuramente aiuterà, non ci ho pensato! Grazie!
BackSlash

3
"Sospetto che l'impostazione dell'accelerazione non farà molta differenza rispetto al tempo impiegato dalla stampa." <- questo non potrebbe essere più sbagliato. L'accelerazione è il fattore dominante nel tempo di stampa ogni volta che il rapporto tra velocità di stampa e dimensioni dei dettagli è elevato (ovvero impostazione della velocità veloce o piccoli dettagli o entrambi). Tanto che è improbabile che aumentando l'impostazione della velocità [massima] di un fattore 2 volte si ottenga una riduzione del 5% dei tempi di stampa.
R .. GitHub smette di aiutare ICE il

5

Prima di tutto, ci sono alcuni simpatici analizzatori open source scritti in JavaScript che puoi usare online o leggere la fonte su https://www.gcodeanalyser.com/ e http://gcode.ws/ . Le loro previsioni non corrispondono completamente al firmware effettivo della stampante, ma svolgono un lavoro ragionevolmente vicino e la loro lettura sarebbe istruttiva.

Fondamentalmente, la storia dietro l'accelerazione e lo strappo è che non è possibile modificare istantaneamente la velocità (velocità o direzione) della testina di stampa. Ci vuole tempo per accelerare e rallentare. L'accelerazione è la velocità massima alla quale la velocità della testina di stampa può cambiare. Jerk è una specie di termine improprio / hack, ed è il massimo cambiamento di velocità falso-istantaneo consentito alla giunzione di due segmenti / curve. Il punto di strappo è quello di evitare movimenti irregolari quando ci si sposta lungo una curva composta da molti segmenti accelerando / decelerando ad ogni piccolo angolo. Si noti che esistono due set di impostazioni sia per l'accelerazione che per il jerk:

  • un valore assoluto massimo (lunghezza del vettore 3D) che spesso cambiava come parte del codice di accesso al fine di utilizzare diversi profili di accelerazione per spostamenti di stampa vs spostamenti di marcia, pareti contro riempimento, ecc

  • valori assoluti per asse (valore assoluto standard 1D) per i limiti della macchina, che di solito sono impostati nelle impostazioni della stampante o nel profilo di avvio gcode per la stampante e non sono mai stati modificati.

Il movimento è costretto a rispettare sempre entrambi i set di impostazioni.

Il firmware della stampante utilizza le impostazioni di accelerazione e jerk insieme a uno sguardo ai comandi di movimento imminenti per decidere come far funzionare effettivamente i motori. Quando inizia un movimento, deve accelerare fino alla velocità massima configurata entro i vincoli di accelerazione. Deve anche iniziare a rallentare a metà strada, a meno che non sappia che il movimento successivo continuerà nella stessa identica direzione; quanto deve rallentare dipende dalla differenza nei vettori di movimento. Se il movimento successivo sarà approssimativamente nella stessa direzione, potrebbe essere in grado di evitare di rallentare usando la tolleranza di jerk per effettuare un cambiamento "istantaneo" della velocità all'angolo. Solo se hai movimenti lineari lunghi (relativamente alla velocità) o approssimativamente lineari raggiungerai effettivamente la velocità richiesta.

Quindi, per stimare il tempo di stampa, è necessario modellarlo . Tieni traccia della velocità della testina di stampa mentre elabori / simuli il gcode e, per ogni comando di movimento, calcola la velocità in funzione del tempo usando i limiti di accelerazione (accelerando alla velocità massima consentita). È inoltre necessario capire la velocità finale con cui si desidera terminare il movimento per poter avviare il comando di movimento successivo e un punto per iniziare a decelerare, se necessario, per raggiungerlo.


Jerk è il derivato dell'accelerazione.
Trish,

1
@trish: tranne quando non lo è. Vedi la mia domanda 3dprinting.stackexchange.com/questions/10369/… .
R .. GitHub smette di aiutare ICE il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.