Czas druku na LCD

Awatar użytkownika
virgin71
Posty: 363
Rejestracja: 02 sty 2013, 13:54
Lokalizacja: Wrocław

Re: Czas druku na LCD

Postautor: virgin71 » 29 mar 2016, 11:10

Cura podaje w gcode ten czas planowany - można by tego użyć.

login55555
Posty: 31
Rejestracja: 19 wrz 2014, 13:56

Re: Czas druku na LCD

Postautor: login55555 » 29 mar 2016, 11:28

W wątku mowa o czasie jaki był potrzebny na wydruk, nie o czasie do końca druku ( ETA ? )

Revo7
Posty: 47
Rejestracja: 08 lut 2016, 12:39

Re: Czas druku na LCD

Postautor: Revo7 » 29 mar 2016, 13:51

w sumie to chodziłoby o obydwa czasy w najlepszym rozwiązaniu.

A moze udałoby się aby CURA (Gcode ?) zapisywała orientacyjny czas do pliku. np 01:24:00

Następnie na wyswietlaczu aby był pokazywany CZAS ILE JUŻ DRUKUJE (czyli od zapuszczenia wydruku do obecnej chwili) - np 0:15:59

i jeśli repetier byłby wstanie wyświetlić ten zapis z pliku mogłoby to być w ten sposób Czas druku: 0:15:59 / 01:24:00

ale tak jak login wspomniał, najbardziej chodzi o czas aktualny druku czyli ile już drukuje (od momentu rozpoczęcia), a po zakończeniu drukowania podanie całkowitego czasu potrzebnego na wydrukowanie elementu.


// edit - w sumie w start.gcode jest opcja:

Kod: Zaznacz cały

;Print time: {print_time}

i ładnie do pliku zapisuje te wartość.

Pytanie czy repetier będzie wstanie to odczytać i wyświetlić jako wartosć stałą?

tylko to jest akurat boczny wątek j/w - ważniejszy czas jest od rozpoczęcia do bieżącej chwili a najlepsza opcja to czas drukowania / całkowity potrzebny czas

Awatar użytkownika
Miś
Posty: 625
Rejestracja: 14 sty 2015, 0:47
Lokalizacja: Bytom

Re: Czas druku na LCD

Postautor: Miś » 02 maja 2016, 1:10

Revo7 pisze:ale tak jak login wspomniał, najbardziej chodzi o czas aktualny druku czyli ile już drukuje (od momentu rozpoczęcia), a po zakończeniu drukowania podanie całkowitego czasu potrzebnego na wydrukowanie elementu.

Pierwszą część dorobiłem - aktualny czas druku hh:mm czyli godziny i minuty. Nie wiem jak to będzie wyglądać na znakowym LCD, ale na graficznym w linii statusu widnieje: "Drukowanie... xx.x%" a będzie "Drukowanie... xx.x% hh:mm". Oczywiście chodzi o drukowanie z SD.
Status po zakończeniu drukowania jest problematyczny, bo to co się wyświetli zależy od sekwencji G-Cod'ow kończących wydruk. Wyświetlenie podsumowania wymagało by trochę więcej zachodu, ale myślę że też będzie możliwe. Ale to później.
Jak drukarka będzie wolna (czyli jutro jak skończy drukować :) ) to sprawdzę napisany kod i jak będzie działać to tu opublikuję.

Awatar użytkownika
marcino
Posty: 189
Rejestracja: 23 lut 2014, 14:35
Lokalizacja: Bydgoszcz kujawsko-pomorskie

Re: Czas druku na LCD

Postautor: marcino » 02 maja 2016, 2:12

@Miś ciągle zaskakujesz :shock: twój wkład i wiedza jest niezwykle cenna :piwo:

ps.będzie okazja do wprowadzenia zmian z innego tematu i jak się ten plan powiedzie to dwa w jednym podejściu :D
pozdrawiam Marcin

Awatar użytkownika
Miś
Posty: 625
Rejestracja: 14 sty 2015, 0:47
Lokalizacja: Bytom

Re: Czas druku na LCD

Postautor: Miś » 02 maja 2016, 2:18

marcino pisze:będzie okazja do wprowadzenia zmian z innego tematu i jak się ten plan powiedzie to dwa w jednym podejściu :D
Ty mnie tu nie wkręcaj :lol:

Awatar użytkownika
Miś
Posty: 625
Rejestracja: 14 sty 2015, 0:47
Lokalizacja: Bytom

Re: Czas druku na LCD

Postautor: Miś » 02 maja 2016, 14:55

Ok, zrobione i działa. Włącznie ze statusem po zakończeniu drukowania.
Podczas drukowania czas jest wyświetlany za procentami postępu drukowania. Po zakończeniu drukowania zamiast pustego paska SD i to będzie widoczne tylko na graficznych wyświetlaczach. Nie mam tekstowego do testów abym mógł to jakoś wcisnąć na tekstówkę.

Modyfikacje robimy w pliku ui.cpp. Polecam najpierw zrobić sobie jego kopię bezpieczeństwa.
Modyfikacje są w trzech miejscach tego pliku:

1. W miarę na początku dodajemy deklarację zmiennej prtim (dopisujemy drugą linijkę za tą oryginalną pierwszą):

Kod: Zaznacz cały

static TemperatureController *currHeaterForSetup;    // pointer to extruder or heatbed temperature controller
uint16_t prtim;                                      // printing time counter


2. Wyświetlanie czasu na bierząco. Zmieniamy fragment aby wyglądał tak:

Kod: Zaznacz cały

            if(c2 == 's')
            {
#if SDSUPPORT
                if(sd.sdactive && sd.sdmode)
                {
                    addStringP(Com::translatedF(UI_TEXT_PRINT_POS_ID));
                    float percent;
                    if(sd.filesize < 2000000) percent = sd.sdpos * 100.0 / sd.filesize;
                    else percent = (sd.sdpos >> 8) * 100.0 / (sd.filesize >> 8);
                    addFloat(percent, 3, 1);
                    uint16_t tim = (HAL::timeInMilliseconds() - Printer::msecondsPrinting) / 60000L;   // printing time in minutes
                    if(tim > prtim) prtim = tim;
                    if(Printer::filamentPrinted == 0) prtim = 0;
                    if(col < MAX_COLS)
                      uid.printCols[col++] = '%';
                    if(col < MAX_COLS-6)
                         {
                              uid.printCols[col++] = ' ';
                              addInt(prtim / 60, 2, '0');            // hours
                              uid.printCols[col++] = ':';
                              addInt(prtim % 60, 2, '0');            // minutes
                         }
                }
                else
#endif
                    parse(statusMsg, true);
                break;
            }


2. Status po zakończeniu drukowania. Znów mieniamy fragment aby wyglądał tak:

Kod: Zaznacz cały

#if SDSUPPORT
                    //SD Card
                    if(sd.sdactive && u8g_IsBBXIntersection(&u8g, 66, 52 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
                    {
                        if(sd.sdmode || prtim == 0)
                        {
                            printU8GRow(66,52,const_cast<char *>("SD"));
                            drawHProgressBar(79,46, 46, 6, sdPercent);
                        }
                        else
                        {
                            col = 0;
                            addStringP(PSTR("PrTim: "));
                            addInt(prtim / 60, 2, '0');           // hours
                            uid.printCols[col++] = ':';
                            addInt(prtim % 60, 2, '0');           // minutes
                            uid.printCols[col++] = 0;
                            printU8GRow(66,52,uid.printCols);     // Printing time instead SD progressbar
                        }
                    }
#endif


Wgrywamy zmieniony kod do drukarki i gotowe :P

Brodziek
Posty: 60
Rejestracja: 04 gru 2014, 18:46

Re: Czas druku na LCD

Postautor: Brodziek » 02 maja 2016, 15:47

Eee... I znowu trzeba wgrywać na drukarkę ;)
Brawo Miś!

Awatar użytkownika
syntetyczny
Posty: 2390
Rejestracja: 08 lut 2013, 23:26
Lokalizacja: Elbląg
Kontaktowanie:

Re: Czas druku na LCD

Postautor: syntetyczny » 02 maja 2016, 21:25

A na marlinie chyba działać to nie będzie, co?
eppure si muove
sklep z akcesoriami RepRap http://www.byq3d.eu

Awatar użytkownika
Miś
Posty: 625
Rejestracja: 14 sty 2015, 0:47
Lokalizacja: Bytom

Re: Czas druku na LCD

Postautor: Miś » 02 maja 2016, 21:44

syntetyczny pisze:A na marlinie chyba działać to nie będzie, co?
No nie będzie. Tylko na repetierze.
Robiłem to na jednej z trochę starszych wersji 0.92.8 z początku roku, ale powinno działać na każdej 0.92.


Wróć do „Repetier Firmware”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości