M600 command, how to purge?

I do it with the LOAD_FILAMENT and UNLOAD_FILAMENT macro ( for the filament ) and the klipper pause/resume macro:

M600, PAUSE, RESUME, CANCLE macros: ( M600 is at the end )

[pause_resume]
recover_velocity: 700

[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
variable_park: True
gcode:
  ## Move head and retract only if not already in the pause state and park set to true
  {% if printer.pause_resume.is_paused|lower == 'false' and park|lower == 'true'%}
    _TOOLHEAD_PARK_PAUSE_CANCEL
  {% endif %}
  TURN_OFF_HEATERS
  CANCEL_PRINT_BASE

[gcode_macro PAUSE]
description: Pause the actual running print
rename_existing: PAUSE_BASE
gcode:
  PAUSE_BASE
  _TOOLHEAD_PARK_PAUSE_CANCEL

[gcode_macro RESUME]
description: Resume the actual running print
rename_existing: RESUME_BASE
gcode:
  ##### read extrude from  _TOOLHEAD_PARK_PAUSE_CANCEL  macro #####
  {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %}
  #### get VELOCITY parameter if specified ####
  {% if 'VELOCITY' in params|upper %}
    {% set get_params = ('VELOCITY=' + params.VELOCITY)  %}
  {%else %}
    {% set get_params = "" %}
  {% endif %}
  ##### end of definitions #####
  {% if printer.extruder.can_extrude|lower == 'true' %}
    M83
    G1 E{extrude} F2100
    {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %}
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}  
  RESUME_BASE {get_params}

[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
description: Helper: park toolhead used in PAUSE and CANCEL_PRINT
variable_extrude: 1.0
gcode:
  ##### set park positon for x and y #####
  # default is your max posion from your printer.cfg
  {% set x_park = printer.toolhead.axis_minimum.x|float %}
  {% set y_park = printer.toolhead.axis_maximum.y|float %}
  {% set z_park_delta = 10.0 %}
  ##### calculate save lift position #####
  {% set max_z = printer.toolhead.axis_maximum.z|float %}
  {% set act_z = printer.toolhead.position.z|float %}
  {% if act_z < (max_z - z_park_delta) %}
    {% set z_safe = z_park_delta %}
  {% else %}
    {% set z_safe = max_z - act_z %}
  {% endif %}
  ##### end of definitions #####
  {% if printer.extruder.can_extrude|lower == 'true' %}
    M83
    G1 E-{extrude} F2100
    {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %}
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}
  {% if "xyz" in printer.toolhead.homed_axes %}
    G91
    G1 Z{z_safe} F900
    G90
    G1 X{x_park} Y{y_park} F6000
    {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %}
  {% else %}
    {action_respond_info("Printer not homed")}
  {% endif %}

[gcode_macro M600]
gcode:
    PAUSE

LOAD and UNLOAD macro:

[gcode_macro UNLOAD_FILAMENT]
gcode:
  M117 Filament wird ausgeworfen
  G91
  G92 E0
  G1  E15 F240
  G92 E0
  G1  E-10 F2100
  G92 E0
  G1  E-25 F1800
  G92 E0
  G1  E-10 F900
  G90

[gcode_macro LOAD_FILAMENT]
gcode:
  M117 Filament wird geladen
  G91
  G92 E0
  G1  E75 F120
  G92 E0
  G90

Settings in CURA:

When the prints pauses at the specific height ( your M600 command ) you can use the macro UNLOAD_FILAMENT or LOAD_FILAMENT at the mainsail browser interface ( or purge / retract via the extruder control panel )
image

or via klipperscreen: actions → extrude → unload / load ( to get unload and load work in klipperscreen you need the exact macro naming: LOAD_FILAMENT and UNLOAD_FILAMENT in your klipper config )

you can also purge additional filament via extrude or retract at the klipperscreen actions → extrude screen

/edit: change the toolhead position to your needs where it should park the toolhead at PAUSE ( in the
_TOOLHEAD_PARK_PAUSE_CANCEL macro )

  {% set x_park = printer.toolhead.axis_minimum.x|float %}
  {% set y_park = printer.toolhead.axis_maximum.y|float %}

you can also change how fast the toolhead should return to the print to minimize oozing:

[pause_resume]
recover_velocity: 700

/edit2:
Works like a charm:

/edit3:
When finished changing filament, of course hit the RESUME button on klipperscreen or in the webinterface :wink:

4 Likes