Da das RF1000 Forum zum Ende des Jahres beendet wird, möchten wir euch hier begrüßen.
Benutzeravatar
Administrator
Klipper Cancel Resume Pause Filamentwechsel M600 Macro
################################################################################
# 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 we
rden.

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
# Fügen Sie dies in Ihre printer.cfg ein oder inkludieren Sie diese Datei via [include macros.cfg]

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.
macros.cfg
WICHTIG nach mainsail.cfg Includen.
[include mainsail.cfg]

Code: Alles auswählen

[include macros.cfg]

Information

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast