Ten artykuł jest częścią Seria techniczna Prusa XL na INVESTEGATE.de
Wszystkie przewodniki zakładają, że Podstawy Prusa XL są poprawne.
Jeśli nie, zacznij tutaj:
Podstawy Prusa XL - podstawy techniczne

ScrubbyXL to skoncentrowany na niezawodności mod czyszczenia dysz dla Prusa XL. Dodaje on funkcję automatycznego czyszczenia dysz przed procesem Mesh Bed Leveling (MBL) oraz opcjonalne czyszczenie dysz podczas drukowania (uruchamiane za pomocą kodu G), pomagając zapobiegać gromadzeniu się filamentu na końcówce dyszy - szczególnie w przypadku długich wydruków, gdzie niewielkie pozostałości mogą przekształcić się w defekty lub awarie.
Dlaczego ScrubbyXL istnieje
Zanieczyszczenie końcówki dyszy jest jednym z tych problemów, które często zaczynają się od drobnych rzeczy, a kończą na zniszczonym wydruku. Niewielki kleks, resztki PETG lub lekko przypalony materiał mogą przykleić się do dyszy, a następnie zostać przeciągnięte przez pierwszą warstwę, zakłócać sondowanie lub ostatecznie powodować defekty powierzchni i kolizje w przypadku długich zadań.
ScrubbyXL rozwiązuje ten problem za pomocą prostego pomysłu: nie czekaj, aż problem się pojawi - czyść proaktywnie. Pierwsza część odbywa się przed MBL: poprzez dodanie niewielkiej poprawki do kodu startowego G, dysza jest czyszczona, dzięki czemu może sondować podłoże w czystszym stanie. Celem nie jest “więcej poziomowania”, ale bardziej spójne warunki podczas poziomowania, co pomaga w prawidłowym rozpoczęciu pierwszej warstwy.
Druga część dotyczy długich wydruków. ScrubbyXL może być uruchamiany podczas drukowania w odstępach czasu zdefiniowanych przez użytkownika (na przykład co N warstw) za pomocą kodu G zintegrowanego z ustawieniami slicera. Pomaga to ograniczyć stopniowe narastanie, które w przeciwnym razie gromadzi się przez wiele godzin i może ostatecznie spowodować niepowodzenie drukowania na późnym etapie zadania.
Wersje i konfiguracja
Aby dopasować się do różnych konfiguracji, ScrubbyXL jest dostępny w wielu wariantach:
- Rozmiary otworów montażowych: M3 / M4 / M5.
- Rozmiary szczoteczek silikonowych: A1 lub A1 mini.
- Opcje montażu: magnetyczny (magnesy włożone podczas drukowania lub przyklejone później) lub stała, w pełni przykręcona wersja bez magnesów.
Zalecana przeze mnie konfiguracja to wersja magnetyczna z włożonymi magnesami i mini szczotką A1. Montaż magnetyczny jest szczególnie praktyczny, ponieważ możesz chcieć szybko usunąć szczotkę - szczególnie po prawej stronie, gdzie Tool 5 ładuje / rozładowuje się nad tym obszarem. Aby uzyskać najlepszy efekt wycierania, zalecam zainstalowanie wycieraczek po obu stronach, ale można również uruchomić tylko jedną stronę i odpowiednio dostosować kod G.
Pobierz ScrubbyXL Mod dla Prusa XL na Printables
Czego się spodziewać
- Mniej pozostałości na końcówkach dysz podczas długich zadań, co zmniejsza ryzyko awarii na późnych etapach drukowania.
Kody G
Rozpoczęcie zmian w kodzie G
- Zintegrowana procedura czyszczenia / wycierania dysz więc dysza jest czyszczona mechanicznie w ramach rozruchu.
- Dostosowano oczekiwanie narzędzia na pozycję temperatury do przodu aby ułatwić ręczne czyszczenie dyszy.
- Dodano wskaźnik dźwiękowy (sygnały dźwiękowe przed czyszczeniem dyszy i przed linią płukania) dla lepszej informacji zwrotnej podczas uruchamiania.
- Komentarz usunięty
G29 P9, ponieważ powoduje to zbyt wysoką temperaturę tuż przed MBL. - Przesunięcie linii przedmuchiwania dla pierwszego i ostatniego narzędzia o 3 mm. aby uniknąć kontaktu z modem szczoteczki.
- Przerobiony kod G mosiężnej szczotki Surfalex2000 w celu poprawy wyników czyszczenia (bardziej niezawodne czyszczenie).
Zoptymalizowany i poprawiony kod startowy Prusa XL dla ScrubbyXL
Rozpocznij kod G dla Prusa XL (5TH)
M17 ; włączenie stepperów
M862.3 P "XL" ; sprawdzenie modelu drukarki
M862.5 P2 ; sprawdzenie poziomu kodu g
M862.6 P "Input shaper" ; sprawdzenie funkcji FW
M115 U6.4.0+11974
G90 ; użycie współrzędnych bezwzględnych
M83 ; tryb względny ekstrudera
ustaw obszar drukowania
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}
; informacja o średnicy dyszy
{if (is_extruder_used[0])} M862.1 T0 P{nozzle_diameter[0]} A{(filament_abrasive[0] ? 1 : 0)} F{(nozzle_high_flow[0] ? 1 : 0)}{endif}
{if (is_extruder_used[1])} M862.1 T1 P{nozzle_diameter[1]} A{(filament_abrasive[1] ? 1 : 0)} F{(nozzle_high_flow[1] ? 1 : 0)}{endif}
{if (is_extruder_used[2])} M862.1 T2 P{nozzle_diameter[2]} A{(filament_abrasive[2] ? 1 : 0)} F{(nozzle_high_flow[2] ? 1 : 0)}{endif}
{if (is_extruder_used[3])} M862.1 T3 P{nozzle_diameter[3]} A{(filament_abrasive[3] ? 1 : 0)} F{(nozzle_high_flow[3] ? 1 : 0)}{endif}
{if (is_extruder_used[4])} M862.1 T4 P{nozzle_diameter[4]} A{(filament_abrasive[4] ? 1 : 0)} F{(nozzle_high_flow[4] ? 1 : 0)}{endif}
; wyłącz nieużywane grzałki
{if ! is_extruder_used[0]} M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{if num_extruders > 2 and ! is_extruder_used[2]}M104 T2 S0{endif}
{if num_extruders > 3 and ! is_extruder_used[3]}M104 T3 S0{endif}
{if num_extruders > 4 and ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher
ustaw temperaturę łoża i wytłaczarki dla MBL
M140 S[first_layer_bed_temperature] ; ustaw temperaturę łoża
M104 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set temp
Home XY
G28 XY
spróbuj wybrać narzędzia używane w druku
G1 F{travel_speed * 60}
{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}
{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}
{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}
{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}
; wybór narzędzia, które zostanie użyte do home & MBL
T{initial_tool} S1 L0 D0
TUTAJ NARZĘDZIE MUSI CZEKAĆ WYŁĄCZNIE Z POWODU SILIKONOWEJ SZCZOTKI
G1 Z30
G1 X145 Y-8 F{travel_speed * 60}
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; czekać na temp
home Z z narzędziem MBL
M84 E ; wyłącz silnik E
G28 Z
G0 Z5 ; dodać luz Z
TUTAJ NARZĘDZIE MUSI CZEKAĆ WYŁĄCZNIE Z POWODU SZCZOTKI SILIKONOWEJ
G1 Z30
G1 X145 Y-8 F{travel_speed * 60}
M104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; ustaw temperaturę bezczynności
M190 S[first_layer_bed_temperature] ; poczekaj na temperaturę łóżka
G29 G ; pochłania ciepło
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; czekać na temp
M300 S800 P200 ; wskaźnik PIEP
; przejście do obszaru czyszczenia dyszy
czyszczenie dyszy dla lewej i prawej wycieraczki silikonowej
M302 S155 ; obniż limit wytłaczania na zimno do 155C
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; wycofanie do czyszczenia dyszy
M84 E ; wyłączenie silnika E
--- Rozpoczęcie czyszczenia dyszy
G1 Z5 ; Przesunięcie stołu z drogi
{if initial_tool == 0 lub initial_tool == 1 }
; --- Start Nozzle Wipe LEFT ---
G1 X-2 Y-8 F24000 ; Przejście do początku obszaru wycierania
G1 X28 Y-8 F24000 ; Przejście wycierania 1
G1 X-2 Y-7.5 F24000 ; Zmiana położenia
G1 X28 Y-7.5 F24000 ; Przejście oczyszczania 2
G1 X-2 Y-7 F24000 ; Zmiana położenia
G1 X28 Y-7 F24000 ; Przejście czyszczące 3
G1 X-2 Y-6.5 F24000 ; Zmiana położenia
G1 X28 Y-6.5 F24000 ; Czyszczenie przejścia 4
G1 X-2 Y-6 F24000 ; Zmiana położenia
G1 X28 Y-6 F24000 ; Przejście 5
G1 X-2 Y-6.5 F24000 ; Zmiana położenia
G1 X28 Y-6.5 F24000 ; Przetarcie przejścia 6
G1 X-2 Y-7 F24000 ; Zmiana położenia
G1 X28 Y-7 F24000 ; Przetarcie przejścia 7
G1 X-2 Y-7.5 F24000 ; Zmiana położenia
G1 X28 Y-7.5 F24000 ; Przetarcie przejścia 8
G1 X-2 Y-8 F24000 ; Zmiana położenia
G1 X28 Y-8 F24000 ; Przejście czyszczące 9
Końcówka dyszy Wipe LEFT ---
{ else}
; --- Rozpocznij wycieranie dyszą W PRAWO ---
G1 X332 Y-8 F24000 ; Przejście do początku obszaru wycierania
G1 X361 Y-8 F24000 ; Przejście wycierania 1
G1 X332 Y-7.5 F24000 ; Zmiana położenia
G1 X361 Y-7.5 F24000 ; Przejście oczyszczania 2
G1 X332 Y-7 F24000 ; Zmiana położenia
G1 X361 Y-7 F24000 ; Przejście czyszczące 3
G1 X332 Y-6.5 F24000 ; Zmiana położenia
G1 X361 Y-6.5 F24000 ; Przejście czyszczenia 4
G1 X332 Y-6 F24000 ; Zmiana położenia
G1 X361 Y-6 F24000 ; Przejście 5
G1 X332 Y-6.5 F24000 ; Zmiana położenia
G1 X361 Y-6.5 F24000 ; Wycieranie przejścia 6
G1 X332 Y-7 F24000 ; Zmiana położenia
G1 X361 Y-7 F24000 ; Przejście czyszczące 7
G1 X332 Y-7.5 F24000 ; Zmiana położenia
G1 X361 Y-7.5 F24000 ; Wycieranie przejścia 8
G1 X332 Y-8 F24000 ; Zmiana położenia
G1 X361 Y-8 F24000 ; Przejście 9
Końcówka dyszy Wipe RIGHT ---
{endif}
G1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2))) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}
; czyszczenie dyszy
Komentarz poniżej, ponieważ ustawia zbyt wysoką temperaturę przed MBL.
G29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) 0 and (is_extruder_used[0])} M104 T0 S{first_layer_temperature[0]} {endif}
{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}
{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}
{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}
{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}
{if (is_extruder_used[0]) and initial_tool != 0}
M591 S0 ; wyłącz wykrywanie zablokowania
Gotowy do drukowania melodii, przed czyszczeniem
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
pierwsze narzędzie do czyszczenia
Edytowano. Pozycja X została zmieniona z 30 na 33 ze względu na szczotkę silikonową.
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T0 S{first_layer_temperature[0]}
T0 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X70 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X73 Z0.05 F8000 ; wytrzyj, przesuń blisko łóżka
G0 X76 Z0.2 F8000 ; przetrzyj, szybko odsuń się od stołu
G1 E{-retract_length_toolchange[0]} F2400 ; wycofanie
{e_retracted[0] = retract_length_toolchange[0]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0
{endif}
{if (is_extruder_used[1]) and initial_tool != 1}
;
; czyszczenie drugiego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T1 S{first_layer_temperature[1]}
T1 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X110 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X107 Z0.05 F8000 ; wytrzeć, zbliżyć się do łóżka
G0 X104 Z0.2 F8000 ; przetrzyj, szybko odsuń się od stołu
G1 E{-retract_length_toolchange[1]} F2400 ; wycofanie
{e_retracted[1] = retract_length_toolchange[1]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1
{endif}
{if (is_extruder_used[2]) and initial_tool != 2}
;
; czyszczenie trzeciego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T2 S{first_layer_temperature[2]}
T2 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X250 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X253 Z0.05 F8000 ; wytrzyj, przesuń blisko łóżka
G0 X256 Z0.2 F8000 ; wytrzeć, szybko odsunąć się od łoża
G1 E{-retract_length_toolchange[2]} F2400 ; wycofanie
{e_retracted[2] = retract_length_toolchange[2]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2
{endif}
{if (is_extruder_used[3]) and initial_tool != 3}
;
; czyszczenie czwartego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T3 S{first_layer_temperature[3]}
T3 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X290 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X287 Z0.05 F8000 ; wytrzeć, zbliżyć się do łoża
G0 X284 Z0.2 F8000 ; wytrzeć, szybko odsunąć się od stołu
G1 E{-retract_length_toolchange[3]} F2400 ; wycofanie
{e_retracted[3] = retract_length_toolchange[3]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3
{endif}
{if (is_extruder_used[4]) and initial_tool != 4}
;
; czyszczenie piątego narzędzia
Edytowano. Pozycja X dla narzędzia 4 została zmieniona z 330 na 327 z powodu szczotki silikonowej.
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T4 S{first_layer_temperature[4]}
T4 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X290 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X287 Z0.05 F8000 ; wytrzeć, zbliżyć się do łóżka
G0 X284 Z0.2 F8000 ; czyszczenie, szybkie odsunięcie od stołu
G1 E{-retract_length_toolchange[4]} F2400 ; wycofanie
{e_retracted[4] = retract_length_toolchange[4]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4
{endif}
;
; czyszczenie narzędzia początkowego
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T{initial_tool} S{first_layer_temperature[initial_tool]}
T{initial_tool} S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
Edytowano. Pozycja X dla narzędzia 0 została zmieniona z 30 na 33 z powodu szczotki silikonowej.
Edytowano. Pozycja X dla narzędzia 4 została zmieniona z 330 na 327 z powodu szczotki silikonowej.
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; zbliż się do krawędzi arkusza.
G0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; kontynuuj czyszczenie i wytrzyj dyszę
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; przetrzyj, zbliż się do łóżka
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wytrzyj, szybko odsuń się od łóżka
G1 E-{retract_length[initial_tool]} F2400 ; wycofanie
{e_retracted[initial_tool] = retract_length[initial_tool]}
M591 R ; przywrócenie wykrywania zablokowania
G92 E0 ; resetowanie pozycji ekstrudera
Kod G przed zmianą warstwy
Podczas drukowania dysza jest automatycznie czyszczona co X warstw)
Kod G przed zmianą warstwy
;BEFORE_LAYER_CHANGE
G92 E0.0
;[layer_z]
; Podczas drukowania dysza jest automatycznie czyszczona co X warstw. (X = 400 warstw)
; --- Co 400 warstw: automatyczne czyszczenie ---
{if layer_num > 0 && layer_num % 400 == 0}
; Zapis bieżącej pozycji (Buddy FW)
G1 F{travel_speed * 100}
G60 S0 ; zapis bieżącej pozycji XYZ
M300 S300 P200 ; wskaźnik PIEP
Podnieś Z nieco dla bezpieczeństwa
G1 Z{layer_z + 5} F1000
; --- Start Nozzle Wipe ---
{if initial_tool == 0 lub initial_tool == 1 }
; --- Start Nozzle Wipe LEFT ---
G1 X-2 Y-8 F24000
G1 X28 Y-8 F24000
G1 X-2 Y-7.5 F24000
G1 X28 Y-7.5 F24000
G1 X-2 Y-7 F24000
G1 X28 Y-7 F24000
G1 X-2 Y-6.5 F24000
G1 X28 Y-6.5 F24000
G1 X-2 Y-6 F24000
G1 X28 Y-6 F24000
G1 X-2 Y-6.5 F24000
G1 X28 Y-6.5 F24000
G1 X-2 Y-7 F24000
G1 X28 Y-7 F24000
G1 X-2 Y-7.5 F24000
G1 X28 Y-7.5 F24000
G1 X-2 Y-8 F24000
G1 X28 Y-8 F24000
--- Dysza końcowa Ściereczka LEWA ---
{else}
; --- Start Nozzle Wipe RIGHT ---
G1 X332 Y-8 F24000
G1 X361 Y-8 F24000
G1 X332 Y-7.5 F24000
G1 X361 Y-7.5 F24000
G1 X332 Y-7 F24000
G1 X361 Y-7 F24000
G1 X332 Y-6.5 F24000
G1 X361 Y-6.5 F24000
G1 X332 Y-6 F24000
G1 X361 Y-6 F24000
G1 X332 Y-6.5 F24000
G1 X361 Y-6.5 F24000
G1 X332 Y-7 F24000
G1 X361 Y-7 F24000
G1 X332 Y-7.5 F24000
G1 X361 Y-7.5 F24000
G1 X332 Y-8 F24000
G1 X361 Y-8 F24000
--- Dysza końcowa Wytrzeć PRAWO ---
{endif}
; --- End Nozzle Wipe ---
Przywróć pozycję
G61 S0 ; przywrócenie zapisanej pozycji XYZ
{endif}
Bonus: Print Finish Sound
Odtwarza krótką melodię kończącą.
Koniec kodu G
G4 ; czekać
{if layer_z < max_print_height} G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Przesuń łóżko w dół
P0 S1 ; zaparkuj narzędzie
{if layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Przesuń łóżko bardziej w dół
Wyłącz grzejniki ekstrudera
{if is_extruder_used[0]} M104 T0 S0{endif}
{if is_extruder_used[1]}M104 T1 S0{endif}
{if is_extruder_used[2]}M104 T2 S0{endif}
{if is_extruder_used[3]}M104 T3 S0{endif}
{if is_extruder_used[4]}M104 T4 S0{endif}
M140 S0 ; wyłączenie stołu grzewczego
M107 ; wyłączenie wentylatora
M221 S100 ; resetowanie procentu przepływu
M84 ; wyłączenie silników
Melodia końcowa
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
M77 ; zatrzymanie timera drukowania
; max_layer_z = [max_layer_z]
Opcjonalnie: Dodatkowy mod szczotki mosiężnej MBL od Surfalex2000
Jeśli chcesz również użyć moda szczotki mosiężnej MBL od @Surfalex2000:
Rozpocznij kod G dla Prusa XL (5TH)
M17 ; włączenie stepperów
M862.3 P "XL" ; sprawdzenie modelu drukarki
M862.5 P2 ; sprawdzenie poziomu kodu g
M862.6 P "Input shaper" ; sprawdzenie funkcji FW
M115 U6.4.0+11974
G90 ; użycie współrzędnych bezwzględnych
M83 ; tryb względny ekstrudera
ustaw obszar drukowania
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}
; informacja o średnicy dyszy
{if (is_extruder_used[0])} M862.1 T0 P{nozzle_diameter[0]} A{(filament_abrasive[0] ? 1 : 0)} F{(nozzle_high_flow[0] ? 1 : 0)}{endif}
{if (is_extruder_used[1])} M862.1 T1 P{nozzle_diameter[1]} A{(filament_abrasive[1] ? 1 : 0)} F{(nozzle_high_flow[1] ? 1 : 0)}{endif}
{if (is_extruder_used[2])} M862.1 T2 P{nozzle_diameter[2]} A{(filament_abrasive[2] ? 1 : 0)} F{(nozzle_high_flow[2] ? 1 : 0)}{endif}
{if (is_extruder_used[3])} M862.1 T3 P{nozzle_diameter[3]} A{(filament_abrasive[3] ? 1 : 0)} F{(nozzle_high_flow[3] ? 1 : 0)}{endif}
{if (is_extruder_used[4])} M862.1 T4 P{nozzle_diameter[4]} A{(filament_abrasive[4] ? 1 : 0)} F{(nozzle_high_flow[4] ? 1 : 0)}{endif}
; wyłącz nieużywane grzałki
{if ! is_extruder_used[0]} M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{if num_extruders > 2 and ! is_extruder_used[2]}M104 T2 S0{endif}
{if num_extruders > 3 and ! is_extruder_used[3]}M104 T3 S0{endif}
{if num_extruders > 4 and ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher
ustaw temperaturę łoża i wytłaczarki dla MBL
M140 S[first_layer_bed_temperature] ; ustaw temperaturę łoża
M104 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set temp
Home XY
G28 XY
spróbuj wybrać narzędzia używane w druku
G1 F{travel_speed * 60}
{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}
{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}
{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}
{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}
; wybór narzędzia, które zostanie użyte do home & MBL
T{initial_tool} S1 L0 D0
TUTAJ NARZĘDZIE MUSI CZEKAĆ WYŁĄCZNIE Z POWODU SILIKONOWEJ SZCZOTKI
G1 Z30
G1 X145 Y-8 F{travel_speed * 60}
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; czekać na temp
home Z z narzędziem MBL
M84 E ; wyłącz silnik E
G28 Z
G0 Z5 ; dodać luz Z
TUTAJ NARZĘDZIE MUSI CZEKAĆ WYŁĄCZNIE Z POWODU SZCZOTKI SILIKONOWEJ
G1 Z30
G1 X145 Y-8 F{travel_speed * 60}
M104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; ustaw temperaturę bezczynności
M190 S[first_layer_bed_temperature] ; poczekaj na temperaturę łóżka
G29 G ; pochłania ciepło
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" lub filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; czekać na temp
M300 S800 P200 ; wskaźnik PIEP
; przejście do obszaru czyszczenia dyszy
; Mocowanie szczotki dyszy Surfalex2000 na Printables
https://www.printables.com/model/644817-prusa-xl-series-front-nozzle-srcubber-for-use-with
G1 E-10 F2400 ; więcej cofania, aby skompensować wyciek przed czyszczeniem dyszy
Rozpocząć cykl szczotki dyszowej Surfalex2000
--- Rozpoczęcie cyklu szczotki dyszy (rampa prędkości) ---
G1 X160 Y-5 Z5 F8000
G1 X160 Y-5 Z1 F8000
Zyklus 1 (langsam) ---
G1 X200 Y-5 F8000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
Zyklus 2 (mittel) ---
G1 X200 Y-5 F14000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
Zyklus 3 (schnell) ---
G1 X200 Y-5 F16000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
Zyklus 4 (schnell) ---
G1 X200 Y-5 F20000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
G1 X160 Y-5 Z5 F20000 ; cykl szczotki dyszy
Koniec cyklu szczotki dyszy surfalex2000
czyszczenie dyszy dla lewej i prawej wycieraczki silikonowej
M302 S155 ; obniżenie limitu wytłaczania na zimno do 155C
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; wycofanie w celu wyczyszczenia dyszy
M84 E ; wyłączenie silnika E
--- Rozpoczęcie czyszczenia dyszy
G1 Z5 ; Przesunięcie łoża z drogi
{if initial_tool == 0 lub initial_tool == 1 }
; --- Start Nozzle Wipe LEFT ---
G1 X-2 Y-8 F24000 ; Przejście do początku obszaru wycierania
G1 X28 Y-8 F24000 ; Przejście wycierania 1
G1 X-2 Y-7.5 F24000 ; Zmiana położenia
G1 X28 Y-7.5 F24000 ; Przejście oczyszczania 2
G1 X-2 Y-7 F24000 ; Zmiana położenia
G1 X28 Y-7 F24000 ; Przejście czyszczące 3
G1 X-2 Y-6.5 F24000 ; Zmiana położenia
G1 X28 Y-6.5 F24000 ; Czyszczenie przejścia 4
G1 X-2 Y-6 F24000 ; Zmiana położenia
G1 X28 Y-6 F24000 ; Przejście 5
G1 X-2 Y-6.5 F24000 ; Zmiana położenia
G1 X28 Y-6.5 F24000 ; Przetarcie przejścia 6
G1 X-2 Y-7 F24000 ; Zmiana położenia
G1 X28 Y-7 F24000 ; Przetarcie przejścia 7
G1 X-2 Y-7.5 F24000 ; Zmiana położenia
G1 X28 Y-7.5 F24000 ; Przetarcie przejścia 8
G1 X-2 Y-8 F24000 ; Zmiana położenia
G1 X28 Y-8 F24000 ; Przejście czyszczące 9
Końcówka dyszy Wipe LEFT ---
{ else}
; --- Rozpocznij wycieranie dyszą W PRAWO ---
G1 X332 Y-8 F24000 ; Przejście do początku obszaru wycierania
G1 X361 Y-8 F24000 ; Przejście wycierania 1
G1 X332 Y-7.5 F24000 ; Zmiana położenia
G1 X361 Y-7.5 F24000 ; Przejście oczyszczania 2
G1 X332 Y-7 F24000 ; Zmiana położenia
G1 X361 Y-7 F24000 ; Przejście czyszczące 3
G1 X332 Y-6.5 F24000 ; Zmiana położenia
G1 X361 Y-6.5 F24000 ; Przejście czyszczenia 4
G1 X332 Y-6 F24000 ; Zmiana położenia
G1 X361 Y-6 F24000 ; Przejście 5
G1 X332 Y-6.5 F24000 ; Zmiana położenia
G1 X361 Y-6.5 F24000 ; Wycieranie przejścia 6
G1 X332 Y-7 F24000 ; Zmiana położenia
G1 X361 Y-7 F24000 ; Przejście czyszczące 7
G1 X332 Y-7.5 F24000 ; Zmiana położenia
G1 X361 Y-7.5 F24000 ; Wycieranie przejścia 8
G1 X332 Y-8 F24000 ; Zmiana położenia
G1 X361 Y-8 F24000 ; Przejście 9
Końcówka dyszy Wipe RIGHT ---
{endif}
G1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2))) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}
; czyszczenie dyszy
Komentarz poniżej, ponieważ ustawia zbyt wysoką temperaturę przed MBL.
G29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) 0 and (is_extruder_used[0])} M104 T0 S{first_layer_temperature[0]} {endif}
{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}
{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}
{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}
{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}
{if (is_extruder_used[0]) and initial_tool != 0}
M591 S0 ; wyłącz wykrywanie zablokowania
Gotowy do drukowania melodii, przed czyszczeniem
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
pierwsze narzędzie do czyszczenia
Edytowano. Pozycja X została zmieniona z 30 na 33 ze względu na szczotkę silikonową.
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T0 S{first_layer_temperature[0]}
T0 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X70 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X73 Z0.05 F8000 ; wytrzyj, przesuń blisko łóżka
G0 X76 Z0.2 F8000 ; przetrzyj, szybko odsuń się od stołu
G1 E{-retract_length_toolchange[0]} F2400 ; wycofanie
{e_retracted[0] = retract_length_toolchange[0]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0
{endif}
{if (is_extruder_used[1]) and initial_tool != 1}
;
; czyszczenie drugiego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T1 S{first_layer_temperature[1]}
T1 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X110 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X107 Z0.05 F8000 ; wytrzeć, zbliżyć się do łóżka
G0 X104 Z0.2 F8000 ; przetrzyj, szybko odsuń się od stołu
G1 E{-retract_length_toolchange[1]} F2400 ; wycofanie
{e_retracted[1] = retract_length_toolchange[1]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1
{endif}
{if (is_extruder_used[2]) and initial_tool != 2}
;
; czyszczenie trzeciego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T2 S{first_layer_temperature[2]}
T2 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X250 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X253 Z0.05 F8000 ; wytrzyj, przesuń blisko łóżka
G0 X256 Z0.2 F8000 ; wytrzeć, szybko odsunąć się od łoża
G1 E{-retract_length_toolchange[2]} F2400 ; wycofanie
{e_retracted[2] = retract_length_toolchange[2]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2
{endif}
{if (is_extruder_used[3]) and initial_tool != 3}
;
; czyszczenie czwartego narzędzia
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T3 S{first_layer_temperature[3]}
T3 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X290 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X287 Z0.05 F8000 ; wytrzeć, zbliżyć się do łoża
G0 X284 Z0.2 F8000 ; wytrzeć, szybko odsunąć się od stołu
G1 E{-retract_length_toolchange[3]} F2400 ; wycofanie
{e_retracted[3] = retract_length_toolchange[3]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3
{endif}
{if (is_extruder_used[4]) and initial_tool != 4}
;
; czyszczenie piątego narzędzia
Edytowano. Pozycja X dla narzędzia 4 została zmieniona z 330 na 327 z powodu szczotki silikonowej.
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T4 S{first_layer_temperature[4]}
T4 S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; zbliżyć się do krawędzi arkusza
G0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X290 E9 F800 ; kontynuuj oczyszczanie i przetrzyj dyszę
G0 X287 Z0.05 F8000 ; wytrzeć, zbliżyć się do łóżka
G0 X284 Z0.2 F8000 ; wytrzeć, szybko odsunąć się od stołu
G1 E{-retract_length_toolchange[4]} F2400 ; wycofanie
{e_retracted[4] = retract_length_toolchange[4]}
G92 E0 ; resetowanie pozycji ekstrudera
M104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4
{endif}
;
; czyszczenie narzędzia początkowego
;
G1 F{travel_speed * 60}
P0 S1 L2 D0; zaparkować narzędzie
M109 T{initial_tool} S{first_layer_temperature[initial_tool]}
T{initial_tool} S1 L0 D0; wybierz narzędzie
G92 E0 ; resetowanie pozycji ekstrudera
Edytowano. Pozycja X dla narzędzia 0 została zmieniona z 30 na 33 z powodu szczotki silikonowej.
Edytowano. Pozycja X dla narzędzia 4 została zmieniona z 330 na 327 z powodu szczotki silikonowej.
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; zbliż się do krawędzi arkusza.
G0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; czyszczenie podczas ruchu w kierunku arkusza
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; kontynuuj czyszczenie i wytrzyj dyszę
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; przetrzyj, zbliż się do łóżka
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327))) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 lub initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wytrzyj, szybko odsuń się od łóżka
G1 E-{retract_length[initial_tool]} F2400 ; wycofanie
{e_retracted[initial_tool] = retract_length[initial_tool]}
M591 R ; przywrócenie wykrywania zablokowania
G92 E0 ; resetowanie pozycji ekstrudera



