In the end all call the same runZProbe function so it should either never work or always work. With G30 S1 this function is run:
void Printer::measureZProbeHeight(float curHeight) {
#if FEATURE_Z_PROBE
currentPositionSteps[Z_AXIS] = curHeight * axisStepsPerMM[Z_AXIS];
updateCurrentPosition(true);
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps,
currentNonlinearPositionSteps);
#endif
float startHeight = EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0);
moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE, startHeight, IGNORE_COORDINATE,
homingFeedrate[Z_AXIS]);
float zheight = Printer::runZProbe(true, true, Z_PROBE_REPETITIONS, true);
if (zheight == ILLEGAL_Z_PROBE) {
return;
}
float zProbeHeight = EEPROM::zProbeHeight() + startHeight - zheight;
#if EEPROM_MODE != 0 // Com::tZProbeHeight is not declared when EEPROM_MODE is 0
EEPROM::setZProbeHeight(zProbeHeight); // will also report on output
#else
Com::printFLN(PSTR("Z-probe height [mm]:"), zProbeHeight);
#endif
#endif
}
and sets z probe height from given Zx value.
How do you handle the z signals currently when you say:
> G32 works perfectly, but is referenced to the touch probe - entering a value for Z-probe height in the EEPROM does not seem to change the Z zero position.
G32/G30 should use the same sensor so both use also same z probe height. Only the fact that z probe height is not relevant for extruder z difference makes G134 work regardless of that value.