v2.4: restructure all the things
This commit is contained in:
parent
b67abe3a17
commit
a8f3ab247a
13 changed files with 822 additions and 737 deletions
10
macros/_init.cfg
Normal file
10
macros/_init.cfg
Normal 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
85
macros/debug.cfg
Normal 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
55
macros/helpers.cfg
Normal 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
147
macros/override.cfg
Normal 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
|
||||
|
||||
|
237
macros/print.cfg
Normal file
237
macros/print.cfg
Normal file
|
@ -0,0 +1,237 @@
|
|||
####################################################################
|
||||
# Macros used for printing
|
||||
# - BRUSHIE
|
||||
# - CANCEL_PRINT
|
||||
# - M600
|
||||
# - PARK
|
||||
# - PAUSE
|
||||
# - PRINT_START
|
||||
# - PRINT_END
|
||||
# - PURGE_NOZZLE
|
||||
# - RESUME
|
||||
####################################################################
|
||||
|
||||
|
||||
# BRUSHIE
|
||||
[gcode_macro BRUSHIE]
|
||||
gcode:
|
||||
{% set x0=40 %}
|
||||
{% set x1=110 %}
|
||||
{% set y0=305 %}
|
||||
{% 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 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 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) %}
|
||||
{% if "xyz" in printer.toolhead.homed_axes %}
|
||||
# set park positon for x and y
|
||||
## close to max
|
||||
{% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
|
||||
{% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
|
||||
{% if Y != y_park %}
|
||||
{% set y_park = Y %}
|
||||
{% endif %}
|
||||
# calculate save lift position
|
||||
{% set max_z = printer.toolhead.axis_maximum.z|float %}
|
||||
{% set act_z = printer.toolhead.position.z|float %}
|
||||
{% if act_z < (max_z - 20.0) %}
|
||||
{% set z_safe = 20.0 %}
|
||||
{% else %}
|
||||
{% set z_safe = max_z - act_z %}
|
||||
{% endif %}
|
||||
G91
|
||||
G0 Z{z_safe} F900
|
||||
G90
|
||||
G0 X{x_park} Y{y_park} F6000
|
||||
{% else %}
|
||||
{action_respond_info("Printer not homed")}
|
||||
{% endif %}
|
||||
|
||||
|
||||
# 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:
|
||||
{% 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_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: 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
|
||||
SET_LED LED=caselight RED=0.00 GREEN=0.00 BLUE=0.50
|
||||
G4 P2000
|
||||
SET_GCODE_OFFSET Z=0.0 # reset z offset
|
||||
M140 S{BED} # start bed heating
|
||||
M104 S{EXTRUDER} # start extruder heating
|
||||
G92 E0 # reset extruder
|
||||
G21 # set units to millimeters
|
||||
G90 # use absolute coordinates
|
||||
M83 # use relative distances for extrusion
|
||||
|
||||
M117 > homing
|
||||
SET_LED LED=caselight RED=0.00 GREEN=0.50 BLUE=0.00
|
||||
G4 P2000
|
||||
{% if BMC %}
|
||||
BED_MESH_CLEAR
|
||||
{% endif %}
|
||||
M117 > home
|
||||
G28
|
||||
BRUSHIE
|
||||
{% if QGL %}
|
||||
M117 > qgl
|
||||
QUAD_GANTRY_LEVEL PARK=false
|
||||
BRUSHIE
|
||||
{% endif %}
|
||||
M117 > calibrate z
|
||||
CALIBRATE_Z
|
||||
{% if BMC %}
|
||||
M117 > bed mesh calibrate
|
||||
BED_MESH_CALIBRATE
|
||||
{% else %}
|
||||
M117 > bed mesh load
|
||||
BED_MESH_PROFILE LOAD=default
|
||||
{% endif %}
|
||||
|
||||
M117 > heating
|
||||
SET_LED LED=caselight RED=0.50 GREEN=0.00 BLUE=0.00
|
||||
G4 P2000
|
||||
G92 E0 # reset extruder
|
||||
M190 S{BED} # set and wait for bed temperature
|
||||
M109 S{EXTRUDER} # set and wait for nozzle temperature
|
||||
TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={CHAMBER} # wait for chamber temp
|
||||
{% if SOAK > 0 %}
|
||||
M117 > soaking for {SOAK/1000/60|int} min
|
||||
G4 P{SOAK}
|
||||
{% endif %}
|
||||
|
||||
M117 > starting
|
||||
SET_GCODE_OFFSET Z_ADJUST={params.Z_ADJUST|default(0.0)|float} MOVE=1
|
||||
SET_LED LED=caselight RED=0.50 GREEN=0.50 BLUE=0.50
|
||||
G4 P2000
|
||||
{% if PURGE %}
|
||||
PURGE_NOZZLE
|
||||
{% endif %}
|
||||
|
||||
|
||||
# - PRINT_END
|
||||
[gcode_macro PRINT_END]
|
||||
gcode:
|
||||
M117 > finished
|
||||
PARK
|
||||
M400 ; wait for buffer to clear
|
||||
G92 E0 ; zero the extruder
|
||||
G1 E-10.0 F3600 ; retract filament
|
||||
TURN_OFF_HEATERS
|
||||
M107 ; turn off fan
|
||||
|
||||
|
||||
# - PURGE_NOZZLE
|
||||
[gcode_macro PURGE_NOZZLE]
|
||||
gcode:
|
||||
{% 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
|
||||
gcode:
|
||||
# read E from pause macro
|
||||
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
|
||||
# get VELOCITY parameter if specified
|
||||
{% if 'VELOCITY' in params|upper %}
|
||||
{% set get_params = ('VELOCITY=' + params.VELOCITY) %}
|
||||
{%else %}
|
||||
{% set get_params = "" %}
|
||||
{% endif %}
|
||||
# end of definitions
|
||||
M117 > resume
|
||||
{% if printer.extruder.can_extrude|lower == 'true' %}
|
||||
G91
|
||||
G1 E{E} F6000
|
||||
{% else %}
|
||||
{action_respond_info("Extruder not hot enough")}
|
||||
{% endif %}
|
||||
_RESUME_BASE {get_params}
|
||||
|
||||
|
||||
[gcode_macro PRINT_LAYER_CHANGE]
|
||||
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
|
440
macros/probe.cfg
Normal file
440
macros/probe.cfg
Normal file
|
@ -0,0 +1,440 @@
|
|||
#####################################################################
|
||||
# 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
|
||||
#####################################################################
|
||||
|
||||
|
||||
## 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
|
||||
(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}"'
|
||||
{% else %}
|
||||
{% set state = params.STATE|default('none') %}
|
||||
{action_raise_error("Invalid probe state: %s. Valid probe states are [UNKNOWN, ATTACHED, DOCKED]" % state|upper)}
|
||||
{% endif %}
|
||||
|
||||
|
||||
## _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]
|
||||
description: Helper: Query MagProbe state and request action
|
||||
variable_state: 'unknown'
|
||||
variable_id: 0
|
||||
gcode:
|
||||
##### add RESPOND if specified #####
|
||||
{% if 'RESPOND' in params|upper %}
|
||||
{% set respond = "RESPOND=" + params.RESPOND %}
|
||||
{% else %}
|
||||
{% set respond = "" %}
|
||||
{% endif %}
|
||||
##### generate an id not equal to 0 #####
|
||||
{% if id == 0 %}
|
||||
{% set id = 1 %}
|
||||
{% else %}
|
||||
{% set id = id + 1 %}
|
||||
{% endif %}
|
||||
##### end of definition #####
|
||||
QUERY_PROBE ID={id}
|
||||
_PROBE_ACTION ACTION={params.ACTION} ID={id} {respond}
|
||||
SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=id VALUE={id}
|
||||
M400
|
||||
|
||||
|
||||
## _PROBE_ACTION
|
||||
[gcode_macro _PROBE_ACTION]
|
||||
description: Helper: Perform MagProbe action
|
||||
gcode:
|
||||
##### get params and defaults #####
|
||||
{% set default_respond = printer['gcode_macro _USER_VARIABLE'].respond_probe_action|default(1)|int %}
|
||||
{% set respond = params.RESPOND|default(default_respond)|int %}
|
||||
{% set action = params.ACTION|lower %}
|
||||
{% set id = params.ID|default(0)|int %} ; call id 0 means invalid
|
||||
##### get probe variables #####
|
||||
{% set probe_id = printer['gcode_macro QUERY_PROBE'].id|default(0)|int %}
|
||||
{% set man_state = printer['gcode_macro SET_PROBE_STATUS'].state|lower %}
|
||||
##### generate state #####
|
||||
{% if man_state != 'unknown' %}
|
||||
SET_GCODE_VARIABLE MACRO=SET_PROBE_STATUS VARIABLE=state VALUE='"unknown"'
|
||||
{% set state = man_state %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe: State was set to %s by SET_PROBE_STATUS"% man_state|upper)}
|
||||
{% endif %}
|
||||
{% elif id == 0 or id != probe_id %}
|
||||
{action_raise_error("MagProbe: Call ID invalid or does not match QUERY_PROBE call ID")}
|
||||
{% elif printer.probe.last_query|lower == 'false' %}
|
||||
{action_raise_error("MagProbe: Please execute QUERY_PROBE first")}
|
||||
{% else %}
|
||||
{% if printer.probe.last_query|int == 0 %}
|
||||
{% set state = 'attached' %}
|
||||
{% else %}
|
||||
{% set state = 'docked' %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
##### end of defines #####
|
||||
SET_GCODE_VARIABLE MACRO=_MAG_PROBE VARIABLE=state VALUE='"{state}"'
|
||||
{% if action == 'attach' %}
|
||||
{% if state == 'docked' %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe: Attach Probe")}
|
||||
{% endif %}
|
||||
_ATTACH_PROBE
|
||||
{% else %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe: already attached")}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% elif action == 'dock' %}
|
||||
{% if state == 'attached' %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe: Dock Probe")}
|
||||
{% endif %}
|
||||
_DOCK_PROBE
|
||||
{% else %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe: already docked")}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% elif action == 'check_dock' %}
|
||||
{% if state != 'docked' %}
|
||||
{action_raise_error("MagProbe: dock failed!")}
|
||||
{% endif %}
|
||||
{% elif action == 'check_attach' %}
|
||||
{% if state != 'attached' %}
|
||||
{action_raise_error("MagProbe: attach failed!")}
|
||||
{% endif %}
|
||||
{% elif action == 'get_status' %}
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("MagProbe Status: %s" % state)}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{action_raise_error("MagProbe: action not defined")}
|
||||
{% endif %}
|
||||
|
||||
|
||||
## _Z_MOVE_CHECK
|
||||
[gcode_macro _Z_MOVE_CHECK]
|
||||
description: Helper: Check limit and perform move
|
||||
gcode:
|
||||
##### define defaults ######
|
||||
{% set caller = params.CALLER|default('G0')|upper %}
|
||||
{% set force = params.FORCE|default(0)|int %}
|
||||
##### z values #####
|
||||
{% set z_min = printer['gcode_macro _USER_VARIABLE'].probe_z_min|float %}
|
||||
{% set z_act = printer.toolhead.position.z|float %}
|
||||
##### MagProbe state #####
|
||||
{% set probe_state = printer['gcode_macro _MAG_PROBE'].state|lower %}
|
||||
##### get params and prepare to send them to the base macro #####
|
||||
{% set get_params = [] %}
|
||||
{% for key in params %}
|
||||
{% if key is not in ['Z', 'CALLER', 'FORCE'] %}
|
||||
{% set get_params = get_params.append(key + params[key]) %}
|
||||
{% elif key is in ['Z'] %}
|
||||
{% if force == 1 %} ;manual override of probe check
|
||||
{% set get_params = get_params.append(key + params[key]) %}
|
||||
{% elif probe_state == 'unknown' %}
|
||||
{action_raise_error("%s: MagProbe state %s run \"_MAG_PROBE ACTION=GET_STATUS\"" % (caller, probe_state|upper))}
|
||||
{% elif probe_state == 'docked' %}
|
||||
{% set get_params = get_params.append(key + params[key]) %}
|
||||
{% elif probe_state == 'attached' %}
|
||||
##### define move target position depending on absolute_coordinates #####
|
||||
{% if printer.gcode_move.absolute_coordinates|lower == 'true' %}
|
||||
{% set z_target = params.Z|float %}
|
||||
{% else %}
|
||||
{% set z_target = z_act + params.Z|float %}
|
||||
{% 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]) %}
|
||||
{% else %}
|
||||
{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))}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
##### end of definitions #####
|
||||
{caller}.1 {get_params|join(" ")}
|
113
macros/z_calibration.cfg
Normal file
113
macros/z_calibration.cfg
Normal file
|
@ -0,0 +1,113 @@
|
|||
#####################################################################
|
||||
# Macros for z-calibration
|
||||
# - CALIBRATE_Z
|
||||
# - _CG28
|
||||
# - _SET_CURRENT
|
||||
# - _SET_ACC
|
||||
#####################################################################
|
||||
|
||||
|
||||
## 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
|
||||
_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' %}
|
||||
## return to org current settings
|
||||
_SET_CURRENT
|
||||
_SET_ACC
|
||||
{% endif %}
|
||||
|
||||
|
||||
## _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'
|
||||
gcode:
|
||||
###### set default values #####
|
||||
{% set default_respond = printer['gcode_macro _USER_VARIABLE'].respond_set_current|int %}
|
||||
{% set val = params.VAL|default('CONFIG') %}
|
||||
{% set respond = params.Z_RESPOND|default(default_respond)|int %}
|
||||
{% if val == 'HOME' %}
|
||||
{% set xy_run = printer['gcode_macro _USER_VARIABLE'].xy_home_current %}
|
||||
{% set xy_hold = printer['gcode_macro _USER_VARIABLE'].xy_home_current %}
|
||||
{% set z_run = printer['gcode_macro _USER_VARIABLE'].z_home_current %}
|
||||
{% set z_hold = printer['gcode_macro _USER_VARIABLE'].z_home_current %}
|
||||
{% else %}
|
||||
{% if 'tmc2209 stepper_z' in printer.configfile.settings %}
|
||||
{% set xy_run = printer.configfile.settings['tmc2209 stepper_x'].run_current %}
|
||||
{% set xy_hold = printer.configfile.settings['tmc2209 stepper_x'].hold_current %}
|
||||
{% set z_run = printer.configfile.settings['tmc2209 stepper_z'].run_current %}
|
||||
{% set z_hold = printer.configfile.settings['tmc2209 stepper_z'].hold_current %}
|
||||
{% elif 'tmc5160 stepper_z' in printer.configfile.settings %}
|
||||
{% set xy_run = printer.configfile.settings['tmc5160 stepper_x'].run_current %}
|
||||
{% set xy_hold = printer.configfile.settings['tmc5160 stepper_x'].hold_current %}
|
||||
{% set z_run = printer.configfile.settings['tmc5160 stepper_z'].run_current %}
|
||||
{% set z_hold = printer.configfile.settings['tmc5160 stepper_z'].hold_current %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
##### end of definition #####
|
||||
{% if val != last_val %}
|
||||
SET_GCODE_VARIABLE MACRO=_SET_CURRENT VARIABLE=last_val VALUE='"{val}"'
|
||||
{% if respond == 1 %}
|
||||
{action_respond_info("Home&Probe: RunCur %.2fA rms HoldCur %.2fA rms" % (z_run|float, z_hold|float))}
|
||||
{% endif %}
|
||||
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={xy_run} HOLDCURRENT={xy_hold}
|
||||
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={xy_run} HOLDCURRENT={xy_hold}
|
||||
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}
|
||||
M400
|
||||
{% endif %}
|
Loading…
Add table
Add a link
Reference in a new issue