141 lines
5.6 KiB
INI
141 lines
5.6 KiB
INI
# Copyright (C) 2022 Justin Schuh <code@justinschuh.com>
|
|
#
|
|
# This file may be distributed under the terms of the GNU GPLv3 license.
|
|
|
|
[gcode_macro _load_unload]
|
|
variable_is_printing: 1
|
|
gcode:
|
|
# Klipper think we're printing if parking homed first, so this is a hack to
|
|
# prevent that from happening. The caller sets the value and we clear it.
|
|
SET_GCODE_VARIABLE MACRO=_load_unload VARIABLE=is_printing VALUE="{1}"
|
|
{% set saved_extruder = printer.toolhead.extruder %}
|
|
{% set EXTRUDER = params.EXTRUDER|default(saved_extruder)|lower %}
|
|
{% if 'MINIMUM' in params %}
|
|
{% set MINIMUM = params.MINIMUM|int %}
|
|
# This is the special case for a filament change after an idle timeout.
|
|
{% elif printer.pause_resume.is_paused and printer[EXTRUDER].target == 0 and
|
|
printer["gcode_macro resume"].saved_extruder_temp %}
|
|
{% set MINIMUM = printer["gcode_macro resume"].saved_extruder_temp %}
|
|
{% else %}
|
|
{% set MINIMUM =
|
|
printer.configfile.settings[EXTRUDER].min_extrude_temp + 5.0 %}
|
|
{% endif %}
|
|
{% if MINIMUM < printer.configfile.settings[EXTRUDER].min_extrude_temp %}
|
|
{ action_raise_error("Extrude below minimum temp.") }
|
|
{% elif printer.pause_resume.is_paused %}
|
|
# Clear the saved E if we're (un-)loading while paused.
|
|
SET_GCODE_VARIABLE MACRO=resume VARIABLE=saved_e VALUE="{0.0}"
|
|
{% elif printer.idle_timeout.state == "Printing" and is_printing %}
|
|
{ action_raise_error("Command not valid during printing.") }
|
|
{% endif %}
|
|
{% set km = printer["gcode_macro _km_globals"] %}
|
|
{% set SPEED = params.SPEED|default(km.load_speed)|int %}
|
|
{% set priming_length = km.load_priming_length %}
|
|
{% set LENGTH = params.LENGTH|default(km.load_length)|float - priming_length%}
|
|
{% if LENGTH < 0 %}
|
|
{% set priming_length = (priming_length + LENGTH, 0)|max %}
|
|
{% set LENGTH = 0 %}
|
|
{% endif %}
|
|
SAVE_GCODE_STATE NAME=_KM_LOAD_UNLOAD
|
|
{% if EXTRUDER != saved_extruder%}
|
|
ACTIVATE_EXTRUDER EXTRUDER={EXTRUDER}
|
|
{% endif %}
|
|
{% if printer[EXTRUDER].target < MINIMUM %}
|
|
M109 S{MINIMUM}
|
|
{% endif %}
|
|
M83
|
|
{% if params.LOAD|int %}
|
|
G1 E{LENGTH} F{SPEED}
|
|
G1 E{priming_length} F{(km.load_priming_speed, SPEED)|min}
|
|
G1 E{'%.4f' % -printer["gcode_macro resume"].saved_e} F{km.load_speed}
|
|
{% else %}
|
|
G1 E3.0 F{SPEED}
|
|
G4 P500
|
|
G1 E{'%.4f' % -priming_length} F{(km.load_priming_speed, SPEED)|min}
|
|
G1 E{'%.4f' % -LENGTH} F{SPEED}
|
|
{% endif %}
|
|
RESTORE_GCODE_STATE NAME=_KM_LOAD_UNLOAD
|
|
|
|
[gcode_macro load_filament]
|
|
description: Loads filament to the extruder.
|
|
Usage: LOAD_FILAMENT [LENGTH=<distance>] [SPEED=<speed>]
|
|
[EXTRUDER=<extruder>] [MINIMUM=<temperature>]
|
|
gcode:
|
|
_LOAD_UNLOAD LOAD=1{% for k in params
|
|
%}{' '~k~'="'~params[k]~'"'}{% endfor %}
|
|
|
|
# Dummy argument block for Mainsail
|
|
{% set dummy = None if True else "
|
|
{% set dummy = params.LENGTH|default(variable_load_length)|float %}
|
|
{% set dummy = params.SPEED|default(variable_load_speed)|float %}
|
|
{% set dummy = params.EXTRUDER|default(current extruder) %}
|
|
{% set dummy = params.MINIMUM|default(min_extrude_temp)|int %}
|
|
" %} # End argument block for Mainsail
|
|
|
|
[gcode_macro unload_filament]
|
|
description: Unloads filament from the extruder.
|
|
Usage: UNLOAD_FILAMENT [LENGTH=<distance>] [SPEED=<speed>]
|
|
[EXTRUDER=<extruder>] [MINIMUM=<temperature>]
|
|
gcode:
|
|
_LOAD_UNLOAD LOAD=0{% for k in params
|
|
%}{' '~k~'="'~params[k]~'"'}{% endfor %}
|
|
|
|
# Dummy argument block for Mainsail
|
|
{% set dummy = None if True else "
|
|
{% set dummy = params.LENGTH|default(variable_load_length)|float %}
|
|
{% set dummy = params.SPEED|default(variable_load_speed)|float %}
|
|
{% set dummy = params.EXTRUDER|default(default extruder) %}
|
|
{% set dummy = params.MINIMUM|default(min_extrude_temp)|int %}
|
|
" %} # End argument block for Mainsail
|
|
|
|
[gcode_macro _pause_inner_m700]
|
|
gcode:
|
|
{% set extruder = "extruder" ~ params.T|replace('0', '')
|
|
if "T" in params else printer.toolhead.extruder %}
|
|
{% if extruder != printer.toolhead.extruder%}
|
|
ACTIVATE_EXTRUDER EXTRUDER={extruder}
|
|
{% endif %}
|
|
|
|
{% set z_param = (' Z="%f"' % params.Z) if 'Z' in params else "" %}
|
|
|
|
{% if printer.idle_timeout.state|string == "Printing" %}
|
|
PAUSE P=2{z_param}
|
|
{% elif not printer.pause_resume.is_paused%}
|
|
SET_GCODE_VARIABLE MACRO=_load_unload VARIABLE=is_printing VALUE="{0}"
|
|
PARK P=2{z_param}
|
|
{% endif %}
|
|
|
|
[gcode_macro m701]
|
|
description: Pauses/parks the toolhead then loads filament to the extruder.
|
|
Usage: M701 [L<distance>] [Z<pos>] [T<extruder>]
|
|
gcode:
|
|
{% if 'U' in params %}
|
|
{% if not 'L' in params %}
|
|
RESPOND TYPE=error MSG="Argument \"U\" substituted for missing \"L\"."
|
|
{% set dummy = params.__setitem__("L", params.U) %}
|
|
{% else %}
|
|
RESPOND TYPE=error MSG="Invalid argument \"U\" ignored."
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
_PAUSE_INNER_M700 {% for k in params %}{' '~k~'="'~params[k]~'"'}{% endfor %}
|
|
LOAD_FILAMENT LENGTH={
|
|
params.L|default(printer["gcode_macro _km_globals"].load_length)|float}
|
|
|
|
[gcode_macro m702]
|
|
description: Pauses/parks the toolhead then unloads filament from the extruder.
|
|
Usage: M702 [U<distance>] [Z<pos>] [T<extruder>]
|
|
gcode:
|
|
{% if 'L' in params %}
|
|
{% if not 'U' in params %}
|
|
RESPOND TYPE=error MSG="Argument \"L\" substituted for missing \"U\"."
|
|
{% set dummy = params.__setitem__("U", params.L) %}
|
|
{% else %}
|
|
RESPOND TYPE=error MSG="Invalid argument \"L\" ignored."
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
_PAUSE_INNER_M700 {% for k in params %}{' '~k~'="'~params[k]~'"'}{% endfor %}
|
|
UNLOAD_FILAMENT LENGTH={
|
|
params.U|default(printer["gcode_macro _km_globals"].load_length)|float}
|