- Split the macro files into folders by topic (print, heating, afc, pressure_advance, spoolman, leds, sensors); klipper-macros.cfg is the one file printer.cfg includes. Macros moved unchanged; the effective config is identical apart from the paths of the PA shell scripts. - Add the modified Blobifier (Turtleblobifier for AFC) and define [save_variables] once in save_variables.cfg instead of in both blobifier.cfg and the PA macros (same file, bd_pa_variables.cfg). - PRINT_WARMUP: heat to the loaded lane's temperature before the first tool change. AFC skips heating when the loaded lane's tool number is not in the print file's temperature list, and the unload then failed below min_extrude_temp. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
256 lines
9.3 KiB
INI
256 lines
9.3 KiB
INI
# Print start and end: PRINT_WARMUP, PRINT_START, PRINT_END
|
|
|
|
# Idle time (in seconds) to wait before running the above G-Code
|
|
# commands. The default is 600 seconds.
|
|
|
|
#####################################################################
|
|
# Macros
|
|
#####################################################################
|
|
|
|
# [gcode_macro PRINT_START]
|
|
# gcode:
|
|
# PRINT_WARMUP BED={params.BED} EXTRUDER={params.EXTRUDER} CHAMBER={params.CHAMBER|default("0")} TOOL={params.TOOL|default("0")}
|
|
# PRINT_START_2 EXTRUDER={params.EXTRUDER}
|
|
|
|
[gcode_macro PRINT_WARMUP]
|
|
description: Perform initial homing and heating tasks
|
|
gcode:
|
|
{% set target_bed = params.BED|int %}
|
|
{% set target_extruder = params.EXTRUDER|int %}
|
|
{% set target_chamber = params.CHAMBER|default("0")|int %}
|
|
# {% set x_wait = printer.toolhead.axis_maximum.x|float / 2 %}
|
|
# {% set y_wait = printer.toolhead.axis_maximum.y|float / 2 %}
|
|
{% set initial_tool = params.TOOL|default("0")|int %}
|
|
|
|
{% set chamber_temp = printer["temperature_sensor chamber"].temperature|float %}
|
|
|
|
RESET_FAILURE
|
|
CLEAR_PAUSE
|
|
|
|
_motion_detected
|
|
|
|
#SET_PIN PIN=caselight VALUE=1.00
|
|
UPDATE_DELAYED_GCODE ID=_delayed_motors_off DURATION=0
|
|
|
|
BED_MESH_CLEAR
|
|
SET_GCODE_OFFSET Z=0
|
|
|
|
CLEAR_PAUSE
|
|
|
|
SKEW_PROFILE LOAD=Califlower
|
|
|
|
{% set current_temp = printer.extruder.temperature %}
|
|
{% if current_temp > 150 %}
|
|
RESPOND MSG="nozzle to hot, lowering to 150"
|
|
M104 S150 ; set nozzle temp to 150
|
|
M109 S150 ; wait until nozzle reaches 150 ; wait until nozzle reaches 0
|
|
{% endif %}
|
|
|
|
_status_homing
|
|
RESPOND MSG="homing"
|
|
HOME
|
|
RESPOND MSG="homing finished"
|
|
# G0 Z2 ; position beacon at 2mm for heat soak
|
|
|
|
{% if target_bed < 60 %}
|
|
RESPOND MSG="Using PID for <60°C bed"
|
|
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={target_bed} PID_KP=33.606 PID_KI=0.694 PID_KD=407.058
|
|
{% else %}
|
|
RESPOND MSG="Using PID for ≥60°C bed"
|
|
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={target_bed} pid_Kp=46.843 pid_Ki=2.002 pid_Kd=274.034
|
|
{% endif %}
|
|
|
|
G1 X175 Y175 Z2 F1200
|
|
_status_heating
|
|
RESPOND MSG="heating"
|
|
{% if target_bed > 0 %}
|
|
M140 S{target_bed} ; start bed heater
|
|
M104 S150 ; set nozzle temp to 150
|
|
M109 S150 ; wait until nozzle reaches 150 ; wait until nozzle reaches 0
|
|
M190 S{target_bed} ; wait on bed temperature
|
|
{% endif %}
|
|
|
|
HOME
|
|
QUAD_GANTRY_LEVEL
|
|
BLOBIFIER_CLEAN ; call another macro to wipe nozzle if available
|
|
G1 X175 Y175 Z5 F1200
|
|
|
|
_HEAT_FOR_LOADED_LANE TOOL={initial_tool} ; unload needs the loaded filament's temperature
|
|
T{initial_tool} #PURGE_LENGTH=100 #Load Initial Tool
|
|
M104 S{target_extruder} ; set extruder to print temp
|
|
M109 S{target_extruder} ; wait for extruder temp
|
|
G10 ; retract
|
|
|
|
M104 S150 ; set nozzle temp to 150
|
|
M109 S150 ; wait until nozzle reaches 150 ; wait until nozzle reaches 0
|
|
|
|
BLOBIFIER_CLEAN ; call another macro to wipe nozzle if available
|
|
|
|
G1 X175 Y175 Z5 F1200
|
|
{% if target_chamber > 30 %}
|
|
RESPOND MSG="waiting for chamber temperature"
|
|
M141 S{target_chamber}
|
|
# M191 S{target_chamber} ; Waits until the chamber temperature reaches 60°C
|
|
# TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={target_chamber}
|
|
|
|
M106 S255
|
|
# HEAT_SOAK HEATER='heater_bed' TARGET={BED_TEMP} SOAKER='temperature_sensor iHeater_S' SOAK_TEMP={target_chamber} TIMEOUT=60 CANCEL='_NOTHING'
|
|
HEAT_SOAK HEATER='heater_bed' TARGET={target_bed} SOAKER='temperature_sensor chamber' SOAK_TEMP={target_chamber} TIMEOUT=60 CANCEL='_NOTHING'
|
|
# (CANCEL='_NOTHING') and having unreachable SOAK_TEMP makes it run till the TIMEOUT and continue without canceling the print.
|
|
{% else %}
|
|
RESPOND MSG="waiting for bed core temperature"
|
|
|
|
HEAT_SOAK HEATER='heater_bed' TARGET={target_bed} SOAKER='temperature_sensor bed_core' SOAK_TEMP={target_bed - 5} TIMEOUT=30 CANCEL='_NOTHING'
|
|
# (CANCEL='_NOTHING') and having unreachable SOAK_TEMP makes it run till the TIMEOUT and continue without canceling the print.
|
|
{% endif %}
|
|
|
|
# AFC heats for a tool change from the print file's per-tool temperatures.
|
|
# When the loaded lane's tool number is not in that list (for example lane5 =
|
|
# T4 loaded, single-colour print with only T0), AFC does not heat at all and
|
|
# the unload fails below min_extrude_temp. Heat for the loaded filament first.
|
|
[gcode_macro _HEAT_FOR_LOADED_LANE]
|
|
description: Heat to the loaded lane's filament temperature before changing to another tool
|
|
gcode:
|
|
{% set tool = 'T' ~ params.TOOL|default(0)|int %}
|
|
{% set cur = printer.AFC.current_load %}
|
|
{% if cur and ('AFC_stepper ' ~ cur) in printer %}
|
|
{% set lane = printer['AFC_stepper ' ~ cur] %}
|
|
{% if lane.map != tool %}
|
|
{% set min_temp = printer.configfile.settings.extruder.min_extrude_temp|int + 20 %}
|
|
{% set temp = [lane.extruder_temp|default(0, true)|int, min_temp]|max %}
|
|
RESPOND MSG="Heating to {temp}C to unload {cur} ({lane.material}) before {tool}"
|
|
M109 S{temp}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
[gcode_macro _NOTHING]
|
|
gcode:
|
|
_HEAT_SOAK__BASE_RESUME
|
|
|
|
[gcode_macro PRINT_START]
|
|
gcode:
|
|
RESPOND MSG="print start macro continued"
|
|
|
|
_motion_detected
|
|
|
|
{% set target_extruder = params.EXTRUDER|int %}
|
|
|
|
M106 S0
|
|
|
|
M104 S150 ; set nozzle temp to 150
|
|
M109 S150 ; wait until nozzle reaches 150 ; wait until nozzle reaches 0
|
|
|
|
HOME
|
|
BLOBIFIER_CLEAN ; call another macro to wipe nozzle if available
|
|
|
|
_status_calibrating_z
|
|
G28 Z METHOD=CONTACT CALIBRATE=1 ; calibrate z offset and beacon model hot
|
|
|
|
_status_leveling
|
|
RESPOND MSG="quad ganrty level"
|
|
QUAD_GANTRY_LEVEL
|
|
|
|
_status_meshing
|
|
RESPOND MSG="meshing"
|
|
BED_MESH_CALIBRATE RUNS=2 ; bed mesh in scan mode
|
|
|
|
BLOBIFIER_CLEAN ; call another macro to wipe nozzle if available
|
|
|
|
M104 S150 ; set nozzle temp to 150
|
|
M109 S150 ; wait until nozzle reaches 150 ; wait until nozzle reaches 0
|
|
|
|
_status_calibrating_z
|
|
G28 Z METHOD=CONTACT CALIBRATE=1 ; calibrate z offset and beacon model hot
|
|
|
|
_status_heating
|
|
M104 S{target_extruder} ; set extruder to print temp
|
|
M109 S{target_extruder} ; wait for extruder temp
|
|
|
|
# ; needs fine tuning, long meltzones require more
|
|
# SET_GCODE_OFFSET Z_ADJUST={OFFSET} ; apply optional material squish via slicer
|
|
#SET_GCODE_OFFSET Z=-0.06 ; squish
|
|
# SET_GCODE_OFFSET Z=0.02 ; squish # worked before but a bit to high now
|
|
# SET_GCODE_OFFSET Z=-0.05 ; squish
|
|
SET_GCODE_OFFSET Z=-0.00 ; squish
|
|
|
|
RESPOND MSG="starting"
|
|
;PRIME_NOZZLE ; call another macro to purge or prime nozzle
|
|
# WIPE_NOZZLE ; call another macro to wipe nozzle if available
|
|
# Line_Purge
|
|
# AFC_POOP PURGE_LENGTH=100
|
|
# AFC_KICK
|
|
|
|
BLOBIFIER_CLEAN
|
|
|
|
PA_CALIBRATE_ALL_LANES LANES="lane1,lane2,lane3,lane4,lane5"
|
|
|
|
M104 S{target_extruder} ; set extruder to print temp
|
|
M109 S{target_extruder} ; wait for extruder temp
|
|
|
|
BLOBIFIER_CLEAN
|
|
|
|
; start printing
|
|
|
|
G90 ; absolute positioning
|
|
G1 Z20 F30000 ; move nozzle away from bed
|
|
G1 X175 Y175 F30000 ; move nozzle away from bed
|
|
|
|
G28 XYZ
|
|
|
|
#G11 ; unretract
|
|
|
|
_AFC_STORE_HOME_REFERENCE
|
|
|
|
SET_BDWIDTH NAME=fila_width_0 COMMAND=ENABLE_ALL
|
|
# SET_BDWIDTH NAME=fila_width_0 COMMAND=ENABLE_MOTION
|
|
|
|
_status_printing
|
|
|
|
|
|
[gcode_macro PRINT_END]
|
|
# Use PRINT_END for the slicer ending script - please customise for your slicer of choice
|
|
gcode:
|
|
# safe anti-stringing move coords
|
|
{% set th = printer.toolhead %}
|
|
{% set x_safe = th.position.x + 20 * (1 if th.axis_maximum.x - th.position.x > 20 else -1) %}
|
|
{% set y_safe = th.position.y + 20 * (1 if th.axis_maximum.y - th.position.y > 20 else -1) %}
|
|
{% set z_safe = [th.position.z + 2, th.axis_maximum.z]|min %}
|
|
|
|
SAVE_GCODE_STATE NAME=STATE_PRINT_END
|
|
|
|
_motion_detected
|
|
|
|
M221 S100
|
|
|
|
M400 ; wait for buffer to clear
|
|
G92 E0 ; zero the extruder
|
|
# G1 E-0.5 F1800 ; retract filament
|
|
G10 ; retract
|
|
|
|
TURN_OFF_HEATERS
|
|
iHEATER_OFF ; Turns off the chamber heater
|
|
|
|
G90 ; absolute positioning
|
|
G0 X{x_safe} Y{y_safe} Z{z_safe} F20000 ; move nozzle to remove stringing
|
|
G0 X{th.axis_maximum.x//2} Y{th.axis_maximum.y - 5} F3600 ; park nozzle at rear
|
|
M107 ; turn off fan
|
|
|
|
{% if printer.pause_resume.is_paused|lower == 'false' and park|lower == 'true'%}
|
|
_TOOLHEAD_PARK_PAUSE_CANCEL
|
|
{% endif %}
|
|
|
|
SET_BDWIDTH NAME=fila_width_0 COMMAND=DISABLE ;disable the bdwidth
|
|
|
|
#SET_PIN PIN=caselight VALUE=0.03
|
|
_status_part_ready
|
|
|
|
UPDATE_DELAYED_GCODE ID=_delayed_motors_off DURATION=3600
|
|
|
|
BED_MESH_CLEAR
|
|
SET_SKEW CLEAR=1
|
|
RESTORE_GCODE_STATE NAME=STATE_PRINT_END
|
|
|
|
[delayed_gcode _delayed_motors_off]
|
|
gcode:
|
|
M84
|