Niedawno wypuściliśmy nowe firmware w wersji 3.10 dla wszystkich drukarek 3D z flagowej rodziny MK3. Moglibyśmy długo wymieniać zmiany, które wprowadziliśmy, ale zanim przejdziemy do szczegółów, pozwól, że coś wyjaśnimy. Chcielibyśmy wprowadzić jeszcze całe mnóstwo nowych funkcji, ale płyta EINSY nie posiada już zbyt wiele wolnej pamięci. Zanim w ogóle zaczniemy dodawać nowe funkcje, najpierw musimy zoptymalizować te już istniejące. Tym razem udało nam się zaoszczędzić solidne 5KB pamięci FLASH i prawie 400B pamięci RAM! To znacznie więcej, niż mogłoby się wydawać – porównywalna ilość pamięci wystarczyła do zaprogramowania lądowania Apollo na Księżycu! Nawiasem mówiąc, ten program też jest dostępny na GitHubie. Oznacza to, że tym razem mieliśmy spore pole manewru.

Jak oszczędzać miejsce w pamięci? Np. przepisując obsługę TWI

Jedną z naszych ulubionych metod odzyskiwania pamięci jest przepisywanie starszego kodu na bardziej zoptymalizowany i krótszy. Najlepszą okazją jest przekazanie części funkcji software’owych sprzętowi, np. komunikację pomiędzy TWI (Two-Wire Interface) a optycznym czujnikiem filamentu w MK3. Z powodów historycznych, zaimplementowaliśmy obsługę optycznego czujnika filamentu w oprogramowaniu, ale obecnie sprzętowe TWI może się tym zająć. Mimo, że ma to wpływ tylko na starszą wersję MK3 (nowsze modele mają inny czujnik filamentu), to kod jest krótszy dla wszystkich wersji i daje możliwość dodania nowych funkcji.

Przepisanie jakiejś funkcji nie jest jednak jedyną metodą oszczędzania pamięci. Dokładnie przejrzeliśmy również listę krytycznych funkcji ASM w poszukiwaniu „motywacji” dla kompilatora do lepszego tłumaczenia kodu. W niektórych przypadkach okazało się to trudnym zadaniem: np. w przypadku funkcji Thumbnail Skipper, kompilator opierał się wszystkim naszym wysiłkom optymalizacyjnym, więc musieliśmy użyć algorytmu brute-force.

A co to za nowe funkcje? Pierwsza z nich była od dość długiego czasu oczekiwana przez społeczność: wyświetlanie czasu pozostałego do kolejnej zmiany filamentu – zarówno w trybie ręcznym, jak i MMU. Możesz teraz zaplanować tok zmian filamentu, zamiast polegać tylko na desperackim pikaniu drukarki. Czekamy jeszcze na aktualizacje do PrusaSlicer (oraz innych slicerów), które pozwalałyby wykorzystać tę funkcję. Niedługo pojawi się to również w MINI.

Z mniejszych aktualizacji mamy opcję nagrzewania do drukowana filamentem PVB oraz obsługę dysz o średnicy 0,8 mm.

Tłumaczenia od społeczności

Kolejna nowość: firmware zawiera teraz tłumaczenia wykonane przez społeczność. Nasze drukarki mówią wieloma językami, jednak dotychczas musieliśmy osobiście zajmować się wszystkimi wersjami językowymi. Który z ponad 2000 języków świata powinniśmy postawić ponad innymi, biorąc pod uwagę ograniczoną pamięć? Jeden język zajmuje do 12KB, dlatego jednocześnie możemy zapewnić obsługę do 16 z nich. Zdecydowaliśmy, że drukarka będzie dostarczana z jednym zainstalowanym wcześniej zestawem języków, dając użytkownikom możliwość przygotowania własnych tłumaczeń. Według nas jest to sprawiedliwe: jeśli wśród społeczności znajdą się entuzjaści mówiący danym językiem, to będą oni utrzymywać dane tłumaczenie. Dzięki użytkownikowi 3d-gussner (który jest również autorem systemu tłumaczeń), mamy już obsługę języka niderlandzkiego. Podmenu „Od społeczności” znajdziesz w menu wyboru języka, a na razie dostępna jest tylko opcja „Nederlands” (niderlandzki). Jeśli wybierzesz ten język, drukarka skopiuje go do pamięci flash CPU i zrestartuje się – tak samo, jak w przypadku „oficjalnych” tłumaczeń. Uważaj, jeśli nie mówisz po niderlandzku – powrót do Twojego języka może okazać się trudny 🙂 Obecnie pracujemy nad narzędziami i instrukcjami dla tłumaczy społecznościowych – szczegóły wkrótce.

Proces czytania karty SD został całkowicie przerobiony i jest teraz dziesięć razy szybszy! Tworzenie listy plików i praca z nią jest bardzo szybka, bez względu na to, czy jest na niej dziesięć czy sto pozycji. Do teraz tworzenie dużych list było problematyczne. Z pewnych względów, do sortowania używamy algorytmu Bubble Sort, który może potrzebować nawet 30 sekund. Algorytm Shell Sort, wybrany spośród wielu innych, jest zauważalnie szybszy, ale trudniejszy do zaimplementowania. Jego jedyną znamienitą wadą jest sortowanie również folderów. Rozwiązaliśmy to uruchamiając go dwa razy – osobno dla folderów i plików. W chwili obecnej firmware nadal pracuje z algorytmem Bubble Sort, który jest jednak znacznie szybszy dzięki nowemu procesowi odczytu karty SD. Gdy już jednak dokładnie wszystko przetestujemy, prawdopodobnie przełączymy się na Shell Sort.

Obsługa serwerów druku

To odpowiedź na kolejną popularną prośbę: lepsza obsługa oprogramowania zewnętrznego do komunikacji z drukarką przez linię szeregową (Octoprint, Pronterface czy Repetier-Host), aby użytkownik mógł dopasować wszystko do własnych potrzeb. Ten pomysł mieliśmy już od jakiegoś czasu, ale do wdrożenia potrzebowaliśmy wolnej pamięci.

Omówmy przykład funkcji Thumbnail Skipper, czyli głównego źródła przyspieszenia odczytu karty SD. PrusaSlicer generuje miniaturki dla MINI, które są częścią pliku GCODE. Nie można ich oczywiście wyświetlić na ekranie MK3. Aby uniknąć problemów, nie były one generowane (mogły powodować odrzucanie firmware przez watchdoga), mogły również opóźniać start wydruku. Jednak zewnętrzne oprogramowanie może z nich korzystać, ponieważ ilustracja zawsze daje lepszy ogląd niż sama nazwa pliku (czasami pisana wręcz szyfrem). Octoprint ma już wtyczki wyświetlające miniaturki, więc ciągle otrzymywaliśmy sporo próśb od społeczności dotyczących takiej funkcji.

Użyliśmy nowego procesu odczytu karty SD (zwiększającego prędkość prawie dziesięciokrotnie). Proces ten może pomijać linijki z komentarzami w G-code, wliczając w to miniaturki. Taka zmiana wymagała dokładnych testów. Wydaje się to błahe, ale wymagało istotnego przepisania jednej z ważnych sekcji firmware.

Kolejną funkcją opartą na komunikacji z zewnętrznym oprogramowaniem są Host Actions (akcje serwera druku). Oznacza to taki sam priorytet zarówno dla lokalnej, jak i zdalnej kontroli – co daje możliwość rozpoczynania wydruków zarówno pokrętłem kontrolnym, jak i z zewnętrznego interfejsu, generując taką samą odpowiedź w obydwóch przypadkach. To również brzmi jak błahostka, ale nie przewidzieliśmy wszystkich problemów na początku. Na przykład drukarka ma funkcję zatrzymującą wentylator do czyszczenia, jeśli okaże się, że nie kręci się prawidłowo. Co oczywiście nie ma sensu, gdy jesteś z dala od urządzenia… Musieliśmy przemyśleć i przerobić wiele rzeczy.

Dzięki Host Actions, elementy kodu odpowiedzialne za komunikację zostały uporządkowane. Mamy nadzieję, że dzięki temu zewnętrzne oprogramowanie będzie w stanie lepiej komunikować się z drukarką. Oznacza to mniejszą potrzebę interwencji użytkownika i więcej możliwości dopasowania wszystkiego do specyficznych potrzeb. Nawiasem mówiąc, jest to pokaz potęgi otwartego źródła, które umożliwia takie szybkie i łatwe poprawki.

To wszystko… Prawie! Wszystkie mniej spektakularne (ale nie mniej ważne) szczegóły znajdziesz bardzo obszernej liście zmian w firmware 3.10. Wsparcie deweloperskie społeczności nie polega tylko na chwaleniu się tym podczas imprez i spotkań, ale przede wszystkim na przygotowaniu dokładnej dokumentacji. Będziemy nadal nad tym pracować!

Mamy nadzieję, że poprawienie obsługi serwerów druku pomoże przyspieszyć rozwój zewnętrznego oprogramowania do zarządzania drukarkami. Daj nam znać jaki jest Twój ulubiony interfejs kontrolny i z jakiego powodu, abyśmy mogli lepiej skupić się na rzeczach najważniejszych.

Ostatnie ogłoszenie, ale nie mniej ważne to mała zapowiedź przyszłej funkcji firmware: dodamy „licznik przebiegu” w prawidłowo nazwanym menu „Konserwacja”. Będzie on monitorował ilość obrotów każdego silnika krokowego, informując użytkownika o konieczności smarowania łożysk, kontroli lub wymiany części itp. Jest to ważne zarówno dla jakości wydruków, jak i długotrwałej, bezawaryjnej pracy Twojej drukarki. Więcej o tym w kolejnym „Dzienniku Dewelopera”! W międzyczasie, jeśli masz jakikolwiek pomysł na ulepszenie MK3, daj nam znać w specjalnym wątku na naszym forum!

Udanego drukowania!