Bill - I'll put my pennyworth in here - I don't know how relevant it is (or, to be fair, how much you already know of it, so forgive me if I repeat a lot you already know), but it might jog you memory.
The machine keeps it's position in Machine Co-ordinates. The only way this cam be altered is by homing you axis, which I think Graham and others have mentioned.To this the machine adds (or subtracts) various offsets for programs, tools etc.but the display is always in the "raw" machine position.
This is no good for machining, and difficult for us to understand, because it contains data we do not need to know, therefore you then jog your machine to the position where you wish to start your program (usually the 0.0.0 position of the program) and then you zero the X Y and Z of the axis in Program Co-ordinates
The two sets of DRO's are the same DRO's, they just change function as you press the machine co-ords button. If you are saying you cannot zero your DRO's. you are probably looking at the Machine Co-ords (which you cannot zero except as in para 2) and not the program co-ords, (which you can). I have altered the display on my machine. The main display shows Program Co-ordinates, and underneath, I have put a small second set of DRO.s which display Machine Co-ordinates, so I do not need to swap between the two.
Once you have zeroed the program co-ords, the "offset" between the machine position and the program position is recorded. The default offset is G54
, and if you check the fixtures list (Config/fixtures), you will find that G54 now shows the difference between the program co-ords and the machine co-ords. If you are to use this offset in a program, then you should select a different offset, before you zero the program co-ords DRO's - e.g. G56. If you then enter this in your program at the begining, the machine will always to to the correct start point for that program.
E.G. G56
G0 X0 Y0 Z0
The way to start is then "home the machine" which sets the machine co-ords at their zero position, and then run the program. The G56 runs in the correct offset and the G0 move moves the axis to the correct 0.0.0 position for that program.
(The co-ordinates shown in your program are always "Program Co-ordinates" unles they are particularly specified to be absolute co-ordinates, for example, tool change positions for automatic tool changers)
In this way, each program can have it's correct offset programmed in (there are 256 to choose from). If for instance, you use some form of workpiece holder, then one offset might suffice for several different programs.
Running the program without homing will not make any difference (providing the home position has not slipped) since the last offset the machine enters is the one it follows.