Move out of range error on Delta printer with ERCF

I am running an ERCF v1.1 MMU on a custom Klipper powered Delta printer. When a clog is detected, or there is no filament, I will get a “Move out of range” error when the printer goes into the pause state. I have tried reducing my delta radius by half, to see if there was an issue with the probe offset, but I still get the same error.

Any ideas what the issue might be?

Error from the Octoprint terminal when sending “pause” right after homing / moving down

Recv: // Klipper state: Ready
[...]
Send: G28 // homes all axis
Recv: ok
Send: G91 // set absolute move
Recv: ok
Send: G0 Z-50 F1000 // move down 50mm
Recv: ok
Send: G90 // set relative move
Recv: ok
Send: G91
Recv: ok
Send: G0 Z-100 F1000
Recv: ok
Send: G90
Recv: ok
[...]
Send: pause
Recv: // action:paused
Printer signalled that it paused, switching state...
Recv: !! Move out of range: -145.000 145.000 245.085 [-1.000]
Recv: !! Move out of range: -145.000 145.000 245.085 [-1.000]
Recv: ok

printer.cfg

# This file contains common pin mappings for the BigTreeTech Octopus.
# To use this config, the firmware should be compiled for the
# STM32F446 with a "32KiB bootloader" and a "12MHz crystal" clock reference.

# See docs/Config_Reference.md for a description of parameters.

[include ./ercf_hardware.cfg] # ERCF settings
[include ./ercf_software.cfg] # ERCF settings

# Driver0
[stepper_a] # StepperOnline 17HS19-2004S1, 1.8 degree, 2A
step_pin: PF13
dir_pin: !PF12
enable_pin: !PF14
microsteps: 16
rotation_distance: 40
endstop_pin: PG6
#position_endstop: 385
homing_speed: 80
homing_retract_dist: 5.0
second_homing_speed: 3
#arm_length: 400

# Driver1
[stepper_b] # StepperOnline 17HS19-2004S1, 1.8 degree, 2A
step_pin: PG0
dir_pin: !PG1
enable_pin: !PF15
microsteps: 16
rotation_distance: 40
endstop_pin: PG9

# Driver2
[stepper_c] # StepperOnline 17HS19-2004S1, 1.8 degree, 2A
step_pin: PF11
dir_pin: !PG3
enable_pin: !PG5
microsteps: 16
rotation_distance: 40
endstop_pin: PG10


# Driver3
# The Octopus only has 4 heater outputs which leaves an extra stepper
# This can be used for a second Z stepper, dual_carriage, extruder co-stepper,
# or other accesory such as an MMU
#[stepper_]
#step_pin: PG4
#dir_pin: PC1
#enable_pin: PA0
#endstop_pin: PG11
#...

# Driver4
[extruder] # Bondtech LGX, 1A, 400 steps/mm
step_pin: PF9
dir_pin: !PF10
enable_pin: !PG2
microsteps: 16
rotation_distance: 7.84 # Bondtech LGX 400 steps/mm
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA2 # HE0
sensor_pin:  PF4 # T0
sensor_type: EPCOS 100K B57560G104F
#control: pid
#pid_Kp: 22.2
#pid_Ki: 1.08
#pid_Kd: 114
min_temp: 0
max_temp: 250
min_extrude_temp: 0 # enables cold extrudes for calibration
max_extrude_only_distance: 200 # ERCF settings
max_extrude_cross_section: 50.0 # ERCF settings
pressure_advance = 0.190 # lower the value for more rounded corners 0.192 default

[probe]
pin: PG12 # ! to invert pressure probe
x_offset: -15.0 # pinda=-15.0
y_offset: 14.0 # pinda =14.0
#z_offset: 0.0
speed: 2.0
samples: 3
sample_retract_dist: 3.0

#[filament_switch_sensor material_0]
#switch_pin: PG12

# Driver5
#[extruder1]
#step_pin: PC13
#dir_pin: PF0
#enable_pin: !PF1
#heater_pin: PA3 # HE1
#sensor_pin: PF5 # T1
#...

#[filament_switch_sensor material_1]
#switch_pin: PG13

# Driver6
#[extruder2]
#step_pin: PE2
#dir_pin: PE3
#enable_pin: !PD4
#heater_pin: PB10 # HE2
#sensor_pin: PF6 # T2
#...

#[filament_switch_sensor material_2]
#switch_pin: PG14

# Driver7
#[extruder3]
#step_pin: PE6
#dir_pin: PA14
#enable_pin: !PE0
#heater_pin: PB11 # HE3
#sensor_pin: PF7 # T3
#...

#[filament_switch_sensor material_3]
#switch_pin: PG15

[heater_bed]
heater_pin: PA1
sensor_pin: PF3 # TB
sensor_type: ATC Semitec 104GT-2
#control: pid
#pid_Kp: 22.2
#pid_Ki: 1.08
#pid_Kd: 114
min_temp: 0
max_temp: 130

[fan]
pin: PA8

[heater_fan fan1]
pin: PE5
heater: extruder
heater_temp: 40.0

#[heater_fan fan2]
#pin: PD12

#[heater_fan fan3]
#pin: PD13

#[heater_fan fan4]
#pin: PD14

#[controller_fan fan5]
#pin: PD15

[display]
lcd_type: uc1701
cs_pin: EXP1_3
a0_pin: EXP1_4
rst_pin: EXP1_5
contrast: 63
encoder_pins: ^EXP2_5, ^EXP2_3
click_pin: ^!EXP1_2
## Some micro-controller boards may require an spi bus to be specified:
#spi_bus: spi
## Alternatively, some micro-controller boards may work with software spi:
spi_software_miso_pin: EXP2_1
spi_software_mosi_pin: EXP2_6
spi_software_sclk_pin: EXP2_2

[output_pin beeper]
pin: EXP1_1

[neopixel fysetc_mini12864]
pin: EXP1_6
chain_count: 3
color_order: RGB
initial_RED: 0.4
initial_GREEN: 0.4
initial_BLUE: 0.4

[mcu] # Rasp Pi USB
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_350034000750534E4E313120-if00
# CAN bus is also available on this board

[mcu rpi] # Rasp Pi local mcu for ADXL345 Accel.
serial: /tmp/klipper_host_mcu

[adxl345] # Acelerometer
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345
probe_points:
    0, 0, 340  # toolhead x y z location during test
    
[input_shaper]
#shaper_freq_x: 59.4
#shaper_type_x: mzv
#shaper_freq_y: 59.0
#shaper_type_y: mzv

[printer]
kinematics: delta
max_velocity: 300 # default 300
max_accel: 3000 # default 3000
max_z_velocity: 200 # default 150
square_corner_velocity: 3.0 # default 5
#delta_radius: 201.027
print_radius: 150
minimum_z_position: -10.0 # used for initial calibration

[delta_calibrate]
speed: 200
radius: 140
horizontal_move_z: 2

[bed_mesh]
speed: 200
horizontal_move_z: 2
mesh_radius: 130
mesh_origin: 0, 0
round_probe_count: 9
mesh_pps: 4
algorithm: bicubic
bicubic_tension: 0.2
move_check_distance: 5
split_delta_z: .025
#fade_start: 0
#fade_end: 10
#fade_target: 0

[endstop_phase]

[pause_resume] # ERCF settings
recover_velocity: 300.0

########################################
# TMC2209 configuration
########################################

[tmc2209 stepper_a]
uart_pin: PC4
##diag_pin: PG6
run_current: 1.4
hold_current: 0.800
stealthchop_threshold: 0

[tmc2209 stepper_b]
uart_pin: PD11
##diag_pin: PG9
run_current: 1.4
hold_current: 0.800
stealthchop_threshold: 0

[tmc2209 stepper_c]
uart_pin: PC6
##diag_pin: PG10
run_current: 1.4
hold_current: 0.800
stealthchop_threshold: 0

#[tmc2209 stepper_]
#uart_pin: PC7
##diag_pin: PG11
#run_current: 0.650
#stealthchop_threshold: 999999

[tmc2209 extruder]
uart_pin: PF2
run_current: 0.60 # 0.5-0.7 recommended for Bondtech LGX
hold_current: 0.300
stealthchop_threshold: 0

#[tmc2209 extruder1]
#uart_pin: PE4
#run_current: 0.800
#stealthchop_threshold: 999999

#[tmc2209 extruder2]
#uart_pin: PE1
#run_current: 0.800
#stealthchop_threshold: 999999

#[tmc2209 extruder3]
#uart_pin: PD3
#run_current: 0.800
#stealthchop_threshold: 999999

[board_pins]
aliases:
    # EXP1 header
    EXP1_1=PE8, EXP1_2=PE7,
    EXP1_3=PE9, EXP1_4=PE10,
    EXP1_5=PE12, EXP1_6=PE13,    # Slot in the socket on this side
    EXP1_7=PE14, EXP1_8=PE15,
    EXP1_9=<GND>, EXP1_10=<5V>,

    # EXP2 header
    EXP2_1=PA6, EXP2_2=PA5,
    EXP2_3=PB1, EXP2_4=PA4,
    EXP2_5=PB2, EXP2_6=PA7,      # Slot in the socket on this side
    EXP2_7=PC15, EXP2_8=<RST>,
    EXP2_9=<GND>, EXP2_10=PC5

# See the sample-lcd.cfg file for definitions of common LCD displays.

# A [probe] section can be defined instead with a pin: setting identical
# to the sensor_pin: for a bltouch
#[bltouch]
#sensor_pin: PB7
#control_pin: PB6
#z_offset: 0

#[neopixel my_neopixel]
#pin: PB0

## Custom Menus
[menu __main __test]
type: list
name: Tester

# ERCF Client Macros
[gcode_macro PRINT_START]
gcode:
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
    {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
    SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=0 # added line for clog detection mode. Turns off sensor
    M104 S{EXTRUDER_TEMP * 0.80}        # set extruder temperature to 75%
    M140 S{BED_TEMP}                    # set bed temprature
    BED_MESH_PROFILE LOAD=default #loads Klipper default mesh
    G21 # Set Units to Millimeters
    G90 # Set to Absolute Positioning
    M83 # Set extruder to relative mode
    M220 S100 # Set Feedrate percent back to 100
    M106 S0 #Fan Off
    M117 Homing
    G28 # Home All
    G92 E0 # Reset Extruder
    G1 Z15.0 F3000
    M109 S{EXTRUDER_TEMP}   # Wait for nozzle to finish heating
    M106 S0                 # Done waiting, part cooling off and back to slicer control
    #M117 Probing
    #PROBE
    SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=1 # added line for clog detection mode. Turns on sensor
    M117 Printing

[gcode_macro PRINT_END]
gcode:
    M140 S0 # Turn-off bed
    M106 S0 # Fan Off
    G91 # Relative positioning
    G1 E-0.5 F2500 # Retract filament
    G1 Z30 F3000 # Move effector up
    M220 S100 # Set Feedrate percent back to 100
    G90 # Absolute positioning
    G1 X0 Y30 F3000 # Move effector center / back
    {% set unload = params.UNLOAD_AT_END|default(0)|int %}
    M400    # wait for buffer to clear
    {% if unload|int == 1%}
        ERCF_EJECT
    {% endif %}
    M104 S0 # Turn-off hotend
    SET_STEPPER_ENABLE STEPPER=extruder ENABLE=0 # Disable extruder

[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
  TURN_OFF_HEATERS
  CLEAR_PAUSE
  SDCARD_RESET_FILE
  {% set x_park = printer.toolhead.axis_minimum.x|float + 5.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
  {% 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 %}
  SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=0
  G91
  G1 Z{z_safe} F900
  G90
  G0 X{x_park} Y{y_park} F6000
  BASE_CANCEL_PRINT

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
  {% set x_park = printer.toolhead.axis_minimum.x|float + 5.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
  {% set max_z = printer.toolhead.axis_maximum.z|float %}
  {% set act_z = printer.toolhead.position.z|float %}
  {% if act_z < (max_z - 5.0) %}
      {% set z_safe = 5.0 %}
  {% else %}
      {% set z_safe = max_z - act_z %}
  {% endif %}
  G92 E0
  G1 E-1.0 F1500.0
  G90
  SAVE_GCODE_STATE NAME=PAUSE_state
  BASE_PAUSE
  G91
  G1 Z{z_safe} F900
  G90
  G0 X{x_park} Y{y_park} F6000

[gcode_macro RESUME]
rename_existing: BASE_RESUME
gcode:
    {% if printer["gcode_macro ERCF_PAUSE"].is_paused|int != 0 %}
        M118 You can't resume the print without unlocking the ERCF first.
        M118 Run ERCF_UNLOCK and solve any issue before hitting Resume again
    {% else %}
        RESTORE_GCODE_STATE NAME=PAUSE_state
        G90
        {% if printer["gcode_macro ERCF_VAR"].clog_detection|int == 1 %}
            SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=1
        {% endif %}
        BASE_RESUME
    {% endif %}

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [probe]
#*# z_offset = 0.453
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 14.505
#*# pid_ki = 0.440
#*# pid_kd = 119.662
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 55.157
#*# pid_ki = 0.636
#*# pid_kd = 1195.521
#*#
#*# [endstop_phase stepper_a]
#*# trigger_phase = 59/64
#*#
#*# [endstop_phase stepper_b]
#*# trigger_phase = 44/64
#*#
#*# [endstop_phase stepper_c]
#*# trigger_phase = 18/64
#*#
#*# [input_shaper]
#*# shaper_type_x = 3hump_ei
#*# shaper_freq_x = 82.0
#*# shaper_type_y = mzv
#*# shaper_freq_y = 60.0
#*#
#*# [printer]
#*# delta_radius = 203.975048
#*#
#*# [stepper_a]
#*# angle = 209.691248
#*# arm_length = 402.423731
#*# position_endstop = 390.915052
#*#
#*# [stepper_b]
#*# angle = 329.578808
#*# arm_length = 405.437482
#*# position_endstop = 388.767988
#*#
#*# [stepper_c]
#*# angle = 90.000000
#*# arm_length = 403.866956
#*# position_endstop = 390.668581
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	  -0.156093, -0.156093, -0.156093, -0.156093, -0.156093, -0.156093, -0.156093, -0.156093, -0.156093
#*# 	  -0.051219, -0.051219, -0.051219, -0.101586, -0.137468, -0.164767, -0.033983, -0.033983, -0.033983
#*# 	  -0.019383, -0.019383, -0.033281, -0.020074, -0.022258, -0.013818, 0.012413, 0.100851, 0.100851
#*# 	  -0.004334, -0.004334, 0.027696, 0.015139, -0.003518, -0.015928, -0.046685, 0.014538, 0.014538
#*# 	  -0.039046, -0.025214, 0.041022, 0.066368, 0.078945, 0.096209, 0.073397, 0.064159, 0.130159
#*# 	  0.014118, 0.014118, 0.042400, 0.061551, 0.051162, 0.024311, -0.006972, -0.068517, -0.068517
#*# 	  -0.025675, -0.025675, 0.024664, 0.049281, 0.039570, 0.027039, -0.008427, -0.040542, -0.040542
#*# 	  0.003335, 0.003335, 0.003335, 0.023118, -0.002773, -0.052553, -0.106721, -0.106721, -0.106721
#*# 	  0.013421, 0.013421, 0.013421, 0.013421, 0.013421, 0.013421, 0.013421, 0.013421, 0.013421
#*# tension = 0.2
#*# min_x = -130.0
#*# algo = bicubic
#*# y_count = 9
#*# mesh_y_pps = 4
#*# min_y = -130.0
#*# x_count = 9
#*# max_y = 130.0
#*# mesh_x_pps = 4
#*# max_x = 130.0
#*#
#*# [delta_calibrate]
#*# height0 = 0.453
#*# height0_pos = 31228.000,31060.000,31214.667
#*# height1 = 0.453
#*# height1_pos = 36957.000,36802.667,27293.333
#*# height2 = 0.453
#*# height2_pos = 30101.000,40255.000,30118.667
#*# height3 = 0.453
#*# height3_pos = 27519.333,35823.667,36050.667
#*# height4 = 0.453
#*# height4_pos = 30086.000,29881.333,37657.667
#*# height5 = 0.453
#*# height5_pos = 35290.333,27640.667,35230.000
#*# height6 = 0.453
#*# height6_pos = 39050.667,29948.000,30066.000
#*# distance0 = 116.85
#*# distance0_pos1 = 30869.409,31328.693,31443.720
#*# distance0_pos2 = 27427.602,36291.432,36446.159
#*# distance1 = 116.96
#*# distance1_pos1 = 31057.886,30950.542,31635.150
#*# distance1_pos2 = 30128.825,30000.528,40379.958
#*# distance2 = 116.68
#*# distance2_pos1 = 31438.007,30764.840,31443.720
#*# distance2_pos2 = 36465.543,27338.345,36446.159
#*# distance3 = 116.99
#*# distance3_pos1 = 31629.694,30953.530,31064.766
#*# distance3_pos2 = 40414.982,30045.199,30133.731
#*# distance4 = 116.92
#*# distance4_pos1 = 31437.324,31331.721,30877.190
#*# distance4_pos2 = 36452.654,36348.423,27444.518
#*# distance5 = 116.89
#*# distance5_pos1 = 31057.212,31521.233,31064.766
#*# distance5_pos2 = 30118.752,40238.954,30133.731
#*# distance6 = 117.08
#*# distance6_pos1 = 27642.962,35225.118,36049.904
#*# distance6_pos2 = 30390.832,29717.629,39942.649
#*# distance7 = 116.9
#*# distance7_pos1 = 30363.754,29692.952,39096.539
#*# distance7_pos2 = 36565.297,27410.911,35855.203
#*# distance8 = 117.04
#*# distance8_pos1 = 36066.550,27553.877,35373.634
#*# distance8_pos2 = 39974.274,30306.112,29848.646
#*# distance9 = 116.73
#*# distance9_pos1 = 39122.926,30278.013,29822.474
#*# distance9_pos2 = 35859.192,36446.060,27515.873
#*# distance10 = 116.95
#*# distance10_pos1 = 35376.072,35949.256,27659.066
#*# distance10_pos2 = 29833.240,39801.402,30394.945
#*# distance11 = 116.9
#*# distance11_pos1 = 29807.322,38958.887,30368.277
#*# distance11_pos2 = 27499.425,35702.979,36545.839

Here you are setting your park position.
This results in a wanted position of:

So apparently either X (-145), Y (145) or Z (245.085) is beyond the limits of your printer.

@Sineos

Thanks for the feedback. There is definitely something up with that setting. From some searching, it has something to do with the probe offsets and the mesh possibly. My Delta has a print radius of 150mm and a print height about 340mm. I run the delta calibration and mesh at 130mm.

When I use this setting, the issue goes away…

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
  {% set x_park = printer.toolhead.axis_minimum.x|float + 55.0 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float - 55.0 %}

Now it will park at -95.00 95.00 without any issues.

Maybe I should run the delta calibrate and bed mesh with the same radius as the print radius?

Sorry, but I have zero experience with Deltas. Hopefully someone with more knowledge can comment.

Sorry to comment on a year old post, but in my experience with my Anycubic kossel linear plus, that is correct. You can’t perform moves outside the delta calibrated area otherwise it seems to get confused.