Welcome! Log In Create A New Profile

Advanced

Tempo rimanente di stampa

Posted by i3D 
i3D
Tempo rimanente di stampa
October 01, 2015 10:16AM
Buongiorno a tutti!
Molti mi chiedono la visualizzazione del tempo rimanente al completamento della stampa.
su marlin kimbra è previsto di visualizzare il tempo totale stimato??
Ho modificato il display sostituendo il tempo di stampa con il tempo di stampa rimanente ...viene stimato ogni 10min.
..oppure è possibile aggiungerlo accanto al tempo di stampa ed attivarlo quando diventa stabile dal 4-5% del totale stampa.
Fatemi sapere se può interessare .
Ciao
Marco Capolino
Re: Tempo rimanente di stampa
October 01, 2015 10:48AM
Quote
i3D
Fatemi sapere se può interessare
Interessante... è veritiera come previsione?


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 01, 2015 11:02AM
è stimata...alle prime prove, dal 10% della stampa inizia a calare tendendo a zero in modo progressivo.
si basa su questo sistema:
percentuale di gcode completato in un determinato tempo trascorso (meglio ogni 5-10 min) a seconda del pezzo; moltiplicato per la percentuale del programma rimanente.....praticamente dividi (tempo trascorso / %gcode completato).ed ottieni una stima del tempo complessivo di stampa.
Si capisce che in questo calcolo mancano velocità, accelerazioni,..... e poi ci deve essere almeno una minima percentuale 4-5% per avere una stima veritiera.
Su un pezzo piccolo da pochi minuti (1h)si evince il tempo totale....ma da un pezzo grande (10-20h) ci vuole 30min -1h per avere una stima veritiera .
E' lo stesso principio del tempo di trasferimento file che se trasferisci 4gb parte e ti scrive 300min....per poi aggiustarsi dopo poco su cifre più attendibili.

..
Elo stesso calcolo che facciamo tutti a mente ogni volta che c'è un pezzo grande (es. ha fatto 1% ci ha messo 1h ...stimato ci vorranno 100h)
Ciao
Marco Capolino
Re: Tempo rimanente di stampa
October 01, 2015 11:31AM
Ma questo se si stampa da sd... Perché se stampi da host non sai nulla di quanto manca!!!

Cmq si posso aggiungerlo se ti va di passare il codice...

Edited 1 time(s). Last edit at 10/01/2015 11:31AM by MagoKimbra.


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: Tempo rimanente di stampa
October 01, 2015 01:59PM
Quote
MagoKimbra
Cmq si posso aggiungerlo se ti va di passare il codice...

Se per caso lo aggiungi alla 4.1.2 stable fai un fischio... spinning smiley sticking its tongue out


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 02, 2015 08:13AM
Ciao Alberto !
stampando tramite host ad esempio repetier in basso a destra c'è il tempo rimanente di stampa.
Tramite SD manca ed è comodo....
Riscrivo due cosette levando la barra progressiva e mettendo la percentuale(più accurata rispetti al grafico).
e lascio i due contatori uno sopra all'altro (sopra "elapsed") (sotto "finish").
e attiverei il "Finish" ce sò dal 5% del completamento sd.
...scrivo e ti posto.
così provi un pò.
Chiaramente fammi sapere se ti sembra buona o và migliorata.
Ciao
Marco Capolino
i3D
Re: Tempo rimanente di stampa
October 02, 2015 10:54AM
eccolo...
ho modificato:
a sinistra ("orologio" tempo trascorso) a destra ("clessidra" tempo che occorre a finire la stampa)
la stima si attiva dal 15% perchè secondo me prima è un pò troppo instabile.
ps. Ho aumentato un pò il grafico della SD e inserito dei marcatori 25% 50% 75%
Fammi sapere se ti torna oppure c'è da modificare qualcosa.
Ciao
Marco Capolino
i3D
Re: Tempo rimanente di stampa
October 02, 2015 10:54AM
#ifdef SDSUPPORT
//SD Card Symbol
u8g.drawBox(38,42,8,7);
u8g.drawBox(46,44,2,5);
u8g.drawFrame(38,49,10,4);
u8g.drawPixel(46,43);
// Progress bar
u8g.drawFrame(50,48,77,5);
u8g.drawLine(69,52,69,50);
u8g.drawLine(88,52,88,49);
u8g.drawLine(107,52,107,50);
// SD Card Progress bar and clock
u8g.setFont(FONT_STATUSMENU);

if (IS_SD_PRINTING)
{
// Progress bar
u8g.drawBox(51,49, (unsigned int)( (75 * card.percentDone())/100) ,3);

}
else {
// do nothing
}

u8g.drawCircle(53,43,3);
u8g.drawLine(53,43,56,42);
u8g.drawLine(53,43,53,41);
u8g.setPrintPos(58,46);
if(starttime != 0)
{
uint16_t time = millis()/60000 - starttime/60000;

u8g.print(itostr2(time/60));
u8g.print(':');
u8g.print(itostr2(time%60));
}else{
lcd_printPGM(PSTR("--:--"));
}

u8g.drawLine(89,46,95,39);
u8g.drawLine(95,39,89,39);
u8g.drawLine(89,39,95,46);
u8g.drawLine(95,46,89,46);
u8g.drawLine(90,45,93,45);
u8g.setPrintPos(98,46);
if(card.percentDone() >= 15)
{
uint16_t time = millis()/60000 - starttime/60000;

time = ((millis()/600)/card.percentDone()+1);
u8g.print(itostr2(time/60));
u8g.print(':');
u8g.print(itostr2(time%60));
}else{
lcd_printPGM(PSTR("--:--"));
}
#endif
Re: Tempo rimanente di stampa
October 05, 2015 07:14AM
In che sorgente ed in che funzione hai fatto la modifica?


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 06, 2015 02:52AM
scusami...
dogm_lcd_implementation.h
funzione
static void lcd_implementation_status_screen()
Ciao
Re: Tempo rimanente di stampa
October 06, 2015 05:55AM
interesante, ma per quale LCD è stato pensato?
i3D
Re: Tempo rimanente di stampa
October 07, 2015 02:22AM
il display 128x64 ultra lcd
Re: Tempo rimanente di stampa
October 07, 2015 02:46AM
Mi dici la variabile starttime dove è configurata e come...


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
i3D
Re: Tempo rimanente di stampa
October 08, 2015 08:02AM
extern unsigned long starttime;

dentro marlin.h

unsigned long starttime=0;
Re: Tempo rimanente di stampa
October 08, 2015 03:22PM
Quote
i3D
extern unsigned long starttime;

dentro marlin.h

unsigned long starttime=0;

e poi dove la aggiorni?


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
Re: Tempo rimanente di stampa
October 08, 2015 03:29PM
Si infatti manca qualcosa, altrimenti è sempre 0 e non ha senso!!!

Quote
Luca_Benedetto
Quote
i3D
extern unsigned long starttime;

dentro marlin.h

unsigned long starttime=0;

e poi dove la aggiorni?


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: Tempo rimanente di stampa
October 09, 2015 03:13AM
Quote
MagoKimbra
Si infatti manca qualcosa, altrimenti è sempre 0 e non ha senso!!!

Difatti...
... magari perchè non carichi TUTTO il modulo come attach?
Perché i pezzi di codice che hai messo su mi pare siano "non contigui" sul sorgente Marlin incriminato...


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 13, 2015 05:48AM
Scusatemi tanto per il ritardo....
credo di aver capito dove stà il problema, io non ho un'altra versione di marlin.
in pratica basta cercare la posizione della prima riga dentro Dogm_lcd......
e incollare le righe di codice successive.
e ricompilare.
il valore non viene visualizzato sino al 15% del completamento del file.
dopo si.
fatemi sapere
Ciao
Marco Capolino
Attachments:
open | download - dogm_lcd_implementation.h (21.2 KB)
Re: Tempo rimanente di stampa
October 13, 2015 06:49AM
Ora mi è "leggermente" più chiaro...
... credo che la tua variabile starttime equivale alla variabile print_job_start_ms del MarlinKimbra, che però è non solo definita ma anche adeguatamente inizializzata in giro per i vari sorgenti del Firmware, variabile che viene usata all'interno del pezzo di codice che visualizza il tempo di stampa:
   u8g.setPrintPos(80,48);
   if (print_job_start_ms != 0) 
   {
      #if HAS_LCD_POWER_SENSOR
         if (millis() < print_millis + 1000) 
         {
            uint16_t time = (millis() - print_job_start_ms) / 60000;
            lcd_print(itostr2(time/60));
            lcd_print(':');
            lcd_print(itostr2(time%60));
         }
         else 
         {
            lcd_print(itostr4(power_consumption_hour-startpower));
            lcd_print('Wh');
         }
      #else
         uint16_t time = (millis() - print_job_start_ms) / 60000;
         lcd_print(itostr2(time/60));
         lcd_print(':');
         lcd_print(itostr2(time%60));
      #endif
   }
   else 
   {
      lcd_printPGM(PSTR("--:--"));
   }
A questo punto il tuo pezzo di codice per visualizzare la stima del tempo restante si potrebbe mettere giusto in coda a quello di sopra:
   }
   else 
   {
      lcd_printPGM(PSTR("--:--"));
   }

   u8g.setPrintPos(98,46);
   if(card.percentDone() >= 15)
   {
      uint16_t time = (millis() - print_job_start_ms)/60000/card.percentDone()+1;

      u8g.print(itostr2(time/60));
      u8g.print(':');
      u8g.print(itostr2(time%60));
   }
   else
   {
      lcd_printPGM(PSTR("--:--"));
   }
Dividendo però per 60000 e non per 600 come sul tuo codice credo... e sempre che ci sia lo spazio sul display a aprtire dalla posizione indicata dal setPrintPos!
Però credo che aspetterò di vedere se il Mago mi conferma questa mia rapida analisi...


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 14, 2015 09:52AM
Ecco perchè!
è chiamata in un'altro nome....
Se venite a roma ne parliamo dal vivo.....sempre che ci riusciamosmileys with beer
Re: Tempo rimanente di stampa
October 14, 2015 10:09AM
Quote
i3D
...Se venite a roma ne parliamo dal vivo...
Purtroppo è lontanuccia...


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
Re: Tempo rimanente di stampa
October 18, 2015 04:46AM
Prendendo spunto dal tuo lavoro l'ho implementato per il display ultralcd che ho io... e che è presente in tantissimi kit, allego direttamente il file ultralcd_implementation_hitachi_HD44780.h che è più facile.
In sunto ecco quello che ho fatto:

  1. Cambiato tutti i calcoli "preliminari" in millesecondi, trasformando in secondi solo alla fine
     uint16_t time = millis()/1000 - print_job_start_ms/1000; 
  2. Aggiunto un define per avere TUTTI i tempi con il formato hh:mm:mm invece che hh:hh
     // #define LCD_TIME_IN_SEC 1 scommentare per avere i tempi con anche i secondi
    Quando i tempi sono in secondi ho dovuto togliere la scritta SD per risparmiare spazio:
     #if LCD_TIME_IN_SEC
       lcd.setCursor(6, 2);
    #else
       lcd.setCursor(7, 2);
       lcd_printPGM(PSTR("SD"));
    #endif
    Ovviamente ho messo sotto controllo della define anche le stampe dei tempi
     lcd.print(itostr2(time/3600));
    lcd.print(':');
    lcd.print(itostr2((time-((time/3600)*3600))/60));
    #if LCD_TIME_IN_SEC
       lcd.print(':');
       lcd.print(itostr2((time-((time/3600)*3600))%60));
    #endif
  3. Ristretto la barra d'avanzamento presente per far spazio alla visualizzazione del tempo a finire:
     #if LCD_TIME_IN_SEC
       int tix = (int)(card.percentDone() * (LCD_WIDTH - 9) * 3) / 100, cel = tix / 3, rem = tix % 3, i = (LCD_WIDTH - 9);
    #else
       int tix = (int)(card.percentDone() * (LCD_WIDTH - 6) * 3) / 100, cel = tix / 3, rem = tix % 3, i = (LCD_WIDTH - 6);
    #endif
  4. Aggiunto stima a finire/totale del tempo a destra della barra percentuale:
     #if LCD_TIME_IN_SEC
       lcd.setCursor(LCD_WIDTH - 9, LCD_HEIGHT - 1);
    #else
       lcd.setCursor(LCD_WIDTH - 6, LCD_HEIGHT - 1);
    #endif
  5. Aggiunta possibile scelta fra "Tempo a Finire" o "Tempo Stimato Totale":
     // uint16_t time = ((millis()/1000 - print_job_start_ms/1000)/card.percentDone()*100); // Tempo stimato di fine stampa
       uint16_t time = ((millis()/1000 - print_job_start_ms/1000)/card.percentDone()*100) - (millis()/1000 - print_job_start_ms/1000); // Stima a Finire la stampa
    Basta scommentare quella che si preferisce... io personalmente tengo quella che mi dice quanto si pensa ci voglia ancora per finire la stampare
Spero che serva a qualcun altro oltre che a me...

Edited 1 time(s). Last edit at 10/18/2015 01:17PM by Luca_Benedetto.


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
Attachments:
open | download - ultralcd_implementation_hitachi_HD44780.h (29.2 KB)
i3D
Re: Tempo rimanente di stampa
October 28, 2015 09:23AM
Ciao Luca..
ho notato che nella parte in cui implementi la stima del tempo ci sono degli errori, ......utilizzando il tuo codice verso la fine della stampa ho dei valori errati, tipo da 1 min...a 18h.
Ti allego come l'ho modificato:

uint16_t time = (((millis()/1000 - starttime/1000)*(100-card.percentDone()))/card.percentDone());

in pratica è una proporzione tra il tempo percorso, quanta SD è eseguita, e quanta ne rimane...

fammi sapere
Ciao!
Re: Tempo rimanente di stampa
October 29, 2015 04:12AM
Quote
i3D
...ho notato che nella parte in cui implementi la stima del tempo ci sono degli errori...

Ciao Marco,
questa sera ci butto un occhio e faccio due prove... domandina per sicurezza, tu quale dei due tempi usi? Quello a finire o il totale finito?
Te lo chiedo perché mi pare che la tua modifica vada nella "Stima a Finire la stampa":

// uint16_t time = ((millis()/1000 - print_job_start_ms/1000)/card.percentDone()*100); // Tempo stimato di fine stampa
   uint16_t time = ((millis()/1000 - print_job_start_ms/1000)/card.percentDone()*100) - (millis()/1000 - print_job_start_ms/1000); // Stima a Finire la stampa

Che dunque si potrebbe modificare in:

// uint16_t time = ((millis()/1000 - print_job_start_ms/1000)/card.percentDone()*100); // Tempo stimato di fine stampa
   uint16_t time = (((millis()/1000 - print_job_start_ms/1000)*(100-card.percentDone()))/card.percentDone()); // Stima a Finire la stampa

Me lo confermi?

Ho anche provato a fare due confronti con Excel ma i due calcoli mi paiono analoghi cone risultato:



Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
Attachments:
open | download - Comparazione.xlsx (14.8 KB)
i3D
Re: Tempo rimanente di stampa
October 29, 2015 11:13AM
Ciao Luca!
Sì la seconda riga di codice è quella che utilizzo.
in linea di principio i conti tornano...ma all'atto pratico (verso la fine della stampa) ovvero verso (un qualche zero) il conteggio sballa come se andasse a pescare nei numeri negativi.
Ti dirò che non mi sono molto scervellato per capire dove fosse il baco.
ps. a vedere meglio se print_job è superiore a zero (es.10) cosa succede??
Ciao
Marco Capolino
Re: Tempo rimanente di stampa
October 30, 2015 03:14AM
Quote
i3D
...a vedere meglio se print_job è superiore a zero (es.10) cosa succede??...

Se ho capito bene come funziona l'arduino è sempre superiore a zero... eprché millis() restituisce il tempo dall'accesione dell'arduino, e print_job_start_ms viene inizializzato con il valore di millis() all'atto di inizio della stampa...
...io ho cercato di scerverllarmi su cosa possa far "sballare" il conto con la mia formulazione... temo che siano gli arrotondamenti nelle operazione che vengono fatte da arduino... in tal caso per risolvere potrebbe bastare spostare il calcolo da secondi a millisecondi e tornare in secondi solo alla fine:

// uint16_t time = ((millis() - print_job_start_ms)/card.percentDone()*100)/1000; // Tempo stimato di fine stampa
   uint16_t time = (((millis() - print_job_start_ms)/card.percentDone()*100) - (millis() - print_job_start_ms))/1000; // Stima a Finire la stampa


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
i3D
Re: Tempo rimanente di stampa
October 30, 2015 08:51AM
probabile
per il momento funziona bene su due stampe da 30 min. ha sballato di 4min.in più
ciao
Re: Tempo rimanente di stampa
November 02, 2015 08:42AM
Quote
i3D
probabile
per il momento funziona bene su due stampe da 30 min. ha sballato di 4min.in più
ciao

Ciao Marco,
ho provato nel weekend la modifica di calcolare in millisecondi e solo alla fine convertire in secondi e non ho visto stranezze alla fine della stampa.


Qualcosetta più che un neofina oramai, anche se non si finisce mai d'imparare!
DUE Stampati GEEETech i3B, GT2560+, Marlin GEEETech originale con un paio di modifichine personali (Pin dedicato per la Z Probe e stampa dell'ETE da SD), Barre Trapezie, Estrusore da 0.3 con filo da 1.75, una con estrusore metallico ed una con estrusore ridisegnato e stampato da me, Software AutoCAD/Slic3r/Repetier

My Thingiverse
My Linkedin
Sorry, only registered users may post in this forum.

Click here to login