Basic Information:
Printer Model: Custom
MCU / Printerboard:Duet 3
Host / SBC Raspberry Pi 3b
klippy.log
===== Config file =====
[virtual_sdcard]
path = ~/printer_data/gcodes
on_error_gcode = CANCEL_PRINT
[pause_resume]
[display_status]
[respond]
[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
{% set retract = client.cancel_retract|default(5.0)|abs %}
{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
else "X=" ~ client.park_at_cancel_x %}
{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
else "Y=" ~ client.park_at_cancel_y %}
{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
{% endif %}
{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
_CLIENT_RETRACT LENGTH={retract}
TURN_OFF_HEATERS
M106 S0
{client.user_cancel_macro|default("")}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
SET_PAUSE_NEXT_LAYER ENABLE=0
SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
CANCEL_PRINT_BASE
[gcode_macro PAUSE]
description = Pause the actual running print
rename_existing = PAUSE_BASE
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set idle_timeout = client.idle_timeout|default(0) %}
{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
{% set restore = False if printer.toolhead.extruder == ''
else True if params.RESTORE|default(1)|int == 1 else False %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
{% if idle_timeout > 0 %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
{% endif %}
PAUSE_BASE
{client.user_pause_macro|default("")}
_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
[gcode_macro RESUME]
description = Resume the actual running print
rename_existing = RESUME_BASE
variable_last_extruder_temp = {‘restore’: False, ‘temp’: 0}
variable_restore_idle_timeout = 0
variable_idle_state = False
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
{% set sp_move = client.speed_move|default(velocity) %}
{% set runout_resume = True if client.runout_sensor|default("") == ""
else True if not printer[client.runout_sensor].enabled
else printer[client.runout_sensor].filament_detected %}
{% set can_extrude = True if printer.toolhead.extruder == ''
else printer[printer.toolhead.extruder].can_extrude %}
{% set do_resume = False %}
{% set prompt_txt = [] %}
{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
{% if last_extruder_temp.restore %}
RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
M109 S{last_extruder_temp.temp}
{% set do_resume = True %}
{% elif can_extrude %}
{% set do_resume = True %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
{% endif %}
{% elif can_extrude %}
{% set do_resume = True %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
{% endif %}
{% if runout_resume %}
{% if do_resume %}
{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
{client.user_resume_macro|default("")}
_CLIENT_EXTRUDE
RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
{% endif %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
{% endif %}
{% if not (runout_resume and do_resume) %}
RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
{% for element in prompt_txt %}
RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
{% endfor %}
RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
RESPOND TYPE=command MSG="action:prompt_show"
{% endif %}
[gcode_macro SET_PAUSE_NEXT_LAYER]
description = Enable a pause if the next layer is reached
gcode =
{% set pause_next_layer = printer[‘gcode_macro SET_PRINT_STATS_INFO’].pause_next_layer %}
{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE=“{{ ‘enable’: ENABLE, ‘call’: MACRO }}”
[gcode_macro SET_PAUSE_AT_LAYER]
description = Enable/disable a pause if a given layer number is reached
gcode =
{% set pause_at_layer = printer[‘gcode_macro SET_PRINT_STATS_INFO’].pause_at_layer %}
{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
else params.LAYER is defined %}
{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE=“{{ ‘enable’: ENABLE, ‘layer’: LAYER, ‘call’: MACRO }}”
[gcode_macro SET_PRINT_STATS_INFO]
rename_existing = SET_PRINT_STATS_INFO_BASE
description = Overwrite, to get pause_next_layer and pause_at_layer feature
variable_pause_next_layer = { ‘enable’: False, ‘call’: “PAUSE” }
variable_pause_at_layer = { ‘enable’: False, ‘layer’: 0, ‘call’: “PAUSE” }
gcode =
{% if pause_next_layer.enable %}
RESPOND TYPE=echo MSG=‘{“%s, forced by pause_next_layer” % pause_next_layer.call}’
{pause_next_layer.call}
SET_PAUSE_NEXT_LAYER ENABLE=0
{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
RESPOND TYPE=echo MSG=‘{“%s, forced by pause_at_layer [%d]” % (pause_at_layer.call, pause_at_layer.layer)}’
{pause_at_layer.call}
SET_PAUSE_AT_LAYER ENABLE=0
{% endif %}
SET_PRINT_STATS_INFO_BASE {rawparams}
[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
{% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
{% set custom_park_x = client.custom_park_x|default(0.0) %}
{% set custom_park_y = client.custom_park_y|default(0.0) %}
{% set park_dz = client.custom_park_dz|default(2.0)|abs %}
{% set sp_hop = client.speed_hop|default(15) * 60 %}
{% set sp_move = client.speed_move|default(velocity) * 60 %}
{% set origin = printer.gcode_move.homing_origin %}
{% set act = printer.gcode_move.gcode_position %}
{% set max = printer.toolhead.axis_maximum %}
{% set cone = printer.toolhead.cone_start_z|default(max.z) %}
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
else False %}
{% set z_min = params.Z_MIN|default(0)|float %}
{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
{% set x_park = params.X if params.X is defined
else custom_park_x if use_custom
else 0.0 if round_bed
else (max.x - 5.0) %}
{% set y_park = params.Y if params.Y is defined
else custom_park_y if use_custom
else (max.y - 5.0) if round_bed and z_park < cone
else 0.0 if round_bed
else (max.y - 5.0) %}
_CLIENT_RETRACT
{% if "xyz" in printer.toolhead.homed_axes %}
G90
G1 Z{z_park} F{sp_hop}
G1 X{x_park} Y{y_park} F{sp_move}
{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
{% else %}
RESPOND TYPE=echo MSG='Printer not homed'
{% endif %}
[gcode_macro _CLIENT_EXTRUDE]
description = Extrudes, if the extruder is hot enough
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
{% if printer.toolhead.extruder != '' %}
{% if printer[printer.toolhead.extruder].can_extrude %}
{% if use_fw_retract %}
{% if length < 0 %}
G10
{% else %}
G11
{% endif %}
{% else %}
M83
G1 E{length} F{(speed|float|abs) * 60}
{% if absolute_extrude %}
M82
{% endif %}
{% endif %}
{% else %}
RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
{% endif %}
{% endif %}
[gcode_macro _CLIENT_RETRACT]
description = Retracts, if the extruder is hot enough
gcode =
{% set client = printer[‘gcode_macro _CLIENT_VARIABLE’]|default({}) %}
{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
[stepper_x]
step_pin = PC18
dir_pin = PB5
enable_pin = !PA9
microsteps = 128
rotation_distance = 40
endstop_pin = tmc5160_stepper_x:virtual_endstop
position_endstop = 0
position_max = 450
[tmc5160 stepper_x]
cs_pin = PD17
diag0_pin = ^!PD29
spi_bus = usart1
chain_position = 1
chain_length = 6
interpolate = False
run_current = 1
sense_resistor = 0.05
stealthchop_threshold = 0
driver_sgt = 0
[stepper_y]
step_pin = PC16
dir_pin = PD10
enable_pin = !PA9
microsteps = 128
rotation_distance = 40
endstop_pin = tmc5160_stepper_y:virtual_endstop
position_endstop = 0
position_max = 450
[tmc5160 stepper_y]
cs_pin = PD17
diag1_pin = ^!PC17
chain_position = 2
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
driver_sgt = 0
[stepper_z]
step_pin = PC28
dir_pin = PA4
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
endstop_pin = tmc5160_stepper_z:virtual_endstop
position_endstop = 0
position_min = 0
position_max = 400
[tmc5160 stepper_z]
cs_pin = PD17
diag2_pin = ^!PD13
chain_position = 3
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
driver_sgt = 0
[stepper_z1]
step_pin = PC1
dir_pin = PA22
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
[tmc5160 stepper_z1]
cs_pin = PD17
diag3_pin = ^!PC2
chain_position = 4
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
driver_sgt = 0
[stepper_z2]
step_pin = PC4
dir_pin = PC3
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
[tmc5160 stepper_z2]
cs_pin = PD17
diag4_pin = ^!PD31
chain_position = 5
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
driver_sgt = 0
[adc_scaled vref_scaled]
vref_pin = PC0
vssa_pin = PC13
[mcu EBBCan]
serial = /dev/serial/by-id/usb-Klipper_rp2040_45474150538746FA-if00
[temperature_sensor EBB_NTC]
sensor_type = Generic 3950
sensor_pin = EBBCan:gpio28
[adxl345]
cs_pin = EBBCan:gpio1
spi_software_sclk_pin = EBBCan:gpio2
spi_software_mosi_pin = EBBCan:gpio0
spi_software_miso_pin = EBBCan:gpio3
axes_map = z,-y,x
[resonance_tester]
probe_points = 100, 100, 20
accel_chip = adxl345
[extruder]
step_pin = EBBCan:gpio18
dir_pin = !EBBCan:gpio19
enable_pin = !EBBCan:gpio17
microsteps = 16
rotation_distance = 33.500
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = EBBCan:gpio7
sensor_type = MAX31865
sensor_pin = EBBCan:gpio9
control = pid
pid_kp = 21.527
pid_ki = 1.063
pid_kd = 108.982
min_temp = 0
max_temp = 300
spi_software_sclk_pin = EBBCan:gpio10
spi_software_mosi_pin = EBBCan:gpio8
spi_software_miso_pin = EBBCan:gpio11
rtd_nominal_r = 1000
rtd_reference_r = 4300
rtd_num_of_wires = 2
[tmc2209 extruder]
uart_pin = EBBCan:gpio20
run_current = 0.650
stealthchop_threshold = 999999
[fan]
pin = EBBCan:gpio13
[heater_fan hotend_fan]
pin = EBBCan:gpio14
heater = extruder
heater_temp = 50.0
[neopixel hotend_rgb]
pin = EBBCan:gpio16
chain_count = 3
[heater_bed]
heater_pin = PA7
sensor_type = Generic 3950
sensor_pin = vref_scaled:PC15
control = pid
pullup_resistor = 2200
pid_kp = 61.049
pid_ki = 2.339
pid_kd = 398.344
min_temp = 0
max_temp = 130
[temperature_sensor duet3_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 100
[mcu]
serial = /dev/serial/by-id/usb-Klipper_same70q20b_00313853315238323032303036303230-if00
[printer]
kinematics = corexy
max_velocity = 350
max_accel = 3000
Args: [‘/home/pi/klipper/klippy/klippy.py’, ‘/home/pi/printer_data/config/printer.cfg’, ‘-l’, ‘/home/pi/printer_data/logs/klippy.log’, ‘-I’, ‘/home/pi/printer_data/comms/klippy.serial’, ‘-a’, ‘/home/pi/printer_data/comms/klippy.sock’]
Git version: ‘v0.12.0-310-gef7534686’
Branch: master
Remote: origin
Tracked URL: GitHub - Klipper3d/klipper: Klipper is a 3d-printer firmware
CPU: 4 core ?
Python: ‘3.9.2 (default, Feb 28 2021, 17:03:44) \n[GCC 10.2.1 20210110]’
webhooks client 547894054816: {‘program’: ‘Moonraker’, ‘version’: ‘v0.9.3-0-g71f9e67’}
=============== Log rollover at Tue Oct 1 12:57:39 2024 ===============
tmc virtual endstop requires diag pin config
Once the underlying issue is corrected, use the “RESTART”
command to reload the config and restart the host software.
Printer is halted
Attempting MCU ‘mcu’ reset
Attempting MCU ‘EBBCan’ reset
webhooks client 547894054816: Disconnected
Restarting printer
Start printer at Tue Oct 1 13:18:10 2024 (1727803090.3 1313.4)
===== Config file =====
[virtual_sdcard]
path = ~/printer_data/gcodes
on_error_gcode = CANCEL_PRINT
[pause_resume]
[display_status]
[respond]
[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
{% set retract = client.cancel_retract|default(5.0)|abs %}
{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
else "X=" ~ client.park_at_cancel_x %}
{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
else "Y=" ~ client.park_at_cancel_y %}
{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
{% endif %}
{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
_CLIENT_RETRACT LENGTH={retract}
TURN_OFF_HEATERS
M106 S0
{client.user_cancel_macro|default("")}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
SET_PAUSE_NEXT_LAYER ENABLE=0
SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
CANCEL_PRINT_BASE
[gcode_macro PAUSE]
description = Pause the actual running print
rename_existing = PAUSE_BASE
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set idle_timeout = client.idle_timeout|default(0) %}
{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
{% set restore = False if printer.toolhead.extruder == ''
else True if params.RESTORE|default(1)|int == 1 else False %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
{% if idle_timeout > 0 %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
{% endif %}
PAUSE_BASE
{client.user_pause_macro|default("")}
_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
[gcode_macro RESUME]
description = Resume the actual running print
rename_existing = RESUME_BASE
variable_last_extruder_temp = {‘restore’: False, ‘temp’: 0}
variable_restore_idle_timeout = 0
variable_idle_state = False
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
{% set sp_move = client.speed_move|default(velocity) %}
{% set runout_resume = True if client.runout_sensor|default("") == ""
else True if not printer[client.runout_sensor].enabled
else printer[client.runout_sensor].filament_detected %}
{% set can_extrude = True if printer.toolhead.extruder == ''
else printer[printer.toolhead.extruder].can_extrude %}
{% set do_resume = False %}
{% set prompt_txt = [] %}
{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
{% if last_extruder_temp.restore %}
RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
M109 S{last_extruder_temp.temp}
{% set do_resume = True %}
{% elif can_extrude %}
{% set do_resume = True %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
{% endif %}
{% elif can_extrude %}
{% set do_resume = True %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
{% endif %}
{% if runout_resume %}
{% if do_resume %}
{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %}
{client.user_resume_macro|default("")}
_CLIENT_EXTRUDE
RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
{% endif %}
{% else %}
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
{% endif %}
{% if not (runout_resume and do_resume) %}
RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
{% for element in prompt_txt %}
RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
{% endfor %}
RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
RESPOND TYPE=command MSG="action:prompt_show"
{% endif %}
[gcode_macro SET_PAUSE_NEXT_LAYER]
description = Enable a pause if the next layer is reached
gcode =
{% set pause_next_layer = printer[‘gcode_macro SET_PRINT_STATS_INFO’].pause_next_layer %}
{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE=“{{ ‘enable’: ENABLE, ‘call’: MACRO }}”
[gcode_macro SET_PAUSE_AT_LAYER]
description = Enable/disable a pause if a given layer number is reached
gcode =
{% set pause_at_layer = printer[‘gcode_macro SET_PRINT_STATS_INFO’].pause_at_layer %}
{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
else params.LAYER is defined %}
{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE=“{{ ‘enable’: ENABLE, ‘layer’: LAYER, ‘call’: MACRO }}”
[gcode_macro SET_PRINT_STATS_INFO]
rename_existing = SET_PRINT_STATS_INFO_BASE
description = Overwrite, to get pause_next_layer and pause_at_layer feature
variable_pause_next_layer = { ‘enable’: False, ‘call’: “PAUSE” }
variable_pause_at_layer = { ‘enable’: False, ‘layer’: 0, ‘call’: “PAUSE” }
gcode =
{% if pause_next_layer.enable %}
RESPOND TYPE=echo MSG=‘{“%s, forced by pause_next_layer” % pause_next_layer.call}’
{pause_next_layer.call}
SET_PAUSE_NEXT_LAYER ENABLE=0
{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
RESPOND TYPE=echo MSG=‘{“%s, forced by pause_at_layer [%d]” % (pause_at_layer.call, pause_at_layer.layer)}’
{pause_at_layer.call}
SET_PAUSE_AT_LAYER ENABLE=0
{% endif %}
SET_PRINT_STATS_INFO_BASE {rawparams}
[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
description = Helper: park toolhead used in PAUSE and CANCEL_PRINT
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
{% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
{% set custom_park_x = client.custom_park_x|default(0.0) %}
{% set custom_park_y = client.custom_park_y|default(0.0) %}
{% set park_dz = client.custom_park_dz|default(2.0)|abs %}
{% set sp_hop = client.speed_hop|default(15) * 60 %}
{% set sp_move = client.speed_move|default(velocity) * 60 %}
{% set origin = printer.gcode_move.homing_origin %}
{% set act = printer.gcode_move.gcode_position %}
{% set max = printer.toolhead.axis_maximum %}
{% set cone = printer.toolhead.cone_start_z|default(max.z) %}
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
else False %}
{% set z_min = params.Z_MIN|default(0)|float %}
{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
{% set x_park = params.X if params.X is defined
else custom_park_x if use_custom
else 0.0 if round_bed
else (max.x - 5.0) %}
{% set y_park = params.Y if params.Y is defined
else custom_park_y if use_custom
else (max.y - 5.0) if round_bed and z_park < cone
else 0.0 if round_bed
else (max.y - 5.0) %}
_CLIENT_RETRACT
{% if "xyz" in printer.toolhead.homed_axes %}
G90
G1 Z{z_park} F{sp_hop}
G1 X{x_park} Y{y_park} F{sp_move}
{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
{% else %}
RESPOND TYPE=echo MSG='Printer not homed'
{% endif %}
[gcode_macro _CLIENT_EXTRUDE]
description = Extrudes, if the extruder is hot enough
gcode =
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
{% if printer.toolhead.extruder != '' %}
{% if printer[printer.toolhead.extruder].can_extrude %}
{% if use_fw_retract %}
{% if length < 0 %}
G10
{% else %}
G11
{% endif %}
{% else %}
M83
G1 E{length} F{(speed|float|abs) * 60}
{% if absolute_extrude %}
M82
{% endif %}
{% endif %}
{% else %}
RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
{% endif %}
{% endif %}
[gcode_macro _CLIENT_RETRACT]
description = Retracts, if the extruder is hot enough
gcode =
{% set client = printer[‘gcode_macro _CLIENT_VARIABLE’]|default({}) %}
{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
[stepper_x]
step_pin = PC18
dir_pin = PB5
enable_pin = !PA9
microsteps = 128
rotation_distance = 40
endstop_pin = tmc5160_stepper_x:virtual_endstop
position_endstop = 0
position_max = 450
[tmc5160 stepper_x]
cs_pin = PD17
spi_bus = usart1
chain_position = 1
chain_length = 6
interpolate = False
run_current = 1
sense_resistor = 0.05
stealthchop_threshold = 0
diag0_pin = ^!PD29
driver_sgt = 0
[stepper_y]
step_pin = PC16
dir_pin = PD10
enable_pin = !PA9
microsteps = 128
rotation_distance = 40
endstop_pin = tmc5160_stepper_y:virtual_endstop
position_endstop = 0
position_max = 450
[tmc5160 stepper_y]
cs_pin = PD17
chain_position = 2
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
diag1_pin = ^!PC17
driver_sgt = 0
[stepper_z]
step_pin = PC28
dir_pin = PA4
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
endstop_pin = tmc5160_stepper_z:virtual_endstop
position_endstop = 0
position_min = 0
position_max = 400
[tmc5160 stepper_z]
cs_pin = PD17
chain_position = 3
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
diag2_pin = ^!PD13
driver_sgt = 0
[stepper_z1]
step_pin = PC1
dir_pin = PA22
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
[tmc5160 stepper_z1]
cs_pin = PD17
chain_position = 4
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
diag3_pin = ^!PC2
driver_sgt = 0
[stepper_z2]
step_pin = PC4
dir_pin = PC3
enable_pin = !PA9
microsteps = 64
rotation_distance = 8
[tmc5160 stepper_z2]
cs_pin = PD17
chain_position = 5
chain_length = 6
interpolate = False
run_current = 1.0
sense_resistor = 0.05
stealthchop_threshold = 0
diag4_pin = ^!PD31
driver_sgt = 0
[adc_scaled vref_scaled]
vref_pin = PC0
vssa_pin = PC13
[mcu EBBCan]
serial = /dev/serial/by-id/usb-Klipper_rp2040_45474150538746FA-if00
[temperature_sensor EBB_NTC]
sensor_type = Generic 3950
sensor_pin = EBBCan:gpio28
[adxl345]
cs_pin = EBBCan:gpio1
spi_software_sclk_pin = EBBCan:gpio2
spi_software_mosi_pin = EBBCan:gpio0
spi_software_miso_pin = EBBCan:gpio3
axes_map = z,-y,x
[resonance_tester]
probe_points = 100, 100, 20
accel_chip = adxl345
[extruder]
step_pin = EBBCan:gpio18
dir_pin = !EBBCan:gpio19
enable_pin = !EBBCan:gpio17
microsteps = 16
rotation_distance = 33.500
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = EBBCan:gpio7
sensor_type = MAX31865
sensor_pin = EBBCan:gpio9
control = pid
pid_kp = 21.527
pid_ki = 1.063
pid_kd = 108.982
min_temp = 0
max_temp = 300
spi_software_sclk_pin = EBBCan:gpio10
spi_software_mosi_pin = EBBCan:gpio8
spi_software_miso_pin = EBBCan:gpio11
rtd_nominal_r = 1000
rtd_reference_r = 4300
rtd_num_of_wires = 2
[tmc2209 extruder]
uart_pin = EBBCan:gpio20
run_current = 0.650
stealthchop_threshold = 999999
[fan]
pin = EBBCan:gpio13
[heater_fan hotend_fan]
pin = EBBCan:gpio14
heater = extruder
heater_temp = 50.0
[neopixel hotend_rgb]
pin = EBBCan:gpio16
chain_count = 3
[heater_bed]
heater_pin = PA7
sensor_type = Generic 3950
sensor_pin = vref_scaled:PC15
control = pid
pullup_resistor = 2200
pid_kp = 61.049
pid_ki = 2.339
pid_kd = 398.344
min_temp = 0
max_temp = 130
[temperature_sensor duet3_temp]
sensor_type = temperature_mcu
min_temp = 0
max_temp = 100
[mcu]
serial = /dev/serial/by-id/usb-Klipper_same70q20b_00313853315238323032303036303230-if00
[printer]
kinematics = corexy
max_velocity = 350
max_accel = 3000
Config error
Traceback (most recent call last):
File “/home/pi/klipper/klippy/klippy.py”, line 130, in _connect
self.read_config()
File “/home/pi/klipper/klippy/klippy.py”, line 125, in read_config
m.add_printer_objects(config)
File “/home/pi/klipper/klippy/toolhead.py”, line 669, in add_printer_objects
config.get_printer().add_object(‘toolhead’, ToolHead(config))
File “/home/pi/klipper/klippy/toolhead.py”, line 269, in init
self.kin = mod.load_kinematics(self, config)
File “/home/pi/klipper/klippy/kinematics/corexy.py”, line 99, in load_kinematics
return CoreXYKinematics(toolhead, config)
File “/home/pi/klipper/klippy/kinematics/corexy.py”, line 12, in init
self.rails = [stepper.LookupMultiRail(config.getsection('stepper’ + n))
File “/home/pi/klipper/klippy/kinematics/corexy.py”, line 12, in
self.rails = [stepper.LookupMultiRail(config.getsection('stepper’ + n))
File “/home/pi/klipper/klippy/stepper.py”, line 424, in LookupMultiRail
rail = PrinterRail(config, need_position_minmax,
File “/home/pi/klipper/klippy/stepper.py”, line 305, in init
self.add_extra_stepper(config)
File “/home/pi/klipper/klippy/stepper.py”, line 391, in add_extra_stepper
mcu_endstop = ppins.setup_pin(‘endstop’, endstop_pin)
File “/home/pi/klipper/klippy/pins.py”, line 118, in setup_pin
return pin_params[‘chip’].setup_pin(pin_type, pin_params)
File “/home/pi/klipper/klippy/extras/tmc.py”, line 495, in setup_pin
raise ppins.error(“tmc virtual endstop requires diag pin config”)
pins.error: tmc virtual endstop requires diag pin config
webhooks client 547894058816: New connection
webhooks client 547894058816: Client info {‘program’: ‘Moonraker’, ‘version’: ‘v0.9.3-0-g71f9e67’}
Fill out above information and in all cases attach your klippy.log
file (use zip to compress it, if too big). Pasting your printer.cfg
is not needed
Be sure to check our “Knowledge Base” Category first. Most relevant items, e.g. error messages, are covered there
Describe your issue:
…Really hoping somebody here can help me. I’m not quite certain why I’m getting this error as I have the diag pins configured. I’m not quite a noob but not a pro either.
Thanks for any advice