Honeywell Spyder PID tuning
Can someone explain the PID for a Honeywell Spyder controller. I am constantly having trouble getting them to run slow and smooth. Any help is greatly appreciated.
This is what I do. I only use PI. I start out with no integral and a high throttling range. If it settles out I cut in half and wait to see if it settles out. I continue this process until it is not stable and then I raise slowly from that point until it is stable. Then I set my integral.
What value do you start with setting your integral? I know some typically use a percentage of the throttling range, not sure if that is correct?
Originally Posted by lwarren
Thanks for sharing!
It just depends on what my PID is controlling. On something like space temp control I would have a TR of around 3-5 and a high Integral around 2500. For something like CFM control I usually start by doubling the CFM setpoint for the TR and use a lower Integral between 30 -60 sec.
I bring my PID output into a ratio and set outputs to 0% to 100% and use nci's on the input high and low (PID output) then you can write to the ratio input setpoints also do same for T.R. and Integral and don't have to continually download and wait. Adjust setpoints until device behaves.
Here is some helpful info on Spyder PIDs from John Hutchey. Note that he says to never reset or use a ratio on the output of the PID.
There is a lot of misconception about the Spyder’s PID loop, so let me try to set everyone straight:
The TR and 0 thru 100% output behaves just like the PID in the Honeywell XL15C or XL5000 plant controllers. In other words, with no bias in a direct acting configuration when the sensor equals the setpoint the output is zero. When the sensor equals the setpoint plus TR the output is 100. No rescaling through a ratio is required.
In our legacy PIDs the output is clamped at 0 and 100. But with Spyder the output can go from -200 to +200 if the sensor value is outside of the control range. The concept of “outside of the control range” is very important. Integral is not applicable to output values below zero or above 100. The only way the output is going to get there is if your sensor value is outside of the TR.
Here are the guidelines that I discuss in class:
Do not under any circumstance reset the -200/+200 to 0/100 through a ratio or reset block. Integral is only working across the 0-100% portion of the output. You will only have decent control when in that “sweet spot”. Once you get outside of that range you only have proportional control.
Connect the PID output directly to a ModulatingOutput. The MO will operate across the 0-100% portion of the input. Values below zero equal zero volts out, and values above 100 equal 10 volts out.
If you want to display a MO configured as an analog out on a graphic, use the corresponding nvoIO point. The nvoIO will indicate 0-100%. If you are using a floating output then you will need to add a limit block (configured for 0/100% limiting) between the PID and a SoftwareOutput block.
If you want to link the PID to a SoftwareOutput for linking to another Lon device such as a VFD, then an intermediate Limit block is required.
If you want to use the PID for both heating and cooling, treat it just like Lonspec or CARE. Set up a couple of ratio blocks and use the PID’s 0-50% output to control the heating valve and the PID’s 51-100% output to control the cooling valve.
The TR applies to the 0-100% range of the PID. You don’t need to multiply or divide by four and try to figure in the -200/+200 range. With no bias, here’s what you get:
Sensor=Setpoint, Output = 0%
Sensor=Setpoint+TR, Output = 100%
Sensor=Setpoint+(2*TR), Output = 200%
Sensor=Setpoint-TR, Output= -100%
Sensor=Setpoint-(2*TR), Output= -200%
If you are using the PID in a space temperature control application, look to the XL10s or T7350 for good starting points on the TR and Int values. The Spyder firmware is very similar.
Bottom line, the ONLY time you should be using PID output values below zero or above 100% is if you using the value for terminal load.
If you want a “regular” PID, connect the PID to a limit block, stick them in a macro, and forget that the -200/+200 part even exists.
I think this is John talking to fast, He never does that right,. LOL
Here is why I say.
If you want to use the PID for both heating and cooling, treat it just like Lonspec or CARE. Set up a couple of ratio blocks and use the PIDs 0-50% output to control the heating valve and the PIDs 51-100% output to control the cooling valve.
then you would be in full heat at Setpoint and wouldn't get to start cooling until sensor = setpoint + (0.5*TR).
Sensor=Setpoint, Output = 0%
then I would reset my outputs to be 0 trough -100 = 0 through 100 heating and 0 through 100 = cooling. But actually I would do more like -25 through -100. only because I don't like going straight cool heat.
Sensor=Setpoint, Output = 0%, Sensor=Setpoint+TR, Output = 100%, Sensor=Setpoint-TR, Output= -100%
I usually have better luck running two loops. one heat one cool. I have different TR and Igains for both. I find I need to run my heating much slower or I over shoot. And yes always use NCIs for TR and Igain, just remember when you're done tuning do an upload to wire sheet to save your values.
Just to clarify, when I said to note that he says never to use a reset or ratio on the PID he is referring to reseting the full output -200 to +200 to 0-100%