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 October 7th, 2015, 03:25 PM   #1
rustydud
Member
United States

rustydud is offline
 
Join Date: Mar 2011
Location: USA
Posts: 38
3-pump system with a few twists

Hello,

I've tried thinking of ways to make this work and it's befundling me.
I've created PLC code for an alternating 2-pump system but can't wrap my head around programming this 3-pump system. I am programming in RSLogix 500 so I must use ladder logic.

My system has three(3) pumps. The system should operate like this:
• Two(2) pumps to be "online" at any given time. A pump can be “online” if it is not faulted, is in auto mode, etc etc
• Pumps shall rotate to “online” status. I.e. Pumps 1&2, then Pumps 1&3, then Pumps 2&3, then Pumps 1&2…
• Only one (1) pump shall run at a time. Once this pump runs for 5 minutes, the first pump shall stop and the other “online” pump shall run.
• Once both pumps have operated, the pair of “online” pumps shall rotate.

Your thoughts?
__________________
Think Big.
http://politicalplangetis.blogspot.com/
  Reply With Quote
Old October 7th, 2015, 03:46 PM   #2
bernie_carlton
Lifetime Supporting Member + Moderator
United States

bernie_carlton is offline
 
bernie_carlton's Avatar
 
Join Date: Apr 2002
Location: Yakima, Washington
Posts: 6,203
Create you 3 control rungs, one for each pump, as if all were going to run all the time. Create a 5 minute self resetting timer. (The timer has in its enable line a NC of its own 'Done' contact.) Next create a counter with a preset of '3'. Trigger it with the 'Done' contact of the timer. On the next rung, if the counter's 'Done' bit is ON reset the counter.

Now go back to your 3 pump rungs. In each place a NEQ instruction with 'Source A' being the counter accumulator and 'Source B' being '0', '1' and '2' respectively in the three rungs.

Edit - Just re-read your post and realize you only want 1 ON at a time. Change the NEQ instruction I mentioned to an EQU instruction. This will cause one pump to be ON at a time.

I'm not sure how the 'Online' status you mentioned affects this. What would you see as the ON sequence over the course of an hour if implemented as you describe with the 'Online' factor?
__________________
Controlling outputs is the PLC's way of getting its inputs to change.

www.thePLCguy.com

Last edited by bernie_carlton; October 7th, 2015 at 03:54 PM.
  Reply With Quote
Old October 8th, 2015, 07:58 AM   #3
Tark
Member
United States

Tark is offline
 
Tark's Avatar
 
Join Date: Apr 2004
Posts: 501
Assuming that a pump rotation of 1&2, 3&1, 2&3, then 1&2 is acceptable, then you can do the following -

1) Create an "Available" bit for each pump - If pump in auto and not faulted then pump is "Available"
2) Create a "Request" bit - Whatever your using to determine a pump is needed enables the "Request" bit.
3) Create an "Alternate" timer. "Alternate" timer is set for 5 minutes, timer runs when "Request" bit is on, timer is self resetting.
4) Create and "Alternator" counter. "Alternator" counter is incremented whenever "Alternate" timer is Done. Counter is also self resetting.
5) Create 3 rungs (one for each pump) to check if it's ok to use the pump - If pump is NOT "Available" and "Alternator" is set for that pump, then increment "Alternator".
6) Create 3 rungs (one for each pump) for the pump run logic - If pump in auto and "Request" on and "Alternator" = X and pump not faulted, then run pump.
  Reply With Quote
Old October 8th, 2015, 08:35 AM   #4
amberman
Member
England

amberman is offline
 
Join Date: Jun 2014
Location: Brighton
Posts: 100
You could reuse your two pump alternate operation code but switch internal bits instead of
output bits. Then add a sequence stepping through the online status of the pumps and the internal bits can switch the appropriate output bits dependent on where you are in the sequence.
  Reply With Quote
Old October 14th, 2015, 09:24 AM   #5
rustydud
Member
United States

rustydud is offline
 
Join Date: Mar 2011
Location: USA
Posts: 38
Guys,

I went ahead and made a ladder in my program for choosing the lead, lag, and lag_lag pump.

Choices are:
lead lag lag_lag
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

You'll see in my program, I use a counter and to determine who's lag or lag_lag I check to see if one of the pumps or pump valves is failed. Not sure this is the "ideal" way to do things.

Let me know if you have any feedback. I appreciate everyone's suggestions.
Attached Files
File Type: pdf 3PUMPS_LEAD_ASSIGNMENT .pdf (43.1 KB, 146 views)
__________________
Think Big.
http://politicalplangetis.blogspot.com/
  Reply With Quote
Old October 14th, 2015, 10:18 AM   #6
Tark
Member
United States

Tark is offline
 
Tark's Avatar
 
Join Date: Apr 2004
Posts: 501
This might give you a different way of thinking about it.
Attached Files
File Type: pdf Simple 3 Pump Alternator.pdf (31.8 KB, 174 views)
  Reply With Quote
Old December 12th, 2017, 06:44 AM   #7
ryangriggs
Member
United States

ryangriggs is offline
 
Join Date: Jun 2016
Location: USA
Posts: 115
I know this thread is old, but just wanted to say "Thanks @Tark" for giving me a different (simpler) way of thinking about handling three pumps in rotation! Very helpful!

Quote:
Originally Posted by Tark View Post
This might give you a different way of thinking about it.
  Reply With Quote
Old December 12th, 2017, 03:20 PM   #8
Tark
Member
United States

Tark is offline
 
Tark's Avatar
 
Join Date: Apr 2004
Posts: 501
I'm glad you found it helpful. I still use this basic framework with a few modifications -

1. Rung 4 - The ReqLead bit no longer increments the LeadAlternator counter directly. Instead the ReqLead bit goes to an AlternateDelay timer and the AlternateDelay timer increments the LeadAlternator counter. What this does is after the ReqLead has been off for some period of time, say 1 minute, then the alternator is set to use the next pump. This keeps the alternator on the same pump in a case where you might have an operator turn something off and then change their mind and turn it back on, or maybe there's a fault somewhere and it is causing the ReqLead to chatter, it's better cause a problem with one pump than to have the alternator racing around trying to turn on all the pumps.

2. The PumpXAvailable bits run delay timers and the delay timers are used to increment the counters in Rungs 6 & 7. So if Pump 1 isn't available for say 10 seconds, then we alternate to find the next available pump. The problem with not using a delay is if the alternator is running Pump 1 and the operator turns the HOA Off, then the alternator immediately turns on the next pump. I found out that operators can have a 'favorite pump' that they want the system to use, so they would turn off the pump they didn't want running, the alternator immediately turns on the next pump, which they didn't want either so they turn that one off, and then the alternator turns on the one they want. I didn't like this on/off/on/off cycling of the pumps by the operators, so I put in a delay on each of the pumps' available bits. This gives the operator enough time to set the HOAs to get the pump they want to run before the alternator makes the determination of which pump to run.
  Reply With Quote
Old December 12th, 2017, 04:02 PM   #9
ryangriggs
Member
United States

ryangriggs is offline
 
Join Date: Jun 2016
Location: USA
Posts: 115
Thanks for this additional info! I definitely see how the timers would be beneficial in preventing fast cycling.

In my application (water treatment), we have the logic set up to require that all pumps be OFF for at least a minimum time before any pump can start. This prevents undesirable water hammer, allowing things to settle down before attempting to restart the pumping process. It also prevents fast cycling/bouncing which could cause damage to the motors.

I have a timer which runs only when all pumps' CALL_TO_RUN and IS_RUNNING flags are False. The output of this timer is used in series with other checks to determine whether a pump is allowed to run.

One thing I'm curious about: I've seen many suggestions on this and other forums to cycle multiple pumps in a non-linear fashion, to prevent all pumps wearing out at the same time. I.e. 75%/25% runtime for a two-pump setup.

How would this be implemented with your alternation algorithm? One pump would need to carry a higher "weight" meaning it gets picked more often to run... Maybe you could add multiple copies of the pump which gets run more often, into the selection loop, and only one copy of the less-run pump. (Would you call these "virtual pumps"? haha) This would increase the likelihood that that the heavy-use pump would be selected vs. the light-use pump.

So for a three-pump system, the counter would count from 0 to 7. Then any time the counter is set to 0-5, Pump 1 would be run (6/8 = 75% of the time). This could be done in any order if you want to mix in the light-use pump during the cycle.

Again thanks for your great and simple algorithm. Very helpful!




Quote:
Originally Posted by Tark View Post
I'm glad you found it helpful. I still use this basic framework with a few modifications -

1. Rung 4 - The ReqLead bit no longer increments the LeadAlternator counter directly. Instead the ReqLead bit goes to an AlternateDelay timer and the AlternateDelay timer increments the LeadAlternator counter. What this does is after the ReqLead has been off for some period of time, say 1 minute, then the alternator is set to use the next pump. This keeps the alternator on the same pump in a case where you might have an operator turn something off and then change their mind and turn it back on, or maybe there's a fault somewhere and it is causing the ReqLead to chatter, it's better cause a problem with one pump than to have the alternator racing around trying to turn on all the pumps.

2. The PumpXAvailable bits run delay timers and the delay timers are used to increment the counters in Rungs 6 & 7. So if Pump 1 isn't available for say 10 seconds, then we alternate to find the next available pump. The problem with not using a delay is if the alternator is running Pump 1 and the operator turns the HOA Off, then the alternator immediately turns on the next pump. I found out that operators can have a 'favorite pump' that they want the system to use, so they would turn off the pump they didn't want running, the alternator immediately turns on the next pump, which they didn't want either so they turn that one off, and then the alternator turns on the one they want. I didn't like this on/off/on/off cycling of the pumps by the operators, so I put in a delay on each of the pumps' available bits. This gives the operator enough time to set the HOAs to get the pump they want to run before the alternator makes the determination of which pump to run.
  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
Duty / standby pump rotation control nesby LIVE PLC Questions And Answers 9 June 14th, 2015 05:52 PM
New Scada system - WW of iFix? tisbris LIVE PLC Questions And Answers 15 November 20th, 2012 12:20 AM
Three Pump alternating program for RSLOGIX 500 Carlos V LIVE PLC Questions And Answers 1 July 27th, 2007 09:51 AM
PID - The most difficult system so far. Peter Nachtwey LIVE PLC Questions And Answers 20 August 15th, 2004 10:53 PM
PID - A challenge, is a PID good enough? Peter Nachtwey LIVE PLC Questions And Answers 19 July 18th, 2004 10:10 PM


All times are GMT -5. The time now is 04:07 AM.


.