M600 command, how to purge?

ender 3 pro with btt skr e3 mini v3, the m600 macro im looking at.

When i use m600 command with marlin it uses the beeper and backs out the filament, i feed in the new filament and use the buttons on the printer to chose purge and then continue and it works just dandy.

But how does it work with klipper? is it still the buttons ont he printer? terminal command? or some other way?

Regards

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

The m600/pause/resume/cancel and load/unload macro’s should be in printer.cfg?

Got a small testfile for this and when i print without macro’s i get m600 unknown command which is to be expected but when i put the macro’s in printer.cfg i end up with a Move exceeds maximum extrusion error.

Btw im not using mainsail or fluidd, running octoklipper.

Yes printer.cfg or in some other file which you have to include in your printer.cfg