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?
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
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 )
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 )
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.