I have found that G29 is NOT the same as G29 S0.
-
@nuramori said in I have found that S29 is NOT the same as S29 S0.:
@fcwilt When I run G29 by itself, the mesh map is made, BUT the compensation is not activated.
Running G29 S0 will make the mesh, AND activate compensation.
I do have a mesh.g file, and always have; I recently noticed that my bed z axis motors were not slightly moving over the course of a layer print like it used to, so I started investigating. Prior to 3.3 it was working as intended, without the S0. I had left it out because the notes seemed to indicate that without S0 stated, it defaulted to S0 in behavior. It had in the past, and now it appears to not.
Adding S0 to my M29 command has corrected the behavior, but I wanted to see if this was a real change somehow.
As a test, I also removed mesh.g to see what wouyld happen. Same thing - unless S0 is actually stated in the command, mesh compensation will not activate.
Please post your mesh.g file.
Thanks.
Frederick
-
@nuramori said in I have found that S29 is NOT the same as S29 S0.:
As a test, I also removed mesh.g to see what wouyld happen. Same thing - unless S0 is actually stated in the command, mesh compensation will not activate.
Thanks. Either a bug or the documentation needs to be updated. Will check which.
-
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
Adding S0 to my M29 command has corrected the behavior, but I wanted to see if this was a real change somehow.
Where was the command that you added the S0 to?
Frederick
-
@fcwilt in my bed.g file. included below in case it's asked for....
; bed.g M291 P"Probing mesh grid process started" R"Probing.." S1 T2 M561 ; clear any bed transform M557 X40:290 Y40:290 P6:6 ; Define mesh grid G90 ; absolute positioning G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass M400 ; Wait for move to finish G30 P0 X40 Y186 Z-99999 ; probe near leadscrew one G30 P1 X300 Y290 Z-99999 ; probe near leadscrew two G30 P2 X300 Y60 Z-99999 S3 ; probe near leadscrew three and calibrate. G30 S-3 ; Probe and set Z=0 G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass G29 S0 ; Probe the bed and save height map to file M402 ; Retract probe M291 P"Probing mesh grid process finished !" R"Probing.." S1 T2 G1 X0 Y0 F10000
-
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
@fcwilt in my bed.g file. included below in case it's asked for....
; bed.g M291 P"Probing mesh grid process started" R"Probing.." S1 T2 M561 ; clear any bed transform M557 X40:290 Y40:290 P6:6 ; Define mesh grid G90 ; absolute positioning G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass M400 ; Wait for move to finish G30 P0 X40 Y186 Z-99999 ; probe near leadscrew one G30 P1 X300 Y290 Z-99999 ; probe near leadscrew two G30 P2 X300 Y60 Z-99999 S3 ; probe near leadscrew three and calibrate. G30 S-3 ; Probe and set Z=0 G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass G29 S0 ; Probe the bed and save height map to file M402 ; Retract probe M291 P"Probing mesh grid process finished !" R"Probing.." S1 T2 G1 X0 Y0 F10000
Thanks.
Was this the file where you added the S0 to the G29 command?
Also you have a G30 S-3 which is not likely what you want - it does not set the Z=0 datum.
Also you did not set the XY position before executing the G30. Given that you are auto-leveling the bed you should position the probe to the center of the bed before executing the G30.
Just one other thing - the file mesh.g is intended to be used for mesh bed compensation (the G29 commands) - the file bed.g is intended to be used for bed leveling (auto or manual with the G30 commands).
G32 executes the bed.g file - G29 executes the mesh.g file.
If you want to stay consistent with the commands in the DWC you should stick with this convention.
You said you have (or had) a file mesh.g - will you post that please.
Frederick
-
@fcwilt said in I have found that G29 is NOT the same as G29 S0.:
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
@fcwilt in my bed.g file. included below in case it's asked for....
; bed.g M291 P"Probing mesh grid process started" R"Probing.." S1 T2 M561 ; clear any bed transform M557 X40:290 Y40:290 P6:6 ; Define mesh grid G90 ; absolute positioning G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass M400 ; Wait for move to finish G30 P0 X40 Y186 Z-99999 ; probe near leadscrew one G30 P1 X300 Y290 Z-99999 ; probe near leadscrew two G30 P2 X300 Y60 Z-99999 S3 ; probe near leadscrew three and calibrate. G30 S-3 ; Probe and set Z=0 G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass G29 S0 ; Probe the bed and save height map to file M402 ; Retract probe M291 P"Probing mesh grid process finished !" R"Probing.." S1 T2 G1 X0 Y0 F10000
Thanks.
Was this the file where you added the S0 to the G29 command?
Also you have a G30 S-3 which is not likely what you want - it does not set the Z=0 datum.
Also you did not set the XY position before executing the G30. Given that you are auto-leveling the bed you should position the probe to the center of the bed before executing the G30.
Just one other thing - the file mesh.g is intended to be used for mesh bed compensation (the G29 commands) - the file bed.g is intended to be used for bed leveling (auto or manual with the G30 commands).
G32 executes the bed.g file - G29 executes the mesh.g file.
If you want to stay consistent with the commands in the DWC you should stick with this convention.
You said you have (or had) a file mesh.g - will you post that please.
Frederick
I'm aware - I also have a three independent z axis system I developed for the BLV cube, and implement the leveling here as well. The mesh.g file is a placeholder, as what I needed done I just put into the bed.g file (for now). To answer your first question, this is the place I have the G29 command (and the only place).
The comment for the G30 s-3 is a misnomer - I just haven't edited the comment to reflect the correction - way too many other distractions to clean up some things I guess.
Good point on the moving to the middle and probing. I do that for the z axis homing, and can repeat it so it stays in the same place. -
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
The mesh.g file is a placeholder
If mesh.g does not have the G29 commands needed to create the height map it will prevent G29 from working as intended.
If you only had G29 in your bed.g file then it would also not have done what you wanted which is why G29 S0 did work.
The comment for the G30 s-3 is a misnomer
If you wish to set the Z=0 datum, which is something you needed to do after bed leveling, you need to use just G30.
-
@fcwilt thanks, that perhaps clears things up; though I would be wary of the semantics seeming to imply that not including S0 will result in a default behavior that is in fact not as expected. Could just be how I read it.
I corrected the comment to reflect what is happening with the G30 command (and used as intended)...
; bed.g M291 P"Probing mesh grid process started" R"Probing.." S1 T2 M561 ; clear any bed transform M557 X40:290 Y40:290 P6:6 ; Define mesh grid G90 ; absolute positioning G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass M400 ; Wait for move to finish G30 P0 X40 Y186 Z-99999 ; probe near leadscrew one G30 P1 X300 Y290 Z-99999 ; probe near leadscrew two G30 P2 X300 Y60 Z-99999 S3 ; probe near leadscrew three and calibrate. G1 X162.5 Y172.5 F16000 ; go to middle of the bed G30 S-3 ; Probe and set the trigger height G1 H2 Z20 F1000 ; Making sure we're not going to hit the side of glass G29 S0 ; Probe the bed and save height map to file M402 ; Retract probe M291 P"Probing mesh grid process finished !" R"Probing.." S1 T2 G1 X0 Y0 F10000
Thanks for the comments - they were helpful (as always).
-
Hi,
I see the G1 move to center which is good but I still see the G30 S-3 which is not what you want there.
Frederick
-
@fcwilt I’m not sure why you don’t think it belongs there. It’s setting the trigger height which works in conjunction with my offset that is used to define nozzle height in my config.g. Other than the active mesh, things are working perfectly.
-
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
@fcwilt I’m not sure why you don’t think it belongs there. It’s setting the trigger height which works in conjunction with my offset that is used to define nozzle height in my config.g. Other than the active mesh, things are working perfectly.
Because you don't want to set the Z probe trigger height, that alters the value set by your G31 command.
You want to use the current trigger height setting to set the correct Z position at the moment the Z probe is triggered.
If you don't use G30 you are not setting the Z=0 datum which is what you want to do after leveling the bed.
Setting the Z=0 datum is something you also want to do that before creating or loading a height map.
Frederick
-
@fcwilt But I DO want to set the trigger height, and effectively update the value of the G31 that's in the config.g. I don't have to worry about any discrepancies - I already calibrated z (https://duet3d.dozuki.com/Wiki/Test_and_calibrate_the_Z_probe), so any variation due to the bed being hotter than before is compensated for with a new trigger height value.
I've never had an issue with this process, and seems to be ideal to maintain the ideal trigger value.
for reference/edification -
; Configuration file for Duet3 (firmware version 3.3 stable) ; executed by the firmware on start-up ; ; --------------- Pin/connection Mapping Legend ------------------- ; 0.out0 - Bed heater ; 0.out1 ; 0.out2 ; 0.out3 ; 0.out4 - Radiator cooling fan - WC heatsink ; 0.out5 ; 0.out6 ; 0.out7 ; 0.out8 ; 0.out9 - Duet board cooling fan ; 0.out4.tach - Radiator cooling fan rpm wire - WC heatsink ; 0.out5.tach ; 0.out6.tach ; 0.io0.in ; 0.io1.in - Emergency stop switch ; 0.io2.in - Y max active low endstop switch ; 0.io3.in ; 0.io4.in ; 0.io5.in ; 0.io6.in ; 0.io7.in ; 0.io8.in ; 0.io0.out ; 0.io1.out ; 0.io2.out ; 0.io3.out ; 0.io4.out ; 0.io5.out ; 0.io6.out ; 0.io7.out ; 0.io8.out ; 0.servo, out10 (only on v0.5, not on v0.6) ; 0.pson ; 0.spi.cs0 ; 0.spi.cs1 ; 0.spi.cs2 ; 0.spi.cs3 ; 0.temp0 - Bed Thermistor ; 0.temp1 ; 0.temp2 ; 0.temp3 - Coolant Temp Sensor ; 0.mcu-temp - MCU sensor ; ;----------Toolboard 1 (CAN ID#20) ; 20.0 - Accelerometer ; 20.out0 - Hotend Heater ; 20.out1 - ; 20.out2 - Parts cooler on printhead ; 20.out1.tach - ; 20.out2.tach - ; 20.io0.in - Z probe type to bltouch current - Piezo future ; 20.io1.in - X min active low endstop switch ; 20.io2.in - ; 20.io3.in - ; 20.io0.out - GPIO port 0 on toolboard io0, servo mode - BLTouch Z-Probe ; 20.temp0 - Extruder Thermistor ; 20.temp1 - ; 20.button0 - ; 20.button1 - ; ; ----------------------------------------------------------------- ; ; General preferences M81 ; Turn on the Power (inverted for Meanwell) G4 P2000 ; Hold your Horses. G90 ; send absolute coordinates... M83 ; ...but relative extruder moves G21 ; Set units to Millimeters M550 P"DUET3" ; set printer name M575 P1 S1 B57600 ; Set things up for the PanelDue G4 S6 ; Wait for toolboard to start M584 X0.3 Y0.2 Z0.0:0.1:0.4 E20.0 ; set drive mapping to each axis M669 K1 ; Select CoreXY mode - New format ; Network ; M552 S1 ; enable network ; M586 P0 S1 ; enable HTTP ; M586 P1 S0 ; disable FTP ; M586 P2 S0 ; disable Telnet ; Drives M569 P0.0 S0 ; physical drive 0 goes backwards - Z Axis Left (1) M569 P0.1 S0 ; physical drive 1 goes backwards - Z Axis Right Back (2) M569 P0.2 S0 ; physical drive 2 goes backwards - Y Axis, activate Stealthchop M569 P0.3 S0 ; physical drive 3 goes backwards - X Axis, activate Stealthchop M569 P0.4 S0 ; physical drive 4 goes backwards - Z Axis Right Front (3) M569 P20.0 S1 ; physical drive 5 goes forwards - Extruder 1 ; Set up three Z-axis location M671 X-6:362:362 Y186:299:60 S5 ; Pivot Points at 1 - left, 2 - rear right and 3 - front right M92 X199 Y198 Z1585 E1299 ; set steps per mm M350 X16 Y16 Z16 E16 I1 ; configure micro-stepping with interpolation M566 X600.00 Y600.00 Z100.00 E240.00 ; set maximum instantaneous speed changes (mm/min) M203 X16000.00 Y16000.00 Z400.00 E1200.00 ; set maximum speeds (mm/min) M201 X4000.00 Y4000.00 Z400.00 E800.00 ; set accelerations (mm/s^2) M906 X800 Y800 Z800 E800 I30 ; set motor currents (mA) and motor idle factor in percent*100 ; Set up Stealthcop Parameters ; M569 P0.0 V40 H5 ; M569 P0.1 V40 H5 ; M569 P0.2 V40 H5 ; M569 P0.3 V40 H5 ; M569 P0.4 V40 H5 ; M569 P20.0 V40 H5 ; M915 X Y Z E T1 M84 S30 ; Set idle timeout ; Axis Limits M208 X0 Y0 Z0 S1 ; set axis minima M208 X315 Y315 Z325 S0 ; set axis maxima ; Endstops M574 X1 S1 P"20.io1.in" ; X min active high endstop switch M574 Y2 S1 P"0.io2.in" ; Y max active high endstop switch ; Z-Probe - BLTouch - *CURRENT* M574 Z1 S2 ; set endstops controlled by probe M558 P9 C"^20.io0.in" H5 F2000 T12000 ; set Z probe type to bltouch and the dive height + speeds (bltouch NEEDS pullup) G31 P100 X0 Y-20 Z3.85 ; set Z probe trigger value, offset and trigger height - 0.40MM NOZZLE FIXED Kv1 G30 ; Probe Z ; Configure Heaters and Sensors M308 S0 P"0.temp0" Y"thermistor" A"Bed Heat" T100000 B3950 ; Configure bed temperature sensor M950 H0 C"0.out0" T0 ; Define heater 0 (bed heater) - bed_heat pin and Temp Sensor 0 M143 H0 S120 A2 ; set temperature limit for heater 0 to 120c M140 H0 ; Map heated bed to heater 0 M308 S1 P"20.temp0" Y"thermistor" A"Mosquito" T500000 B4723 C1.196220e-7 ; Configure extruder 1 temperature sensor - Mosquito M950 H1 C"20.out0" T1 ; Define heater 1 (hot-end E0) to use the "20.out0" pin and Temp Sensor 1 M143 H1 S270 A2 ; set temperature limit for heater 1 to 270C M308 S2 P"mcu-temp" Y"mcu-temp" A"Duet Board" ; Configure MCU sensor M308 S3 P"temp3" Y"thermistor" T10000 B3988 A"Coolant" ; Configure coolant sensor ; Configure Fans M950 F0 C"20.out2" Q100 ; Define Fan_0 for use - Parts Cooler on Printhead - 5015 fan M950 F1 C"0.out9" Q25000 ; Define Fan_1 for use - Duet board cooling fan M950 F2 C"!0.out4+^0.out4.tach" Q25000 ; Define Fan_1 for use - Radiator cooling - WC heatsink. - PWM fan M950 S0 C"20.io0.out" ; Define GPIO port 0 on IO0, servo mode - BLTouch Z-Probe - *CURRENT* M950 J0 C"^!0.io1.in" ; Input 0 uses 0.io1.in pin, pullup enabled ; Fans M106 P0 S0 ; set fan 0. Parts Cooler on Printhead M106 P1 T45:50 H2 ; Set fan 1. Manages Duet board fan. M106 P2 T20:40 H3 ; Set fan 1. Manages Radiator fan for water-cooled loop. ;Set PID values M307 H0 B0 R0.720 C713.5 D2.13 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M307 H1 B0 R2.487 C249.5:190.7 D5.51 S1.00 V23.1 ; disable bang-bang mode for the extruder heater and set PWM limit ; Pressure Advance M572 D0 S0.05 ; Set pressure advance to offset elasticity ; Dynamic Acceleration Adjustment and Non-linear M592 D0 A0.015 B0.0012 L0.2 M593 P"daa" F21 ; Set Movement Queue M595 P100 ; Set up Accelerometer M955 P20.0 I12 ; Accelerometer on toolboard, oriented counter clockwise 90 Enable for RRF 3.3 Stable ; Tools M563 P0 S"Printhead" D0 H1 F0 ; define tool 0. Fan 0 operates with an active hot-end G10 L1 P0 X0 Y0 Z0 ; set tool 0 axis offsets - - - X15 Y18 - Bed 0,0 G10 P0 R0 S0 ; set active and standby temperatures to 0C ; Emergency Stop M574 S1 P"^!0.io1.in" ; Define Emergency endstop - emergency stop switch condition M581 P0 S1 T0 ; Define action to be taken with activation of emergency stop switch ; Miscellaneous T0 ; select first tool
-
It doesn't work the way you think it does but I guess I'm not going to be able to convince you.
Having built 7 printers and now working on number 8 I thought I learned a thing or two along the way but perhaps not.
Good luck.
-
@fcwilt you can certainly convince me, I'm looking for what change you'd suggest and test it to compare to what behavoir I have now (which prints as I am expecting). Just saying 'that's not correct" isn't going to help me understand your perspective on WHAT is wrong as you see it, so I can understand the reasoning behind your comment. I'm not a novice - I've designed my own extruder and several other elements to this printer that is used by others, but I am very open to comments and constructive feedback, with more explanation.
For instance, you said if I don't use g30 to set... if you look in the config.g, I in fact do use the command as part of the initial setup (line 128).
Also... nothing happens until all the axis are homed - meaning that leveling nor mesh compensation can be done until the z axis is homed. In my z axis homing, I have G30 occuring (yes probably doubled up now that I see it), but G30 is done before anything happens. There are layers to the process, and just because it's not in the bed.g file doesn't mean I didn't accommodate it. It's just done elsewhere, in an appropriate place.
; homez.g ; called to home the Z axis ; ; generated by RepRapFirmware Configuration Tool on Tue Oct 09 2018 13:27:56 GMT+0300 G91 ; relative positioning ; Initiate tuning movement sequence for Stealthcop ; G1 H2 Z0.02 F1000 ; G4 P50 G1 H2 Z10 F1000 ; Drop Z relative to current position G90 ; absolute positioning G1 X162.5 Y172.5 F16000 ; go to first probe point G30 ; home Z by probing the bed ; Uncomment the following lines to lift Z after probing G91 ; relative positioning G1 H2 Z10 F1000 ; lower Z a bit more G90 ; absolute positioning
-
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
in an appropriate place.
The appropriateness of G30 in config.g is debatable. What happens if there is a reset mid print? Does probing in place with a print on the bed not cause problems?
But the main thing is that Z0 is determined with the probe before loading/creating a mesh.
I can't say I follow why you're re-setting the trigger height with G30 S-3 after the auto leveling instead of just resetting the Z0 position with a G30. The trigger height shouldn't have changed unless the distance between the nozzle and probe has changed. What does your resulting heightmap actually look like?
-
First let us clarify one thing.
I tested this and on a Duet 3 Mini 5+ running firmware 3.3.0 executing a G29 with no mesh.g file present probes the bed, creates the height map and enables mesh compensation.
Now let's try to clarify setting the Z=0 datum.
The Z probe Z trigger height setting from G31 tells the firmware what the Z axis position will be when the Z probe triggers.
So let's say the Z trigger height setting is 5mm.
Executing a G30 causes the firmware to move the Z probe toward the bed until the Z probe triggers.
Since Z position is always in relation to the surface of the bed at the instant the firmware knows the Z position is 5mm****undefined.
Knowing that the firmware can move to any other Z position - including Z=0.
Thus the Z=0 datum has been set.
The calibration procedure for determining the Z probe Z trigger height setting for G31 only needs to be done once unless something changes the Z axis relationship between the nozzle and the Z probe.
Bed expansion, due to heating of the bed, may change the relationship of the bed to the frame, for a given Z axis position, but it does not change the relationship between the nozzle and the Z probe.
Executing a G30 S-3 may or may not change the Z probe Z trigger height setting as determined by the calibration procedure. However it serves no purpose to do that since the setting determined by calibration should be sufficient.
Even if you did a G30 S-3 it doesn't result in the Z=0 datum being set and that is what must be done as discussed below.
Now there are three instances when setting the Z=0 datum is required:
- after auto-leveling of the bed.
- before creating a height map
- before loading the height map
The XY position used when setting the Z=0 datum should always be the same. Based on my experience the best place is the center of the bed.
Some folks use the first probe point from the grid used to create the height map but that point may change if you change the grid settings or use different grid settings for different purposes, as some folks do.
The center of the bed, on the other hand, is always the same, barring some physical change in the printer, and is independent of the grid settings.
Frederick
-
@fcwilt You keep mentioning z=0 datum, and I had stated repeatedly, that comment in the line item was a mistake (and I had fixed it so there's no misunderstanding), and it's NOT what I'm expecting, so if your narrative is still based on that, you're in error about my the intent of using G30 S-3, how I set things up, and why.
With that said, I appreciate the rest, in that you took the time to be more illustrative of your review of my initial post (though this has gone a bit tangential to that), and parts of it were helpful.
Your comments about G30 I understand. As I said, I initiate that in my homez.g file, so every time the printer is started up and made ready for printing, G30 is always run (with the probe at the center of the bed). I did delete the errant G30 in the config.g, and was an old oversight (@Phaedrux ).
Not to be pedantic, but thermal coefficients affect all axis, so while perhaps minuscule, thermal expansion does happen on the Z axis as well, but that's a theoretical debate for another time. It's often suggested to not do certain things (even bed leveling) until the actual operative temperatures are reached.
I'll note your last comment here, and you're right - probing the center is ideal, and that was where I had always probed for the z homing (with, again, G30) so it's done very early in the routine of getting the printer started. I do thank you for pointing out that in the bed.g file I didn't have it, and that was indeed helpful (I've since added it as you noted too).
To the second to last section, are you suggesting performing a G30 three times? I am doing it twice, at the center of the bed (once at the beginning, when a required Z home is done, and then right after the autoleveling is done), but I do not do it for a third time after the entire bed is probed. I'm not clear what that would do for me.
So that last item that seems to be where we are not exactly in agreement is the use of G30 S-3 and if it performs any benefit. I'll say it doesn't HURT, as I have never had to baby step to compensate, and the first layer of my prints have always been spot on, even after an accidental bed tilt when the printer was off, and it had to re-level the next time it was started. Perhaps redundant, but I feel that by performing a G30 S-3 removes any chance of a nozzle conflict with the bed for any reason, because it's reconfirmed at every print. (out of sight, out of mind). Call it a quality of life convenience, rather than a requirement.
-
@phaedrux I use a mosquito liquid, and often enough, change nozzles, from .25, to .4, to even 1.0mm. Each nozzle is actually different in height enough that it in fact matters. The G30 S-3 has removed my need to deal with z axis calibration every time I swap them, so after having the command work for me based on a lengthy experimentation period (eliminating having to deal with the nozzle height changes), led to me just leaving it in.
-
To repeat myself:
Now there are three instances when setting the Z=0 datum is required:
- after auto-leveling of the bed.
- before creating a height map
- before loading the height map
As you pointed out heating/cooling can have effects. Those effects are why you need to do a G30 as stated above. So any expansion/contraction is compensated for by having the Z=0 datum reflect the current situation.
Let's exaggerate things a bit - imagine that your bed, at printing temps, expands 1mm in thickness compared to being at room temp.
Also imagine you set the Z=0 datum when it is at room temp but you never set it again. When the bed has stabilized to printing temp the distance from the nozzle to the bed is now less then the firmware thinks it is, based on the setting of the Z=0 datum done at room temp.
As to G30 S-3:
That will only do what you think it does if the Z=0 datum was correct at the moment of execution of the G30 S-3. But how can the Z=0 datum be correct if you haven't done a G30 when the Z probe Z trigger height setting was already correct?
IF you had a way (perhaps you do) to set the Z=0 datum independent of the Z probe then you could use G30 S-3 to update the Z probe Z trigger height setting.
Question: When you change a nozzle do you re-run the Z probe calibration routine?
Frederick
-
@fcwilt no need to repeat yourself. It’s becoming a bit snarky. You also keep talking about the three times z=0 datum is required, yet I feel you’re not paying attention to the multitude of times I’ve said I’m doing that. You’re also contradicting yourself, relative to what I’ve already explained I do at each step from turning on my printer to starting to actually print. Specifically, you stated earlier on (which I agree with) that...
“ The center of the bed, on the other hand, is always the same, barring some physical change in the printer, and is independent of the grid settings.”
So probing at startup, as part of my z axis homing process in homez.g accomplishes that, before or after autoleveling, since as you point out, will remain the same geometrically. Sure it may be off from the central point by a bit, but it’s reasonable to say that variance is negligible at best. If the center is as you say, always the same short of some physical change to the printer geometry, then always probing at the middle more than once to set z=0 datum is redundant. Once would suffice to establish the baseline.
As I’ve said, I have zero printing issues (particularly with my first layer) even when the compensation was not active. The initial post was an observation, not a detrimental issue. I feel like we will only circle the drain, so unless you’re telling me (again) I’m doing it wrong with no factual evidence the results are due to the defect you’re asserting, I will just move on from this topic.
Just in case you missed it, I am performing a G30 in the course of the machine running and starting up. That isn’t and hasn’t been an issue, even though a large chunk of your responses are devoted to it (not even sure why you’ve fixated on that at all), even when discussing the use of G30 s-3 somehow became a major concern. This entire thread was initially about G29 and could have concluded much earlier on.
Also to clarify (and go back to the original point), on my Duet3 v1.0 with toolboard v1.1, with and without mesh.g, initiating a G29 alone will not activate mesh compensation, but only when I stipulate G29 S0.