v2.4: restructure all the things

This commit is contained in:
Konstantin Koslowski 2021-11-01 21:24:21 +01:00
parent b67abe3a17
commit a8f3ab247a
13 changed files with 822 additions and 737 deletions

View file

@ -3,12 +3,12 @@ moonraker_host: 127.0.0.1
moonraker_port: 7125 moonraker_port: 7125
[preheat PLA] [preheat PLA]
bed = 40 bed = 50
extruder = 195 extruder = 200
[preheat ABS] [preheat ABS]
bed = 90 bed = 100
extruder = 220 extruder = 250
[menu __main] [menu __main]
name: {{ gettext('Main Menu') }} name: {{ gettext('Main Menu') }}

10
macros/_init.cfg Normal file
View file

@ -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]

85
macros/debug.cfg Normal file
View file

@ -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
#####################################################################

55
macros/helpers.cfg Normal file
View file

@ -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 %}

147
macros/override.cfg Normal file
View file

@ -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

View file

@ -1,60 +1,59 @@
## HELPERS ####################################################################
[gcode_macro ZES] # Macros used for printing
description: Z_ENDSTOP_CALIBRATE + extras # - BRUSHIE
gcode: # - CANCEL_PRINT
G28 # - M600
G0 X150 Y150 Z10 F10000 # - PARK
Z_ENDSTOP_CALIBRATE # - PAUSE
TESTZ Z=-9 # - PRINT_START
# - PRINT_END
# - PURGE_NOZZLE
[gcode_macro CENTER] # - RESUME
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
# BRUSHIE
[gcode_macro BRUSHIE] [gcode_macro BRUSHIE]
gcode: gcode:
{% set x0=50 %} {% set x0=40 %}
{% set x1=110 %} {% set x1=110 %}
{% set y0=305 %} {% 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 %} {% if "xyz" in printer.toolhead.homed_axes %}
M117 > brushie brushie brushie 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 X{x0} Y{y0} F5000 # move to x0/y0
G0 Z{z0} # lower G0 Z{z0} # lower
G0 X{x1} # back G0 X{x1} # back
G0 X{x0} # forth G0 X{x0} # forth
G0 X{x1} # back G0 X{x1} # back
G0 Z20 F300 # move Z to travel height G0 Z{z_hop} F300 # move Z to travel height
{% else %} {% else %}
{action_respond_info("Printer not homed")} {action_respond_info("Printer not homed")}
{% endif %} {% 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_macro PARK]
gcode: gcode:
{% set Y=params.Y|default(295) %} {% set Y=params.Y|default(295) %}
@ -83,26 +82,41 @@ gcode:
{% endif %} {% endif %}
[gcode_macro M600] # PAUSE
description: Change filament [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: gcode:
SAVE_GCODE_STATE NAME=M600_state {% set Y=params.Y|default(295) %}
PAUSE Y=15 # read E from pause macro
M117 > change filament {% set E = printer["gcode_macro PAUSE"].extrude|float %}
RESTORE_GCODE_STATE NAME=M600_state # 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_macro PRINT_START]
gcode: gcode:
{% set BED=params.BED|default(100)|int %} {% set BED=params.BED|default(100)|int %}
{% set EXTRUDER=params.EXTRUDER|default(250)|int %} {% set EXTRUDER=params.EXTRUDER|default(250)|int %}
{% set CHAMBER=params.CHAMBER|default(0)|int %} {% set CHAMBER=params.CHAMBER|default(0)|int %}
{% set BMC=params.BMC|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 PURGE=params.PURGE|default(1)|int %}
{% set SOAK=params.SOAK|default(0)|int * 1000 * 60 %} {% set SOAK=params.SOAK|default(0)|int * 1000 * 60 %}
{% set Z_ADJUST=params.Z_ADJUST|default(0.0)|float %} {% set Z_ADJUST=params.Z_ADJUST|default(0.0)|float %}
# TODO # TODO: ERCF
{% set ERCF=params.ERCF|default(0) %} {% 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))} {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 M117 > configuring
@ -124,10 +138,12 @@ gcode:
{% endif %} {% endif %}
M117 > home M117 > home
G28 G28
M117 > qgl
QUAD_GANTRY_LEVEL
M117 > brushie
BRUSHIE BRUSHIE
{% if QGL %}
M117 > qgl
QUAD_GANTRY_LEVEL PARK=false
BRUSHIE
{% endif %}
M117 > calibrate z M117 > calibrate z
CALIBRATE_Z CALIBRATE_Z
{% if BMC %} {% if BMC %}
@ -159,6 +175,7 @@ gcode:
{% endif %} {% endif %}
# - PRINT_END
[gcode_macro PRINT_END] [gcode_macro PRINT_END]
gcode: gcode:
M117 > finished M117 > finished
@ -170,40 +187,28 @@ gcode:
M107 ; turn off fan M107 ; turn off fan
[gcode_macro PRINT_LAYER_CHANGE] # - PURGE_NOZZLE
[gcode_macro PURGE_NOZZLE]
gcode: gcode:
{% set layer=params.LAYER|default(0)|int %} {% set x0=params.x0|default(100) %}
{% set layer_z=params.LAYER_Z|default(0) %} {% set x1=params.x1|default(200) %}
{% set total_layer_count=params.TOTAL_LAYER_COUNT|default(0) %} {% set y0=params.y0|default(0) %}
M117 > layer {layer+1}/{total_layer_count} {layer_z}mm {% set y1=params.y1|default(0.8) %}
{% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop|int %}
M117 > purge nozzle
## OVERRIDES G0 Z{z_hop} F300 # move Z to travel height
[gcode_macro PAUSE] G0 X{x0} Y{y0} F5000 # move to x0/y0
description: Pause the actual running print G0 Z0.2 F1500 # lower Z
rename_existing: PAUSE_BASE G0 X{x1} E20 # draw line
# change this if you need more or less extrusion G0 Y{y1} # move to y1
variable_extrude: 1.0 G0 X{x0} E10 # draw fine line
gcode: G0 Z{z_hop} F300 # move Z to travel height
{% 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}
# - RESUME
[gcode_macro RESUME] [gcode_macro RESUME]
description: Resume the actual running print description: Resume the actual running print
rename_existing: RESUME_BASE rename_existing: _RESUME_BASE
gcode: gcode:
# read E from pause macro # read E from pause macro
{% set E = printer["gcode_macro PAUSE"].extrude|float %} {% set E = printer["gcode_macro PAUSE"].extrude|float %}
@ -221,38 +226,12 @@ gcode:
{% else %} {% else %}
{action_respond_info("Extruder not hot enough")} {action_respond_info("Extruder not hot enough")}
{% endif %} {% endif %}
RESUME_BASE {get_params} _RESUME_BASE {get_params}
[gcode_macro CANCEL_PRINT] [gcode_macro PRINT_LAYER_CHANGE]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode: gcode:
TURN_OFF_HEATERS {% set layer=params.LAYER|default(0)|int %}
PARK {% set layer_z=params.LAYER_Z|default(0) %}
CANCEL_PRINT_BASE {% set total_layer_count=params.TOTAL_LAYER_COUNT|default(0) %}
M117 > layer {layer+1}/{total_layer_count} {layer_z}mm
[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

View file

@ -1,91 +1,211 @@
##################################################################### #####################################################################
# 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] [gcode_macro ATTACH_PROBE]
description: Attaching the MagProbe if not already attached description: Attaching the MagProbe if not already attached
gcode: gcode:
_MAG_PROBE ACTION=ATTACH _MAG_PROBE ACTION=ATTACH
_MAG_PROBE ACTION=CHECK_ATTACH _MAG_PROBE ACTION=CHECK_ATTACH
## DETACH_PROBE
[gcode_macro DETACH_PROBE] [gcode_macro DETACH_PROBE]
description: Dock the MagProbe if not already docked description: Dock the MagProbe if not already docked
gcode: gcode:
_MAG_PROBE ACTION=DOCK _MAG_PROBE ACTION=DOCK
_MAG_PROBE ACTION=CHECK_DOCK _MAG_PROBE ACTION=CHECK_DOCK
## GET_PROBE_STATUS
[gcode_macro GET_PROBE_STATUS] [gcode_macro GET_PROBE_STATUS]
description: Prints the current MagProbe state, valid probe states are UNKNOWN, ATTACHED and DOCKED description: Prints the current MagProbe state, valid probe states are UNKNOWN, ATTACHED and DOCKED
gcode: gcode:
_MAG_PROBE ACTION=GET_STATUS RESPOND=1 _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] [gcode_macro SET_PROBE_STATUS]
description: Manually specify MagProbe status, valid probe states are UNKNOWN, ATTACHED and DOCKED description: Manually specify MagProbe status, valid probe states are UNKNOWN, ATTACHED and DOCKED
variable_state: 'unknown' variable_state: 'unknown'
@ -99,9 +219,84 @@ gcode:
{action_raise_error("Invalid probe state: %s. Valid probe states are [UNKNOWN, ATTACHED, DOCKED]" % state|upper)} {action_raise_error("Invalid probe state: %s. Valid probe states are [UNKNOWN, ATTACHED, DOCKED]" % state|upper)}
{% endif %} {% 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 # QUERY_PROBE must run direct before _PROBE_ACTION
# that relation is insured by the caller id # that relation is insured by the caller id
[gcode_macro _MAG_PROBE] [gcode_macro _MAG_PROBE]
@ -127,6 +322,8 @@ gcode:
SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=id VALUE={id} SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=id VALUE={id}
M400 M400
## _PROBE_ACTION
[gcode_macro _PROBE_ACTION] [gcode_macro _PROBE_ACTION]
description: Helper: Perform MagProbe action description: Helper: Perform MagProbe action
gcode: gcode:
@ -196,164 +393,8 @@ gcode:
{action_raise_error("MagProbe: action not defined")} {action_raise_error("MagProbe: action not defined")}
{% endif %} {% 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] [gcode_macro _Z_MOVE_CHECK]
description: Helper: Check limit and perform move description: Helper: Check limit and perform move
gcode: gcode:
@ -397,171 +438,3 @@ gcode:
{% endfor %} {% endfor %}
##### end of definitions ##### ##### end of definitions #####
{caller}.1 {get_params|join(" ")} {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 %}

View file

@ -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 ## 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: gcode:
##### get user defines ##### ##### get user defines #####
# use -10 as default to insure it error in case the variable is not existing {% set z_hop = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %}
{% set z_endstop_x = printer['gcode_macro _USER_VARIABLE'].z_endstop_x|default(-10) %} ##### get toolhead parameters #####
{% set z_endstop_y = printer['gcode_macro _USER_VARIABLE'].z_endstop_y|default(-10) %} {% set act_z = printer.gcode_move.gcode_position.z|float %}
{% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop %} #### end of definitions #####
##### end of definitions ##### ## reduce current of motors
SAVE_GCODE_STATE NAME=HOMING_state
## reduce current of Z motors
_SET_ACC VAL=HOME _SET_ACC VAL=HOME
_SET_CURRENT VAL=HOME _SET_CURRENT VAL=HOME
_CG28 RESET_SETTINGS=false
G91 ; relative positioning {% if act_z < z_hop %}
# G0 Z10 F1500
G0 Z10 F1300
G90 ; absolute positioning G90 ; absolute positioning
{action_respond_info("CALIBRATE_Z: High must be above %.2f" % z_hop)}
# Home X and Y only for G28 or G28 XYZ G1 Z{z_hop} F900 ; move head up
{% if 'Z' in params %}
{% if "x" not in printer.toolhead.homed_axes %}
G28 X
{% endif %} {% endif %}
{% if "y" not in printer.toolhead.homed_axes %} #ATTACH_PROBE ; if not using start_gcode
G28 Y _CALIBRATE_Z_BASE
{% endif %} #DETACH_PROBE ; if not using end_gcode
{% 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
{% if params.RESET_SETTINGS|default('true') == 'true' %} {% if params.RESET_SETTINGS|default('true') == 'true' %}
DETACH_PROBE ## return to org current settings
_SET_CURRENT _SET_CURRENT
_SET_ACC _SET_ACC
{% endif %} {% endif %}
# Lift Z
# G0 Z{z_hop} F1800
G0 Z{z_hop} F1300
RESTORE_GCODE_STATE NAME=HOMING_state ## _CG28
#####################################################################
# Macros
#####################################################################
## conditional home
[gcode_macro _CG28] [gcode_macro _CG28]
description: conditional home
gcode: gcode:
{% if "xyz" not in printer.toolhead.homed_axes %} {% if "xyz" not in printer.toolhead.homed_axes %}
G28 RESET_SETTINGS={ params.RESET_SETTINGS|default('true') } G28 RESET_SETTINGS={ params.RESET_SETTINGS|default('true') }
{% endif %} {% 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] [gcode_macro _SET_CURRENT]
description: Helper: Set Z-drive motor current description: Helper: Set Z-drive motor current
variable_last_val: 'CONFIG' variable_last_val: 'CONFIG'
@ -103,27 +111,3 @@ gcode:
SET_TMC_CURRENT STEPPER=stepper_z3 CURRENT={z_run} HOLDCURRENT={z_hold} SET_TMC_CURRENT STEPPER=stepper_z3 CURRENT={z_run} HOLDCURRENT={z_hold}
M400 M400
{% endif %} {% 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 %}

View file

@ -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] [printer]
kinematics: corexy kinematics: corexy
max_velocity: 300 max_velocity: 300
@ -51,7 +70,7 @@ square_corner_velocity: 5.0
##################################################################### #####################################################################
[include fluidd.cfg] [include fluidd.cfg]
[include macros.cfg] [include macros/_init.cfg]
[include neopixel.cfg] [include neopixel.cfg]
[include fans.cfg] [include fans.cfg]
[include input_shaper.cfg] [include input_shaper.cfg]
@ -75,7 +94,7 @@ endstop_pin: PG6
position_min: 0 position_min: 0
position_endstop: 300 position_endstop: 300
position_max: 300 position_max: 300
homing_speed: 30 # Max 100 homing_speed: 30 # speed: mm/sec, feedrate: mm/min
homing_retract_dist: 5 homing_retract_dist: 5
homing_positive_dir: true homing_positive_dir: true
@ -96,7 +115,7 @@ rotation_distance: 40
microsteps: 16 microsteps: 16
full_steps_per_rotation: 400 # 200: 1.8 deg stepper, 400: 0.9 deg stepper full_steps_per_rotation: 400 # 200: 1.8 deg stepper, 400: 0.9 deg stepper
endstop_pin: PG9 endstop_pin: PG9
position_min: 15 # Camera position_min: 0
position_endstop: 305 position_endstop: 305
position_max: 305 position_max: 305
homing_speed: 30 # Max 100 homing_speed: 30 # Max 100
@ -125,16 +144,13 @@ rotation_distance: 40
gear_ratio: 80:16 gear_ratio: 80:16
microsteps: 16 microsteps: 16
endstop_pin: PG10 endstop_pin: PG10
## Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0) ## actual_position = measured_position_endstop - position_endstop
## (+) value = endstop above Z0, (-) value = endstop below position_endstop: 0.5
## 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
position_max: 290 position_max: 290
position_min: -5 position_min: -5
homing_speed: 11.0 # speed: mm/sec, feedrate: mm/min homing_speed: 13.0 # speed: mm/sec, feedrate: mm/min
second_homing_speed: 3 second_homing_speed: 4
homing_retract_dist: 3 homing_retract_dist: 13
[tmc2209 stepper_z] [tmc2209 stepper_z]
uart_pin: PC6 uart_pin: PC6
@ -276,7 +292,7 @@ max_temp: 120
pin: ^PG11 pin: ^PG11
x_offset: 0 x_offset: 0
y_offset: 25.0 y_offset: 25.0
#z_offset: 0 z_offset: 10
speed: 6 speed: 6
lift_speed: 11 lift_speed: 11
samples: 5 samples: 5
@ -329,7 +345,7 @@ timeout: 1800
## replaced with homing_override in klicky-probe.cfg ## replaced with homing_override in klicky-probe.cfg
# [safe_z_home] # [safe_z_home]
# ## XY Location of the Z Endstop Switch # ## XY Location of the Z Endstop Switch
# home_xy_position: 208, 305 # home_xy_position: 205, 305
# speed: 100 # speed: 100
# z_hop: 10 # z_hop: 10
# z_hop_speed: 25 # z_hop_speed: 25
@ -356,9 +372,9 @@ points:
50,225 50,225
250,225 250,225
250,40 250,40
speed: 100 speed: 150
horizontal_move_z: 15 horizontal_move_z: 15
retries: 8 retries: 5
retry_tolerance: 0.0075 retry_tolerance: 0.0075
max_adjust: 10 max_adjust: 10
@ -380,11 +396,11 @@ max_adjust: 10
#*# [bed_mesh default] #*# [bed_mesh default]
#*# version = 1 #*# version = 1
#*# points = #*# points =
#*# -0.002500, -0.015000, -0.002500, -0.005000, -0.045000 #*# -0.032500, 0.002500, 0.015000, 0.015000, -0.042500
#*# -0.000000, -0.012500, 0.002500, -0.005000, -0.040000 #*# -0.032500, -0.015000, 0.002500, 0.002500, -0.055000
#*# -0.002500, 0.002500, 0.000000, 0.012500, -0.032500 #*# -0.040000, -0.015000, 0.000000, 0.000000, -0.060000
#*# -0.012500, -0.007500, 0.025000, 0.017500, 0.000000 #*# -0.030000, -0.022500, 0.010000, 0.010000, -0.055000
#*# 0.057500, 0.072500, 0.042500, 0.075000, 0.027500 #*# 0.075000, 0.015000, 0.052500, 0.055000, -0.007500
#*# tension = 0.2 #*# tension = 0.2
#*# min_x = 40.0 #*# min_x = 40.0
#*# algo = bicubic #*# algo = bicubic
@ -395,9 +411,3 @@ max_adjust: 10
#*# max_y = 280.0 #*# max_y = 280.0
#*# mesh_x_pps = 2 #*# mesh_x_pps = 2
#*# max_x = 260.0 #*# max_x = 260.0
#*#
#*# [stepper_z]
#*# position_endstop = 0.817
#*#
#*# [probe]
#*# z_offset = 7.660

View file

@ -53,7 +53,8 @@ camera_usb_options="-r 800x600 -f 10"
# Defaults to 10fps # Defaults to 10fps
# #
# camera_raspi_options="-fps 10" # 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 ### Configuration of camera HTTP output
# #

View file

@ -4,21 +4,21 @@
[gcode_macro _USER_VARIABLE] [gcode_macro _USER_VARIABLE]
description: Helper: Contains User defined printer variables description: Helper: Contains User defined printer variables
##### Homing and general movement ##### ##### 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_endstop_y: 305 ; z Endstop y position
variable_z_hop: 15.0 ; z hop for moves e.g homing variable_z_hop: 10.0 ; z hop for moves e.g homing
variable_xy_home_current: 0.4 ; reduced homing current for x and y variable_xy_home_current: 0.5 ; reduced homing current for x and y
variable_z_home_current: 0.3 ; reduced homing current for z variable_z_home_current: 0.4 ; reduced homing current for z
variable_home_accel: 1000 ; reduced ACCEL for homing variable_home_accel: 1000 ; reduced ACCEL for homing
##### Mag Probe ##### ##### 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_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_x: 200 ; x toolhead position after docking probe
variable_probe_undock_y: 305 ; y 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_undock_z: 10 ; z toolhead position after docking probe (only for bed dock)
variable_probe_z_min: 15 ; z minimum height to avoid crash variable_probe_z_min: 10 ; z minimum height to avoid crash
variable_probe_travel_speed: 200 ; dock moves travel speed variable_probe_travel_speed: 100 ; dock moves travel speed
variable_probe_dock_speed: 100 ; dock speed for attach/dock variable_probe_dock_speed: 100 ; dock speed for attach/dock
##### Respond defaults ##### ##### Respond defaults #####
variable_respond_set_current: 0 ; default of RESPOND if not set in the call 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 variable_park_bed: [280,280,30] ; different park position
gcode: gcode:
#####################################################################
# Includes
#####################################################################
[include z_calibration/macros.cfg]
[include z_calibration/homing.cfg]
[include z_calibration/probing.cfg]
##################################################################### #####################################################################
# Z Calibration # Z Calibration
##################################################################### #####################################################################
[z_calibration] [z_calibration]
# The X and Y coordinates (in mm) for clicking the nozzle on the # The X and Y coordinates (in mm) for clicking the nozzle on the
# Z endstop. # Z endstop.
probe_nozzle_x: 208 probe_nozzle_x: 205
probe_nozzle_y: 305 probe_nozzle_y: 305
# The X and Y coordinates (in mm) for clicking the probe's switch # The X and Y coordinates (in mm) for clicking the probe's switch
# on the Z endstop. # on the Z endstop.
@ -59,7 +52,7 @@ probe_bed_y: 150
# The trigger point offset of the used mag-probe switch. # The trigger point offset of the used mag-probe switch.
# This needs to be fined out manually. More on this later # This needs to be fined out manually. More on this later
# in this section. smaller switch_offset -> more distance to the build plate # 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. # The maximum allowed deviation of the calculated offset.
# If the offset exceeds this value, it will stop! # If the offset exceeds this value, it will stop!
# The default is 1.0 mm. # 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 # This is to get faster down and the result is not recorded as a
# probing sample. The default is false. # probing sample. The default is false.
probing_first_fast: true 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. # 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 # See docs/Command_Templates.md for G-Code format.
# attach the probe. # This can be used to attach the probe.
before_switch_gcode: ATTACH_PROBE start_gcode: ATTACH_PROBE
# A list of G-Code commands to execute prior to each probing on the # 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 # mag-probe. See docs/Command_Templates.md for G-Code format.
# used to attach the probe after probing on the nozzle and before probing # This can be used to attach the probe after probing on the nozzle and
# on the mag-probe. # before probing on the mag-probe.
end_gcode: DETACH_PROBE before_switch_gcode: ATTACH_PROBE
# A list of G-Code commands to execute after each calibration command. # 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 # See docs/Command_Templates.md for G-Code format. This can be used to
# detach the probe afterwards. # 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 end_gcode: DETACH_PROBE
#####################################################################
##################################################################### #####################################################################
# Macros # Homing definition
##################################################################### #####################################################################
[homing_override]
################################################################### axes: z
# !!! Caution !!! set_position_z: 0
#
# 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
gcode: gcode:
##### get user defines ##### ##### get user defines #####
{% set z_hop = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %} # use -10 as default to insure it error in case the variable is not existing
##### get toolhead parameters ##### {% set z_endstop_x = printer['gcode_macro _USER_VARIABLE'].z_endstop_x|default(-10) %}
{% set act_z = printer.gcode_move.gcode_position.z|float %} {% set z_endstop_y = printer['gcode_macro _USER_VARIABLE'].z_endstop_y|default(-10) %}
#### end of definitions ##### {% set z_hop = printer['gcode_macro _USER_VARIABLE'].z_hop %}
## reduce current of motors ##### end of definitions #####
SAVE_GCODE_STATE NAME=HOMING_state
## reduce current of Z motors
_SET_ACC VAL=HOME _SET_ACC VAL=HOME
_SET_CURRENT VAL=HOME _SET_CURRENT VAL=HOME
_CG28 RESET_SETTINGS=false
{% if act_z < z_hop %} G91 ; relative positioning
G0 Z10 F1500 ; move z 10 up
G90 ; absolute positioning G90 ; absolute positioning
{action_respond_info("CALIBRATE_Z: High must be above %.2f" % z_hop)}
G1 Z{z_hop} F900 ; move head up # 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 %} {% endif %}
#ATTACH_PROBE {% if "y" not in printer.toolhead.homed_axes %}
CALIBRATE_Z_BASE G28 Y
#DETACH_PROBE {% endif %}
{% if params.RESET_SETTINGS|default('true') == 'true' %} {% else %}
G28 X Y
{% endif %}
## 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 ## return to org current settings
{% if params.RESET_SETTINGS|default('true') == 'true' %}
DETACH_PROBE
_SET_CURRENT _SET_CURRENT
_SET_ACC _SET_ACC
{% endif %} {% endif %}
# Lift Z
# TODO check speed
# G0 Z{z_hop} F1800
G0 Z{z_hop} F1300
RESTORE_GCODE_STATE NAME=HOMING_state

View file

@ -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!**

View file

@ -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
#