It is not possible to cancel printing immediately after the start, until the heating occurs! - Features - Klipper
[gcode_macro START_PRINT]
#START_PRINT BED_TEMP={material_bed_temperature_layer_0} EXTRUDER_TEMP={material_print_temperature_layer_0}
#;;; KEEP THE BELOW SO THAT KLIPPER CAN PROVIDE A 'Preheat' CONTEXT OPTION
#M190 S{material_bed_temperature_layer_0}
#M109 S{material_print_temperature_layer_0}
#;;;
### MUST HAVE MODIFIED pause_resume.py and pause, resume MACROS!
variable_target_bed : 0
variable_target_extruder : 0
variable_initial_extruder : 140
variable_stage : 'PREHEAT'
gcode:
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=target_bed VALUE={params.BED_TEMP | default(0) | float}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=target_extruder VALUE={params.EXTRUDER_TEMP | default(0) | float}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=stage VALUE='"PREHEAT"'
CLEAR_PAUSE
# pause without moving (do not retract and do not park toolhead). the print will continue when DELAYED_GCODE executes a non-moving RESUME
PAUSE MOVE=0
UPDATE_DELAYED_GCODE ID=_START_PRINT DURATION=0.01
[delayed_gcode _START_PRINT]
gcode:
{% set ps = printer["gcode_macro START_PRINT"] %}
{% set STAGE = ps.stage %}
{% set TARGET_BED = printer.heater_bed.target %}
{% set TARGET_EXTRUDER = printer.extruder.target %}
{% if printer.print_stats.state != 'cancelled' %}
{% if STAGE == 'PREHEAT' %}
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ps.target_bed} ; Start heating, do not wait
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={ps.initial_extruder} ; preheat extruder, do not wait
RESPOND msg='Bed target set to: {ps.target_bed}C' color=accent
RESPOND msg='Extruder target set to: {ps.target_extruder}C ...preheating to {ps.initial_extruder}C' color=accent
{% set TARGET_BED = ps.target_bed %}
{% set TARGET_EXTRUDER = ps.target_extruder %}
{% set STAGE = 'HEATING_BED' %}
{% endif %}
{% if STAGE == 'HEATING_BED' %}
{% if TARGET_BED != ps.target_bed %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=target_bed VALUE={TARGET_BED}
RESPOND msg='Bed target has changed from: {ps.target_bed} to: {TARGET_BED}C' color=accent
{% endif %}
{% if TARGET_EXTRUDER != ps.initial_extruder and TARGET_EXTRUDER != ps.target_extruder %}
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={ps.initial_extruder}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=target_extruder VALUE={TARGET_EXTRUDER}
RESPOND msg='Extruder target has changed from {ps.target_extruder} to: {TARGET_EXTRUDER}C' color=accent
{% endif %}
{% if printer.heater_bed.temperature >= ( TARGET_BED * 0.95 ) %} #if > 95% of target then continue
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={ps.target_extruder}
RESPOND msg='Extruder heating to {ps.target_extruder}C' color=accent
{% set STAGE = 'HEATING_EXTRUDER' %}
{% endif %}
{% endif %}
{% if STAGE == 'HEATING_EXTRUDER' %}
{% if printer.extruder.temperature >= ( ps.target_extruder * 0.95 )%} #if > 95% of target then continue
RESPOND msg='PREHEAT FINISHED' color=accent
{% set STAGE = 'FINISHED' %}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=stage VALUE='"{STAGE}"'
{% if STAGE != 'FINISHED' %}
UPDATE_DELAYED_GCODE ID=_START_PRINT DURATION=2.0
{% else %}
M190 S{ps.target_bed}
{% if printer.toolhead.homed_axes != 'xyz' %}
G28 #Home All Axes
{% endif %}
M109 S{ps.target_extruder}
G92 E0 ;Reset Extruder
; Extrude a single fat prime line
G1 X10 Y70 Z0.30 F5000.0
G1 X10 Y20 Z0.30 F1500 E10
G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Bed up
# resume without moving (do not return toolhead to paused position and do not extrude (prime))
RESUME MOVE=0
{% endif %}
{% else %}
RESPOND msg='PRINT WAS CANCELLED!!' color=error
{% endif %}