diff --git a/KlipperScreen.conf b/KlipperScreen.conf index ab59475..9c9139e 100644 --- a/KlipperScreen.conf +++ b/KlipperScreen.conf @@ -3,12 +3,12 @@ moonraker_host: 127.0.0.1 moonraker_port: 7125 [preheat PLA] -bed = 40 -extruder = 195 +bed = 50 +extruder = 200 [preheat ABS] -bed = 90 -extruder = 220 +bed = 100 +extruder = 250 [menu __main] name: {{ gettext('Main Menu') }} diff --git a/macros/_init.cfg b/macros/_init.cfg new file mode 100644 index 0000000..c7ebc50 --- /dev/null +++ b/macros/_init.cfg @@ -0,0 +1,10 @@ +##################################################################### +# include all the macros +# large parts taken from alexz and others +##################################################################### +[include debug.cfg] +[include helpers.cfg] +[include override.cfg] +[include print.cfg] +[include probe.cfg] +[include z_calibration.cfg] diff --git a/macros/debug.cfg b/macros/debug.cfg new file mode 100644 index 0000000..ba21067 --- /dev/null +++ b/macros/debug.cfg @@ -0,0 +1,85 @@ +##################################################################### +# Macros to debug the printer variable +# - DUMP_PARAMETERS +# - DUMP_CONFIG +# - DUMP_WARNINGS +# - DUMP_SETTINGS +##################################################################### + + +## Use: +## - DUMP_PARAMETERS +## - DUMP_PARAMETERS S='gcode_macro _USER_VARIABLE' +[gcode_macro DUMP_PARAMETERS] +description: Debug: Print all entries of the printer object +gcode: + {% set parameters = [] %} + {% for name1 in printer|sort %} + {% if 'S' in params %} + {% if name1 is in [params.S] %} + {% for name2 in printer[name1]|sort %} + {% set parameters = parameters.append("printer['%s'].%s = %s" % (name1, name2, printer[name1][name2])) %} + {% endfor %} + {% endif %} + {% else %} + {% if name1 is not in ['configfile'] %} + {% for name2 in printer[name1]|sort %} + {% set parameters = parameters.append("printer['%s'].%s = %s" % (name1, name2, printer[name1][name2])) %} + {% endfor %} + {% endif %} + {% endif %} + {% endfor %} + {action_respond_info(parameters|join("\n"))} + +## Use: +## - DUMP_CONFIG S='printer' +[gcode_macro DUMP_CONFIG] +description: Debug: Print the selected entry of the printer config object +gcode: + {% if 'S' in params %} + {% set parameters = [] %} + {% for name1 in printer.configfile.config %} + {% if name1 is in [params.S] %} + {% for name2 in printer.configfile.config[name1]|sort %} + {% set parameters = parameters.append("printer.configfile.config['%s'].%s = %s" % (name1, name2, printer.configfile.config[name1][name2])) %} + {% endfor %} + {% endif %} + {% endfor %} + {action_respond_info(parameters|join("\n"))} + {% else %} + {action_respond_info("WARNING: parameter S needed call e.g. DUMP_CONFIG S='printer'")} + {% endif %} + +## Use: +## - DUMP_WARNINGS +[gcode_macro DUMP_WARNINGS] +description: Debug: Print all warning messages from klipper +gcode: + {% set parameters = ["printer.configfile.warnings:"] %} + {% for name1 in printer.configfile.warnings %} + {% set parameters = parameters.append("%s -> %s -> %s\n%s" % (name1.type, name1.section, name1.option, name1.message)) %} + {% endfor %} + {action_respond_info(parameters|join("\n"))} + +## Use: +## - DUMP_SETTINGS S='printer' +[gcode_macro DUMP_SETTINGS] +description: Debug: Print the selected entry of the printer settings object +gcode: + {% if 'S' in params %} + {% set parameters = [] %} + {% for name1 in printer.configfile.settings %} + {% if name1 is in [params.S] %} + {% for name2 in printer.configfile.settings[name1]|sort %} + {% set parameters = parameters.append("printer.configfile.settings['%s'].%s = %s" % (name1, name2, printer.configfile.settings[name1][name2])) %} + {% endfor %} + {% endif %} + {% endfor %} + {action_respond_info(parameters|join("\n"))} + {% else %} + {action_respond_info("WARNING: parameter S needed call e.g. DUMP_SETTINGS S='printer'")} + {% endif %} + +##################################################################### +# Macros needed for several debug activities +##################################################################### diff --git a/macros/helpers.cfg b/macros/helpers.cfg new file mode 100644 index 0000000..6bfda81 --- /dev/null +++ b/macros/helpers.cfg @@ -0,0 +1,55 @@ +#################################################################### +# Helper macros +# - MOVE_SPEED +# - ZES +#################################################################### + +[gcode_macro MOVE_SPEED] +description: move along certain patterns with selected speed +gcode: + {% set F=params.F|default(3000)|int %} + {% if printer.idle_timeout.state != "Printing" %} + {% if "xyz" in printer.toolhead.homed_axes %} + {action_respond_info("moving with F%d" % F)} + ; square clockwise + M117 > square clockwise + G0 X275 Y275 F{F} + G0 Y25 + G0 X25 + G0 Y275 + G0 X275 + ; square counter-clockwise + M117 > square counter-clockwise + G0 X25 + G0 Y25 + G0 X275 + G0 Y275 + ; diagonal motor a + M117 > diagonal motor a + G0 X25 Y25 + G0 X275 Y275 + G0 X25 + ; diagonal motor b + M117 > diagonal motor b + G0 X275 Y25 + G0 X25 Y275 + G0 X275 Y275 + {% else %} + {action_respond_info("Printer not homed")} + {% endif %} + {% else %} + {action_respond_info("Already printing")} + {% endif %} + + +[gcode_macro ZES] +description: Z_ENDSTOP_CALIBRATE + extras +gcode: + {% if printer.idle_timeout.state != "Printing" %} + G28 + G0 X150 Y150 Z10 F10000 + Z_ENDSTOP_CALIBRATE + TESTZ Z=-9 + {% else %} + {action_respond_info("Already printing")} + {% endif %} diff --git a/macros/override.cfg b/macros/override.cfg new file mode 100644 index 0000000..b728df7 --- /dev/null +++ b/macros/override.cfg @@ -0,0 +1,147 @@ +##################################################################### +# Customized standard macros +##################################################################### +# +# !!! Caution !!! +# +# PROBE_CALIBRATE can not dock the Magprobe automatically, as it +# start's a scripting process we need to stop at the execution +# of the base macro. Use +# - PROBE_ABORT +# - PROBE_ACCEPT +# instead of the original ABORT and ACCEPT to also dock the probe +# +# - BED_MESH_CALIBRATE +# - G0 +# - G1 +# - QUAD_GANTRY_LEVEL +##################################################################### + + +## BED_MESH_CALIBRATE +[gcode_macro BED_MESH_CALIBRATE] +description: Perform QGL and bed mesh leveling +rename_existing: _BED_MESH_CALIBRATE_BASE +gcode: + ##### get params and prepare to send them to the base macro ##### + {% set get_params = [] %} + {% for key in params %} + {% set get_params = get_params.append(key + "=" + params[key]) %} + {% endfor %} + ##### end of definitions ##### + _CG28 + BED_MESH_CLEAR + ## check if QGL was already executed + {% if printer.quad_gantry_level.applied|lower == 'false' %} + QUAD_GANTRY_LEVEL PARK=false + {% endif %} + ATTACH_PROBE + _BED_MESH_CALIBRATE_BASE {get_params|join(" ")} + DETACH_PROBE + +## GO +# If your probe needs a Z move for attach/detach use either +# G0 .... FORCE +[gcode_macro G0] +description: Move gcode that prevents moves lower than the limit when probe attached +rename_existing: G0.1 +gcode: + ##### set manual override ##### + {% if 'FORCE' in params|upper %} + {% set force = 1 %} + {% else %} + {% set force = 0 %} + {% endif %} + ##### get params ##### + {% set get_params = [] %} + {% for key in params %} + {% if key is not in ['G', 'FORCE'] %} ;G1/G0 is also seen as parameter + {% set get_params = get_params.append(key + "=" + params[key]) %} + {% endif %} + {% endfor %} + ##### add caller ##### + {% set tmp = get_params.append("CALLER=G0") %} ;hack to append list objects outside of a loop + ##### add force ##### + {% set tmp = get_params.append("FORCE=" + force|string) %} ;hack to append list objects outside of a loop + ##### end of definition ##### + {% if printer['gcode_macro _MAG_PROBE'].state|lower == 'unknown' and force == 0 %} + _MAG_PROBE ACTION=GET_STATUS RESPOND=0 + {% endif %} + _Z_MOVE_CHECK {get_params|join(" ")} + +## TODO +## G1 +# If your probe needs a Z move for attach/detach use either +# G1 .... FORCE +# [gcode_macro G1] +# description: Move gcode that prevents moves lower than the limit when probe attached +# rename_existing: G1.1 +# gcode: +# ##### set manual override ##### +# {% if 'FORCE' in params|upper %} +# {% set force = 1 %} +# {% else %} +# {% set force = 0 %} +# {% endif %} +# ##### get params ##### +# {% set get_params = [] %} +# {% for key in params %} +# {% if key is not in ['G', 'FORCE'] %} ;G1/G0 is also seen as parameter +# {% set get_params = get_params.append(key + "=" + params[key]) %} +# {% endif %} +# {% endfor %} +# ##### add caller ##### +# {% set tmp = get_params.append("CALLER=G1") %} ;hack to append list objects outside of a loop +# ##### add force ##### +# {% set tmp = get_params.append("FORCE=" + force|string) %} ;hack to append list objects outside of a loop +# ##### end of definition ##### +# {% if printer['gcode_macro _MAG_PROBE'].state|lower == 'unknown' and force == 0 %} +# _MAG_PROBE ACTION=GET_STATUS RESPOND=0 +# {% endif %} +# _Z_MOVE_CHECK {get_params|join(" ")} + + +## QUAD_GANTRY_LEVEL +[gcode_macro QUAD_GANTRY_LEVEL] +description: Level a flying gantry to a stationary bed +rename_existing: _QUAD_GANTRY_LEVEL +gcode: + ##### get user defines ##### + {% set park_pos = printer['gcode_macro _USER_VARIABLE'].park_bed %} + {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop|float %} + ##### get toolhead position ##### + {% set act_z = printer.toolhead.position.z|float %} + ##### set default ##### + {% set park = params.PARK|default('true') %} + ##### end of definitions ##### + # home all axes if not already + {% if "xyz" not in printer.toolhead.homed_axes %} + _CG28 + {% endif %} + SAVE_GCODE_STATE NAME=STATE_QUAD_GANTRY_LEVEL + _SET_ACC VAL=HOME + _SET_CURRENT VAL=HOME + _CG28 RESET_SETTINGS=false + {% if act_z < z_hop %} + G1 Z{z_hop} F900 ; move head up to insure Probe is not triggered in error case + {% endif %} + ATTACH_PROBE + _QUAD_GANTRY_LEVEL + {% if params.CALIBRATE|default('false') == 'true' %} + CALIBRATE_Z RESET_SETTINGS=false + {% else %} + DETACH_PROBE + {% endif %} + #G28 Z + {% if params.RESET_SETTINGS|default('true') == 'true' %} + _SET_CURRENT + _SET_ACC + {% endif %} + {% if park|lower == 'true' %} + G90 + G0 Z{park_pos[2]} F1800 ; move nozzle to z high first + G0 X{park_pos[0]} Y{park_pos[1]} F18000 ; home to get toolhead in the middle + {% endif %} + RESTORE_GCODE_STATE NAME=STATE_QUAD_GANTRY_LEVEL + + diff --git a/macros.cfg b/macros/print.cfg similarity index 75% rename from macros.cfg rename to macros/print.cfg index c4c02ac..649cd5e 100644 --- a/macros.cfg +++ b/macros/print.cfg @@ -1,60 +1,59 @@ -## HELPERS -[gcode_macro ZES] -description: Z_ENDSTOP_CALIBRATE + extras -gcode: - G28 - G0 X150 Y150 Z10 F10000 - Z_ENDSTOP_CALIBRATE - TESTZ Z=-9 - - -[gcode_macro CENTER] -gcode: - {% set X=params.X|default(150) %} - {% set Y=params.Y|default(150) %} - {% set Z=params.Z|default(25) %} - {% if "xyz" in printer.toolhead.homed_axes %} - G0 X{X} Y{Y} Z{Z} F10000 - {% else %} - {action_respond_info("Printer not homed")} - {% endif %} - - -[gcode_macro PURGE_NOZZLE] -gcode: - {% set x0=params.x0|default(75) %} - {% set x1=params.x1|default(225) %} - {% set y0=params.y0|default(15) %} - {% set y1=params.y1|default(15.8) %} - M117 > purge nozzle - G0 Z10 F300 # move Z to travel height - G0 X{x0} Y{y0} F5000 # move to x0/y0 - G0 Z0.2 F1500 # lower Z - G0 X{x1} E30 # draw line - G0 Y{y1} # move to y1 - G0 X{x0} E15 # draw fine line +#################################################################### +# Macros used for printing +# - BRUSHIE +# - CANCEL_PRINT +# - M600 +# - PARK +# - PAUSE +# - PRINT_START +# - PRINT_END +# - PURGE_NOZZLE +# - RESUME +#################################################################### +# BRUSHIE [gcode_macro BRUSHIE] gcode: - {% set x0=50 %} + {% set x0=40 %} {% set x1=110 %} {% set y0=305 %} - {% set z0=2 %} + {% set z0=1 %} + {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop|int %} {% if "xyz" in printer.toolhead.homed_axes %} M117 > brushie brushie brushie - G0 Z20 F1000 # move Z to travel height + G0 Z{z_hop} F1000 # move Z to travel height G0 X{x0} Y{y0} F5000 # move to x0/y0 G0 Z{z0} # lower G0 X{x1} # back G0 X{x0} # forth G0 X{x1} # back - G0 Z20 F300 # move Z to travel height + G0 Z{z_hop} F300 # move Z to travel height {% else %} {action_respond_info("Printer not homed")} {% endif %} +# CANCEL_PRINT +[gcode_macro CANCEL_PRINT] +description: Cancel the actual running print +rename_existing: _CANCEL_PRINT_BASE +gcode: + TURN_OFF_HEATERS + PARK + _CANCEL_PRINT_BASE + + +[gcode_macro M600] +description: Change filament +gcode: + SAVE_GCODE_STATE NAME=M600_state + PAUSE Y=15 + M117 > change filament + RESTORE_GCODE_STATE NAME=M600_state + + +# PARK [gcode_macro PARK] gcode: {% set Y=params.Y|default(295) %} @@ -83,26 +82,41 @@ gcode: {% endif %} -[gcode_macro M600] -description: Change filament +# PAUSE +[gcode_macro PAUSE] +description: Pause the actual running print +rename_existing: _PAUSE_BASE +# change this if you need more or less extrusion +variable_extrude: 1.0 gcode: - SAVE_GCODE_STATE NAME=M600_state - PAUSE Y=15 - M117 > change filament - RESTORE_GCODE_STATE NAME=M600_state + {% set Y=params.Y|default(295) %} + # read E from pause macro + {% set E = printer["gcode_macro PAUSE"].extrude|float %} + # end of definitions + M117 > pause + _PAUSE_BASE + {% if printer.extruder.can_extrude|lower == 'true' %} + G91 + G1 E-{E} F2100 + G90 + {% else %} + {action_respond_info("Extruder not hot enough")} + {% endif %} + PARK Y={Y} -## PRINT_ +# - PRINT_START [gcode_macro PRINT_START] gcode: {% set BED=params.BED|default(100)|int %} {% set EXTRUDER=params.EXTRUDER|default(250)|int %} {% set CHAMBER=params.CHAMBER|default(0)|int %} {% set BMC=params.BMC|default(0)|int %} + {% set QGL=params.QGL|default(0)|int %} {% set PURGE=params.PURGE|default(1)|int %} {% set SOAK=params.SOAK|default(0)|int * 1000 * 60 %} {% set Z_ADJUST=params.Z_ADJUST|default(0.0)|float %} - # TODO + # TODO: ERCF {% set ERCF=params.ERCF|default(0) %} {action_respond_info("starting print BED=%d, EXTRUDER=%d, BMC=%d, PURGE=%d, SOAK=%d, Z_AJUST=%f" % (BED, EXTRUDER, BMC, PURGE, SOAK, Z_ADJUST))} M117 > configuring @@ -124,10 +138,12 @@ gcode: {% endif %} M117 > home G28 - M117 > qgl - QUAD_GANTRY_LEVEL - M117 > brushie BRUSHIE + {% if QGL %} + M117 > qgl + QUAD_GANTRY_LEVEL PARK=false + BRUSHIE + {% endif %} M117 > calibrate z CALIBRATE_Z {% if BMC %} @@ -159,6 +175,7 @@ gcode: {% endif %} +# - PRINT_END [gcode_macro PRINT_END] gcode: M117 > finished @@ -170,40 +187,28 @@ gcode: M107 ; turn off fan -[gcode_macro PRINT_LAYER_CHANGE] +# - PURGE_NOZZLE +[gcode_macro PURGE_NOZZLE] gcode: - {% set layer=params.LAYER|default(0)|int %} - {% set layer_z=params.LAYER_Z|default(0) %} - {% set total_layer_count=params.TOTAL_LAYER_COUNT|default(0) %} - M117 > layer {layer+1}/{total_layer_count} {layer_z}mm - - -## OVERRIDES -[gcode_macro PAUSE] -description: Pause the actual running print -rename_existing: PAUSE_BASE -# change this if you need more or less extrusion -variable_extrude: 1.0 -gcode: - {% set Y=params.Y|default(295) %} - # read E from pause macro - {% set E = printer["gcode_macro PAUSE"].extrude|float %} - # end of definitions - M117 > pause - PAUSE_BASE - {% if printer.extruder.can_extrude|lower == 'true' %} - G91 - G1 E-{E} F2100 - G90 - {% else %} - {action_respond_info("Extruder not hot enough")} - {% endif %} - PARK Y={Y} + {% set x0=params.x0|default(100) %} + {% set x1=params.x1|default(200) %} + {% set y0=params.y0|default(0) %} + {% set y1=params.y1|default(0.8) %} + {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop|int %} + M117 > purge nozzle + G0 Z{z_hop} F300 # move Z to travel height + G0 X{x0} Y{y0} F5000 # move to x0/y0 + G0 Z0.2 F1500 # lower Z + G0 X{x1} E20 # draw line + G0 Y{y1} # move to y1 + G0 X{x0} E10 # draw fine line + G0 Z{z_hop} F300 # move Z to travel height +# - RESUME [gcode_macro RESUME] description: Resume the actual running print -rename_existing: RESUME_BASE +rename_existing: _RESUME_BASE gcode: # read E from pause macro {% set E = printer["gcode_macro PAUSE"].extrude|float %} @@ -221,38 +226,12 @@ gcode: {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} - RESUME_BASE {get_params} + _RESUME_BASE {get_params} -[gcode_macro CANCEL_PRINT] -description: Cancel the actual running print -rename_existing: CANCEL_PRINT_BASE +[gcode_macro PRINT_LAYER_CHANGE] gcode: - TURN_OFF_HEATERS - PARK - CANCEL_PRINT_BASE - - -[gcode_macro PROBE] -description: Override PROBE and make sure we're over the bed -rename_existing: PROBE_BASE -gcode: - {% set P = printer["gcode_macro _Probe_Variables"].probe_attached %} - {% if printer.toolhead.position.y|float > 270 %} - G0 Y270 - {% endif %} - {% if P %} - PROBE_BASE - {% else %} - {action_respond_info("Probe not attached")} - {% endif %} - - -[gcode_macro PROBE_CALIBRATE] -description: Override PROBE_CALIBRATE and make sure we're over the bed -rename_existing: PROBE_CALIBRATE_BASE -gcode: - {%- if printer.toolhead.position.y|float > 270 -%} - G0 Y270 - {%- endif -%} - PROBE_CALIBRATE_BASE + {% set layer=params.LAYER|default(0)|int %} + {% set layer_z=params.LAYER_Z|default(0) %} + {% set total_layer_count=params.TOTAL_LAYER_COUNT|default(0) %} + M117 > layer {layer+1}/{total_layer_count} {layer_z}mm diff --git a/z_calibration/probing.cfg b/macros/probe.cfg similarity index 71% rename from z_calibration/probing.cfg rename to macros/probe.cfg index beba31c..8fd6b41 100644 --- a/z_calibration/probing.cfg +++ b/macros/probe.cfg @@ -1,96 +1,216 @@ ##################################################################### -# Mag Probe +# Macros for mag probe +# - ATTACH_PROBE +# - DETACH_PROBE +# - GET_PROBE_STATUS +# - QUERY_PROBE +# - PROBE +# - PROBE_ABORT +# - PROBE_ACCURACY +# - PROBE_ACCEPT +# - PROBE_CALIBRATE +# - SET_PROBE_STATUS +# - _ATTACH_PROBE +# - _DOCK_PROBE +# - _MAG_PROBE +# - _PROBE_ACTION +# - _Z_MOVE_CHECK ##################################################################### -# defined in printer.cfg - -##################################################################### -# Gantry Adjustment Routines -##################################################################### -[quad_gantry_level] -## Gantry Corners for 300mm Build -gantry_corners: - -60,-10 - 360,370 -# Probe points for 300m Build -points: - 50,25 - 50,225 - 250,225 - 250,25 -speed: 300 -horizontal_move_z: 10 -retries: 5 -retry_tolerance: 0.007 -max_adjust: 10 -##################################################################### -# Macros -##################################################################### -[gcode_macro QUAD_GANTRY_LEVEL] -description: Level a flying gantry to a stationary bed -rename_existing: QUAD_GANTRY_LEVEL_BASE -gcode: - ##### get user defines ##### - {% set park_pos = printer['gcode_macro _USER_VARIABLE'].park_bed %} - {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop|float %} - ##### get toolhead position ##### - {% set act_z = printer.toolhead.position.z|float %} - ##### set default ##### - {% set park = params.PARK|default('true') %} - ##### end of definitions ##### - # home all axes if not already - {% if "xyz" not in printer.toolhead.homed_axes %} - _CG28 - {% endif %} - SAVE_GCODE_STATE NAME=STATE_QUAD_GANTRY_LEVEL - _SET_ACC VAL=HOME - _SET_CURRENT VAL=HOME - _CG28 RESET_SETTINGS=false - {% if act_z < z_hop %} - G1 Z{z_hop} F900 ; move head up to insure Probe is not triggered in error case - {% endif %} - ATTACH_PROBE - QUAD_GANTRY_LEVEL_BASE - {% if params.CALIBRATE|default('false') == 'true' %} - CALIBRATE_Z RESET_SETTINGS=false - {% else %} - DETACH_PROBE - {% endif %} - #G28 Z - {% if params.RESET_SETTINGS|default('true') == 'true' %} - _SET_CURRENT - _SET_ACC - {% endif %} - {% if park|lower == 'true' %} - G90 - G0 Z{park_pos[2]} F1800 ; move nozzle to z high first - G0 X{park_pos[0]} Y{park_pos[1]} F18000 ; home to get toolhead in the middle - {% endif %} - RESTORE_GCODE_STATE NAME=STATE_QUAD_GANTRY_LEVEL +## ATTACH_PROBE [gcode_macro ATTACH_PROBE] description: Attaching the MagProbe if not already attached gcode: _MAG_PROBE ACTION=ATTACH _MAG_PROBE ACTION=CHECK_ATTACH + +## DETACH_PROBE [gcode_macro DETACH_PROBE] description: Dock the MagProbe if not already docked gcode: _MAG_PROBE ACTION=DOCK _MAG_PROBE ACTION=CHECK_DOCK - + + +## GET_PROBE_STATUS [gcode_macro GET_PROBE_STATUS] description: Prints the current MagProbe state, valid probe states are UNKNOWN, ATTACHED and DOCKED gcode: _MAG_PROBE ACTION=GET_STATUS RESPOND=1 - + +## QUERY_PROBE +[gcode_macro QUERY_PROBE] +description: Return the status of the z-probe and store ID +rename_existing: _QUERY_PROBE_BASE +variable_id: 0 +gcode: + {% set id = params.ID|default(0) %} ; call id 0 means invalid + _QUERY_PROBE_BASE + SET_GCODE_VARIABLE MACRO=QUERY_PROBE VARIABLE=id VALUE={id} + + +## PROBE +[gcode_macro PROBE] +description: Probe Z-height at current XY position and dock/undock MagProbe +rename_existing: _PROBE_BASE +gcode: + ##### get new parameter. ##### + {% set dock = params.DOCK|default(1)|int %} ; use DOCK=0 to omit the probe docking + ##### get user defines ##### + {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + ##### get toolhead parameters ##### + {% set act_z = printer.gcode_move.gcode_position.z|float %} + {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} + ##### get params and prepare to send them to the base macro ##### + {% set get_params = [] %} + {% for key in params %} + {% set get_params = get_params.append(key + "=" + params[key]) %} + {% endfor %} + ##### end of definitions ##### + # as we need to return to the position with the probe we need to be at least at z_min + G90 ; absolute positioning + {% if act_z < z_min %} + {action_respond_info("PROBE: High must be above %.2f" % z_min)} + G1 Z{z_min} F900 ; move head up + {% endif %} + M400 ; get the buffer cleared first + SAVE_GCODE_STATE NAME=STATE_PROBE + ATTACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE MOVE=1 MOVE_SPEED={t_speed} + {% if printer.toolhead.position.y|float > 270 %} + G0 Y270 + {% endif %} + _PROBE_BASE {get_params|join(" ")} + G1 Z{z_min} F900 ; move head up to remove trigger + {% if dock == 1 %} + DETACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE MOVE=1 MOVE_SPEED={t_speed} + {% endif %} + {% if absolute_coordinates == 'false' %} G91 {% endif %} + + +## PROBE_ABORT +[gcode_macro PROBE_ABORT] +description: Abort manual Z probing tool for Probe and dock MagProbe +variable_caller: 'unknown' +variable_absolute_coordinates: False +gcode: + ##### get user defines ##### + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + ##### end of definitions ##### + {% if caller|lower|string == 'calib' %} + ABORT + DETACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} + {% if absolute_coordinates == 'false' %} G91 {% endif %} + SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"unknown"' + {% else %} + {action_respond_info("PROBE_ABORT: Executed while PROBE_CALIBRATE is not running")} + {% endif %} + + +## PROBE_ACCURACY +[gcode_macro PROBE_ACCURACY] +description: Probe Z-height accuracy at current XY position and dock/undock MagProbe +rename_existing: _PROBE_ACCURACY_BASE +gcode: + ##### get new parameter. ##### + {% set dock = params.DOCK|default(1)|int %} ; use DOCK=0 to omit the probe docking + ##### get user defines ##### + {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + ##### get toolhead parameters ##### + {% set act_z = printer.gcode_move.gcode_position.z|float %} + {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} + ##### get params and prepare to send them to the base macro ##### + {% set get_params = [] %} + {% for key in params %} + {% set get_params = get_params.append(key + "=" + params[key]) %} + {% endfor %} + ##### end of definitions ##### + # as we need to return to the position with the probe we need to be at least at z_min + G90 ; absolute positioning + {% if act_z < z_min %} + {action_respond_info("PROBE_ACCURACY: High must be above %.2f" % z_min)} + G1 Z{z_min} F900 ; move head up + {% endif %} + M400 ; get the buffer cleared first + SAVE_GCODE_STATE NAME=STATE_PROBE_ACCURACY + ATTACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE_ACCURACY MOVE=1 MOVE_SPEED={t_speed} + _PROBE_ACCURACY_BASE {get_params|join(" ")} + {% if dock == 1 %} + DETACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE_ACCURACY MOVE=1 MOVE_SPEED={t_speed} + {% endif %} + {% if absolute_coordinates == 'false' %} G91 {% endif %} + + +## PROBE_ACCEPT +[gcode_macro PROBE_ACCEPT] +description: Accept the current Z position for Probe and dock MagProbe +gcode: + ##### get variables from ABORT ##### + {% set caller = printer['gcode_macro PROBE_ABORT'].caller %} + {% set absolute_coordinates = printer['gcode_macro PROBE_ABORT'].absolute_coordinates %} + ##### get user defines ##### + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + ##### end of definitions ##### + {% if caller|lower|string == 'calib' %} + ACCEPT + DETACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} + {% if absolute_coordinates == 'false' %} G91 {% endif %} + SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"unknown"' + {% else %} + {action_respond_info("PROBE_ACCEPT: Executed while PROBE_CALIBRATE is not running")} + {% endif %} + + + + +## PROBE_CALIBRATE +[gcode_macro PROBE_CALIBRATE] +description: Calibrate the probes z_offset and undock MagProbe +rename_existing: _PROBE_CALIBRATE_BASE +gcode: + ##### get user defines ##### + {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + ##### get toolhead parameters ##### + {% set act_z = printer.gcode_move.gcode_position.z|float %} + {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} + ##### get params and prepare to send them to the base macro ##### + {% set get_params = [] %} + {% for key in params %} + {% set get_params = get_params.append(key + "=" + params[key]) %} + {% endfor %} + ##### end of definitions ##### + # as we need to return to the position with the probe we need to be at least at z_min + G90 ; absolute positioning + {% if act_z < z_min %} + {action_respond_info("PROBE_CALIBRATE: High must be above %.2f" % z_min)} + G1 Z{z_min} F900 ; move head up + {% endif %} + M400 ; get the buffer cleared first + SAVE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE + ATTACH_PROBE + RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} + SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"calib"' + SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=absolute_coordinates VALUE='"{absolute_coordinates}"' + _PROBE_CALIBRATE_BASE {get_params|join(" ")} + + +## SET_PROBE_STATUS [gcode_macro SET_PROBE_STATUS] description: Manually specify MagProbe status, valid probe states are UNKNOWN, ATTACHED and DOCKED variable_state: 'unknown' gcode: - {% if 'STATE' in params|upper and + {% if 'STATE' in params|upper and (params.STATE|lower == 'unknown' or params.STATE|lower == 'attached' or params.STATE|lower == 'docked') %} SET_GCODE_VARIABLE MACRO=SET_PROBE_STATUS VARIABLE=state VALUE='"{params.STATE|lower}"' SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=state VALUE='"{params.STATE|lower}"' @@ -98,10 +218,85 @@ gcode: {% set state = params.STATE|default('none') %} {action_raise_error("Invalid probe state: %s. Valid probe states are [UNKNOWN, ATTACHED, DOCKED]" % state|upper)} {% endif %} - -##################################################################### -# Helper Macros -##################################################################### + + +## _ATTACH_PROBE +[gcode_macro _ATTACH_PROBE] +description: Helper: Attach MagProbe +gcode: + ##### Get user defines ##### + {% set dock_x = printer['gcode_macro _USER_VARIABLE'].probe_dock_x %} + {% set dock_y = printer['gcode_macro _USER_VARIABLE'].probe_dock_y %} + {% set dock_z = printer['gcode_macro _USER_VARIABLE'].probe_dock_z %} + {% set undock_x = printer['gcode_macro _USER_VARIABLE'].probe_undock_x %} + {% set undock_y = printer['gcode_macro _USER_VARIABLE'].probe_undock_y %} + {% set undock_z = printer['gcode_macro _USER_VARIABLE'].probe_undock_z %} + {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + {% set d_speed = printer['gcode_macro _USER_VARIABLE'].probe_dock_speed|float * 60 %} + ##### get toolhead position ##### + {% set act_z = printer.toolhead.position.z|float %} + ##### end of definitions ##### + SAVE_GCODE_STATE NAME=STATE_ATTACH_PROBE + SET_GCODE_OFFSET Z=0.0 ; reset offset - will be restored + G90 ; absolute positioning + {% if act_z < z_min %} + G0 Z{z_min} F1500 ; move head up + {% endif %} + + ##### gantry dock: + G0 X{undock_x} Y{undock_y} F{t_speed} ; move next to mag-probe + G0 X{dock_x} F{d_speed} ; move sideways to attach probe + G0 Y{dock_y} F{d_speed} ; move out of holder + + RESTORE_GCODE_STATE NAME=STATE_ATTACH_PROBE + + +## _DOCK_PROBE +[gcode_macro _DOCK_PROBE] +description: Helper: Dock MagProbe +gcode: + ##### Get user defines ##### + {% set dock_x = printer['gcode_macro _USER_VARIABLE'].probe_dock_x %} + {% set dock_y = printer['gcode_macro _USER_VARIABLE'].probe_dock_y %} + {% set dock_z = printer['gcode_macro _USER_VARIABLE'].probe_dock_z %} + {% set undock_x = printer['gcode_macro _USER_VARIABLE'].probe_undock_x %} + {% set undock_y = printer['gcode_macro _USER_VARIABLE'].probe_undock_y %} + {% set undock_z = printer['gcode_macro _USER_VARIABLE'].probe_undock_z %} + {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} + {% set d_speed = printer['gcode_macro _USER_VARIABLE'].probe_dock_speed|float * 60 %} + ##### get toolhead position ##### + {% set act_z = printer.toolhead.position.z|float %} + ##### end of definitions ##### + SAVE_GCODE_STATE NAME=STATE_DOCK_PROBE + SET_GCODE_OFFSET Z=0.0 ; reset offset - will be restored + G90 ; absolute positioning + {% if act_z < z_min %} + G0 Z{z_min} F900 ; move head up + {% endif %} + + ################################################################### + # !!! Caution !!! + # + # Adapt for your needs if needed !! + ################################################################### + + ##### Example for a bed dock: + #G0 X{dock_x} Y{dock_y} F{t_speed} ; move to mag-probe + #G0 Z{dock_z} F1500 FORCE ; move down to probe + #G0 Y{undock_y} F{d_speed} ; move into the holder + #G0 Z{undock_z} F1500 ; move upwards to remove probe + + ##### Example for a gantry dock: + G0 X{dock_x} Y{dock_y} F{t_speed} ; move in front of mag-probe + G0 Y{undock_y} F{d_speed} ; move into the holder + G0 X{undock_x} F{d_speed} ; move sideways to remove probe + + RESTORE_GCODE_STATE NAME=STATE_DOCK_PROBE + + +## MAG_PROBE # QUERY_PROBE must run direct before _PROBE_ACTION # that relation is insured by the caller id [gcode_macro _MAG_PROBE] @@ -127,6 +322,8 @@ gcode: SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=id VALUE={id} M400 + +## _PROBE_ACTION [gcode_macro _PROBE_ACTION] description: Helper: Perform MagProbe action gcode: @@ -196,164 +393,8 @@ gcode: {action_raise_error("MagProbe: action not defined")} {% endif %} -[gcode_macro _ATTACH_PROBE] -description: Helper: Attach MagProbe -gcode: - ##### Get user defines ##### - {% set dock_x = printer['gcode_macro _USER_VARIABLE'].probe_dock_x %} - {% set dock_y = printer['gcode_macro _USER_VARIABLE'].probe_dock_y %} - {% set dock_z = printer['gcode_macro _USER_VARIABLE'].probe_dock_z %} - {% set undock_x = printer['gcode_macro _USER_VARIABLE'].probe_undock_x %} - {% set undock_y = printer['gcode_macro _USER_VARIABLE'].probe_undock_y %} - {% set undock_z = printer['gcode_macro _USER_VARIABLE'].probe_undock_z %} - {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - {% set d_speed = printer['gcode_macro _USER_VARIABLE'].probe_dock_speed|float * 60 %} - ##### get toolhead position ##### - {% set act_z = printer.toolhead.position.z|float %} - ##### end of definitions ##### - SAVE_GCODE_STATE NAME=STATE_ATTACH_PROBE - SET_GCODE_OFFSET Z=0.0 ; reset offset - will be restored - G90 ; absolute positioning - {% if act_z < z_min %} - G0 Z{z_min} F1500 ; move head up - {% endif %} - ################################################################### - # !!! Caution !!! - # - # Adapt for your needs if needed !! - ################################################################### - - ##### Example for a bed dock: - #G0 X{undock_x} Y{undock_y} F{t_speed} ; move to mag-probe - #G0 Z{dock_z} F1500 FORCE ; move down to probe - #G0 Y{dock_y} F{d_speed} ; move out of holder - #G0 Z{undock_z} F1500 ; move head up - - ##### Example for a gantry dock: - G0 X{undock_x} Y{undock_y} F{t_speed} ; move next to mag-probe - G0 X{dock_x} F{d_speed} ; move sideways to attach probe - G0 Y{dock_y} F{d_speed} ; move out of holder - - RESTORE_GCODE_STATE NAME=STATE_ATTACH_PROBE - -[gcode_macro _DOCK_PROBE] -description: Helper: Dock MagProbe -gcode: - ##### Get user defines ##### - {% set dock_x = printer['gcode_macro _USER_VARIABLE'].probe_dock_x %} - {% set dock_y = printer['gcode_macro _USER_VARIABLE'].probe_dock_y %} - {% set dock_z = printer['gcode_macro _USER_VARIABLE'].probe_dock_z %} - {% set undock_x = printer['gcode_macro _USER_VARIABLE'].probe_undock_x %} - {% set undock_y = printer['gcode_macro _USER_VARIABLE'].probe_undock_y %} - {% set undock_z = printer['gcode_macro _USER_VARIABLE'].probe_undock_z %} - {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - {% set d_speed = printer['gcode_macro _USER_VARIABLE'].probe_dock_speed|float * 60 %} - ##### get toolhead position ##### - {% set act_z = printer.toolhead.position.z|float %} - ##### end of definitions ##### - SAVE_GCODE_STATE NAME=STATE_DOCK_PROBE - SET_GCODE_OFFSET Z=0.0 ; reset offset - will be restored - G90 ; absolute positioning - {% if act_z < z_min %} - G0 Z{z_min} F900 ; move head up - {% endif %} - - ################################################################### - # !!! Caution !!! - # - # Adapt for your needs if needed !! - ################################################################### - - ##### Example for a bed dock: - #G0 X{dock_x} Y{dock_y} F{t_speed} ; move to mag-probe - #G0 Z{dock_z} F1500 FORCE ; move down to probe - #G0 Y{undock_y} F{d_speed} ; move into the holder - #G0 Z{undock_z} F1500 ; move upwards to remove probe - - ##### Example for a gantry dock: - G0 X{dock_x} Y{dock_y} F{t_speed} ; move in front of mag-probe - G0 Y{undock_y} F{d_speed} ; move into the holder - G0 X{undock_x} F{d_speed} ; move sideways to remove probe - - RESTORE_GCODE_STATE NAME=STATE_DOCK_PROBE - -##################################################################### -# Customized standard macros -##################################################################### -# -# !!! Caution !!! -# -# PROBE_CALIBRATE can not dock the Magprobe automatically, as it -# start's a scripting process we need to stop at the execution -# of the base macro. Use -# - PROBE_ABORT -# - PROBE_ACCEPT -# instead of the original ABORT and ACCEPT to also dock the probe -# -##################################################################### -# -# If your probe needs a Z move for attach/detach use either -# G0 .... FORCE -# G1 .... FORCE -# -##################################################################### -[gcode_macro G0] -description: Move gcode that prevents moves lower than the limit when probe attached -rename_existing: G0.1 -gcode: - ##### set manual override ##### - {% if 'FORCE' in params|upper %} - {% set force = 1 %} - {% else %} - {% set force = 0 %} - {% endif %} - ##### get params ##### - {% set get_params = [] %} - {% for key in params %} - {% if key is not in ['G', 'FORCE'] %} ;G1/G0 is also seen as parameter - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endif %} - {% endfor %} - ##### add caller ##### - {% set tmp = get_params.append("CALLER=G0") %} ;hack to append list objects outside of a loop - ##### add force ##### - {% set tmp = get_params.append("FORCE=" + force|string) %} ;hack to append list objects outside of a loop - ##### end of definition ##### - {% if printer['gcode_macro _MAG_PROBE'].state|lower == 'unknown' and force == 0 %} - _MAG_PROBE ACTION=GET_STATUS RESPOND=0 - {% endif %} - _Z_MOVE_CHECK {get_params|join(" ")} - -[gcode_macro G1] -description: Move gcode that prevents moves lower than the limit when probe attached -rename_existing: G1.1 -gcode: - ##### set manual override ##### - {% if 'FORCE' in params|upper %} - {% set force = 1 %} - {% else %} - {% set force = 0 %} - {% endif %} - ##### get params ##### - {% set get_params = [] %} - {% for key in params %} - {% if key is not in ['G', 'FORCE'] %} ;G1/G0 is also seen as parameter - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endif %} - {% endfor %} - ##### add caller ##### - {% set tmp = get_params.append("CALLER=G1") %} ;hack to append list objects outside of a loop - ##### add force ##### - {% set tmp = get_params.append("FORCE=" + force|string) %} ;hack to append list objects outside of a loop - ##### end of definition ##### - {% if printer['gcode_macro _MAG_PROBE'].state|lower == 'unknown' and force == 0 %} - _MAG_PROBE ACTION=GET_STATUS RESPOND=0 - {% endif %} - _Z_MOVE_CHECK {get_params|join(" ")} - +## _Z_MOVE_CHECK [gcode_macro _Z_MOVE_CHECK] description: Helper: Check limit and perform move gcode: @@ -386,9 +427,9 @@ gcode: {% endif %} ##### decide if a Z move can be executed ##### {% if z_target > z_min or z_act < z_target %} - {% set get_params = get_params.append(key + params[key]) %} + {% set get_params = get_params.append(key + params[key]) %} {% else %} - {action_respond_info("%s: Z Moves lower than %.1fmm not allowed with installed probe" % (caller,z_min))} + {action_respond_info("%s: Z Moves lower than %.1fmm not allowed with installed probe" % (caller,z_min))} {% endif %} {% else %} {action_raise_error("%s: MagProbe state %s not valid" % (caller, probe_state|upper))} @@ -397,171 +438,3 @@ gcode: {% endfor %} ##### end of definitions ##### {caller}.1 {get_params|join(" ")} - -[gcode_macro QUERY_PROBE] -description: Return the status of the z-probe and store ID -rename_existing: QUERY_PROBE_BASE -variable_id: 0 -gcode: - {% set id = params.ID|default(0) %} ; call id 0 means invalid - QUERY_PROBE_BASE - SET_GCODE_VARIABLE MACRO=QUERY_PROBE VARIABLE=id VALUE={id} - -[gcode_macro PROBE_ACCURACY] -description: Probe Z-height accuracy at current XY position and dock/undock MagProbe -rename_existing: PROBE_ACCURACY_BASE -gcode: - ##### get new parameter. ##### - {% set dock = params.DOCK|default(1)|int %} ; use DOCK=0 to omit the probe docking - ##### get user defines ##### - {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - ##### get toolhead parameters ##### - {% set act_z = printer.gcode_move.gcode_position.z|float %} - {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} - ##### get params and prepare to send them to the base macro ##### - {% set get_params = [] %} - {% for key in params %} - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endfor %} - ##### end of definitions ##### - # as we need to return to the position with the probe we need to be at least at z_min - G90 ; absolute positioning - {% if act_z < z_min %} - {action_respond_info("PROBE_ACCURACY: High must be above %.2f" % z_min)} - G1 Z{z_min} F900 ; move head up - {% endif %} - M400 ; get the buffer cleared first - SAVE_GCODE_STATE NAME=STATE_PROBE_ACCURACY - ATTACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE_ACCURACY MOVE=1 MOVE_SPEED={t_speed} - PROBE_ACCURACY_BASE {get_params|join(" ")} - {% if dock == 1 %} - DETACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE_ACCURACY MOVE=1 MOVE_SPEED={t_speed} - {% endif %} - {% if absolute_coordinates == 'false' %} G91 {% endif %} - -[gcode_macro PROBE] -description: Probe Z-height at current XY position and dock/undock MagProbe -rename_existing: PROBE_BASE -gcode: - ##### get new parameter. ##### - {% set dock = params.DOCK|default(1)|int %} ; use DOCK=0 to omit the probe docking - ##### get user defines ##### - {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - ##### get toolhead parameters ##### - {% set act_z = printer.gcode_move.gcode_position.z|float %} - {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} - ##### get params and prepare to send them to the base macro ##### - {% set get_params = [] %} - {% for key in params %} - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endfor %} - ##### end of definitions ##### - # as we need to return to the position with the probe we need to be at least at z_min - G90 ; absolute positioning - {% if act_z < z_min %} - {action_respond_info("PROBE: High must be above %.2f" % z_min)} - G1 Z{z_min} F900 ; move head up - {% endif %} - M400 ; get the buffer cleared first - SAVE_GCODE_STATE NAME=STATE_PROBE - ATTACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE MOVE=1 MOVE_SPEED={t_speed} - PROBE_BASE {get_params|join(" ")} - G1 Z{z_min} F900 ; move head up to remove trigger - {% if dock == 1 %} - DETACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE MOVE=1 MOVE_SPEED={t_speed} - {% endif %} - {% if absolute_coordinates == 'false' %} G91 {% endif %} - -[gcode_macro PROBE_CALIBRATE] -description: Calibrate the probes z_offset and undock MagProbe -rename_existing: PROBE_CALIBRATE_BASE -gcode: - ##### get user defines ##### - {% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - ##### get toolhead parameters ##### - {% set act_z = printer.gcode_move.gcode_position.z|float %} - {% set absolute_coordinates = printer.gcode_move.absolute_coordinates|lower %} - ##### get params and prepare to send them to the base macro ##### - {% set get_params = [] %} - {% for key in params %} - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endfor %} - ##### end of definitions ##### - # as we need to return to the position with the probe we need to be at least at z_min - G90 ; absolute positioning - {% if act_z < z_min %} - {action_respond_info("PROBE_CALIBRATE: High must be above %.2f" % z_min)} - G1 Z{z_min} F900 ; move head up - {% endif %} - M400 ; get the buffer cleared first - SAVE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE - ATTACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} - SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"calib"' - SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=absolute_coordinates VALUE='"{absolute_coordinates}"' - PROBE_CALIBRATE_BASE {get_params|join(" ")} - -[gcode_macro BED_MESH_CALIBRATE] -description: Perform QGL and bed mesh leveling -rename_existing: BED_MESH_CALIBRATE_BASE -gcode: - ##### get params and prepare to send them to the base macro ##### - {% set get_params = [] %} - {% for key in params %} - {% set get_params = get_params.append(key + "=" + params[key]) %} - {% endfor %} - ##### end of definitions ##### - _CG28 - BED_MESH_CLEAR - ## check if QGL was already executed - {% if printer.quad_gantry_level.applied|lower == 'false' %} - QUAD_GANTRY_LEVEL PARK=false - {% endif %} - ATTACH_PROBE - BED_MESH_CALIBRATE_BASE {get_params|join(" ")} - DETACH_PROBE - -[gcode_macro PROBE_ABORT] -description: Abort manual Z probing tool for Probe and dock MagProbe -variable_caller: 'unknown' -variable_absolute_coordinates: False -gcode: - ##### get user defines ##### - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - ##### end of definitions ##### - {% if caller|lower|string == 'calib' %} - ABORT - DETACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} - {% if absolute_coordinates == 'false' %} G91 {% endif %} - SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"unknown"' - {% else %} - {action_respond_info("PROBE_ABORT: Executed while PROBE_CALIBRATE is not running")} - {% endif %} - -[gcode_macro PROBE_ACCEPT] -description: Accept the current Z position for Probe and dock MagProbe -gcode: - ##### get variables from ABORT ##### - {% set caller = printer['gcode_macro PROBE_ABORT'].caller %} - {% set absolute_coordinates = printer['gcode_macro PROBE_ABORT'].absolute_coordinates %} - ##### get user defines ##### - {% set t_speed = printer['gcode_macro _USER_VARIABLE'].probe_travel_speed|float * 60 %} - ##### end of definitions ##### - {% if caller|lower|string == 'calib' %} - ACCEPT - DETACH_PROBE - RESTORE_GCODE_STATE NAME=STATE_PROBE_CALIBRATE MOVE=1 MOVE_SPEED={t_speed} - {% if absolute_coordinates == 'false' %} G91 {% endif %} - SET_GCODE_VARIABLE MACRO=PROBE_ABORT VARIABLE=caller VALUE='"unknown"' - {% else %} - {action_respond_info("PROBE_ACCEPT: Executed while PROBE_CALIBRATE is not running")} - {% endif %} - diff --git a/z_calibration/homing.cfg b/macros/z_calibration.cfg similarity index 72% rename from z_calibration/homing.cfg rename to macros/z_calibration.cfg index 9014df5..00e8bb6 100644 --- a/z_calibration/homing.cfg +++ b/macros/z_calibration.cfg @@ -1,68 +1,76 @@ ##################################################################### -# Homing definition +# Macros for z-calibration +# - CALIBRATE_Z +# - _CG28 +# - _SET_CURRENT +# - _SET_ACC ##################################################################### -[homing_override] -axes: z -set_position_z: 0 -gcode: - ##### get user defines ##### - # use -10 as default to insure it error in case the variable is not existing - {% set z_endstop_x = printer['gcode_macro _USER_VARIABLE'].z_endstop_x|default(-10) %} - {% set z_endstop_y = printer['gcode_macro _USER_VARIABLE'].z_endstop_y|default(-10) %} - {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop %} - ##### end of definitions ##### - SAVE_GCODE_STATE NAME=HOMING_state - ## reduce current of Z motors + +## CALIBRATE_Z +[gcode_macro CALIBRATE_Z] +description: Automatically calibrates the nozzles offset to the print surface and dock/undock MagProbe +rename_existing: _CALIBRATE_Z_BASE +gcode: + ##### get user defines ##### + {% set z_hop = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} + ##### get toolhead parameters ##### + {% set act_z = printer.gcode_move.gcode_position.z|float %} + #### end of definitions ##### + ## reduce current of motors _SET_ACC VAL=HOME _SET_CURRENT VAL=HOME - - G91 ; relative positioning - # G0 Z10 F1500 - G0 Z10 F1300 - G90 ; absolute positioning - - # Home X and Y only for G28 or G28 XYZ - {% if 'Z' in params %} - {% if "x" not in printer.toolhead.homed_axes %} - G28 X - {% endif %} - {% if "y" not in printer.toolhead.homed_axes %} - G28 Y - {% endif %} - {% else %} - G28 X Y - {% endif %} - - ## XY Location of the Z Endstop Switch - G0 X{z_endstop_x} Y{z_endstop_y} F12000 - G28 Z ; home Z - # G0 Z2 F1500 ; move up - G0 Z2 F1300 ; move up - - ## return to org current settings + _CG28 RESET_SETTINGS=false + {% if act_z < z_hop %} + G90 ; absolute positioning + {action_respond_info("CALIBRATE_Z: High must be above %.2f" % z_hop)} + G1 Z{z_hop} F900 ; move head up + {% endif %} + #ATTACH_PROBE ; if not using start_gcode + _CALIBRATE_Z_BASE + #DETACH_PROBE ; if not using end_gcode {% if params.RESET_SETTINGS|default('true') == 'true' %} - DETACH_PROBE + ## return to org current settings _SET_CURRENT _SET_ACC {% endif %} - # Lift Z - # G0 Z{z_hop} F1800 - G0 Z{z_hop} F1300 - RESTORE_GCODE_STATE NAME=HOMING_state - -##################################################################### -# Macros -##################################################################### -## conditional home +## _CG28 [gcode_macro _CG28] +description: conditional home gcode: {% if "xyz" not in printer.toolhead.homed_axes %} G28 RESET_SETTINGS={ params.RESET_SETTINGS|default('true') } {% endif %} +## _SET_ACC +[gcode_macro _SET_ACC] +description: Helper: Set accel and accel_to_decel value +variable_last_val: 'CONFIG' +gcode: + ##### set default value ##### + {% set default_respond = printer['gcode_macro _USER_VARIABLE'].respond_set_acc|int %} + {% set val = params.VAL|default('CONFIG') %} + {% set respond = params.RESPOND|default(default_respond)|int %} + {% if val == 'HOME' %} + {% set accel = printer['gcode_macro _USER_VARIABLE'].home_accel %} + {% set accel_to_decel = printer['gcode_macro _USER_VARIABLE'].home_accel|int / 2 %} + {% else %} + {% set accel = printer.configfile.settings.printer.max_accel %} + {% set accel_to_decel = printer.configfile.settings.printer.max_accel_to_decel %} + {% endif %} + ##### end of definition ##### + {% if val != last_val %} + SET_GCODE_VARIABLE MACRO=_SET_ACC VARIABLE=last_val VALUE='"{val}"' + {% if respond == 1 %} + {action_respond_info("VELOCITY_LIMIT set ACCEL: %d ACCEL_TO_DECEL: %d" % (accel|int, accel_to_decel|int))} + {% endif %} + SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel_to_decel} RESPOND=0 + {% endif %} + + +## _SET_CURRENT [gcode_macro _SET_CURRENT] description: Helper: Set Z-drive motor current variable_last_val: 'CONFIG' @@ -103,27 +111,3 @@ gcode: SET_TMC_CURRENT STEPPER=stepper_z3 CURRENT={z_run} HOLDCURRENT={z_hold} M400 {% endif %} - -[gcode_macro _SET_ACC] -description: Helper: Set accel and accel_to_decel value -variable_last_val: 'CONFIG' -gcode: - ##### set default value ##### - {% set default_respond = printer['gcode_macro _USER_VARIABLE'].respond_set_acc|int %} - {% set val = params.VAL|default('CONFIG') %} - {% set respond = params.RESPOND|default(default_respond)|int %} - {% if val == 'HOME' %} - {% set accel = printer['gcode_macro _USER_VARIABLE'].home_accel %} - {% set accel_to_decel = printer['gcode_macro _USER_VARIABLE'].home_accel|int / 2 %} - {% else %} - {% set accel = printer.configfile.settings.printer.max_accel %} - {% set accel_to_decel = printer.configfile.settings.printer.max_accel_to_decel %} - {% endif %} - ##### end of definition ##### - {% if val != last_val %} - SET_GCODE_VARIABLE MACRO=_SET_ACC VARIABLE=last_val VALUE='"{val}"' - {% if respond == 1 %} - {action_respond_info("VELOCITY_LIMIT set ACCEL: %d ACCEL_TO_DECEL: %d" % (accel|int, accel_to_decel|int))} - {% endif %} - SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel_to_decel} RESPOND=0 - {% endif %} diff --git a/printer.cfg b/printer.cfg index 7749743..de2d4d4 100644 --- a/printer.cfg +++ b/printer.cfg @@ -32,6 +32,25 @@ restart_method: command ##-------------------------------------------------------------------- +[gcode_macro zc] +gcode: + {% set z_run = params.CUR|default(0.4)|float %} + {% set z_hold = z_run %} + {action_respond_info("zc: setting zcurrent to %.2f" % z_run)} + SET_TMC_CURRENT STEPPER=stepper_z CURRENT={z_run} HOLDCURRENT={z_hold} + SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={z_run} HOLDCURRENT={z_hold} + SET_TMC_CURRENT STEPPER=stepper_z2 CURRENT={z_run} HOLDCURRENT={z_hold} + SET_TMC_CURRENT STEPPER=stepper_z3 CURRENT={z_run} HOLDCURRENT={z_hold} + + +[gcode_macro zm] +gcode: + {% set speed = params.SPEED|default(300)|int %} + {action_respond_info("moving with F%d" % speed)} + G0 Z30 F{speed} + G0 Z10 F{speed} + + [printer] kinematics: corexy max_velocity: 300 @@ -51,7 +70,7 @@ square_corner_velocity: 5.0 ##################################################################### [include fluidd.cfg] -[include macros.cfg] +[include macros/_init.cfg] [include neopixel.cfg] [include fans.cfg] [include input_shaper.cfg] @@ -75,7 +94,7 @@ endstop_pin: PG6 position_min: 0 position_endstop: 300 position_max: 300 -homing_speed: 30 # Max 100 +homing_speed: 30 # speed: mm/sec, feedrate: mm/min homing_retract_dist: 5 homing_positive_dir: true @@ -96,7 +115,7 @@ rotation_distance: 40 microsteps: 16 full_steps_per_rotation: 400 # 200: 1.8 deg stepper, 400: 0.9 deg stepper endstop_pin: PG9 -position_min: 15 # Camera +position_min: 0 position_endstop: 305 position_max: 305 homing_speed: 30 # Max 100 @@ -125,16 +144,13 @@ rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 endstop_pin: PG10 -## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) -## (+) value = endstop above Z0, (-) value = endstop below -## Increasing position_endstop brings nozzle closer to the bed -## After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config -#position_endstop: -0.5 +## actual_position = measured_position_endstop - position_endstop +position_endstop: 0.5 position_max: 290 position_min: -5 -homing_speed: 11.0 # speed: mm/sec, feedrate: mm/min -second_homing_speed: 3 -homing_retract_dist: 3 +homing_speed: 13.0 # speed: mm/sec, feedrate: mm/min +second_homing_speed: 4 +homing_retract_dist: 13 [tmc2209 stepper_z] uart_pin: PC6 @@ -276,7 +292,7 @@ max_temp: 120 pin: ^PG11 x_offset: 0 y_offset: 25.0 -#z_offset: 0 +z_offset: 10 speed: 6 lift_speed: 11 samples: 5 @@ -329,7 +345,7 @@ timeout: 1800 ## replaced with homing_override in klicky-probe.cfg # [safe_z_home] # ## XY Location of the Z Endstop Switch -# home_xy_position: 208, 305 +# home_xy_position: 205, 305 # speed: 100 # z_hop: 10 # z_hop_speed: 25 @@ -356,9 +372,9 @@ points: 50,225 250,225 250,40 -speed: 100 +speed: 150 horizontal_move_z: 15 -retries: 8 +retries: 5 retry_tolerance: 0.0075 max_adjust: 10 @@ -380,11 +396,11 @@ max_adjust: 10 #*# [bed_mesh default] #*# version = 1 #*# points = -#*# -0.002500, -0.015000, -0.002500, -0.005000, -0.045000 -#*# -0.000000, -0.012500, 0.002500, -0.005000, -0.040000 -#*# -0.002500, 0.002500, 0.000000, 0.012500, -0.032500 -#*# -0.012500, -0.007500, 0.025000, 0.017500, 0.000000 -#*# 0.057500, 0.072500, 0.042500, 0.075000, 0.027500 +#*# -0.032500, 0.002500, 0.015000, 0.015000, -0.042500 +#*# -0.032500, -0.015000, 0.002500, 0.002500, -0.055000 +#*# -0.040000, -0.015000, 0.000000, 0.000000, -0.060000 +#*# -0.030000, -0.022500, 0.010000, 0.010000, -0.055000 +#*# 0.075000, 0.015000, 0.052500, 0.055000, -0.007500 #*# tension = 0.2 #*# min_x = 40.0 #*# algo = bicubic @@ -395,9 +411,3 @@ max_adjust: 10 #*# max_y = 280.0 #*# mesh_x_pps = 2 #*# max_x = 260.0 -#*# -#*# [stepper_z] -#*# position_endstop = 0.817 -#*# -#*# [probe] -#*# z_offset = 7.660 diff --git a/webcam.txt b/webcam.txt index d489cf7..8a90217 100644 --- a/webcam.txt +++ b/webcam.txt @@ -53,7 +53,8 @@ camera_usb_options="-r 800x600 -f 10" # Defaults to 10fps # # camera_raspi_options="-fps 10" -camera_raspi_options="-rot 180 -x 800 -y 600 -fps 10 -roi 0.0,0.0,0.998,1" +# camera_raspi_options="-rot 180 -x 800 -y 600 -fps 10 -roi 0.0,0.0,0.998,1" +camera_raspi_options="-x 800 -y 600 -fps 10 -roi 0.0,0.0,0.998,1" ### Configuration of camera HTTP output # diff --git a/z_calibration.cfg b/z_calibration.cfg index 416f33d..c4b7d38 100644 --- a/z_calibration.cfg +++ b/z_calibration.cfg @@ -4,21 +4,21 @@ [gcode_macro _USER_VARIABLE] description: Helper: Contains User defined printer variables ##### Homing and general movement ##### -variable_z_endstop_x: 208 ; z Endstop x position inside right profile +variable_z_endstop_x: 205 ; z Endstop x position inside right profile variable_z_endstop_y: 305 ; z Endstop y position -variable_z_hop: 15.0 ; z hop for moves e.g homing -variable_xy_home_current: 0.4 ; reduced homing current for x and y -variable_z_home_current: 0.3 ; reduced homing current for z +variable_z_hop: 10.0 ; z hop for moves e.g homing +variable_xy_home_current: 0.5 ; reduced homing current for x and y +variable_z_home_current: 0.4 ; reduced homing current for z variable_home_accel: 1000 ; reduced ACCEL for homing ##### Mag Probe ##### -variable_probe_dock_x: 148 ; x toolhead position before docking probe +variable_probe_dock_x: 145 ; x toolhead position before docking probe variable_probe_dock_y: 285 ; y toolhead position before docking probe -variable_probe_dock_z: 15 ; z toolhead position before docking probe (only for bed dock) +variable_probe_dock_z: 10 ; z toolhead position before docking probe (only for bed dock) variable_probe_undock_x: 200 ; x toolhead position after docking probe variable_probe_undock_y: 305 ; y toolhead position after docking probe -variable_probe_undock_z: 15 ; z toolhead position after docking probe (only for bed dock) -variable_probe_z_min: 15 ; z minimum height to avoid crash -variable_probe_travel_speed: 200 ; dock moves travel speed +variable_probe_undock_z: 10 ; z toolhead position after docking probe (only for bed dock) +variable_probe_z_min: 10 ; z minimum height to avoid crash +variable_probe_travel_speed: 100 ; dock moves travel speed variable_probe_dock_speed: 100 ; dock speed for attach/dock ##### Respond defaults ##### variable_respond_set_current: 0 ; default of RESPOND if not set in the call @@ -28,21 +28,14 @@ variable_respond_probe_action: 1 ; default of RESPOND if not set in the cal variable_park_bed: [280,280,30] ; different park position gcode: -##################################################################### -# Includes -##################################################################### -[include z_calibration/macros.cfg] -[include z_calibration/homing.cfg] -[include z_calibration/probing.cfg] ##################################################################### # Z Calibration ##################################################################### - [z_calibration] # The X and Y coordinates (in mm) for clicking the nozzle on the # Z endstop. -probe_nozzle_x: 208 +probe_nozzle_x: 205 probe_nozzle_y: 305 # The X and Y coordinates (in mm) for clicking the probe's switch # on the Z endstop. @@ -59,7 +52,7 @@ probe_bed_y: 150 # The trigger point offset of the used mag-probe switch. # This needs to be fined out manually. More on this later # in this section. smaller switch_offset -> more distance to the build plate -switch_offset: 0.73 +switch_offset: 0.75 # The maximum allowed deviation of the calculated offset. # If the offset exceeds this value, it will stop! # The default is 1.0 mm. @@ -99,66 +92,73 @@ max_deviation: 1.0 # This is to get faster down and the result is not recorded as a # probing sample. The default is false. probing_first_fast: true -# If true, the first probing is done faster by the probing speed. -# This is to get faster down and the result is not recorded as a -# probing sample. The default is false. -start_gcode: DETACH_PROBE # A list of G-Code commands to execute prior to each calibration command. -# See docs/Command_Templates.md for G-Code format. This can be used to -# attach the probe. -before_switch_gcode: ATTACH_PROBE +# See docs/Command_Templates.md for G-Code format. +# This can be used to attach the probe. +start_gcode: ATTACH_PROBE # A list of G-Code commands to execute prior to each probing on the -# mag-probe. See docs/Command_Templates.md for G-Code format. This can be -# used to attach the probe after probing on the nozzle and before probing -# on the mag-probe. -end_gcode: DETACH_PROBE +# mag-probe. See docs/Command_Templates.md for G-Code format. +# This can be used to attach the probe after probing on the nozzle and +# before probing on the mag-probe. +before_switch_gcode: ATTACH_PROBE # A list of G-Code commands to execute after each calibration command. # See docs/Command_Templates.md for G-Code format. This can be used to # detach the probe afterwards. - -##################################################################### -## With these settings, the probe is attached after probing the nozzle -## and before probing the switch !! -##################################################################### -## Otherwise, starting with the probe attached would be like this: -start_gcode: ATTACH_PROBE -#before_switch_gcode: ATTACH_PROBE end_gcode: DETACH_PROBE -##################################################################### + ##################################################################### -# Macros +# Homing definition ##################################################################### - -################################################################### -# !!! Caution !!! -# -# This Macro is only needed if not using the start/end_gcode -# properties to attach/detach the probe -################################################################### -[gcode_macro CALIBRATE_Z] -description: Automatically calibrates the nozzles offset to the print surface and dock/undock MagProbe -rename_existing: CALIBRATE_Z_BASE +[homing_override] +axes: z +set_position_z: 0 gcode: - ##### get user defines ##### - {% set z_hop = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} - ##### get toolhead parameters ##### - {% set act_z = printer.gcode_move.gcode_position.z|float %} - #### end of definitions ##### - ## reduce current of motors + ##### get user defines ##### + # use -10 as default to insure it error in case the variable is not existing + {% set z_endstop_x = printer['gcode_macro _USER_VARIABLE'].z_endstop_x|default(-10) %} + {% set z_endstop_y = printer['gcode_macro _USER_VARIABLE'].z_endstop_y|default(-10) %} + {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop %} + ##### end of definitions ##### + SAVE_GCODE_STATE NAME=HOMING_state + + ## reduce current of Z motors _SET_ACC VAL=HOME _SET_CURRENT VAL=HOME - _CG28 RESET_SETTINGS=false - {% if act_z < z_hop %} - G90 ; absolute positioning - {action_respond_info("CALIBRATE_Z: High must be above %.2f" % z_hop)} - G1 Z{z_hop} F900 ; move head up + + G91 ; relative positioning + G0 Z10 F1500 ; move z 10 up + G90 ; absolute positioning + + # Home X and Y only for G28 or G28 XYZ + {% if 'Z' in params %} + {% if "x" not in printer.toolhead.homed_axes %} + G28 X + {% endif %} + {% if "y" not in printer.toolhead.homed_axes %} + G28 Y + {% endif %} + {% else %} + G28 X Y {% endif %} - #ATTACH_PROBE - CALIBRATE_Z_BASE - #DETACH_PROBE + + ## XY Location of the Z Endstop Switch + # TODO check speed + # G0 X{z_endstop_x} Y{z_endstop_y} F12000 + G0 X{z_endstop_x} Y{z_endstop_y} F6000 + G28 Z ; home Z + G0 Z2 F1500 ; move up + + ## return to org current settings {% if params.RESET_SETTINGS|default('true') == 'true' %} - ## return to org current settings + DETACH_PROBE _SET_CURRENT _SET_ACC {% endif %} + + # Lift Z + # TODO check speed + # G0 Z{z_hop} F1800 + G0 Z{z_hop} F1300 + + RESTORE_GCODE_STATE NAME=HOMING_state diff --git a/z_calibration/README.md b/z_calibration/README.md deleted file mode 100644 index 9fc2119..0000000 --- a/z_calibration/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Sample Configuration - -This are some parts of my V2 300 configurations describing all the mag-probe, probing -and QGL stuff. - -These configurations are the essence of the overall configuration from -[zellneralex](https://github.com/zellneralex/klipper_config/tree/master) -which is really well done !! Have a look if you want to take all of it! - -**CAUTION: Please, don't just copy it - understand and adapt for your needs instead! -Use this on your own risk!** diff --git a/z_calibration/macros.cfg b/z_calibration/macros.cfg deleted file mode 100644 index a823d7e..0000000 --- a/z_calibration/macros.cfg +++ /dev/null @@ -1,48 +0,0 @@ -# ##################################################################### -# # Macros -# ##################################################################### -# [gcode_macro PRINT_START] -# gcode: -# {% set bed_temp = params.BED_TEMP|default(100)|float %} -# {% set extruder_temp = params.EXTRUDER_TEMP|default(220)|float %} -# {% set z_adjust = params.Z_ADJUST|default(0.0)|float %} -# {% set retract = 10 %} -# BED_MESH_CLEAR ; clear mesh -# _CG28 ; Home the printer -# G90 ; Use absolute coordinates -# PARKCENTER ; Move to center -# M117 Heating.. -# _HEATER_ON -# M106 S255 ; set print fan to full speed -# M140 S{bed_temp} ; Start bed heating -# M190 S{bed_temp} ; Wait for bed to reach temperature -# M109 S{extruder_temp} ; Set and wait for nozzle to reach temperature -# M107 ; turn print fan off -# QUAD_GANTRY_LEVEL PARK=false -# M109 S{extruder_temp} ; Set and wait for nozzle to reach temperature -# clean_nozzle ; clean nozzle -# CALIBRATE_Z -# #BED_MESH_PROFILE LOAD=default ; load mesh if needed -# # Adjust the G-Code Z offset with the Z_ADJUST parameter if needed -# #SET_GCODE_OFFSET Z_ADJUST={z_adjust} MOVE=1 -# M117 Intro Line.. -# G90 ; Use absolute coordinates -# G1 Y0 X130 Z5 F12000 ; Move the nozzle to the front and near the bed -# G1 Z0.7 F300 ; Move the nozzle very close to the bed -# G92 E0.0 ; set extruder position to 0 -# G1 E{retract} F3600 ; extrude retract -# G92 E0.0 ; set extruder option to 0 -# G1 X180 E15.0 F500.0 ; intro line -# G92 E0.0 ; set extruder Poisson to 0 -# G1 X174 F6000 ; move away from intro line -# M117 -# -# [gcode_macro PARKCENTER] -# gcode: -# {% set Z = params.Z|default(30)|float %} -# SAVE_GCODE_STATE NAME=PARKCENTER_state -# _CG28 ; Home if not already homed -# G90 ; absolute positioning -# G0 X150 Y150 Z{Z} F12000 ; move to center -# RESTORE_GCODE_STATE NAME=PARKCENTER_state -#