Ich habe also einen Raise3D Pro2 und möchte ein Werkzeugwechselskript dafür perfektionieren, dessen Ziel es ist, den überschüssigen Kunststoff, der sich bei Verwendung des Doppelextruders auf der Düse ansammelt, zu reduzieren oder zu beseitigen. Der Drucker verwendet die Marlin-G-Code-Variante, und obwohl ich nicht sicher bin, ob dies wichtig ist, schneide ich in ideaMaker. Das Skript soll wie folgt ablaufen:
- Aktuelles Werkzeug einfahren
- Wechseln Sie zu X30 Y300
- Überprüfen Sie, ob das neue aktive Werkzeug T0 ist
- Wenn T0, Düse 2 mm Kreis abwischen
- Wenn T0, T1 auf 165 ° C abkühlen lassen
- Wenn T0, T0 auf 230 ° C erhitzen
- Wenn T0 und nicht Schicht 1, erholen Sie sich
- Wenn T0, wischen Sie die Düse erneut ab, diesmal für das neue Werkzeug
- Überprüfen Sie, ob das neue aktive Werkzeug T1 ist
- Wenn T1, Düse 2 mm Kreis abwischen
- Wenn T1, T0 auf 165 ° C abkühlen lassen
- Wenn T1, T1 auf 230 ° C erwärmen
- Wenn T1 und nicht Schicht 1, erholen Sie sich
- Wenn T1, Düse erneut abwischen, diesmal für das neue Werkzeug
Das aktuelle Skript, das ich habe, sieht folgendermaßen aus:
; extruder switch gcode start
G10 S1; Retract for current nozzle
G1 X30 Y300 F6000; Move to X:30 Y:300
[if {new_extruder}=0]; LEFT Extruder is active (T0)
[if {new_extruder}=0]G12 P2 R2; Clean inactive nozzle 2mm circle
[if {new_extruder}=0]M104 S165 T1; Cool inactive extruder to 165c (T1)
[if {new_extruder}=0]M109 S230 T0; Heat active extruder to 230c (T0) and wait.
[[if {new_extruder}=0] and [{layer_index} NE 1]]G11; Recover current nozzle when not first layer
[if {new_extruder}=0]G12 P2 R2; Clean active nozzle 2mm circle
[if {new_extruder}=1]; RIGHT Extruder is active (T1)
[if {new_extruder}=1]G12 P2 R2; Clean inactive nozzle 2mm circle
[if {new_extruder}=1]M104 S165 T0; Cool inactive extruder to 165c (T0)
[if {new_extruder}=1]M109 S230 T1; Heat active extruder to 230c (T1) and wait.
[[if {new_extruder}=1] and [{layer_index} NE 1]]G11; Recover current nozzle
[if {new_extruder}=1]G12 P2 R2; Clean active nozzle 2mm circle
; extruder switch gcode end
Das Problem ist, dass beim Ausführen eines Druckvorgangs nicht alle Befehle ausgeführt werden. Es macht die Bewegung und das Kühlen / Heizen, aber das Zurückziehen / Wiederherstellen und das Abwischen der Düse scheint nicht zu lesen. Ich bin mir nicht sicher, ob dies an einem Drucker- oder Syntaxproblem liegt oder ob diese Befehle nicht so funktionieren, wie ich denke.
EDIT: (von Pᴀᴜʟsᴛᴇʀ2 - Neuer Code und neue Logik wieder hinzugefügt)
Neue Logik:
- Aktuelles Werkzeug einfahren
- Wechseln Sie zu X30 Y300
- Überprüfen Sie, ob das neue aktive Werkzeug T0 ist
- Wenn T0, Düse 2 mm Kreis abwischen
- Wenn T0, T1 auf 165 ° C abkühlen lassen
- Wenn T0, T0 auf 230 ° C erhitzen
- Wenn T0 und nicht Schicht 1, erholen Sie sich
- Wenn T0, wischen Sie die Düse erneut ab, diesmal für das neue Werkzeug
- Überprüfen Sie, ob das neue aktive Werkzeug T1 ist
- Wenn T1, Düse 2 mm Kreis abwischen
- Wenn T1, T0 auf 165 ° C abkühlen lassen
- Wenn T1, T1 auf 230 ° C erwärmen
- Wenn T1 und nicht Schicht 1, erholen Sie sich
- Wenn T1, Düse erneut abwischen, diesmal für das neue Werkzeug
Das neue Skript, das ich habe, sieht folgendermaßen aus:
; extruder switch gcode start
G10 S1; Retract for current nozzle
G1 X30 Y300 F6000; Move to X:30 Y:300
[if {new_extruder}=0]; LEFT Extruder is active (T0)
[if {new_extruder}=0]G12 P2 R2; Clean inactive nozzle 2mm circle
[if {new_extruder}=0]M104 S165 T1; Cool inactive extruder to 165c (T1)
[if {new_extruder}=0]M109 S230 T0; Heat active extruder to 230c (T0) and wait.
[[if {new_extruder}=0] and [{layer_index} NE 1]]G11; Recover current nozzle when not first layer
[if {new_extruder}=0]G12 P2 R2; Clean active nozzle 2mm circle
[if {new_extruder}=1]; RIGHT Extruder is active (T1)
[if {new_extruder}=1]G12 P2 R2; Clean inactive nozzle 2mm circle
[if {new_extruder}=1]M104 S165 T0; Cool inactive extruder to 165c (T0)
[if {new_extruder}=1]M109 S230 T1; Heat active extruder to 230c (T1) and wait.
[[if {new_extruder}=1] and [{layer_index} NE 1]]G11; Recover current nozzle
[if {new_extruder}=1]G12 P2 R2; Clean active nozzle 2mm circle
; extruder switch gcode end
Antworten:
Soweit ich erkennen kann, kann die G-Code-Datei nicht von der Druckerfirmware ausgewertet werden .
Es wird erwartet, dass die Slicer-Software die Auswahl des Werkzeugkopfs kennt und Werkzeugänderungen gemäß dem G-Code verarbeitet, der bei den meisten Slicern bei einem Werkzeugwechsel bereitgestellt wird.
Der beste Weg, um über G-Code (in RepRap-Worten) nachzudenken, ist eine Einwegkommunikation, da die Datei nicht als Skript behandelt wird, das Parameter unterwegs lesen und auswerten kann. (Firmware-Funktionen).
Verweise:
RepRap G-Code-Liste Schnellstartanleitung für den Drucker
quelle