Hey, Big John, what is your duty cycle like, and what PLC hardware are you working with?
I have done a poor man's servo very much like you describe, and I was able to maintain position accuracy within 0.1" using a 1 HP squirrel cage motor driven by an AB160 analog drive which was controlled by a PLC5 bipolar analog voltage reference, PLC triggered enable relay, and feedback was from an AMCI resolver for a total of 1024 counts for the screw which was provided about 18 inches of usable travel.
I had about 1 count per .02 inches, and could easily and quickly get within 5 counts of the target by simply ramping down the speed reference as the distance to go approached zero.
I calculated distance_to_go and divided that by a tunable value I called decel_distance. That would give a floting point value from 0.0 to much greater than 1.0, but I clamped it at 1, and multiplied it times my software MAX_SPEED setting.
So basically I was using proportional control. My max speed limit and target position was controlled by the main machine sequencer. The analog reference to the drive was calculated using those figures and the tunable decel_distance setting and min_speed setting. I had to add the min_speed setting to prevent the screw from stalling out at low speeds when the max speed called for was low, and the load on the stitchers was much greater. I eventually made the decel distance a calculated value based on max speed and did away with the min speed offset.
I had to allow a tolerance of 10 counts of resolution to guarantee that it would not overshoot, but would move fast enough not to impact the cycle rate of the whole machine.
The math was simple, calculate the distance to go, divide that by decel distance, multiply that times max_speed, add the min speed offset, clamp the result to within +/-max_speed.
As your device approaches the target position, the speed reference will decrease toward zero. If overshoots, the speed reference will become negative, driving the screw directly toward the target. I set the accel time in my drive to 0.5 seconds and the decel time to 0.2 seconds. I tried 0.1 but the performance actually decreased when I tried that. It seemed to work better with 0.2 seconds in those crude little V/Hz drives.
Then I just forced on the enable relay and punched in some target positions and tweaked my decel distance value and my min and max speeds to get it tuned where I wanted.
Also, there were software overtravel limits which would shut it off before I could run out of leadscrew. Those were very handy when I was figuring out the direction and polarity during the upgrades.
All in all, it worked great. the same settings worked on all 36 of the machines I had set up this way.
Later, I even adapted the code to handle the multiple turn transfer rollers on the same tire building machine using the same drive/motor/feedback device.
It was very reliable and easy to understand, but it replaced a bunch of obsolete standalone PLS type hardware based on a grey-code encoder and a bunch of thumbwheel settings on a Sequential (brand) relay board.
Hardly the same as replacing a servo positioner, but very cost effective.
I only had to move these tire sticher screws 5 times per minute at about 1-3 inches per second (1500 motor RPM) and stop them within 1/8" to meet spec.
That's why I ask about duty cycle. If you are moving a high intertia load back and forth every 5 seconds, you may run into problems. A light load, relative to the motor torque, or only few times a minute, though is likely easy for a modern drive.