This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Scripts two pumps alternate
#1
Hello,

can someone help me with the following script, for me scripting is completely new, I have some tutorials followed but to make the first start I find difficult.

Two pumps with alternate operation according to hours of operation and according to fault / stop status.
If both pumps are OK, they alternate every 50 hours of operation. If one of the pumps is faulty / stopped, the other always starts.


Thanks!
Reply
#2
Which objects are available? Pump start/stop and fault status (both binary)?
Reply
#3
(29.07.2021, 13:47)admin Wrote: Which objects are available? Pump start/stop and fault status (both binary)?

Yes, objects are;

Pumps start/stop (5/0/0)
Pump A Start/Stop (5/0/1)
Pump B Start/Stop  (5/0/2)
Pump A Fault/manual stop status (5/0/10)
Pump B Fault/manual stop status (5/0/20)

Thanks for help!
Reply
#4
You will need 3 scripts.
Scheduled script that run once each hour:
Code:
1234567891011121314151617181920212223242526272829303132
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') -- one of the pumps is on if on_1 or on_2 then   pump_time = storage.get('pump_time', 0)   pump_time = pump_time + 1   -- try switching to another pump   if pump_time > 50 then     stop_1 = grp.getvalue('5/0/10')     stop_2 = grp.getvalue('5/0/20')     -- first is on, second is not in stop state     if on_1 and not stop_2 then       grp.write('5/0/1', false)       grp.write('5/0/2', true)       pump_time = 0     -- second is on, first is not in stop state     elseif on_2 and not stop_1 then       grp.write('5/0/2', false)       grp.write('5/0/1', true)       pump_time = 0     end   end else   pump_time = 0 end storage.set('pump_time', pump_time)

Event script for first pump fault (5/0/10):
Code:
1234567891011121314151617181920
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') stop_1 = event.getvalue() stop_2 = grp.getvalue('5/0/20') -- switch to the second pump if stop_1 then   if not stop_2 and not on_2 then     grp.write('5/0/1', false)     grp.write('5/0/2', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/1', true)   storage.set('pump_time', 0) end

Event script for second pump fault (5/0/20):
Code:
1234567891011121314151617181920
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') stop_1 = grp.getvalue('5/0/10') stop_2 = event.getvalue() -- switch to the first pump if it's not in a fault state if stop_2 then   if not stop_1 and not on_1 then     grp.write('5/0/2', false)     grp.write('5/0/1', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/2', true)   storage.set('pump_time', 0) end
Reply
#5
(04.08.2021, 06:25)admin Wrote: You will need 3 scripts.
Scheduled script that run once each hour:
Code:
1234567891011121314151617181920212223242526272829303132
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') -- one of the pumps is on if on_1 or on_2 then   pump_time = storage.get('pump_time', 0)   pump_time = pump_time + 1   -- try switching to another pump   if pump_time > 50 then     stop_1 = grp.getvalue('5/0/10')     stop_2 = grp.getvalue('5/0/20')     -- first is on, second is not in stop state     if on_1 and not stop_2 then       grp.write('5/0/1', false)       grp.write('5/0/2', true)       pump_time = 0     -- second is on, first is not in stop state     elseif on_2 and not stop_1 then       grp.write('5/0/2', false)       grp.write('5/0/1', true)       pump_time = 0     end   end else   pump_time = 0 end storage.set('pump_time', pump_time)

Event script for first pump fault (5/0/10):
Code:
1234567891011121314151617181920
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') stop_1 = event.getvalue() stop_2 = grp.getvalue('5/0/20') -- switch to the second pump if stop_1 then   if not stop_2 and not on_2 then     grp.write('5/0/1', false)     grp.write('5/0/2', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/1', true)   storage.set('pump_time', 0) end

Event script for second pump fault (5/0/20):
Code:
1234567891011121314151617181920
on_1 = grp.getvalue('5/0/1') on_2 = grp.getvalue('5/0/2') stop_1 = grp.getvalue('5/0/10') stop_2 = event.getvalue() -- switch to the first pump if it's not in a fault state if stop_2 then   if not stop_1 and not on_1 then     grp.write('5/0/2', false)     grp.write('5/0/1', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/2', true)   storage.set('pump_time', 0) end


Thanks for help!

I have been testing the scripts.

I understand that I always give start order to pump 1, and if it is faulty or has more than 50 hours, pump 2 starts.


I have found the following problem, if pump 1 is running, pump 2 is faulty, if pump 1 breaks down and pump 2 is repaired, pump 2 does not start automatically
Reply
#6
Try modifying the event scripts like this:
Code:
1234567891011121314151617181920
stop_1 = event.getvalue() stop_2 = grp.getvalue('5/0/20') on_1 = grp.getvalue('5/0/1') and not stop_1 on_2 = grp.getvalue('5/0/2') and not stop_2 -- switch to the second pump if stop_1 then   if not stop_2 and not on_2 then     grp.write('5/0/1', false)     grp.write('5/0/2', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/1', true)   storage.set('pump_time', 0) end

Code:
1234567891011121314151617181920
stop_1 = grp.getvalue('5/0/10') stop_2 = event.getvalue() on_1 = grp.getvalue('5/0/1') and not stop_1 on_2 = grp.getvalue('5/0/2') and not stop_2 -- switch to the first pump if it's not in a fault state if stop_2 then   if not stop_1 and not on_1 then     grp.write('5/0/2', false)     grp.write('5/0/1', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/2', true)   storage.set('pump_time', 0) end
Reply
#7
I have the following problem;

If pump 1 fault, stops pump 1 and starts pump 2, then pump 2 breaks down, pump 2 does not stop and if pump 1 is repaired, pump 2 and pump one are on.

Thanks for help!
Reply
#8
This will send OFF command when a fault is detected:
Code:
123456789101112131415161718192021
stop_1 = event.getvalue() stop_2 = grp.getvalue('5/0/20') on_1 = grp.getvalue('5/0/1') and not stop_1 on_2 = grp.getvalue('5/0/2') and not stop_2 -- switch to the second pump if stop_1 then   grp.write('5/0/1', false)   if not stop_2 and not on_2 then     grp.write('5/0/2', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/1', true)   storage.set('pump_time', 0) end

Code:
123456789101112131415161718192021
stop_1 = grp.getvalue('5/0/10') stop_2 = event.getvalue() on_1 = grp.getvalue('5/0/1') and not stop_1 on_2 = grp.getvalue('5/0/2') and not stop_2 -- switch to the first pump if it's not in a fault state if stop_2 then   grp.write('5/0/2', false)   if not stop_1 and not on_1 then     grp.write('5/0/1', true)     storage.set('pump_time', 0)   end -- fault is removed and no pump is running elseif not on_1 and not on_2 then   grp.write('5/0/2', true)   storage.set('pump_time', 0) end
Reply


Forum Jump: