This Thread explains the different fail-safes that can be used in an automatic top off (ATO) code that can improve reliability and prevent catastrophic failure. It is important to use protective code in order to prevent the ATO pump from sticking in the ON position when a float switch fails. Even If you have top of the line float switches, they will eventually fail in the OPEN or CLOSED position, which will each have their own issues that can be resolved by adding some extra code. Before utilizing the methods below, make sure your ATO is operational using the sample program - simple 2 float ATO sticky.
This thread will assume that the starting point for your code is this
Set OFF
If ATOsw CLOSED Then ON
If HighSw OPEN Then OFF
Defer 002:00 Then ON
Min Time 010:00 Then OFF
Conductivity Cutoff
If you own a PM2 with a conductivity probe, the conductivity value can be used as a fail-safe to prevent overfilling. It is ideal to use a conductivity value that is 1 ppt lower than your typical daily range (i.e. if conductivity ranges from 34.5 to 35.0, then 33.5 should be used)
Ex.
ATO (physical outlet)
Set OFF
If ATOsw CLOSED Then ON
If HighSw OPEN Then OFF
If cond < 33.5 Then OFF
Defer 002:00 Then ON
Min Time 010:00 Then OFF
Email Alarm
(existing code)
If cond < 33.5 Then ON
Stuck Switch Detection
With the use of virtual outlets (please read the sticky on virtual outlets if you are not familiar with them), the apex can detect when a switch is stuck in the open or closed position because your normal level float switch should alternate between open and closed at fairly regular intervals under normal conditions. When it stays in any one position longer than usual, it means that some problem has occurred. When a switch stays CLOSED for longer than normal it can mean that either the switch itself is stuck in the CLOSED position, your reservoir is empty, or the water line has been clogged/disconnected. When a switch stays OPEN for longer than normal it can mean that either the switch itself is stuck in the OPEN position, your water line is siphoning, or the wiring to the breakout box is broken or disconnected.
The basic form of this code should be like shown below where XXX:XX and YYY:YY are the intervals you want to wait to determine if a switch is stuck. The value you use will be dependent on your particular system and is affected by many variables including: System water volume, size of ATO pump, evaporation rate, type of float switch, etc.
SwStuckCL (virtual outlet for detecting if switch is stuck in the CLOSED position)
Set OFF
If ATOsw CLOSED Then ON
Defer XXX:XX Then ON
SwStuckOP (virtual outlet for detecting if switch is stuck in the OPEN position)
Set OFF
If ATOsw OPEN Then ON
Defer YYY:YY Then ON
What method should I use?
In the next few posts I will go over different methods that you can use depending on how you want the system to react when a failure is sensed. Please look at the situations below to determine which approach to use.
1. If the float switch fails closed, I want the ATO pump to stop completely until I manually intervene or the switch shows OPEN. Send me an email if the switch sticks. If you want to use this approach, see stuck switch implementation.
2. If the pump runs for longer than X time, turn the ATO pump off but allow it to try again after Y minutes. Send me an email every time the pump runs longer than X. See self-resetting latch to use this approach
3. Regardless of the float switch states, if the pump runs longer than X time, turn off the ATO pump and do not allow it to run again until I manually intervene by changing the state of a virtual outlet after I inspect the switch. See maximum run time latch for this approach
4. Under normal operation, allow the ATO to "dose" water up to double the daily evaporation rate of my tank. If a switch is stuck, send me an email and reduce the amount "dosed" to half my daily evaporation rate. See OSC based fail safes for this approach
1. Stuck Switch implementation
This is the simplest fail safe method for the majority of users. In the example below, XXX:XX represents the maximum amount of time you will allow your pump to run before it stops the ATO sequence completely. A good time to shoot for is double the time it normally takes to fill from the float at its lowest position to its highest position.
ATO (physical outlet)
Set OFF
If ATOsw CLOSED Then ON
If HighSw OPEN Then OFF
If Outlet SwStuckCL = ON Then OFF
Defer 002:00 Then ON
MinTime 010:00 Then OFF
SwStuckCL (virtual outlet)
Set OFF
If ATOsw CLOSED Then ON
Defer XXX:XX Then ON
2. Self-Resetting Latch
This method will allow the ATO to continue to operate at a much reduced rate in the event that a switch sticks. It is possible to exacerbate the problem and continue overfilling if you select your times improperly. XXX:XX is the maximum time your pump is allowed to run in each attempt. YYY:YY is the amount of time you wish to wait between filling attempts (if the switch is stuck). When in doubt use a YYY:YY value of several hours.
ATO (physical outlet)
Set OFF
If ATOsw CLOSED Then ON
If HighSw OPEN Then OFF
If Outlet MaxTime = ON Then OFF
Defer 002:00 Then ON
MinTime 010:00 Then OFF
MaxTime (virtual outlet)
Set OFF
If Outlet MaxTime = ON Then ON
Defer XXX:XX Then ON
MinTime YYY:YY Then ON
3. Manually Resetting Latch
This method will completely lock out your ATO if it runs longer than XXX:XX for any reason. It will not start again until you reset the latch by changing the virtual outlet "Res_Latch" to manual ON and then back to AUTO
ATO (physical outlet)
Set OFF
If ATOsw CLOSED Then ON
If HighSw OPEN Then OFF
If Outlet ATO_Latch = ON Then OFF
Defer 002:00 Then ON
Min Time 010:00 Then OFF
Res_Latch (virtual outlet)
Set OFF
ATO_Latch (virtual outlet)
If Outlet ATO = ON Then ON
If Outlet Res_Latch = ON Then OFF
If Power Apex OFF 001 Then OFF
Defer XXX:XX Then ON
4. OSC based fail safes
This is the most effective type of failsafe since it both protects against overfilling and also slows conductivity increase in the event when a failure is detected. Unfortunately, this is by far the most complicated and requires you to know the effective gph rate of your pump, the evaporation rate of your tank, and a good understanding of unit cancellation mathematics. My thread https://forum.neptunesystems.com/sho...mize-pH-change explains some of the mathematics required to determine the amount to "dose" once you determine your effective pump flow rate and weekly evaporation.
Below is the current code that I use in my system with brief explanations of what each VO does. I wouldn't recommend going this complicated with your code unless you can fully understand how every outlet below works.
ATO_4_8 (pump outlet)
Fallback OFF
OSC 000:00/001:00/004:00 Then ON
If ATOSw OPEN Then OFF
If Outlet ATO_StuckCL = ON Then OFF
If Outlet IgLowLev = ON Then ON
If Outlet IgStuckCL = ON Then ON
If Outlet HighH2O = ON Then OFF
If FeedD 000 Then OFF
HighH2O (detects high water level only if both returns are on)
Set OFF
If HighSw OPEN Then ON
If Outlet RtnL_4_4 = OFF Then OFF
If Outlet RtnR_5_1 = OFF Then OFF
Defer 000:10 Then ON
LowH2O (detects low water level)
Set OFF
If LowSw OPEN Then ON
Defer 000:10 Then ON
ATO_StuckCL (detects if switch 1 stays closed for 12 consecutive doses.)
Set OFF
If ATOSw CLOSED Then ON
Defer 060:00 Then ON
ATO_StuckOP (detects if switch 1 is stuck open. Signifies empty reservoir, clogged line, broken wire, etc)
Set OFF
If ATOSw OPEN Then ON
Defer 120:00 Then ON
IgStuckCL (allows half evap rate if switch 1 is stuck closed)
OSC 000:00/000:15/004:45 Then ON
If Outlet ATO_StuckCL = OFF Then OFF
IgLowLev (allows evap rate if switch 1 is stuck closed AND there is low water level)
OSC 000:00/000:30/004:30 Then ON
If Outlet ATO_StuckCL = OFF Then OFF
If Outlet LowH2O = OFF Then OFF
Email alarms added
If Outlet HighH2O = ON Then ON
If Outlet LowH2O = ON Then ON
If Outlet ATO_StuckCL = ON Then ON
Bookmarks