Klipper Cancel Resume Pause Filamentwechsel M600 Macro
Verfasst: Di 18. Nov 2025, 22:24
################################################################################
# PAUSE / RESUME / CANCEL Makros für Klipper (Enhanced Version)
# - PAUSE: Speichert den Zustand, fährt den Kopf weg und verlängert das Timeout.
# - RESUME: Kehrt zum Druck zurück, stellt Filament und Zustand wieder her.
# - M600: Filamentwechsel-Assistent (ruft PAUSE auf und führt Entladen/Laden durch).
################################################################################
Wenn es in eine Datei kommen soll dann bitte nach dem mainsail.cfg include damit diese durch diese hier
überschrieben werden.
# Fügen Sie dies in Ihre printer.cfg ein oder inkludieren Sie diese Datei via [include macros.cfg]
# Der Drucker wartet nun im PAUSE-Zustand auf den RESUME-Befehl.
Oder als File Upload im Mainsail, diese Datei dann includen. WICHTIG nach mainsail.cfg Includen.
[include mainsail.cfg]
# PAUSE / RESUME / CANCEL Makros für Klipper (Enhanced Version)
# - PAUSE: Speichert den Zustand, fährt den Kopf weg und verlängert das Timeout.
# - RESUME: Kehrt zum Druck zurück, stellt Filament und Zustand wieder her.
# - M600: Filamentwechsel-Assistent (ruft PAUSE auf und führt Entladen/Laden durch).
################################################################################
Wenn es in eine Datei kommen soll dann bitte nach dem mainsail.cfg include damit diese durch diese hier
überschrieben werden.
Code: Alles auswählen
[pause_resume]
# Geschwindigkeit, mit der der Werkzeugkopf beim Wiederherstellen aus einer Pause
# fahren darf. Ein niedriger Wert sorgt für sanftere Rückkehr.
recover_velocity: 50.0
Code: Alles auswählen
[gcode_macro PAUSE]
description: Pausiert den Druck, parkt den Kopf sicher. Ignoriert erneutes Drücken.
rename_existing: PAUSE_BASE
variable_extrude: 1.0
gcode:
# Sicherheitsabfrage: Nur ausführen, wenn NICHT bereits pausiert
{% if not printer.pause_resume.is_paused %}
##### Parameter #####
{% set z_hop = params.Z|default(10)|float %} ; Z-Anhebung
##### Berechnung der Parkpositionen #####
# Druckvolumen (Max) aus der Config lesen
{% set max_x = printer.toolhead.axis_maximum.x|float %}
{% set max_y = printer.toolhead.axis_maximum.y|float %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
# Aktuelle Z-Position
{% set act_z = printer.toolhead.position.z|float %}
# Parkposition berechnen: Max - 10mm Puffer
{% set x_park = max_x - 10.0 %}
{% set y_park = max_y - 10.0 %}
# Sicherstellen, dass wir nicht über Max-Z hinausfahren beim Hop
{% if act_z < (max_z - z_hop) %}
{% set z_safe = z_hop %}
{% else %}
{% set z_safe = max_z - act_z %}
{% endif %}
##### Hauptlogik #####
PAUSE_BASE
# WICHTIG: Status speichern BEVOR wir wegfahren!
SAVE_GCODE_STATE NAME=PAUSE_STATE
G91
# Retract (Filament zurückziehen), wenn Extruder heiß genug ist
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-{extrude} F2100
{% else %}
{action_respond_info("Extruder nicht heiß genug")}
{% endif %}
# Z anheben und zur Parkposition fahren
{% if "xyz" in printer.toolhead.homed_axes %}
G1 Z{z_safe} F900
G90
G1 X{x_park} Y{y_park} F6000
{% else %}
{action_respond_info("Drucker nicht gehomed")}
{% endif %}
# Timeout massiv verlängern (12h)
SET_IDLE_TIMEOUT TIMEOUT=43200
RESPOND MSG="Druck pausiert. Kopf geparkt."
{% else %}
RESPOND MSG="Druck ist bereits pausiert - Befehl ignoriert."
{% endif %}Code: Alles auswählen
[gcode_macro RESUME]
description: Setzt den Druck fort und stellt Position wieder her
rename_existing: RESUME_BASE
gcode:
##### Parameter #####
{% set e = params.E|default(1)|float %} ; Extra Filament beim Start (Purge)
#### Status wiederherstellen #####
# Timeout auf Standard zurücksetzen (aus Config lesen oder Standard 600s)
{% set default_timeout = printer.configfile.settings.idle_timeout.timeout|default(600) %}
SET_IDLE_TIMEOUT TIMEOUT={default_timeout}
G91
# Filament wieder vorschieben (Prime), wenn heiß genug
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E{e} F2100
{% else %}
{action_respond_info("Extruder nicht heiß genug")}
{% endif %}
# Position wiederherstellen
# MOVE=1 fährt zur alten XYZ Position zurück
# MOVE_SPEED=100 stellt sicher, dass er zügig zurückfährt (in mm/s)
RESTORE_GCODE_STATE NAME=PAUSE_STATE MOVE=1 MOVE_SPEED=100
RESUME_BASE
RESPOND MSG="Druck fortgesetzt."Code: Alles auswählen
[gcode_macro CANCEL_PRINT]
description: Bricht den Druck sicher ab
rename_existing: CANCEL_PRINT_BASE
gcode:
TURN_OFF_HEATERS
CLEAR_PAUSE
SDCARD_RESET_FILE
##### Berechnung der Positionen #####
{% set max_x = printer.toolhead.axis_maximum.x|float %}
{% set max_y = printer.toolhead.axis_maximum.y|float %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
# Parkposition berechnen
{% set x_park = max_x - 10.0 %}
{% set y_park = max_y - 10.0 %}
# Sicherer Z-Hop beim Abbruch
{% if act_z < (max_z - 10) %}
G91
G1 Z10 F900
{% endif %}
G90
# Kopf zur Parkposition fahren
G1 X{x_park} Y{y_park} F6000
M84 ; Motoren aus
CANCEL_PRINT_BASE
RESPOND MSG="Druck abgebrochen."Code: Alles auswählen
[gcode_macro M600]
description: Filamentwechsel-Assistent (ruft PAUSE auf, bewegt und wartet)
gcode:
##### Parameter festlegen #####
{% set X = params.X|default(50)|float %} ; X-Position zum Parken (50mm)
{% set Y = params.Y|default(50)|float %} ; Y-Position zum Parken (50mm)
{% set Z = params.Z|default(10)|float %} ; Z-Hop (10mm)
##### 1. Pause und Zustand speichern #####
PAUSE ; Ruft das PAUSE-Makro auf (speichert Zustand, setzt Timeout)
##### 2. Bewegungen für den Wechsel #####
G91 ; Relative Positionierung
G1 E-5 F2700 ; Kurzer Retract vor dem Wechsel
G1 Z{Z} F1000 ; Z-Achse erneut anheben (falls PAUSE Z geringer war)
G90 ; Absolute Positionierung
G1 X{X} Y{Y} F6000 ; Kopf an die Wechselposition fahren
##### 3. Auf Benutzeraktion warten #####
RESPOND MSG="M600: Filamentwechsel. Wechseln Sie das Filament, und rufen Sie dann RESUME auf."# Der Drucker wartet nun im PAUSE-Zustand auf den RESUME-Befehl.
Oder als File Upload im Mainsail, diese Datei dann includen. WICHTIG nach mainsail.cfg Includen.
[include mainsail.cfg]
Code: Alles auswählen
[include macros.cfg]