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.:
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.
-
Setting the Z=0 datum once may not be sufficient because it can change as things heat up/cool down.
Thus it is best to do it at the times I have stated.
As to G29 not working I don't understand how that is possible since the hardware being used should make no different, only the firmware.
But that is assuming that the firmware builds are the same for each platform. That is not something I can determine.
-
This post is deleted! -
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
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.
I think this is only working out for you by accident. You can't calibrate the trigger height unless you're the one providing an accurate Z0 point manually. That's where you would jog the nozzle to touch the bed and send G92 Z0 to set the known position and then measure the trigger height either with G30 S-1 (report trigger height) or G30 S-3 (set the current trigger height to what it measures).
Just doing G30 S-3 after a G30 will only give you the same trigger height you had when you initially measured it and set it in G31 Z.
So it's not hurting, but it's not really doing anything.
The intention of G30 S-3 was for use in macros where you would have prompts to set Z0 and then to the trigger height measurement and have it applied automatically, you could also add M500 P31 to save the resulting G31 Z trigger height to config override to be reloaded at each power up.
Regardless, the main point of the thread was around the functioning of G29 and G29 S0.
Can you confirm again for me whether sending G29 with mesh.g not present functions to probe the bed and activate the mesh?
-
@arnold_r_clark said in I have found that G29 is NOT the same as G29 S0.:
Very Interesting, can you please provide a link to the documentation which provides citation of that fact, I would like to research this further.
From the Duet Gcode documentation:
If G29 is commanded with no S parameter, then file sys/mesh.g is run if it exists, otherwise the command behaves like G29 S0.
I know this is the case on my Duet hardware for firmware 3.2.2 and 3.3.0 with no SBC connected.
Frederick
-
@fcwilt Thanks for testing.
-
@phaedrux said in I have found that G29 is NOT the same as G29 S0.:
@fcwilt Thanks for testing.
I suppose it is possible that the firmware build for hardware other than mine (Duet 2 WiFi, Duet 3 Mini 5+, Duet 3 MB6HC) might have a bug but of course I cannot test that.
What I haven't tested is what happens if you execute a G29 inside mesh.g - that could be interesting.
I use mesh.g for my printer but inside is a G29 S0.
Frederick
-
This post is deleted! -
@arnold_r_clark said in I have found that G29 is NOT the same as G29 S0.:
Thank you for the information.
So from the documentation the key word is "IF" as IF no mesh.g file exists then G29 (no additional parameter) automatically morphs into G29 S0 .
Correct.
And if you have a mesh.g file without a G29 S0 (create height map) or a G29 S1 (load height map) then executing G29 will run the file but mesh compensation will not be enabled.
Frederick
-
@phaedrux I should note I am using an SBC with my duet3. Perhaps that’s the one element that’s making a difference in the results.
-
@nuramori said in I have found that G29 is NOT the same as G29 S0.:
@phaedrux I should note I am using an SBC with my duet3. Perhaps that’s the one element that’s making a difference in the results.
Could certainly be the case.
-
@nuramori Thanks for the report, I am looking into it.