Thanks for the suggestions! This application is a fairly conventional center-winder. The winder is driven by a DC motor with a drive that allows speed control (voltage regulation) or torque limiting (current limit). The winder is downstream of a fixed speed drive point, with the dancer in between. The force on the dancer is manually set to give the tension target, and then the winder is controlled to hold the dancer stable in one location. If the dancer moves up or down, it indicates that the actual tension is somewhat higher or lower than the target, and control action should be taken by the winder.
The choice of speed control or torque control has some consequences for the controller design.
With speed control, I can use the speed of the upstream drive as a feed-forward term, and have the regulation of the dancer be in a fine range around that value. This limits the possible damage by running too slow or too fast. Speed control is an integrating process... set the speed too low, and tension will drop all the way to zero. Set the speed too high, and tension will increase until the material breaks or (hopefully) the torque limit is reached first. There is no value of speed I can set accurately enough to be truly in equilibrium.
Integrating processes seems to be a good fit for the velocity form of the PID controller, as opposed to the positional form described above. In the velocity form, the P term is looking at the change in the process variable from one scan to the next, and reacting to that (similar to the D term in the positional PID). The I term reacts to how far from setpoint the input variable is in each successive scan (like the P term in positional PID), but does not have a memory and will not accumulate error. This means the I term must be non-zero if the dancer position is to be maintained, otherwise the loop will only react to changes in dancer position with no absolute reference at all. The D term is looking at the change in input over two successive scans, sort of an acceleration or 2nd derivative term. There is enough noise in my system that it is not appropriate to use.
With torque control, it behaves like a more classic linear system, and an open loop change in the output variable (torque limit) will cause the input variable (dancer position) to settle into a new steady state. However, the benefits of velocity form (bumpless transfer, no integral windup) would push me towards that algorithm, and the fact that there are no setpoint changes (the dancer is always held in the same spot) make the choice between the B and C forms moot. Trying to feed-forward a change in the master drive speed into the winder is a bit more complicated in torque control, but I'm fortunate that my line speeds are slow enough and the winder has low enough inertia that I can get away without a feed forward, and just impose a limit on the max speed to avoid too much jerking during a speed change.
Some time ago, I had done some preliminary attempts at closed loop control, and had concluded that speed control was more responsive and would be a better choice. However, with what I've learned this week, I needed to revisit that choice. Here are some open loop response charts, showing the dancer position (input variable) plotted along with the output variable (speed or torque command):
It turns out that torque changes are slightly faster for the DC drive to process, with deadtime of 130 ms, while speed control changes have a deadtime more like 220 ms. This makes sense with the drive's block diagram, since speed control is the outer loop feeding into a current control inner loop. (Although it isn't pictured, I did check to make sure that open loop changes in either direction resulted in similar deadtimes).
I think that when I was attempting this some time ago without regard for the analog input module data freshness, I had found torque control less effective since the effective PID rate was so much longer than the process lag (2.6X), it was always overshooting or de-tuned so strongly that it would barely respond at all. Even the speed control wasn't as tight as I expected, leading to the troubleshooting earlier this week.
Anyway, with the new analog input module at 11 ms freshness, I can set the PID rate to be at 1/5th to 1/3rd the torque control deadtime, which is much more conducive to tight control. I'm feeling much better about this now than I was a few days ago.