Lindsay - does your machine have "home" switches fitted, and do you "home" your machine at the beginning of each session.
Machine Co-ordinates are used by Mach to keep track of it's position, it includes in it any offsets for programs, tools, etc. It is for mach - and when you look at Machine Co-ordinates, it is difficult (sometimes) to equate them with the program we are running. The only way to alter these Machine Co-ordinates is to "Home" the machine by pressing "RefAllHome" this moves all axis, in turn, to their respective home switch, and then (if "auto zero" is set) it zeros the Machine Co-ordinates.
Machine Co-ordinates are viewed by pressing the "Machine Co-ords" buttong, the surround lights, or underlines, and you are now viewing Machine Co-ordinates.
If you do not have home switches fitted, then you can zero this in any position by pressing the RefAllHome button.
Mach will now keep it's position relative to its last zero mark, in Machine Co-ordinates.
This position will be no use to normal work on the machine, and therefore you should press the Machine Co-ords button. The surround will go out, and the DRO's will now show Program Co-ordinates. These are the ones you want to use when machining.
Jog you machine to the 0.0.0. position of the program and then press ZeroX, ZeroY and ZeroZ. This will zero the Program Co-ords display, and you are then in a position to start your program. An offset has been entered to tell Mach the difference between the two displays.
Provided your program has no G54 - G59P*** commands in it, which changes the "offsets" (i.e. the relationship between the Machine Co-ordinates and the Program Co-ordinates) then your program should run as you expected.