Craig
I too have experienced this sort of behaviour. It begs the question when does Idle mean Idle? One answer, as you have found, is when it is followed by Enable.
I have a tool height measuring function, based on the mcProbing module (though I have totally restructured/rewritten the first 2000 lines or so) that lifts the tool, sends it over the sensor, does a 2 strike G31.1 probe down to the sensor , then lifts and returns the tool to its starting position. If it succeeds, it sets the Fixture offset or Tool table entry (user has the option) for length compensation.
On my office PC, it runs perfectly in the SIM, though of course the probe strike does not occur. It runs from a screen button push either from an Idle state or when code has been halted in the File Run state by an M6 macro. (The macro uses SignalWait().)) I am not using coroutines as the GUI does not appear to freeze. With a coroutine approach, I found that the code ran fine normally, but froze the screen when run during the M6 hold.
On my CSMIO system, the same code lifts the tool and moves it over the sensor, but then fails with that infuriating errorMERROR_NOT_NOW. As yet, I haven't drilled down further to see what's happening., but it's on my list for attention.
Allan