You are not registered yet. Please click here to register!


 
 
plc storereviewsdownloads
This board is for PLC Related Q&A ONLY. Please DON'T use it for advertising, etc.
 
Try our online PLC Simulator- FREE.  Click here now to try it.

---------->>>>>Get FREE PLC Programming Tips

New Here? Please read this important info!!!


Go Back   PLCS.net - Interactive Q & A > PLCS.net - Interactive Q & A > LIVE PLC Questions And Answers

PLC training tools sale

Reply
 
Thread Tools Display Modes
Old March 30th, 2016, 07:21 PM   #1
HeroControlsInc
Member
United States

HeroControlsInc is offline
 
Join Date: Mar 2016
Location: Chicago, Il
Posts: 5
8 boiler lead lag system HELPPP plz !!

Hi all,

I'm new to plctalk (this is my first post actually ). Anyway I am trying to program a micrologix 1400 plc using RS logix 500 . The scope of the project is to have 8 boilers available to run. 2 are the leads , ( minimum of 2 on at all times ) and there are 6 available lags to be called on in case any one of the 2 leads fall under a setpoint ( lag setpoint cycle on ) for x amount of minutes, the lags will cycle off as necessary when they reach a setpoint ( lag setpoint cycle off ) . Now here is the kicker All 8 boilers need to fault sequence as well all the while acting as leads and lags.
lead lag logic looks as follows,if lead 1 or lead 2 fall under setpoint, call on lag 1, if lag 1 falls under setpoint , call on lag 2 ..and so on and so on.
Iv'e had a couple of gos at it, but to no result. It seems like I keep chasing my tail, every time I get close to a solution it all falls apart . Any help would be greatly appreciate it !!

Cheers !!
  Reply With Quote
Old March 30th, 2016, 08:31 PM   #2
Steve Bailey
Lifetime Supporting Member + Moderator
United States

Steve Bailey is online now
 
Steve Bailey's Avatar
 
Join Date: Apr 2002
Location: The boondocks of Western Massachusetts USA
Posts: 6,401
Two basic approaches:
1. One boiler (the modulating boiler) varies its firing rate in response to changes in demand. When the modulating boiler reaches a high value it calls for the first lag boiler to start up. When the modulating boiler reaches its maximum firing rate it lets the first lag boiler become the modulating boiler.
2. All boilers in service vary their firing rates in response to changes in demand. When they reach some high firing rate, add the next lag boiler. If the firing rate falls below some low value, drop out one boiler.

Are all boilers the same size?
Do you have a sensor to detect demand or are you trying to maintain a header pressure?
  Reply With Quote
Old March 30th, 2016, 11:49 PM   #3
HeroControlsInc
Member
United States

HeroControlsInc is offline
 
Join Date: Mar 2016
Location: Chicago, Il
Posts: 5
Steve ,
Thanks for The reply the boilers try to maintain header pressure and all receive the same firing rate based of that header pressure. I am reading each boilers " load output ," and basing The lag call on setpoints on That. So far I was able to come up with 8 diferent sequencing The boilers could be at anytime boilers 1,2,3,4,5,6,7,8 are lead 1 lead 2 lag 1 lag 2 lag 3 lag 4 lag 5 lag 6 respectively OR boilers -,2,3,4,5,6,7,8 are lag 6, lead 1, lead 2, lag 1 , lag 2, lag 3, lag 4, lag 5, lag 6 etc until all possible boiler sequences are filled . That portion of my Logic works fine meaning That i Can cycle The boilers so That each State ( lead 1, lead 2, lag 1) Can be files by any boiler, the problem is that when I cycle the positions and boilers are in fault ( Deffined by a bit ), my Logic will try to call on boilers that are in alarm , so eventually if i cycle positions to were any of The boilers That are ment to be on are in alarm , my logic won't check for the next available boiler. So if boilers 1 and 2 are lead 1 and lead 2 and boiler 1 and 2 are in alarm when they cycle into those positions , they will stay there and not look for the next available boilers...
  Reply With Quote
Old March 31st, 2016, 12:25 AM   #4
willxfmr
Lifetime Supporting Member
United States

willxfmr is offline
 
Join Date: Nov 2013
Location: Wisconsin
Posts: 282
I know for a fact I can't help you, but this post from Ron might.

http://www.plctalk.net/qanda/showthr...?t=9499&page=5


Just in case something goes wrong with the link, it is post #61 in this thread.

http://www.plctalk.net/qanda/showthread.php?t=9499


Will.
__________________
“Now will come the nay-sayers with all the reasons why you shouldn't do this. Some of them are teachers, and some of us are doers. Besides, you have got to let the smoke out of this equipment every now and then, or it starts to clog up the chimney.”
~Lancie1
  Reply With Quote
Old March 31st, 2016, 09:12 AM   #5
Steve Bailey
Lifetime Supporting Member + Moderator
United States

Steve Bailey is online now
 
Steve Bailey's Avatar
 
Join Date: Apr 2002
Location: The boondocks of Western Massachusetts USA
Posts: 6,401
Here's a tip. Instead of identifying your boilers by number, use some other ID scheme, letters for example.
That's because you also need to maintain a table of boiler IDs in priority order. Whenever the header pressure is below the setpoint for a period of time you need to tell the next boiler in the priority list to come online. If you identify the boilers by number it gets confusing when boiler #3 is boiler #5 on the priority list. Easier if boiler "C" is #5.
To your point about the alarm state of a boiler, if a boiler that is currently contributing steam to the header shuts down on alarm, that should immediately trigger the next boiler in the priority list to come online. Don't wait for the header pressure to drop.

PS:
HeroControlsInc, check your private messages. I left you contact information in case you want to talk person-to-person.
  Reply With Quote
Old March 31st, 2016, 10:02 AM   #6
RussB
Lifetime Supporting Member
United States

RussB is offline
 
RussB's Avatar
 
Join Date: Oct 2003
Location: Michigan
Posts: 2,907
Assuming the logic for each boiler is in its own Block of Logic.
Maybe think about maintaining two FIFO stacks, One with the StandbyBoilers with six positions and another with just two positions for the LeadBoilers. These are variables with indirects pointing to the variable calling the proper Block of control as needed.

Not sure I stated this correctly but I can "see" it.
__________________
LEARN something today so you can TEACH something tomorrow.
DETAIL in your question promotes DETAIL in my answer.
Dominus Vobiscum <))>(
"Where is the wisdom that we have lost in knowledge?" T.S. Elliot


  Reply With Quote
Old April 6th, 2016, 08:59 PM   #7
HeroControlsInc
Member
United States

HeroControlsInc is offline
 
Join Date: Mar 2016
Location: Chicago, Il
Posts: 5
Everyone ,

Thank you for all the great feedback. I got it to work eventually with a little bit of trial and error and pure Luck haha. I did it the old fashioned way though with pure plug and chug logic, compare, equals etc... seems like WAY too much logic then necessary, but it works. I was hesitant to use load , unload and more intricate commands as i am unfamiliar with them. Any one have any decent links or sites to get a quick practical overview of those types of commands... ??

Thanks Again
  Reply With Quote
Old April 6th, 2016, 09:01 PM   #8
HeroControlsInc
Member
United States

HeroControlsInc is offline
 
Join Date: Mar 2016
Location: Chicago, Il
Posts: 5
Also any decent info on Indirect addressing , pointers etc.. I herd its trickier to trouble shoot the logic, but to me it seems well work it ?
  Reply With Quote
Old April 7th, 2016, 11:33 AM   #9
Tark
Member
United States

Tark is offline
 
Tark's Avatar
 
Join Date: Apr 2004
Posts: 499
I see that you found a solution to your problem, but I figured I’d post since this seems to come up often in the forms.

Your issue is you have X number of boilers that you need to alternate and you need to do so in such a way that if a boiler is faulted that you don’t try to use that boiler, but instead move on to the next boiler. Here’s an example that I use for pumps that you can apply.

First, I break up my logic into separate programs. I have a program for my Request logic, this is generally part of my Tank program because that’s the object that needs water. I have separate programs for each of my pumps. And I have a program for the Alternator.

Each pump program has a rung that determines if that pump is Available. In my case that rung is – If pump’s HOA is in Auto, and pump is not in Alarm, and pump is not RemoteDisable then pump is Available. RemoteDisable comes from some other logic in the program, it is used to say no matter what don’t run this pump, it is generally used for low level lock-outs and such.

On to the Alternator program. Basically you use counters to determine which pumps (or boilers) to use. There is a counter for each request, so if you have a Lead and Lag request then you need two counters. If you have a Lead, Lead2, Lag, Lag2, Lag3, Lag4, Lag5, and Lag6 then you would use 8 counters. From there we have logic to determine when to increment the counters and logic to determine which pump(s) the Alternator is calling for. The Alternator program is broken down into sections; counters section, increment delays section, increments sections, and pump requests sections.

Here’s the AlternateDelay and counters rungs. I alternate the Alternator 60 seconds after there is no Lead request, this prevents a quick Lead request going Off then back On from causing the Alternator from alternating all the pumps. I also “lock in” the other counters used for the lag pumps at this time. I say “lock in” because once the Lead counter is set, all the other Lag counters are also set. I continue to use the same Lag pumps as long as the Lead request is active, I do not alternate the Lag pumps when the Lag request turns on and off. I also say “lock in” because if a pump becomes not Available, the Alternator will switch the counters which is shown in the logic below. You might be asking why is the UP rung on the AltLag and AltLag2 counters turned off, how do they change then? Those counters’ values are changed with Increment statements below, they are use more as a value holding location. Then why bother using a counter at all? Because it’s one rung that is used to hold a value and reset the value at a preset.
Alternator1.jpg

Here’s the number of pumps available and increment delay rungs. The MATH statement is used to determine the number of pumps available. This is used to determine if it’s ok to increment a counter, if you have 8 counters but only 7 available pumps then there’s no need to increment the 8th counter since there’s no pump available for it to use anyways. The increment pump delay timers are used to delay the changing of the counters. If the Alternator is running Pump 1 and it becomes not Available, then I don’t want to immediately start the next available pump, I want the Alternator to delay grabbing the next available pump.
Alternator2.jpg

Lead Counter Increment rung. This rung says - If at least one pump is available, and if PumpX is not Available (IncrementDelayTimer.Done) and the Lead counter is asking for PumpX then Increment the Lead counter. So what’s happening is, in the top of the program we use the Lead request to increment the Lead counter (normal Lead request on and off), this rung here is used to increment the Lead counter if it is on a pump that is not Available.
Alternator3.jpg

Lag Counter Increment rung. Remember in the first image where all the Lag counter’s UP rungs were turned off, well this is how the Lag counter’s values changes. Here we say – If at least two pumps are available, and if PumpX is not Available and the Lag counter is asking for PumpX then Increment the Lag counter. The last part of the OR is how the Lag counter usually changes to the next pump, it says if the Lag counter is on the same pump as the Lead counter then increment the Lag counter. So, under normal situations (all pumps are available) what happens is the Lead request increments the Lead counter on rung 3 to say pump 1, when we get to this rung and the Lag counter is on pump 1 then the Lag counter will get incremented to pump 2.
Alternator4.jpg

Lag 2 Counter Increment rung. This is very similar to the Lag Counter Increment rung except for two things. 1) We check to make sure that there are at least 3 pumps available to use and 2) there’s an additional rung in the OR which checks to make sure the Lag 2 counter isn’t asking for the same pump as the Lag counter. So back to the under normal situations, the Lead request increment the Lead counter on rung 3 to say pump 1, the Lag Counter Increment rung will increment the Lag counter to pump 2 and this rung will increment the Lag 2 counter to pump 3.
Alternator5.jpg
  Reply With Quote
Old April 7th, 2016, 11:34 AM   #10
Tark
Member
United States

Tark is offline
 
Tark's Avatar
 
Join Date: Apr 2004
Posts: 499
And finally the Alternator request pump logic. There’s a rung for each pump and we basically say, if there is a Lead request and the Lead counter is on pump 1 OR if there is a Lag request and the Lag counter is on pump 1 OR if there is a Lag 2 request and the Lag 2 counter is on pump 1 OR etc. then run pump 1.
Alternator6.jpg

So there’s a pretty simple Alternator program that is easily expandable to however many requests or pumps you have. It’s broken down into easy to understand sections; counters section, increment delays section, increments section, and pump requests section. And it’ll only use pumps that are Available, skipping those that are not.

Here’s one interesting thing about this Alternator program, if it goes out of sync it’ll sync itself back up. Let’s say the Alternator is set to run pumps 1, 2, 3 and pump 2 becomes unAvailable, then the Alternator will set itself to run pumps 1, 3, 4. The Alternator program will always sync itself back up to running consecutive pumps when they are available. It might take one complete rotation of the Lead counter to get everything back in sync, but it’ll sync back up
  Reply With Quote
Reply
Jump to Live PLC Question and Answer Forum

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Topics
Thread Thread Starter Forum Replies Last Post
Rockwell Ultra servo series motors weekev LIVE PLC Questions And Answers 26 November 3rd, 2006 07:01 PM
Manual/Auto jthornton LIVE PLC Questions And Answers 9 October 5th, 2006 12:40 PM
PID - Simple Velocity Control Peter Nachtwey LIVE PLC Questions And Answers 15 July 9th, 2004 04:39 PM
Lead Acid Charging system...... pinworm21 LIVE PLC Questions And Answers 4 January 6th, 2004 09:33 PM
how often should I trigger the PID? Ron Beaufort LIVE PLC Questions And Answers 11 February 22nd, 2003 10:57 AM


All times are GMT -5. The time now is 01:59 PM.


.