3-pump system with a few twists

rustydud

Member
Join Date
Mar 2011
Location
USA
Posts
40
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?
 
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?
 
Last edited:
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.
 
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.
 
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.
 
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!

This might give you a different way of thinking about it.
 
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.
 
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!




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.
 
I need to program a vacuum center in the PLC,
under the following conditions, both in the CX-ONE of ONROM, as well as of SIEMENS (TIA PORTAL V15),
with 3 pumps;
2 vacuostats;
2 levels of buoys - 1 for disposal (upper - full tank)) and another for blocking (lower - empty tank), under the following operating conditions:
- in manual mode, the system will work continuously, regardless of the vacuum level of the system, only stopping in condition of blocking level of one of the tanks or activation of the protection of the motor contactor thermal relay;
in automatic mode, the 18' Hg vacuum switch informs the system to start operating at 1st. pump, if left open for more than 15 seconds, the second pump starts operating. the 15" Hg vacuum switch requests the input of the 3rd pump. after closing the 15" Hg vacuum switch, an internal PLC contactor is activated, and 1 minute after this condition, the 3rd. pump is turned off, 1 minute after the closing of the 18" Hg vacuum switch, the 2nd pump is turned off, and if the system spends more than 10 minutes above this level, the 1st pump is turned off, only returning to operation when there is a change in the system's vacuum level, the clp makes the pumps alternate in their operation, providing the equivalent use of all pumps.
inputs:
I.OO MANUAL PUMP 1
I.01 AUTOMATIC PUMP 1
I.02 MANUAL PUMP 2
I.03 AUTOMATIC PUMP 2
I.04 MANUAL PUMP 3
I.05 AUTOMATIC PUMP 3
I.06 DISPOSAL BUOY - TANK 1
I.07 BLOCK BUOY - TANK 1
I.08 DISPOSAL BUOY - TANK 2
I.09 BLOCK BUOY - TANK 2
I.10 VACUOSTAT (CLOSES WITH 15" Hg AND OPENS WITH 18" HG)
I.11 VACUOSTAT (CLOSES WITH 15" Hg AND OPENS WITH 15 "Hg

OUTPUTS:

Q0 - RELAY'1 (VENTILATION SOLENOID VALVE - TANK 1)
Q01 - RELAY'2 (CENTER FAILURE)
Q02 - RELAY'3 (LOW VACUUM ALARM)
Q03 - RELAY´4 (BLOCKING LEVEL ALARM)
Q04 - RELAY´5 9 SOLENOID VENTILATION VALVE - TANK 2)
Q05 - RELAY 6 (PUMP CONTACTOR 1)
Q06 - RELAY 7 (PUMP C0NTATOR 2)
Q07 - RELAY 8 (PUMP CONTACTOR 3)
 

Similar Topics

Hi there, We have a system at a water treatment plant where large raw water tanks feed into the plant that's all on the same level. At high tank...
Replies
18
Views
3,639
I'm looking for a solution to a problem we are having in our water treatment system. We add a lime slurry to the water prior to it going through...
Replies
29
Views
10,956
I apologize in advance for such an off topic post but I know there are some very savy pump specialists here and I have a couple of very specific...
Replies
17
Views
19,911
Hi@all! I need some help concerning a Crouzet Millenium 3. I want to build a control system for 3 hydraulic pump stations. The outputs of...
Replies
3
Views
6,215
Hi all, Long i posted a qury regrding the control of 5 pumps. i got a good response here in this site.recently i have come up with a very good...
Replies
1
Views
1,824
Back
Top Bottom