Obliczanie szacowanego czasu drukowania już wyciętego pliku

10

Zacząłem pisać aplikację, która oblicza szacunkowy całkowity czas drukowania z pliku kodu G dla już pokrojonego modelu.

Program działa i jest dość dokładny.

Działa w następujący sposób:

  1. Skanuje cały plik G-code, aby zidentyfikować wszystkie ruchy
  2. Oblicza czas dla każdego ruchu dzieląc odległość segmentu przez prędkość w mm / s.

Załóżmy, że jest to kod G:

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

To jest obliczenie, które wykonuje:

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

W tym przykładzie wydruk zajmie około 10,7 sekundy.

Bardziej ogólnie, stosowana formuła jest dla każdego ruchu:

moveTime = segmentLength / mmPerSecond

Podsumowując wszystkie czasy ruchu, mamy całkowity szacowany czas drukowania.

Widziałem, że niektóre fora stwierdzają, że czas drukowania 3D zależy również od niektórych ustawień drukarki 3D, zwłaszcza Acceleration X, Acceleration Y, Acceleration Z, Jerk i Z-Jerk.

Chciałbym umożliwić wykorzystanie tych wartości do dokładniejszego obliczenia czasu drukowania; nie rozumiem jednak, w jaki sposób te wartości wpływają na czas ruchu:

  1. Jak należy wziąć pod uwagę Przyspieszenie i Szarpnięcie; oraz w jaki sposób przyspieszają lub spowalniają czas drukowania?
  2. Jak powinienem edytować moją formułę, aby uwzględnić Przyspieszenie i Szarpnięcie w obliczeniach czasu drukowania?
Ukośnik wsteczny
źródło
Jak dokładne musisz być? Tak, możesz podłączyć przyspieszenia i zrekompensować krótkie przebiegi, w których silniki nigdy nie osiągają pełnej prędkości przed zwolnieniem itd., Ale jeśli wynik netto jest wyłączony tylko, powiedzmy, o 2%, czy to cię obchodzi? Spróbuj wydrukować coś prostego jak kwadratowa piramida i porównaj swoje prognozy z rzeczywistością.
Carl Witthoft,
Chciałbym być tak precyzyjny, jak to tylko możliwe ... W tej chwili na 9-godzinnym wydruku różnica między prognozowaniem a rzeczywistością wynosi 10-15 minut, co jest bardzo dużo.
Przyjrzę się
Może mógłbyś sprawdzić slic3r i zobaczyć, jak oblicza te parametry. Pamiętam, że otrzymałem oszacowanie czasu podczas krojenia.
FarO,
@FarO Używam Slic3r i nigdy nie widziałem oszacowania czasu. Może nie szukam właściwego miejsca, ale wielu użytkowników prosi o tę funkcję przez Internet, więc obawiam się, że nie ma sposobu, aby poznać czas drukowania w Slic3r.
BackSlash,
@ BackSlash Zazwyczaj widzę to w Repetier na końcu krojenia w dzienniku wyjściowym. Myślę, że to pochodzi z samego Repetiera!
FarO

Odpowiedzi:

5

Próbowałem zajrzeć do oprogramowania układowego drukarki, aby zobaczyć, jak ustawienie Przyspieszenie wpływa na ruch maszyny. Z tego, co mogłem powiedzieć, przyspieszenie wydawało się być wdrażane inaczej w zależności od oprogramowania, na które patrzyłem, a także na to, jakie były ustawienia w drukarce. Nie szukałem dalej, ponieważ pisanie różnych reguł dla każdego oprogramowania wewnętrznego wydawało się zbyt wielkim problemem. Może ktoś, kto wie więcej na ten temat, wiedziałby, gdyby większość oprogramowania układowego używa tych samych obliczeń.

Podejrzewam, że ustawienie przyspieszenia nie wpłynie znacząco na czas drukowania. Wydaje się, że nie mają znaczenia na małych wydrukach, które drukowałem z małą prędkością. Jeśli drukujesz większe wydruki przy większych prędkościach, które mają długie ścieżki, w których dysza ma czas na przyspieszenie i zwolnienie, podejrzewam, że zauważysz większą różnicę z czasem.

Odkryłem, że największym błędem między przewidywanym czasem a faktycznym czasem był czas, w którym maszyna spędza przetwarzanie instrukcji. Podczas drukowania modelu, który ma wiele krótkich ruchów, które muszą zostać wysłane do drukarki, a które muszą zostać przetworzone i obliczone przez drukarkę, zauważyłem, że drukarka zatrzyma się na ułamek sekundy. Nie jest wystarczająco długo, aby zobaczyć różnicę w ruchach drukarek, ale jest wystarczająco zauważalny, aby usłyszeć. Podejrzewam, że na tańszych drukarkach spowodowałoby to większy błąd niż przyspieszenie.

Jeśli ktoś może dowiedzieć się, w jaki sposób drukarka oblicza ustawienia przyspieszenia i jakiej komendy G-code można użyć do pobrania ustawień przyspieszenia z drukarki, naprawdę chciałbym dowiedzieć się więcej na ten temat.

użytkownik802599
źródło
Dziękuję za odpowiedź, będę szukał dalej. Dzięki, że wskazałeś mi właściwy kierunek: mogę odczytać kod źródłowy Marlin i wyszukać części sterujące przyspieszeniem i szarpnięciem, to z pewnością pomoże, nie pomyślałem o tym! Dziękuję Ci!
BackSlash,
3
„Podejrzewam, że ustawienie przyspieszenia nie wpłynie znacząco na czas drukowania”. <- nie może być bardziej błędne. Przyspieszenie jest dominującym czynnikiem w czasie drukowania, ilekroć stosunek prędkości drukowania do wielkości detali jest wysoki (tj. Ustawienie dużej prędkości lub małych detali lub obu). Do tego stopnia, że ​​zwiększenie ustawienia [maks.] Prędkości dwukrotnie, jest mało prawdopodobne, aby skrócić czas drukowania nawet o 5%.
R .. GitHub ZATRZYMAJ LÓD
5

Przede wszystkim istnieje kilka ciekawych analizatorów open source napisanych w JavaScript, z których można korzystać online lub przeczytać źródło na https://www.gcodeanalyser.com/ i http://gcode.ws/ . Ich przewidywania nie są w pełni zgodne z faktycznym oprogramowaniem drukarki, ale wykonują dość zbliżoną pracę, a ich odczytanie byłoby pouczające.

Zasadniczo historia przyspieszenia i szarpnięcia polega na tym, że nie można natychmiast zmienić prędkości (prędkości lub kierunku) głowicy drukującej. Przyspieszenie i zwolnienie zajmuje trochę czasu. Przyspieszenie to maksymalna szybkość, z jaką prędkość głowicy drukującej może się zmieniać. Szarpnięcie jest czymś w rodzaju mylnego / hackowania i jest maksymalną fałszywą natychmiastową zmianą prędkości dozwoloną na styku dwóch segmentów / krzywych. Celem szarpnięcia jest uniknięcie niespokojnego ruchu podczas poruszania się po krzywej złożonej z wielu segmentów poprzez przyspieszanie / zwalnianie w każdym małym zakręcie. Pamiętaj, że istnieją dwa zestawy ustawień dla przyspieszenia i szarpnięcia:

  • maksymalna wartość bezwzględna (długość wektora 3D), która często zmieniała się jako część gcode w celu użycia różnych profili przyspieszenia dla ruchów drukowania w porównaniu do ruchów podróży, ścian vs wypełnienia itp.

  • wartości bezwzględne na oś (standardowa wartość bezwzględna 1D) dla ograniczeń maszyny, które są zwykle ustawiane w ustawieniach drukarki lub początkowym profilu gcode dla drukarki i nigdy się nie zmieniają.

Ruch jest ograniczony, aby zawsze przestrzegać obu zestawów ustawień.

Oprogramowania drukarka wykorzystuje ustawienia przyspieszania i szarpnięcie wraz z uprzedzona w nadchodzących komend ruchu zdecydować, jak faktycznie działają silniki. Kiedy rozpoczyna ruch, musi przyspieszać do skonfigurowanej prędkości maksymalnej w ramach ograniczeń przyspieszenia. Musi także zacząć zwalniać z powrotem w połowie, chyba że wie, że następny ruch będzie kontynuowany w tym samym kierunku; to, jak bardzo musi zwalniać, zależy od różnicy wektorów ruchu. Jeśli następny ruch będzie w przybliżeniu w tym samym kierunku, może być w stanie uniknąć spowolnienia poprzez użycie szarpnięcia, aby dokonać „natychmiastowej” zmiany prędkości na zakręcie. Tylko wtedy, gdy masz długie (w stosunku do prędkości) ruchy liniowe lub w przybliżeniu liniowe, faktycznie osiągniesz żądaną prędkość.

Aby oszacować czas drukowania, musisz to wymodelować . Śledź prędkość głowicy drukującej podczas przetwarzania / symulacji gcode, a dla każdego polecenia ruchu oblicz prędkość w funkcji czasu przy użyciu limitów przyspieszenia (przyspieszenie z maksymalną dozwoloną prędkością). Musisz również ustalić końcową prędkość, z którą chcesz zakończyć ruch, aby móc rozpocząć następną komendę ruchu, oraz punkt, aby rozpocząć zwalnianie, jeśli to konieczne, aby to osiągnąć.

R .. GitHub ZATRZYMAJ LÓD
źródło
Szarpnięcie jest pochodną przyspieszenia.
Trish,
1
@trish: chyba że nie jest. Zobacz moje pytanie 3dprinting.stackexchange.com/questions/10369/... .
R .. GitHub ZATRZYMAJ LÓD