PID Algorithms old vs new

Hi all. Just getting back into Opto22.
Years ago I used PIDs for positioning some axes. I was fairly new to PAC control and using PIDs and the only algorithm I could get to work was the Ideal ISA selection. I programmed that system with PAC Control 9.3c. I noticed the newer versions have an ISA (obsolete) and a new ISA to choose from. When I select the new ISA Algorithm, it doesn’t work the same as the old one. I know in the documentation (old and new) that I have seen it looks like the equation is the same. Can anyone tell me what the difference is between the ISA (obsolete) and the revised one? Are the formulas available on each?


That is going back a bit… I had to do a quick Google search to dig up the following…

We made the change around July 2016.
You can read the KB here; Opto22 - KB82058

The usual manuals have the formulas (Page 63).

Here is the OptoNews announcement of the change - it has a few more links if you want to dig any more.

The tuning parameters for ISA obsolete, ISA and Velocity C can all be interchanged without changing the tuning of the loop. See PID Algorithm Question

In my experience the Velocity C is the easiest to work with since the tuning parameters and the setpoint can be modified while the loop is in auto without a bump in the output. You can also change the output of the Velocity C while in auto and it will operate from that value, whereas the other algorithms you have to switch to manual, change the output, wait a PID scan interval, then switch back to auto for it to “stick”.

The only time to avoid using Velocity C is if you are using the Feed Forward feature, which does not work correctly on Velocity C. I would just work the feed forward into my own logic rather than deal with the issues of the other algorithms though.

Edit: If you use ISA with a D term and your output can become saturated (reach 0% or 100%), be aware that the output can become stuck there for a while screwing up your process. This happens when a slight change or noise on the input causes the TermD to push the output to saturation which causes the algorithm to recalculate the Integral. I found it can take a significant amount of error before the output will move from saturation. The Velocity C doesn’t have this issue. This was the original issue that sold me on the Velocity C algorithm and I haven’t looked back. See PID derivative at saturation

1 Like

If the equation didn’t change for the Obsolete vs the new one, I wonder why it doesn’t work the same. I would love to see the code written behind the scenes of the each PID algorithm. Like match them up line for line of code. It’s really not that big of a deal because I can still use the Obsolete version. I am really curious though.
@philip I think I tried using the Velocity C (maybe it was Velocity B) and it didn’t work right for a feedback axis control. I’ll set up a test center with a servo drive and motor and I’ll see if I can make it work.

The formulas between the obsolete and the new are the same (according to the old and new documentation at least) - I think the changes were internal to host value inputs. I’ve changed older projects from the ISA obsolete to the current ISA (and to velocity b) and the tuning all remained the same.

The bulk of my experience with PID loops are with temperature, pressure and flow, so there may be something that you are doing that is different than what I have experience with. I would be interested in knowing how you are configuring the loops and any logic you may be performing on them in your strategy.

Maybe it has everything to do with how the obsolete version uses/interprets the Host Input. The input on my configuration is the Host and not an I/O point. I do not have my project in front of me, but I know one of the axes had a -12 for the Gain, 0 for the Tune I, 2500 for the Tune D and Scan Rate of .01. I was messing with it last night. I’ll get back to you with a screen shot.
It’s kind of strange how I replicated the formula of the ISA in opto script and ran it like a simulator and my Tune D had to be set low at .1 and my Gain had to be real high (3000) for it to work. If I took the gain too high the output oscillated. Hence the reason I was curious how the formulas are set up in the first place.