Czas druku na LCD

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

Re: Czas druku na LCD

Postautor: Brodziek » 02 maja 2016, 22:45

Na Repetier 0.92.9 działa doskonale.

Awatar użytkownika
bundyr
Posty: 97
Rejestracja: 05 lut 2014, 14:16

Re: Czas druku na LCD

Postautor: bundyr » 03 maja 2016, 1:52

syntetyczny pisze:A na marlinie chyba działać to nie będzie, co?

Marlin ma w standardzie wszystko co Miś dodał do Repetier, tj. zliczanie czasu druku, wyświetlanie % ukończenia i podsumowanie czasu po zakończeniu druku.

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

Re: Czas druku na LCD

Postautor: syntetyczny » 03 maja 2016, 19:46

A widzisz :D No to nie wiedziałem ;P
eppure si muove
sklep z akcesoriami RepRap http://www.byq3d.eu

arekm
Posty: 152
Rejestracja: 12 sty 2015, 22:46

Re: Czas druku na LCD

Postautor: arekm » 07 maja 2016, 12:20

Pull-request na githubie repetiera by się przydał ... by tego typu zmiany włączyli do wersji głównej.
X3D XL

piodabro
Posty: 38
Rejestracja: 01 lip 2015, 22:26

Re: Czas druku na LCD

Postautor: piodabro » 04 cze 2016, 10:59

Dodałem od siebie licznik sekund bo lubię widzieć jak pykają :)

Mój kod bazuje ne kodzie Misia z pewnymi zmianami.
Zaprezentuję tu komplet zmian od czystego Repetiera.

W pliku ui.cpp
Z początku pliku (pierwsze linijka już istnieje)

Kod: Zaznacz cały

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

To pozostaje bez zmian tak jak w kodzie Misia.

Tutaj zmiana w wyliczaniu prtim oraz dodane sekundy do wyświetlania w trakcie druku.

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) / 1000L;   // printing time in seconds
                      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 / 3600, 2, '0');            // hours
                              uid.printCols[col++] = ':';
                              addInt((prtim / 60) % 60, 2, '0');            // minutes
                         }
                         if(col < MAX_COLS-3){
                              uid.printCols[col++] = ':';
                              addInt(prtim % 60, 2, '0');             //seconds
                         }
                }
                else
#endif
                    parse(statusMsg, true);
                break;
            }



I na koniec status po wydruku:

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("Tm: "));
                            addInt(prtim / 3600, 2, '0');           // hours
                            uid.printCols[col++] = ':';
                            addInt((prtim / 60) % 60, 2, '0');           // minutes
                            uid.printCols[col++] = ':';
                            addInt(prtim % 60, 2, '0');           // seconds
                            uid.printCols[col++] = 0;
                            printU8GRow(66,52,uid.printCols);     // Printing time instead SD progressbar
                        }
                    }
#endif





Na koniec pozostaje skrócić delikatnie napis "Printing..." i w Polskim tłumaczeniu "Drukowanie..."

W pliku uilang.h szukamy linii:

Kod: Zaznacz cały

#define UI_TEXT_PRINT_POS_EN        "Printing..."

i podmieniamy na

Kod: Zaznacz cały

#define UI_TEXT_PRINT_POS_EN        "Printing:"


i następnie jeżeli ktoś używa języka polskiego to:

Kod: Zaznacz cały

#define UI_TEXT_PRINT_POS_PL        "Drukowanie..."

zmieniamy na przykład na:

Kod: Zaznacz cały

#define UI_TEXT_PRINT_POS_PL        "Wydruk..."


bez tych zmian czas wyświetlany na ekranie będzie ucięty.


EDIT

Dopatrzyłem sie jeszcze jednej rzeczy.
W obecnej formie licznik obsłuży maksymalnie 18 godzinny wydruk.
Jeżeli ktoś wstawia dłuższe wydruki, to musi zmienić typy danych dla zmiennej prtim z uint16_t na uint32_t.
To samo dla zmiennej tim w wyświetlaniu czasu podczas druku.

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

Re: Czas druku na LCD

Postautor: Revo7 » 06 cze 2016, 18:11

ale zaspałem :D

dziekuje bardzo za zainteresowanie temat. Przy wolnej drukarce wrzucam kod :D

Piwo dla Misia naszego :D

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

Re: Czas druku na LCD

Postautor: Revo7 » 11 cze 2016, 12:07

Mógłby ktoś podesłać swój plik ui.cpp

Mam problem, na wyświetlaczu pojawia się 00:00:00 jednak mimo druku zegar nie startuje, to samo przy zakończeniu druku, pokazuje komunikat "silniki wyłączone" a nie czas druku...

Firmware repetier 92.9

Jeszcze jedno pytanko. bo teostowałem na zimnym przebiegu - to jest gcode bez faktycznego wydruku (głowica zimna, filament nie leci tylko silniki XYZ sie przemieszczają - i licznik nie rusza...
Tez nie po zakończeniu wydruku odrazu jest komunikat "silniki wylaczone" zamiast pokazania statystyki druku

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

Re: Czas druku na LCD

Postautor: Miś » 11 cze 2016, 14:40

No i tak ma być. Licznik czasu ruszy dopiero jak licznik zużytego filamentu przestanie pokazywać 0. A więc przy wydruku na sucho tego nie przetestujesz.

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

Re: Czas druku na LCD

Postautor: Revo7 » 11 cze 2016, 14:59

a co końcem wydruku tj. zamiast komunikatu "silniki wyłączone" ?

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

Re: Czas druku na LCD

Postautor: Revo7 » 11 cze 2016, 18:26

Elegancko działa. przetestowane. Super hiper mega świetnie :)

Dzięki Miś :)


Wróć do „Repetier Firmware”

Kto jest online

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