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:
- Skanuje cały plik G-code, aby zidentyfikować wszystkie ruchy
- 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:
- Jak należy wziąć pod uwagę Przyspieszenie i Szarpnięcie; oraz w jaki sposób przyspieszają lub spowalniają czas drukowania?
- Jak powinienem edytować moją formułę, aby uwzględnić Przyspieszenie i Szarpnięcie w obliczeniach czasu drukowania?
źródło
Odpowiedzi:
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.
źródło
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ódło