Guys, I really do appreciate that you are trying to educate me about how Mach4 and ESS interact. Despite being a mechanical engineer and having programmed NC mills since 1973, I'm still confused on Mach4's interaction with ESS. Perhaps a numerical example will help me understand...
Let's deal with just one linear axis - the X axis.
Let's deal with a single screen button press to do a 0.001" jog
The speed slider on the jogging screen is set to 1% of maximum velocity
My X axis lead screw has 5 threads per inch
My X axis motor is accurately tuned at 10,000 pulses per rev
My X axis motor is tuned to a maximum velocity of 180 inches per minute (= 3.0 inches per second)
My X axis motor is set for an acceleration of 5 inches/sec-sec
So, 10,000 pulses to the servo generates 0.200" movement on the axis (1/5 inch)
Thus 0.001" movement requires 10,000 * 0.001/0.200 = 50 pulses (This becomes a constant in this example.)
1% of the maximum axis velocity is 0.030 inches per sec.
.001" movement thus requires .001"/.030 ips = .0333 sec (=33.333 milliseconds)
So, ignoring acceleration and deceleration, the 50 pulses will be sent in 33.333 milliseconds.
If the accel/decel happens within the 33.33 ms, then the 50 pulses will be spaced unevenly to accomplish this.
If the accel/decl is outside the uniform time of 33.33 ms, then the 50 pulses will be spaced over a longer than 33.33 ms time slot but again will be spaced unevenly.
If I understand Andrew's description correctly, it seems that Mach4 must be figuring out the accel and decel to predict the axis location at the end of the next time slice.
ESS then determines how many pulses to send and spaces them correctly for the time slice.
The Left Down action for this screen button is "Jog X-" and the Left Up action is "Jog X Off". It is not explained what "Jog X-" is programmed to do.
If it is a "one shot" trigger, then presumably a command is sent to the core to generate 50 pulses on the X- axis. If so, then there seems to be no need for the "Jog X Off".
If it is not a one shot, then it appears possible that holding down the jog button could generate more than one command to jog, hence requiring the "Jog X Off" on button release. I've been repeatedly assured there is no bug in the Mach4 jogging function, so I have to assume there is some way to ensure there is only one set of 50 pulses being commanded and that the "Jog X Off" is merely there as a safety feature.
Andrew has been clear that "there is no such thing as an after run", but there is a (user determined sized) motion buffer which has to empty out. (My buffer remains at the default size of 0.18 sec.) But since ESS only creates pulses in accordance with the Mach4 determined position at the end of the next time slice, it would seem any additional (i.e. unwanted) pulses have been required by the Mach4 calculations. (I hope we all agree on that.)
JoeAverage and Smurph are definite that the unwanted motion is due to some incorrect configuration setting on my machine. I've turned off soft limits, hoping to ensure that potential cause is eliminated. I have yet to try JoeAverage's experiment of increasingly small jog increments, but cannot get my head around his comment "when you want to touch off in incremental mode you effectively have to cycle through your programmed jog steps to find a more suitable number." Would this not just put me back into exactly the same situation of too big a jog increment leading to unwanted motion?
As always, I appreciate the time you are all taking to help me understand.
Brian