Control Logix Scaling

dbh6

Lifetime Supporting Member
Join Date
Jan 2013
Location
Central, NJ
Posts
552
Hello Everyone,

so i've gotten to the point where i'm programming a cooling tower such that the fans speed (0-60)Hz is going to be controlled by temperature, such that if the temperature is high the fan will run faster say at 100% and if the temperature is low the fan speed will be low etc. Here is how i plan on programming this. Method 1: Use a linear relationship such that as the temp increases the speed increases, or Method 2: have manual set points for the speed at a given low temperature, medium temperature, and high temperature.

Ex.Using Method 1: Say the range is between 100degF to 212degf, then if the temp is less than or equal to 100degF fan speed is 0hz, if temp is greater than or equal to 212F fan is 60hz, and any value between 100-212 we will use a linear relationship Y=mx+b where Y= Measured temperature, m= span (212-100=112), x= Hz value, and b= lower range value = 100.


Im using a control logix PLC, so i just wanted your opinion if both method 1 can work, also any other recommendations are appreciated. I know they are numerous ways of doing this, just want to verify what im doing is correct.
 
I've done a a few cooling towers. The most recent one used PID. The prior one used preset speeds for increasing deviation from set point. The first one had two fans and uses staging control to select no fans, one fan, or both fans. All the methods performed well. Cooling towers are very forgiving.

100 to 212 is way to high a range. You want to cool water, not boil it. Determine what your yearly highest wet bulb temperature is from meteorological charts you can find on the web. A cooling tower can typically have a seven degree approach. So if your wet bulb temperature is 74F then your set point can be no lower than 81F.


If you want to use scaling, take your deviation from set point, decide how much deviation you want to produce full speed and zero speed, and scale that deviation to 0 to 100% fan speed. Then update the speed command once a minute. Don't update continuously or your drives will be constantly hunting. Lets say you want a +/- 5 degree control. Set deviation = actual - set point. Now scale -5 to +5 to 0 to 100%. You can use a SCP AOI to make this easier. One problem this method is prone to is steady state error - you might have a temperature two degrees above set point that doesn't correct because your system is at equilibrium. A PID is one way around that. If you understand PID loops then I recommend that approach.


If you decide to instead divide the control into three or four preset speeds then divide the control band. Let's say you are using four presets. As temperature deviation increases you step up through the speeds. You can also use timers so that if you are stuck at steady state in one stage with no drop in temperature you advance to the next stage. A you drop below setpont you start staging down. With cooling towers stage up and down gradually over a couple of minutes. Staging up and down through three or four stages is a vey common way of controlling cooling towers.

Make sure you include a freezestat to protect your system from making ice in the winter.

Why control logix? Even a micrologix 1100 is overkill for a cooling tower but it will only cost you a few hundred bucks.
 
Last edited:
@TConnolly first of thanks for you reply, i appreciate the time you took for this thorough approach:geek:. Now to elaborate, reason why im using a control logix is because the project is not only controlling a cooling tower, but other devices as well, ex device net, ethernet, modbus, pumps, etc and it was the customers request.

Now that you explained to me what the "yearly highest wet bulb temperature" is which i didn't even know beforeo_O, i can now control the cooling based on a set point.

I do in fact know how to use PID's so i might take that approach because as you mentioned at steady state i want to avoid those overshoots or the scaling method you had described, and the last method where we use 3 or 4 preset speed, i just might throw it in there as an option.

Lastly my question to you is, when determining "yearly highest wet bulb temperature" i briefly looked online at this site http://www.theweatherprediction.com/habyhints/170/ but don't know how to calculate the dewpoint? if you know a method to calculate it let me know, and you also stated "yearly keyword "Yearly" highest wet bulb temperature" how do you calculate that??

And finally once i have my yearly wet bulb temperature, and say im using a PID how will they compensate when it gets really cold in the winter? getting Hot in the summer is fine as the cooling towers "Cool" to the setpoint, but in the winter say it gets below freezing then what happens?

Looking forward for to your reply:beerchug:
 
Wetbulb is not easily calculated, and even the calculations need to be done with psychrometric values obtained from a chart, so its easiest to just find it in published charts.

I have a chart of high wet bulb temperatures for selected US cities. For Newark it is 75. For Trenton it is 78. So it looks like 85F is probably an achievable set point.

A word of caution about the charts though: they are very general. We are in a high desert so our published wet bulb is a very fortunate 65F. However we would always struggle in late summer to make 75 degree water, much less the 72 the charts said we should be able to make because we had excess capacity. When we got our own psychrometer and started tracking wet bulb temperature ourselves we found that the wet bulb right at the cooling towers was as high as 70F, which explained why we couldn't quite reach 75F on our water. Naturally this time of year the wet bulb is very low and its easy to make cold water, but you need to plan for late summer.

BTW, if you google "Sayreville, NJ wet bulb" you'll find this thread already right up near the top. 🍺

Here is a link that shows your current wet bulb but it doesn't show historical charts but it may come in handy.
http://coolwx.com/cgi-bin/getanalysis.cgi?region=NJ&time=current&field=bulb

OK, if you use a PID then I suggest you decide what control band you want to use. I actually have a parameter that I called proportional band that can be adjusted on a Redlion G3 HMI attached to the control system. This proportional band is used to calculate a proportional gain that is used by the PID. For example, if I want 100% fan speed when temperature is 5F above setpoint then I use 5 and compute a gain that will produce a pid output of 100% if there is no integral term. Then I put that value as the gain. The formula you use will depend on the PV range you program into the PID. Then I choose a time period over which I want to integrate up to 100% if I have a steady state error. This is usually a fairly long time, and the larger the volume of water in the system the longer time you'll want. I happened to use 25 minutes on the last one I did and it worked very well. Use that time to determine your integral gain.

In the winter time as you cool below setpoint the fans will ramp down to zero speed. What I do is if the the temperature drops to setpoint - 2X proportional band then I start a timer. If it stays there for fifteen minutes then I shut off the tower feed pump. The tower feed pump then stays off until the PID output > 0. You'll need to watch your system in cold weather and adjust the shutdown timer as needed. Some small tower systems may have only one pump feeding process and towers and in that case you won't be able to shut down the pump.

I program a freezestat where if the water temperature drops too low then the tower feed pump and tower fans are shut down. The freezestat is a last resort intended to protect the pump. Some systems in some locations don't need that because they will never make ice. In NJ you can probably make ice a few days a year if your tower is on but you aren't dumping any heat into it. Here in the rocky mountains we make ice if we are not careful. Ice builds up on the diffusers in the tower, then breaks off and gets sucked into the pump. Pumps love it when that happens :whistle:.
 
@TConnolly thank you for the detailed information, i have a meeting with the customer on Friday, and will propose all this to them, so they will tell me which options they prefer. Once again thanks on your time and effort, i will let you know how it goes
 
More on setting up a cooling tower with a PID loop.

All the towers I've done were done with MicroLogix PLCs. I tested a similar setup in a ControlLogix just now. In CLX I normally use a PIDE but I assumed that you were using the ControlLogix ladder version of the PID and based this on that assumption.

I created a tag TowerFanSpeed_PID of type PID

Configure the PID to use the dependent gains equation (this setup is designed for the dependent gains form). Control Action is PV-SP. Derivative action on Error (doesn't matter since derivative gain is set to zero).

Pre-scale the actual tower temperature (PV) to engineering units before giving it to the TowerFanSpeed_PID process variable.

Then in the PID configuration, on the scaling tab, scale input and EU the same. For simplicity I just used unscaled min/max of 0-100 and EU min/max of 0-100 and CV min/max of 0 to 100 for 0 to 100% of fan speed.

Next I defined two tags: PropBand, Real, and RepeatMinutes, Real.

I decided that I wanted PropBand to be in the range where 1 <= PropBand <= 10
LES PropBand 1.0 MOV 1.0 PropBand.
GRT PropBand 10.0 MOV 10.0 PropBand


PropBand represents the amount of deviation from setpoint that will produce a 100% change in fan speed, ie, if my SP is 85 and water temperature is 88 and I want my fans on full speed, then PropBand = 3.

Now I can compute a proportional gain (Kc). Because PropBand is adjustable by the maintenance operator, I have the PLC program compute the gain. Since I configured the PID CV to output 100 at 100%, the gain is simply 100/PropBand.
So after range checking PropBand (PropBand can't be Zero or you'll get a fault) I have this
DIV 100.0 PropBand TowerFanSpeed_PIDE.KP

The other tag, RepeatMinutes is how fast I want the controller to repeat the proportional action. If its too short a time then the fan drives will be continually hunting. If its too long then you don't correct steady state error and proportional action ends up doing all the work with larger temperature swings. But since a tower system typically has a lot of water and things don't change fast there is a lot of forgiveness in the control.
In my setup RepeatMinutes is operator adjustable from the HMI and I decided that 0<=RepeatMinutes<=60.
LES RepeatMinutes 0 MOV 0 RepeatMinutes
GRT RepeatMinutes 60.0 MOV 60.0 RepeatMinutes
MOV RepeatMinutes TowerFanSpeed_PID.KI


Then I range check the setpoint and move it to the TowerFanSpeed_PID.
MOV WaterTemperatureSetpoint TowerFanSpeed_PID.SP

Then I call the PID. (This incidentally should all be in a periodic task that doesn't need to be especially fast)
PID TowerFanSpeed_PID WaterTemperature 0 FanSpeedCommand 0 0 0.

Finally, scale FanSpeedCommand to your analog output.

The fans might not be worth running at super slow speed so you'll probably have a minimum speed setting on the drive. You'll need some extra code to watch FanSpeedCommand to turn the drive off and stop spinning the fans when it is below some low threshold and turn the drive back on when CV reaches some value. Build in some hystersis and timers here so that you aren't constantly toggling the fans on/off when you are near the threshold. You can be generous here - like I said earlier, cooling towers are very forgiving with the control scheme.

You might be wondering why I set it up with a proportional band and repeat minutes parameter at the HMI instead of just using straight gains. Its mainly because the facilities staff taking care of the tower are not PID experts. But they can understand that a Proportional band of 3 means that if the temperature is more than three degrees above setpoint then we want the fans on full speed and if it is three degrees below setpoint then we want the fans off, and that in between we will vary how fast the fans are, if its just hovering one degree above and not changing much then we will take a long time to ramp up to full speed, and it will cool down before it gets to full speed so it will ramp back down.

You can test this configuration to see how it works by setting up a dummy process variable. Make your SP 80, then try a prop band of 5. Make the RepeatMinutes zero to halt integral action. Your gain will be 20. Output at PV=81 will be 20%, output at PV=82 will be 40%, etc. Then try it with a prop band of 3. Now reset PV to 80. Make Propband=5. Set RepeatMinutes to 5 minutes. Make PV=82.5. Output will jump to 50% and then ramp up the remaining 50% to 100% over 5 minutes, showing it took five minutes to repeat the proportional action.
 
Last edited:
More on setting up a cooling tower with a PID loop.

Golden Nugget.

I will be coming back for this soon. I will be writing code for a NH3 cooling tower to run 6 fan VFDs with pressure as the process variable to keep under control. I also have pumps (i think there are five) on motor starters to mix into the summer and winter mode controls they are used to having.
 
@ Tconnolly thank you sire once again, you pretty much answered a lot of the question that i had in mind, can't wait to write the logic for this, although i must say your description is very detailed, can't appreciate your help enough on this, ill let you know how it goes, ill write the code on friday and if i have questions ill be sure to make a return here. Thanks once again.
 
Don't know if you noticed or not, there is an example program attached to my previous post. Its in V20 of Logix5000. Let me know if you need to roll it back to a previous version to open it.
 
Hello once again Tconnolly, i just thought i would let you know what the customer finally decided. Their are two cooling towers both which are going to be controller by the same temperature. I explained to them the many different ways we could program it into the plc, but they opted for the option where they would like to have 2 set point values that they can set for low and high temperatures and if the temperature reading is in between the low and high temps, then the speed will adjust linearly. Should be straight forward to program such that for example if the temp is below the low temp set point have the cooling towers off meaning 0hz, if temperature is higher than the high temp set point have the cooling tower on meaning 60hz, and finally if the temp is in between the the low and high setpoint use y=mx+b. let me know what you think if you have time. Once again thanks for your help
 
OK, that is a simple way to control it and if the customer is happy then that is great. You'll need a couple of other control points.

  1. I personally wouldn't run fans at super slow speeds so I would also have a lower limit for fan speed and then a fan off temperature. Maybe shut fans off when temperature is lower setpoint - 2 and turn them back on at minimum speed when temperature = lower setpoint.
  2. You'll need a tower feed pump shutdown temperature.



I modified the previous program and attached it to give you an idea. I used the SCP add on instruction to scale the fan speed. You can use a CPT if you want, however, IMO the SCP add on is more visual.


After you get this done please come back and share with the forum if you can so that others can benefit.
 
Thanks once again, as always your recommendations are much appreciate, and yes once i'm done with it i will definitely come back here, to update what i've done thanks once again.
 
@Tconnolly i had some time today to go through the logic for the cooling tower based on low and high setpoints. First off, thanks for the well documented program, and your knowledge on the subject as well, truly appreciate it. i just had a few questions for clarification.

1. When yo did the scaling, for the fan speed you scaled from 10% to 100%, why not from 0% to 100%? is this because, like you mentioned you wanted to have a lower limit for fan speed and then a fan off temperature, the fan off temperature logic being handled when the Tower water temperature is < Lower setpoint - 2, and when that happens the FanDriveEnableOut will turn off? if that's the case then that's fine, but if i misinterpreted that please correct me.

2. As you stated "Even without fans, cooling towers with water flowing in them can continue to cool below setpoint when the weather is cold and the heat load is light. The tower feed pump will shut down if the water temperature drops too low and stays low for a long time"

Thanks for that as i would have probably forgot to consider that, but my questions is, in your logic to turn OFF the tower feed pump permissive, you are basing it on the towerfeedshutTimer.dn bit and the Freeze stat bit. When the towerfeedshuttimer.dn (which is after an hour) is set that will turn of the tower feed pump permissive which is fine, but you also put the freeze stat in serieson the rung with the towerfeedshuttimer.dn bit, so if any of those two energize it will turn off the tower feed pump permissive. So i was wondering why you would need the freeze stat?, and also the freeze stat is set when the tower water temperature is less than 60, if that's the case then the tower feed pump permissive is going to be off primarily when your cooling , is it a typo such that you mean't to say if the tower water temperature < lower setpoint -5 to set the freeze stat?

3. And lastly, i wanted to know why i would need the freeze stat. A freeze stat is a temperature sensing device for HVAC that monitors a heat exchanger to prevent its coils from freezing. That's the definition i got from Wikipedia, and since this is only a cooling tower and its purpose is for cooling only then why should i worry about a heat exchangers coils from freezing, are their even any heat exchangers???

Once again this is my first time working on cooling towers so forgive me for all the questions,i just want to be well informed on this. Thanks
 
I also forgot to mention, that you are using this in a periodic task. Would it be ok to use in a continuous task?
 

Similar Topics

Im having trouble scaling analog on control logix? Can someone explain how to scale analog on control logix analog module 1756-IF4FXOF2F?
Replies
3
Views
3,163
I am having trouble with getting no control of my analog output signal. I am using the SCL function block to control my analog output. The logic...
Replies
11
Views
240
hi all, i have a plc i need to get info from for a site im working on: I have a 1764 Micro Logix 1500 LSP Series C (See Attached Image) im...
Replies
2
Views
373
I currently have a weird issue involving Ethernet IP communication between a ABB CI873 (EthernetIP Module) and a 1756-L83ES. The Layout is as...
Replies
8
Views
745
Possible for two processors in same rack to have separate motion groups across a single Kinetix Rack using a single EN3TR? One 6500/5700 rack, 8...
Replies
1
Views
420
Back
Top Bottom