Dieser Artikel ist Teil der Prusa XL Technische Serie auf INVESTEGATE.de
Alle Anleitungen gehen davon aus, dass die Prusa XL Fundamentals korrekt sind.
Wenn nicht, beginnen Sie hier:
Prusa XL Basics - Technische Grundlagen

ScrubbyXL ist ein Düsenreinigungsmodul für den Prusa XL, das auf Zuverlässigkeit ausgelegt ist. Er fügt ein automatisches Wischen vor dem Mesh Bed Leveling (MBL) und optionale Düsenwischungen während des Drucks (ausgelöst durch G-Code) hinzu und hilft dabei, Filamentablagerungen an der Düsenspitze zu verhindern - insbesondere bei langen Druckvorgängen, bei denen kleine Rückstände zu Defekten oder Ausfällen führen können.
Warum es ScrubbyXL gibt
Die Verschmutzung der Düsenspitze ist eines der Probleme, die oft klein anfangen und mit einem ruinierten Druck enden. Ein winziger Klecks, ein PETG-Rest oder leicht verbranntes Material kann an der Düse haften bleiben und später über die erste Schicht geschleppt werden, die Abtastung behindern oder schließlich Oberflächenfehler und Kollisionen bei langen Aufträgen verursachen.
ScrubbyXL löst dieses Problem mit einer einfachen Idee: Warten Sie nicht, bis das Problem auftaucht, sondern wischen Sie proaktiv. Der erste Teil geschieht vor dem MBL: Durch eine kleine Änderung des Start-G-Codes wird die Düse sauber gewischt, damit sie das Bett in einem sauberen Zustand sondieren kann. Das Ziel ist nicht “mehr Nivellierung”, sondern konsistentere Bedingungen während der Nivellierung, was den richtigen Start der ersten Schicht erleichtert.
Der zweite Teil ist für lange Drucke gedacht. ScrubbyXL kann während des Drucks in einem benutzerdefinierten Intervall (z. B. alle N Schichten) über einen in Ihre Slicer-Einstellungen integrierten G-Code ausgelöst werden. Dies trägt dazu bei, den allmählichen Aufbau zu verringern, der sich sonst über viele Stunden hinweg ansammelt und schließlich dazu führen kann, dass ein Druck zu einem späten Zeitpunkt des Auftrags fehlschlägt.
Versionen und Konfiguration
Um verschiedenen Einrichtungen gerecht zu werden, gibt es den ScrubbyXL in mehreren Varianten:
- Größen der Befestigungslöcher: M3 / M4 / M5.
- Größen der Silikonbürsten: A1 oder A1 mini.
- Befestigungsmöglichkeiten: magnetisch (Magnete werden während des Drucks eingesetzt oder später eingeklebt) oder eine feste, vollständig verschraubte Version ohne Magnete.
Ich empfehle die magnetische Version mit eingesetzten Magneten und der A1-Minibürste. Die Magnetbefestigung ist besonders praktisch, da Sie die Bürste möglicherweise schnell entfernen möchten - insbesondere auf der rechten Seite, wo Tool 5 über diesem Bereich be- und entladen wird. Um ein optimales Wischergebnis zu erzielen, empfehle ich die Installation von Wischern auf beiden Seiten, aber Sie können auch nur eine Seite betreiben und den G-Code entsprechend anpassen.
Laden Sie den ScrubbyXL Mod für den Prusa XL auf Printables herunter
Was zu erwarten ist
- Weniger Rückstände an der Düsenspitze bei langen Aufträgen, wodurch die Gefahr von Druckfehlern in der Spätphase verringert wird.
G-Codes
Start G-Code-Änderungen
- Integrierte Düsenreinigungs-/Wischroutine Daher wird die Düse im Rahmen der Inbetriebnahme mechanisch gereinigt.
- Einstellen der Werkzeugwartezeit für die Temp-Position nach vorne um die manuelle Reinigung der Düse zu erleichtern.
- Hinzufügen eines akustischen Signaltons (Pieptöne vor der Düsenwischung und vor der Spülleitung) für eine bessere Rückmeldung während des Starts.
- Auskommentiert
G29 P9, weil es die Temperatur kurz vor MBL zu hoch treibt. - Verschiebung der Spülleitung für das erste und letzte Werkzeug um 3 mm um jeglichen Kontakt mit dem Bürstenmodell zu vermeiden.
- Surfalex2000’s Messingbürsten-Mod G-Code überarbeitet zur Verbesserung des Reinigungsergebnisses (zuverlässigeres Wischverhalten):
Optimierter und korrigierter Prusa XL Vollstart-Gcode für den ScrubbyXL
Start G-Code für die Prusa XL (5TH)
M17 ; Stepper aktivieren
M862.3 P "XL" ; Prüfung des Druckermodells
M862.5 P2 ; Prüfung der G-Code-Ebene
M862.6 P "Input shaper" ; Überprüfung der FW-Funktion
M115 U6.4.0+11974
G90 ; absolute Koordinaten verwenden
M83 ; Extruder relativ Modus
; Druckbereich einstellen
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(erste_Schicht_druck_max[0]) - (erste_Schicht_druck_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}
; informiert über den Düsendurchmesser
{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}
; unbenutzte Heizungen abschalten
{if ! is_extruder_used[0]}M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{wenn num_extruders > 2 und ! is_extruder_used[2]}M104 T2 S0{endif}
{wenn num_extruders > 3 und ! is_extruder_used[3]}M104 T3 S0{endif}
{wenn num_extruders > 4 und ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; setze toolchange z hop auf 2mm, oder zhop Variable vom Slicer falls höher
Bett- und Extrudertemperatur für MBL einstellen
M140 S[first_layer_bed_temperature] ; Betttemperatur einstellen
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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; temp einstellen
Home XY
G28 XY
Versuch der Auswahl der im Druck verwendeten Werkzeuge
G1 F{Weg_Geschwindigkeit * 60}
{if (is_extruder_used[0]) und (initial_tool != 0)}T0 S1 L0 D0{endif}
{wenn (is_extruder_used[1]) und (initial_tool != 1)}T1 S1 L0 D0{endif}
{wenn (is_extruder_used[2]) und (initial_tool != 2)}T2 S1 L0 D0{endif}
{wenn (is_extruder_used[3]) und (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) und (initial_tool != 4)}T4 S1 L0 D0{endif}
; Werkzeug auswählen, das zum Ausrichten & MBL verwendet werden soll
T{initial_tool} S1 L0 D0
; HIER MUSS DAS WERKZEUG NUR WEGEN DER SILIKONBÜRSTE WARTEN
G1 Z30
G1 X145 Y-8 F{Weg_Geschwindigkeit * 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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; warten auf temp
Z mit MBL-Werkzeug anfahren
M84 E ; Motor E ausschalten
G28 Z
G0 Z5 ; Z-Abstand hinzufügen
HIER MUSS DAS WERKZEUG NUR WEGEN DER SILIKONBÜRSTE WARTEN
G1 Z30
G1 X145 Y-8 F{Weg_Geschwindigkeit * 60}
M104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; Leerlauftemperatur einstellen
M190 S[first_layer_bed_temperature] ; warten auf Betttemperatur
G29 G ; Wärme absorbieren
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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; warten auf temp
M300 S800 P200 ; PIEP-Anzeige
; zum Düsenreinigungsbereich gehen
Düsenreinigung FÜR LINKS UND RECHTS SILIKONWIPER
M302 S155 ; Kaltfließpressgrenze auf 155C senken
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; Rückzug zur Düsenreinigung
M84 E ; E-Motor ausschalten
--- Start Nozzle Wipe
G1 Z5 ; Bett aus dem Weg fahren
{if initial_tool == 0 oder initial_tool == 1 }
; --- Start Düsenwischen LINKS ---
G1 X-2 Y-8 F24000 ; An den Anfang des Wischbereichs fahren
G1 X28 Y-8 F24000 ; Wischgang 1
G1 X-2 Y-7.5 F24000 ; Neu positionieren
G1 X28 Y-7.5 F24000 ; Wischdurchgang 2
G1 X-2 Y-7 F24000 ; Neu positionieren
G1 X28 Y-7 F24000 ; Wischdurchgang 3
G1 X-2 Y-6.5 F24000 ; Neu positionieren
G1 X28 Y-6.5 F24000 ; Wischdurchgang 4
G1 X-2 Y-6 F24000 ; Neu positionieren
G1 X28 Y-6 F24000 ; Wischdurchgang 5
G1 X-2 Y-6.5 F24000 ; Neu positionieren
G1 X28 Y-6.5 F24000 ; Wischdurchgang 6
G1 X-2 Y-7 F24000 ; Neu positionieren
G1 X28 Y-7 F24000 ; Wischdurchgang 7
G1 X-2 Y-7.5 F24000 ; Neu positionieren
G1 X28 Y-7.5 F24000 ; Wischdurchgang 8
G1 X-2 Y-8 F24000 ; Neu positionieren
G1 X28 Y-8 F24000 ; Wischdurchgang 9
--- Ende Düse Wischen LINKS ---
{else}
; --- Start Düse Wischen RECHTS ---
G1 X332 Y-8 F24000 ; Bewegen zum Anfang des Wischbereichs
G1 X361 Y-8 F24000 ; Wischdurchgang 1
G1 X332 Y-7.5 F24000 ; Neu positionieren
G1 X361 Y-7.5 F24000 ; Wischdurchgang 2
G1 X332 Y-7 F24000 ; Neupositionierung
G1 X361 Y-7 F24000 ; Wischdurchgang 3
G1 X332 Y-6.5 F24000 ; Neu positionieren
G1 X361 Y-6.5 F24000 ; Wischdurchgang 4
G1 X332 Y-6 F24000 ; Neu positionieren
G1 X361 Y-6 F24000 ; Wischdurchgang 5
G1 X332 Y-6.5 F24000 ; Neu positionieren
G1 X361 Y-6.5 F24000 ; Wischdurchgang 6
G1 X332 Y-7 F24000 ; Neu positionieren
G1 X361 Y-7 F24000 ; Wischdurchgang 7
G1 X332 Y-7.5 F24000 ; Neu positionieren
G1 X361 Y-7.5 F24000 ; Wischdurchgang 8
G1 X332 Y-8 F24000 ; Neu positionieren
G1 X361 Y-8 F24000 ; Wischdurchgang 9
--- Ende Düse Wischen RECHTS ---
{endif}
G1 X{(min(((((erste_Schicht_druck_min[0] + erste_Schicht_druck_max[0]) / 2) < ((druck_bett_min[0] + druck_bett_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)}
; Düse bereinigen
Unten auskommentiert, weil es die Temperatur vor der MBL zu hoch setzt.
;G29 P9 X{((((erste_Schicht_druck_min[0] + erste_Schicht_druck_max[0]) / 2) < ((druck_bett_min[0] + druck_bett_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}
{wenn erste_Schicht_Temperatur[1] > 0 und (is_extruder_used[1])}M104 T1 S{erste_Schicht_Temperatur[1]}{endif}
{wenn erste_Schicht_temperatur[2] > 0 und (is_extruder_used[2])}M104 T2 S{erste_Schicht_temperatur[2]}{endif}
{wenn erste_Schicht_temperatur[3] > 0 und (is_extruder_used[3])}M104 T3 S{erste_Schicht_temperatur[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]) und initial_tool != 0}
M591 S0 ; Deaktivieren der Stauerkennung
; Bereit zum Drucken der Melodie, vor dem Spülen
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
; Erstes Werkzeug spülen
Geändert. X-Position wegen Silikonpinsel von 30 auf 33 geändert.
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T0 S{Erste_Schicht_Temperatur[0]}
T0 S1 L0 D0; Werkzeug holen
G92 E0 ; Extruderposition zurücksetzen
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X70 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X73 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X76 Z0.2 F8000 ; abwischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[0]} F2400 ; zurückziehen
{e_einfahren[0] = einfahren_Länge_Werkzeugwechsel[0]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0
{endif}
{if (is_extruder_used[1]) und initial_tool != 1}
;
; zweites Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T1 S{Erste_Schicht_Temperatur[1]}
T1 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X110 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X107 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X104 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[1]} F2400 ; zurückziehen
{e_einfahren[1] = einfahren_Länge_Werkzeugwechsel[1]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1
{endif}
{if (is_extruder_used[2]) und initial_tool != 2}
;
; drittes Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T2 S{Erste_Schicht_Temperatur[2]}
T2 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X250 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X253 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X256 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[2]} F2400 ; zurückziehen
{e_einfahren[2] = einfahren_Länge_Werkzeugwechsel[2]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2
{endif}
{if (is_extruder_used[3]) und initial_tool != 3}
;
; viertes Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T3 S{Erste_Schicht_Temperatur[3]}
T3 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X290 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X287 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X284 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[3]} F2400 ; zurückziehen
{e_einfahren[3] = einfahren_Länge_Werkzeugwechsel[3]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3
{endif}
{if (is_extruder_used[4]) und initial_tool != 4}
;
; fünftes Werkzeug entleeren
; Bearbeitet. X-Position für TOOL 4 von 330 auf 327 geändert wegen Silikonpinsel.
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T4 S{Erste_Schicht_Temperatur[4]}
T4 S1 L0 D0; Werkzeug abholen
G92 E0 ; Extruderposition zurücksetzen
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X290 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X287 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X284 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[4]} F2400 ; zurückziehen
{e_einfahren[4] = einfahren_Länge_Werkzeugwechsel[4]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4
{endif}
;
; initiales Werkzeug spülen
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T{initial_tool} S{first_layer_temperature[initial_tool]}
T{initial_tool} S1 L0 D0; das Werkzeug auswählen
G92 E0 ; Extruderposition zurücksetzen
Geändert. X-Position für TOOL 0 von 30 auf 33 geändert wegen Silikonpinsel.
; Bearbeitet. X-Position für TOOL 4 wegen Silikonbürste von 330 auf 327 geändert.
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)} ; nahe an den Rand der Platte fahren
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 oder initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; Spülen während der Bewegung zur Platte
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; Spülung fortsetzen und Düse wischen
G0 X{(anfängliches_Werkzeug == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wischen, nahe an das Bett heranfahren
G0 X{(anfängliches_Werkzeug == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wischen, schnell vom Bett wegfahren
G1 E-{Rückzugslänge[initial_tool]} F2400 ; zurückziehen
{e_zurückgezogen[initial_tool] = retract_length[initial_tool]}
M591 R ; Wiederherstellen der Erkennung einer Verklemmung
G92 E0 ; Extruderposition zurücksetzen
Vor Layerwechsel G-Code
Während des Drucks wird die Düse automatisch alle X Schichten gereinigt)
Vor Layerwechsel G-Code
;VOR_SCHICHT_WECHSEL
G92 E0.0
;[layer_z]
; Während des Drucks wird die Düse automatisch alle X Schichten gereinigt. (X = 400 Schichten)
--- Alle 400 Schichten: automatisches Wischen ---
{if layer_num > 0 && layer_num % 400 == 0}
; Aktuelle Position speichern (Buddy FW)
G1 F{Reisegeschwindigkeit * 100}
G60 S0 ; aktuelle XYZ-Position speichern
M300 S300 P200 ; PIEP-Anzeige
Z zur Sicherheit ein wenig anheben
G1 Z{Schicht_z + 5} F1000
--- Start Nozzle Wipe ---
{wenn initial_tool == 0 oder initial_tool == 1 }
; --- Start Düsenwischen LINKS ---
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
--- Enddüsenwischer LINKS ---
{else}
; --- Düsenwischen RECHTS beginnen ---
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
--- Enddüse Wischen RECHTS ---
{endif}
; --- Ende Düsenwischen ---
; Position wiederherstellen
G61 S0 ; gespeicherte XYZ-Position wiederherstellen
{endif}
Bonus: Print Finish Sound
Spielt eine kurze Schlussmelodie.
Ende G-Code
G4 ; warten
{if layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Bett nach unten bewegen
P0 S1 ; Werkzeug parken
{if layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Bett weiter nach unten verschieben
; Extruder-Heizungen ausschalten
{if is_extruder_used[0]}M104 T0 S0{endif}
{wenn is_extruder_used[1]}M104 T1 S0{endif}
{wenn is_extruder_used[2]}M104 T2 S0{endif}
{wenn is_extruder_verwendet[3]}M104 T3 S0{endif}
{wenn is_extruder_verwendet[4]}M104 T4 S0{endif}
M140 S0 ; Heizbett ausschalten
M107 ; Gebläse ausschalten
M221 S100 ; Durchfluss in Prozent zurücksetzen
M84 ; Motoren abschalten
Melodie abschließen
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
M77 ; Druck-Timer anhalten
; max_layer_z = [max_layer_z]
Optional: Zusätzliche MBL-Messingbürste Mod von Surfalex2000
Wenn Sie auch die MBL Messingbürsten-Mod aus @Surfalex2000:
Start G-Code für die Prusa XL (5TH)
M17 ; Stepper aktivieren
M862.3 P "XL" ; Prüfung des Druckermodells
M862.5 P2 ; Prüfung der G-Code-Ebene
M862.6 P "Input shaper" ; Überprüfung der FW-Funktion
M115 U6.4.0+11974
G90 ; absolute Koordinaten verwenden
M83 ; Extruder relativ Modus
; Druckbereich einstellen
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(erste_Schicht_druck_max[0]) - (erste_Schicht_druck_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}
; Information über Düsendurchmesser
{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}
; unbenutzte Heizungen abschalten
{if ! is_extruder_used[0]}M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{wenn num_extruders > 2 und ! is_extruder_used[2]}M104 T2 S0{endif}
{wenn num_extruders > 3 und ! is_extruder_used[3]}M104 T3 S0{endif}
{wenn num_extruders > 4 und ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; setze toolchange z hop auf 2mm, oder zhop Variable vom Slicer falls höher
Bett- und Extrudertemperatur für MBL einstellen
M140 S[first_layer_bed_temperature] ; Betttemperatur einstellen
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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; temp einstellen
Home XY
G28 XY
Versuch der Auswahl der im Druck verwendeten Werkzeuge
G1 F{Weg_Geschwindigkeit * 60}
{if (is_extruder_used[0]) und (initial_tool != 0)}T0 S1 L0 D0{endif}
{wenn (is_extruder_used[1]) und (initial_tool != 1)}T1 S1 L0 D0{endif}
{wenn (is_extruder_used[2]) und (initial_tool != 2)}T2 S1 L0 D0{endif}
{wenn (is_extruder_used[3]) und (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) und (initial_tool != 4)}T4 S1 L0 D0{endif}
; Werkzeug auswählen, das zum Ausrichten & MBL verwendet werden soll
T{initial_tool} S1 L0 D0
; HIER MUSS DAS WERKZEUG NUR WEGEN DER SILIKONBÜRSTE WARTEN
G1 Z30
G1 X145 Y-8 F{Weg_Geschwindigkeit * 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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; warten auf temp
Z mit MBL-Werkzeug anfahren
M84 E ; Motor E ausschalten
G28 Z
G0 Z5 ; Z-Abstand hinzufügen
HIER MUSS DAS WERKZEUG NUR WEGEN DER SILIKONBÜRSTE WARTEN
G1 Z30
G1 X145 Y-8 F{Weg_Geschwindigkeit * 60}
M104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; Leerlauftemperatur einstellen
M190 S[first_layer_bed_temperature] ; warten auf Betttemperatur
G29 G ; Wärme absorbieren
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" oder filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; warten auf temp
M300 S800 P200 ; PIEP-Anzeige
; zum Düsenreinigungsbereich gehen
Surfalex2000 Düsenbürstenhalterung auf Printables
; https://www.printables.com/model/644817-prusa-xl-series-front-nozzle-srcubber-for-use-with
G1 E-10 F2400 ; mehr Rückzug, um das Nässen vor der Düsenreinigung auszugleichen
; Surfalex2000-Düsenbürsten-Zyklus starten
--- Start Düsenbürstenzyklus (Geschwindigkeitsrampe) ---
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 ; Zyklus Düsenbürste
Ende surfalex2000 Düsenbürsten-Zyklus
Düsenreinigung FÜR LINKS UND RECHTS SILIKONABSTREIFER
M302 S155 ; Kaltextrusionsgrenze auf 155C senken
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; Rückzug für Düsenreinigung
M84 E ; E-Motor ausschalten
--- Start Nozzle Wipe
G1 Z5 ; Bett aus dem Weg fahren
{if initial_tool == 0 oder initial_tool == 1 }
; --- Start Düsenwischen LINKS ---
G1 X-2 Y-8 F24000 ; An den Anfang des Wischbereichs fahren
G1 X28 Y-8 F24000 ; Wischgang 1
G1 X-2 Y-7.5 F24000 ; Neu positionieren
G1 X28 Y-7.5 F24000 ; Wischdurchgang 2
G1 X-2 Y-7 F24000 ; Neu positionieren
G1 X28 Y-7 F24000 ; Wischdurchgang 3
G1 X-2 Y-6.5 F24000 ; Neu positionieren
G1 X28 Y-6.5 F24000 ; Wischdurchgang 4
G1 X-2 Y-6 F24000 ; Neu positionieren
G1 X28 Y-6 F24000 ; Wischdurchgang 5
G1 X-2 Y-6.5 F24000 ; Neu positionieren
G1 X28 Y-6.5 F24000 ; Wischdurchgang 6
G1 X-2 Y-7 F24000 ; Neu positionieren
G1 X28 Y-7 F24000 ; Wischdurchgang 7
G1 X-2 Y-7.5 F24000 ; Neu positionieren
G1 X28 Y-7.5 F24000 ; Wischdurchgang 8
G1 X-2 Y-8 F24000 ; Neu positionieren
G1 X28 Y-8 F24000 ; Wischdurchgang 9
--- Ende Düse Wischen LINKS ---
{else}
; --- Start Düse Wischen RECHTS ---
G1 X332 Y-8 F24000 ; Bewegen zum Anfang des Wischbereichs
G1 X361 Y-8 F24000 ; Wischgang 1
G1 X332 Y-7.5 F24000 ; Neu positionieren
G1 X361 Y-7.5 F24000 ; Wischdurchgang 2
G1 X332 Y-7 F24000 ; Neupositionierung
G1 X361 Y-7 F24000 ; Wischdurchgang 3
G1 X332 Y-6.5 F24000 ; Neu positionieren
G1 X361 Y-6.5 F24000 ; Wischdurchgang 4
G1 X332 Y-6 F24000 ; Neu positionieren
G1 X361 Y-6 F24000 ; Wischdurchgang 5
G1 X332 Y-6.5 F24000 ; Neu positionieren
G1 X361 Y-6.5 F24000 ; Wischdurchgang 6
G1 X332 Y-7 F24000 ; Neu positionieren
G1 X361 Y-7 F24000 ; Wischdurchgang 7
G1 X332 Y-7.5 F24000 ; Neu positionieren
G1 X361 Y-7.5 F24000 ; Wischdurchgang 8
G1 X332 Y-8 F24000 ; Neu positionieren
G1 X361 Y-8 F24000 ; Wischdurchgang 9
--- Ende Düse Wischen RECHTS ---
{endif}
G1 X{(min(((((erste_Schicht_druck_min[0] + erste_Schicht_druck_max[0]) / 2) < ((druck_bett_min[0] + druck_bett_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)}
; Düse bereinigen
Unten auskommentiert, weil es die Temperatur vor der MBL zu hoch setzt.
;G29 P9 X{((((erste_Schicht_druck_min[0] + erste_Schicht_druck_max[0]) / 2) < ((druck_bett_min[0] + druck_bett_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}
{wenn erste_Schicht_Temperatur[1] > 0 und (is_extruder_used[1])}M104 T1 S{erste_Schicht_Temperatur[1]}{endif}
{wenn erste_Schicht_temperatur[2] > 0 und (is_extruder_used[2])}M104 T2 S{erste_Schicht_temperatur[2]}{endif}
{wenn erste_Schicht_temperatur[3] > 0 und (is_extruder_used[3])}M104 T3 S{erste_Schicht_temperatur[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]) und initial_tool != 0}
M591 S0 ; Deaktivieren der Stauerkennung
; Bereit zum Drucken der Melodie, vor dem Spülen
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
; Erstes Werkzeug spülen
Geändert. X-Position wegen Silikonpinsel von 30 auf 33 geändert.
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T0 S{Erste_Schicht_Temperatur[0]}
T0 S1 L0 D0; Werkzeug holen
G92 E0 ; Extruderposition zurücksetzen
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X70 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X73 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X76 Z0.2 F8000 ; abwischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[0]} F2400 ; zurückziehen
{e_einfahren[0] = einfahren_Länge_Werkzeugwechsel[0]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0
{endif}
{if (is_extruder_used[1]) und initial_tool != 1}
;
; zweites Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T1 S{Erste_Schicht_Temperatur[1]}
T1 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X110 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X107 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X104 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[1]} F2400 ; zurückziehen
{e_einfahren[1] = einfahren_Länge_Werkzeugwechsel[1]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1
{endif}
{if (is_extruder_used[2]) und initial_tool != 2}
;
; drittes Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T2 S{Erste_Schicht_Temperatur[2]}
T2 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X250 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X253 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X256 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[2]} F2400 ; zurückziehen
{e_einfahren[2] = einfahren_Länge_Werkzeugwechsel[2]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2
{endif}
{if (is_extruder_used[3]) und initial_tool != 3}
;
; viertes Werkzeug spülen
;
G1 F{Verfahrgeschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T3 S{Erste_Schicht_Temperatur[3]}
T3 S1 L0 D0; Werkzeug entnehmen
G92 E0 ; Extruderposition zurücksetzen
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X290 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X287 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X284 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[3]} F2400 ; zurückziehen
{e_einfahren[3] = einfahren_Länge_Werkzeugwechsel[3]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3
{endif}
{if (is_extruder_used[4]) und initial_tool != 4}
;
; fünftes Werkzeug entleeren
; Bearbeitet. X-Position für TOOL 4 von 330 auf 327 geändert wegen Silikonpinsel.
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T4 S{Erste_Schicht_Temperatur[4]}
T4 S1 L0 D0; Werkzeug abholen
G92 E0 ; Extruderposition zurücksetzen
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; nahe an den Rand der Platte fahren
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} ; Spülen während der Annäherung an das Blech
G0 X290 E9 F800 ; Spülen fortsetzen und die Düse abwischen
G0 X287 Z0.05 F8000 ; abwischen, an das Bett heranfahren
G0 X284 Z0.2 F8000 ; wischen, schnell vom Bett wegfahren
G1 E{-retract_length_toolchange[4]} F2400 ; zurückziehen
{e_einfahren[4] = einfahren_Länge_Werkzeugwechsel[4]}
G92 E0 ; Extruderposition zurücksetzen
M104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4
{endif}
;
; initiales Werkzeug spülen
;
G1 F{Verfahrweg_Geschwindigkeit * 60}
P0 S1 L2 D0; das Werkzeug parken
M109 T{initial_tool} S{first_layer_temperature[initial_tool]}
T{initial_tool} S1 L0 D0; das Werkzeug auswählen
G92 E0 ; Extruderposition zurücksetzen
Geändert. X-Position für TOOL 0 von 30 auf 33 geändert wegen Silikonpinsel.
; Bearbeitet. X-Position für TOOL 4 wegen Silikonbürste von 330 auf 327 geändert.
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)} ; nahe an den Rand der Platte fahren
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 oder initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; Spülen während der Bewegung zur Platte
G0 X{(initial_tool == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; Spülung fortsetzen und Düse wischen
G0 X{(anfängliches_Werkzeug == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wischen, nahe an das Bett heranfahren
G0 X{(anfängliches_Werkzeug == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 oder initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wischen, schnell vom Bett wegfahren
G1 E-{Rückzugslänge[initial_tool]} F2400 ; zurückziehen
{e_zurückgezogen[initial_tool] = retract_length[initial_tool]}
M591 R ; Wiederherstellen der Erkennung einer Verklemmung
G92 E0 ; Extruderposition zurücksetzen



