I have a part for cylindrical grinding that calls for the grinder to touch off on a shoulder (which will be vary several thousandths in either direction from part to part) and then remove 0.002-0.003" of stock from the shoulder before proceeding with grinding the rest of the part. Is there a way that I can program the cycle to start off the shoulder and then feed in until it touches the shoulder (we'd program a limit to how far it would travel before stopping), at which point the operator would stop the motion and give some kind of input to reset the z-position and then resume the cycle?

We're going to be running ~20,000 parts, so I'm obviously trying to find a way to do this within a single program, rather than each part effectively being a new setup.