The application we are running is for cutting shapes from a bulk material in a produciton environment using a specially design ed cylindrical blade, and is not a not a normal CNC machineing application. The script calculates variables that are then used to position G81 drilling cycles. This is done based on the operator requested combination of the four sizes of bores, and any combination must be available to the operator. This means there is no way round issueing GCode commands from the VB. None of the canned drilling commands that are constructed using VB scripts have been a problem at all, it's all been in the setup and recovery routines, where I know now I'd have been much better loading a small gcode file !
The machine refernces all axes to switches at the beginning of a run, and the operator will not be able to proceed until this is compelete.
Adding a sleep 500 after the G59 command has made the G0 G53 totally reliable now. I did not expect to have to worry about the synch when issueing GCode setup commands like this - now I know better !
Tim