...
In the case of the A axis runaway, I had switched to continuous jogging and the motion continued after the button had been released. Not just a few steps, but inches of movement as I tried to stop it. If this was a buffer finishing stored steps, there must have been several thousand steps accumulated and not flushed on button release.
I am still baffled about how to avoid this problem occurring again.
When jogging in continuous mode, the rules of acceleration and decelration are followed. If you have a slow acceleration - or a high max velocity - it will take time for you to get up to speed. Once you get up to speed, it will take the same amount of time to decelerate as it did to accelerate, and the same amount of distance to decelerate as it did to accelerate once you let go of the button. This means that there will be a bunch of deceleration motion produced once you let go of the jog button. This is normal and what users expect and desire, because the alternative is to go from full speed to a dead stop with a nasty clunk that will start to tear your equipment apart.
Motion in the is consumed and destroyed, and replaced by zero motion commands when nothing is being commanded by a user or GCode program. If communications are lost the buffer empties out and then the SmoothStepper just stops dead. There is no such problem as a buffer "run on" with the SmoothStepper, because the buffer will be drained in less than 0.5 seconds (by default less than 0.18 seconds) and then all motion will halt unless new motion is commanded by the user or a GCode program.
My next question is do you have your motor tuning configured correctly? If you zero the X axis and then go to the MDI window and issue a G01 X1.0 F10 command, does the X axis move exactly 1 inch (or mm) in roughly a little over 6 seconds? Ho about all the other axes? If it goes a lot farther than the 1 unit, or takes a lot longer than 6 seconds there are issues with the motor tuning.
Andrew