Klipper and being consistent

Printer Model: ender 3v2 ender 6
MCU / Printerboard: manta m4p, mini e3 v3
klippy.log not needed

Trying to figure things out with consistency and klipper…
I have found lately that setting z offset is random at best with klipper vs marlin i have set mine numerous times only to go to print after a live z offset setting and getting a perfect first layer test then comes the print where what was just set and boom the setting is at least .100+ off. So i have gone into my slicer no settings there what so ever have been changed that would affect my offset, so off to hardware testing where i find nothing is out of line same measurements every offset test etc.

So i am curious how i can run perfect z_offset and prints on the marlin machines but struggle so much with klipper to keep my settings especially when they appear in my config files exactly how they were set but yet it cant make a print beyond the first layer test??
Some help would be greatly appreciated as this is frustrating and should not be as difficult as it is.

How are you setting your “live z offset”?

You should probably always include your klippy.log and your printer.cfg as they can offer some clues as to what is happening.

2 Likes

Live z offset would be running a first layer stl file numerous files out there i just pick one i like then i do the paper test as a prelim, then run file and adjust z as file is running then save results when complete but usually when done its very little change.
As for my klippy log not sure what it would show as a clue but then again thats why i asked for ideas what to look for.

So what is it that your looking for???

What do you mean you “adust z as file is running and save results”?

Why aren’t you using PROBE_CALIBRATE:

https://www.klipper3d.org/Probe_Calibrate.html#calibrating-probe-z-offset

I guess you’re not changing the klippy.log but you should always a good idea to append it to your request.

Do you use the same settings for Marlin and Klipper in terms of Z speed and acceleration?
Or did you crank it up on Klipper to something your printers might not be able to properly handle?

I’m running on inductive probes and my v0 with a mechanical endstop and there are not issues.

So please just upload and we can tell.

Please re read my reply and look for the wording paper test then you will have your answer to your question as i explained my methods right there. But if you require a more detailed description of my steps from the start i could do that for you…i simply thought by stating paper test that would sum up.

We are trying to help you and ask you to provide specific feedback/logs.
This is all on purpose and not to waste our all time.

You vaguely described what you did but who knows what you are exactly doing or if this is done properly?!

A proper problem description is half way towards a solution… :wink:

3 Likes

@Drlevi Just one question. Did you read https://klipper.discourse.group/t/how-to-ask-for-help?

I guess, LifeOfBrian is referring to point 4:

Could you please attach your klippy.log?

If you’re not following the standard Klipper process please provide a more detailed description as to what you are doing.

Below is attached a copy and pasted quote right from the klipper standard process. Notice the quoted “paper test”?

Once the manual probe tool starts, follow the steps described at “the paper test”) to determine the actual distance between the nozzle and bed at the given location. Once those steps are complete one can ACCEPT the position and save the results to the config file with:

Well unfortunately i cannot just upload it, says its unsupported format. but im not surprised by that. so heres a copy and paste.
[Level None] 2023-07-03 00:07:22,957 [None] [:None:0] ===== Config file =====
[virtual_sdcard]
path = ~/gcode_files

[pause_resume]

[display_status]

[gcode_macro G29]
gcode =
G28
bed_mesh_calibrate
G1 X0 Y0 Z10 F4200

[gcode_macro CANCEL_PRINT]
description = Cancel the actual running print
rename_existing = CANCEL_PRINT_BASE
gcode =
TURN_OFF_HEATERS
CANCEL_PRINT_BASE

[gcode_macro PAUSE]
description = Pause the actual running print
rename_existing = PAUSE_BASE
variable_extrude = 1.0
gcode =
{% set E = printer[“gcode_macro PAUSE”].extrude|float %}
{% set x_park = printer.toolhead.axis_maximum.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 - 2.0) %}
{% set z_safe = 2.0 %}
{% else %}
{% set z_safe = max_z - act_z %}
{% endif %}
PAUSE_BASE
G91
{% if printer.extruder.can_extrude|lower == ‘true’ %}
G1 E-{E} F2100
{% else %}
{action_respond_info(“Extruder not hot enough”)}
{% endif %}
{% if “xyz” in printer.toolhead.homed_axes %}
G1 Z{z_safe} F900
G90
G1 X{x_park} Y{y_park} F6000
{% else %}
{action_respond_info(“Printer not homed”)}
{% endif %}

[gcode_macro RESUME]
description = Resume the actual running print
rename_existing = RESUME_BASE
gcode =
{% set E = printer[“gcode_macro PAUSE”].extrude|float %}
{% if ‘VELOCITY’ in params|upper %}
{% set get_params = (‘VELOCITY=’ + params.VELOCITY) %}
{%else %}
{% set get_params = “” %}
{% endif %}
{% if printer.extruder.can_extrude|lower == ‘true’ %}
G91
G1 E{E} F2100
{% else %}
{action_respond_info(“Extruder not hot enough”)}
{% endif %}
RESUME_BASE {get_params}

[stepper_x]
step_pin = PB13
dir_pin = !PB12
enable_pin = !PB14
microsteps = 16
rotation_distance = 40
endstop_pin = ^PC0
position_endstop = 0
position_max = 255
homing_speed = 50

[tmc2209 stepper_x]
uart_pin = PC11
tx_pin = PC10
uart_address = 0
run_current = 0.700
stealthchop_threshold = 999999

[stepper_y]
step_pin = PB10
dir_pin = !PB2
enable_pin = !PB11
microsteps = 16
rotation_distance = 40
endstop_pin = ^PC1
position_endstop = 0
position_max = 235
homing_speed = 50

[tmc2209 stepper_y]
uart_pin = PC11
tx_pin = PC10
uart_address = 2
run_current = 0.700
stealthchop_threshold = 999999

[stepper_z]
step_pin = PB0
dir_pin = PC5
enable_pin = !PB1
microsteps = 16
rotation_distance = 8
endstop_pin = probe: z_virtual_endstop
position_max = 250
position_min = -5

[bltouch]
sensor_pin = ^PC14
control_pin = PA1
stow_on_each_sample = False
pin_up_touch_mode_reports_triggered = True
probe_with_touch_mode = True
x_offset = -52
y_offset = -14
z_offset = 3.54
speed = 10
samples = 2
sample_retract_dist = 5.0
lift_speed = 40
samples_tolerance_retries = 3

[safe_z_home]
home_xy_position = 165,133
speed = 50
z_hop = 5.0
z_hop_speed = 10

[bed_mesh]
speed = 120
horizontal_move_z = 8
mesh_min = 10, 20
mesh_max = 200,217
probe_count = 5,5

[tmc2209 stepper_z]
uart_pin = PC11
tx_pin = PC10
uart_address = 1
run_current = 0.700
stealthchop_threshold = 999999

[extruder]
max_extrude_only_distance = 100.0
pressure_advance = 0.055
pressure_advance_smooth_time = 0.04
step_pin = PB3
dir_pin = !PB4
enable_pin = !PD1
microsteps = 16
gear_ratio = 3.5:1
rotation_distance = 27.5
nozzle_diameter = 0.400
filament_diameter = 1.750
heater_pin = PC8
sensor_type = EPCOS 100K B57560G104F
sensor_pin = PA0
min_temp = 0
max_temp = 300
control = pid
pid_kp = 18.665
pid_ki = 0.902
pid_kd = 96.592

[tmc2209 extruder]
uart_pin = PC11
tx_pin = PC10
uart_address = 3
run_current = 0.750
stealthchop_threshold = 999999

[heater_bed]
heater_pin = PC9
sensor_type = ATC Semitec 104GT-2
sensor_pin = PC4
min_temp = 0
max_temp = 130
control = pid
pid_kp = 69.475
pid_ki = 1.222
pid_kd = 987.418

[heater_fan heatbreak_cooling_fan]
pin = PC7

[heater_fan controller_fan]
pin = PB15

[fan]
pin = PC6

[mcu]
serial = /dev/serial/by-id/usb_serial_1
restart_method = command

[printer]
kinematics = cartesian
max_velocity = 300
max_accel = 7000
max_z_velocity = 10
max_z_accel = 100

[input_shaper]
_freq_x = 80.8
shaper_freshaper_type_x = ei
shaperq_y = 40.0
shaper_type_x = ei
shaper_freq_x = 58.0
shaper_type_y = mzv
shaper_freq_y = 38.0

[bed_screws]
screw1 = 29.8,41.6
screw2 = 198.8,41.6
screw3 = 200.8,211.6
screw4 = 31.8,211.6

[gcode_arcs]
resolution = 0.2

[board_pins]
aliases =
EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=,
EXP1_2=PA15, EXP1_4=, EXP1_6=PB9, EXP1_8=PD6, EXP1_10=<5V>

[bed_mesh PLA]
version = 1
points =
0.038750, 0.038750, 0.018750, 0.010000, -0.005000
0.032500, 0.036250, 0.013750, 0.010000, -0.025000
0.015000, 0.023750, 0.006250, 0.025000, 0.010000
0.037500, 0.030000, 0.017500, 0.041250, 0.025000
-0.047500, -0.023750, -0.006250, -0.001250, -0.021250
tension = 0.2
min_x = 10.0
algo = lagrange
y_count = 5
mesh_y_pps = 2
min_y = 20.0
x_count = 5
max_y = 217.0
mesh_x_pps = 2
max_x = 200.0

[bed_mesh default]
version = 1
points =
-0.010000, 0.012500, -0.006250, -0.038750, -0.082500
0.028750, 0.045000, 0.003750, -0.016250, -0.075000
0.028750, 0.033750, -0.000000, -0.010000, -0.045000
0.042500, 0.035000, 0.003750, 0.010000, -0.032500
-0.048750, -0.041250, -0.037500, -0.051250, -0.095000
tension = 0.2
min_x = 10.0
algo = lagrange
y_count = 5
mesh_y_pps = 2
min_y = 20.0
x_count = 5
max_y = 217.0
mesh_x_pps = 2
max_x = 200.0

Loaded MCU ‘mcu’ 105 commands (v0.10.0-594-g7290c145 / gcc: (15:7-2018-q2-6) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] binutils: (2.31.1-11+rpi1+11) 2.31.1)
MCU ‘mcu’ config: BUS_PINS_i2c1_PB6_PB7=PB6,PB7 BUS_PINS_spi2a=PC2,PC3,PB10 RESERVE_PINS_crystal=PF0,PF1 RESERVE_PINS_USB=PA11,PA12 CLOCK_FREQ=64000000 BUS_PINS_i2c1_PB8_PB9=PB8,PB9 BUS_PINS_spi1a=PB4,PB5,PB3 STATS_SUMSQ_BASE=256 BUS_PINS_i2c1_PA9_PA10=PA9,PA10 BUS_PINS_i2c2_PB10_PB11=PB10,PB11 STEPPER_BOTH_EDGE=1 ADC_MAX=4095 BUS_PINS_spi3=PB4,PB5,PB3 BUS_PINS_spi2=PB14,PB15,PB13 BUS_PINS_spi1=PA6,PA7,PA5 BUS_PINS_i2c2_PB13_PB14=PB13,PB14 PWM_MAX=255 MCU=stm32g0b1xx BUS_PINS_i2c3_PB3_PB4=PB3,PB4
Configured MCU ‘mcu’ (1024 moves)
Args: [‘/usr/share/klipper/klippy/klippy.py’, ‘/mnt/UDISK//printer_config/printer.cfg’, ‘-l’, ‘/mnt/UDISK//printer_logs/klippy.log’, ‘-a’, ‘/tmp/klippy_uds’]
Git version: ‘V0.1.99-0-g813fb1b9-dirty’
CPU: 4 core ARMv8 Processor rev 4 (v8l)
Python: ‘2.7.15 (default, Jan 07 2023, 08:23:34) \n[GCC 6.4.1]’
webhooks client 643649696: {‘program’: ‘Moonraker’, ‘version’: ‘V0.0.71-0-g97796d8-dirty’}
=============== Log rollover at Mon Jul 3 00:07:22 2023 ===============
[ERROR] 2023-07-03 00:07:22,943 [root] [virtual_sdcard:_load_file:251] File opened:ender 3 mandalorian_pose3_supportfree_icz.gcode Size:31904481 start_print
[ERROR] 2023-07-03 00:07:22,962 [root] [virtual_sdcard:work_handler:453] ‘NoneType’ object has no attribute ‘get’
Traceback (most recent call last):
File “/usr/share/klipper/klippy/extras/virtual_sdcard.py”, line 431, in work_handler
timelapse_postion = int(config_data.get(‘1’).get(“position”, 0))
AttributeError: ‘NoneType’ object has no attribute ‘get’
[ERROR] 2023-07-03 05:46:29,221 [root] [virtual_sdcard:work_handler:798] filename:None end print
[ERROR] 2023-07-03 11:52:14,809 [root] [virtual_sdcard:_load_file:251] File opened:ender 3 mandalorian_pose3_supportfree_icz.gcode Size:44629013 start_print
[ERROR] 2023-07-03 11:52:14,819 [root] [virtual_sdcard:work_handler:453] ‘NoneType’ object has no attribute ‘get’
Traceback (most recent call last):
File “/usr/share/klipper/klippy/extras/virtual_sdcard.py”, line 431, in work_handler
timelapse_postion = int(config_data.get(‘1’).get(“position”, 0))
AttributeError: ‘NoneType’ object has no attribute ‘get’
[ERROR] 2023-07-03 17:06:00,033 [root] [virtual_sdcard:work_handler:798] filename:None end print
[ERROR] 2023-07-03 20:30:44,137 [root] [virtual_sdcard:_load_file:251] File opened:ender 3 aileron_droit.gcode Size:15506942 start_print
[ERROR] 2023-07-03 20:30:44,141 [root] [virtual_sdcard:work_handler:453] ‘NoneType’ object has no attribute ‘get’
Traceback (most recent call last):
File “/usr/share/klipper/klippy/extras/virtual_sdcard.py”, line 431, in work_handler
timelapse_postion = int(config_data.get(‘1’).get(“position”, 0))
AttributeError: ‘NoneType’ object has no attribute ‘get’
[ERROR] 2023-07-03 23:44:47,318 [root] [virtual_sdcard:work_handler:798] filename:None end print

What are the actual steps that you are going through to set your z offset.

I’m looking for you to describe the process like the one described here: Probe_Calibrate

What I do is:

  1. Home all axis.

  2. Move to the center X/Y position.

  3. Enter `PROBE_CALIBRATE’ from the Console input box and you should have something like the following with the “Manual Probe” window popping up:

  1. Putting a piece of paper below the nozzle.

  2. Moving the toolhead down until there is friction between the paper and the nozzle.

  3. Click on ACCEPT

  4. In the Console input box enter SAVE_CONFIG

  5. The printer will reboot. If you look at your printer.cfg file, you’ll see a commented out area at the end of the file that looks something like:

If you don’t follow a procedure that follows steps like these and results in changes to printer.cfg, you won’t be changing the height of the Z axis end point and you’ll have the problems that you are seeing here.

Please describe EXACTLY what you are doing as I have done here.

Now, to upload the klippy.log, all you need to do is drag and drop the file into the reply entry window. There is no need for cutting and pasting.

First of all what you just put down is exactly what the paper test is, so for you to need a descriptive dialog of the steps when one has referred to the paper test, it seems you have other motives then just wanting some info on my steps.
Second if you would have read my reply, i did try and upload by drag and drop and recieved a message UNSUPPORTED FORMAT, which i clearly stated in my reply.
So after reading your reply instead of just offering help i feel you sir have a control issue and have resorted to just being a jerk really.

So again all i wanted was some pointers what to look for, i didnt ask you to fix the issue.
The way i learn is by doing it, if i get stuck i ask for pointers.

My motives were to understand exactly what you were doing so that I could suggest reasons for your issues. Your replies were simplistic and did not demonstrate an understanding of what was required to carry out the task.

I did read your reply and you said you “cannot just upload it” which may have meant that you tried to use the button in the Reply window. I have never seen anybody else on this forum having a problem loading a klippy.log file into a reply window nor have I ever heard of anybody getting an “unsupported format” message and I was trying to understand if you were doing something differently.

There’s no reason for me to respond to your unwarranted invective.

I sincerely wish you good luck in finding a solution to your problem.

1 Like

There is no worries of replying to my “unwarranted invective” as i can tell i hit the nail on the head, you were not trying to understand you simply told me what to do.

And like the few times before i figured out what the issue was and yes its a klipper issue thats not covered in the documentation. Which is fine i love learning new things like this especially when im able to learn it myself.

Id say thank you but nothing to thank for.

I was facing problems similar to your problem… only difference being that I was focussing on the bed screw adjustments which were never coming right. I was constantly correcting my z-offset setting. Klipper lets you do a bed screw adjustment, probe calibrate and an auto-level feature. The problem with these fancy features is that each setting in it’s own way… creates it’s own offset adjustment and makes a mess of the final setting you will see that in the printer.cfg file. One simple process I use is to eliminate all these offsets in the following way and then go with a very practical and simple method to level my bed.

For this to work well, you need a good bed that is not badly distorted…

  1. Firstly do a manual levelling of the bed screws (using the paper method) to reduce any future impact on the settings.

  2. Minimize the auto-level feature settings: Use a glass sheet or absolutely flat sheet and use auto level. This will create a very small adjustment value because it senses the bed to be almost level.

  3. Now do a probe calibration and let the setting get recorded in the printer.cfg file by restarting Klipper.

  4. Finally, once again do a manual adjust of the bed screws (using paper) to fine tune the bed levelling.

  5. Try your first layer print to see if the levelling is fine. Then try printing a model. If that works, then DO NOT do any probe calibration or z-offset after that.
    Just keep printing models till you start seeing failures.
    Then you can repeat the process once again

Hope this works for you. It definitely has worked for me. (just fyi, prior to this technique, I have reset my sonic pad at least 30 times in 4 months because of this issue… now I have done over 15 prints perfectly without any adjustment or calibration)

Thank you dreamwalker i appreciate your advice.
Long story short is what you explained is relative to what was going on, oddly i had these extra offset saves? But anyways now that they are gone it works like a charm.

My bed leveling usually spot on with a variance of 0.03 - 0.045 which in my opinion is pretty damn flat considering a human hair is 0.08 lol.

But next time i have to do a probe calibration etc i will use your advice.

Thanks!!!

@Drlevi please next time you post a long code fragment or your printer.cfg, put it into the preformatted text tags:


This saves space and makes the thread easier to read.

And asking back questions to get an exact understanding of what you were doing is a valid way to not speak about two different things.
Not everybody knows exactly how to perform the paper test. But if we always asume everybody is always doing everything right we won’t find root causes of reported issues.
I know only too well from my customers when I asked them what they did that they say: everything and exactly that what you asked me to do.
And if you then ask them what exactly they were doing either half of the requested steps had not been done and/or in the wrong way…

And one last word: nobody here gets paid for helping people.
So if they take their free time trying to help you, take your time to properly answer their questions!

3 Likes