astralmind wrote:
Wait, I'm confused. What you are describing is how all ATO system I know of behave.
Main switch:
Triggers ATO pump when the water level goes low enough for the switch to close (ie, the ring part stops floating and touches the bottom making contact).
Secondary switch:
As a safety, if the other switch remains stuck in closed position, the high switch shutsdown the ATO if the water level reaches it (ie, the ring part starts floating, cutting contact).
All in all both switches behave identically, one is just a redundant safety.
I was under the impression that SingleATO took care of that as opposit to the standardATO function ? Esle, why would there be 2 functions that serve the exact same purpose?
That being said I just generated some code using singleATO (high and low) and it does appear to completely inversed.
Interval is how long it takes before the function can be activated again and timeout is the max amount of time the function will run regardless of the switch state correct ?
There seems to be some confusion about what is considered floating or not floating and what is considered active or not active. It's not just the people commenting here, it's just in general.
IsActive - Means the float is
not touching the end with both wires coming out of it. So when the code says "ato->IsActive()" that means that the float is not touching the end with the wires.
With this being said, here is the way the StandardATO function works (it may be listed above but I'm re-listing it because of the discussion).
- High switch mounted with wires at the bottom
- Low switch mounted with the wires at the top
- When water level lowers all the way to cause the low switch to be active (float is touching the opposite end with the 2 wires coming out of it), the ATO pump is turned on.
- The ATO pump runs until the water level raises the low switch up from making contact, continues to raise the water level until the high switch is active (float touching the opposite end of the 2 wires coming out of it). The ATO pump shuts off when the high switch is active OR if the ATO Timeout value is exceeded. The timeout prevents the pump from running too long in case the reservoir runs dry or something else happens.
- Water then evaporates out of the tank and lowers until the low switch is active.
- Repeat process
The SingleATO function works with an individual switch only. So there is no failsafe built in. The only failsafe is the timeout value.
- Switch mounted with 2 wires at bottom
- Water level with the float at the top is the starting point.
- When the water level drops, the float is no longer floating or active, so the ATO pump turns on.
- It pumps in water until the float is active (touching the top end which is opposite the 2 wires) OR until the timeout value has exceeded. Then the pump shuts off.
- The hour interval just means that the ATO pump can only be activated once every X (specified) hours. This is to prevent it from activating too many times. You don't have to specify this if you don't want to. You can safely put in 0 and the ATO pump will activate as often as it needs.
- Repeat process
That should help clarify the 2 scenarios or sets of functions.
Yes, you are correct. Interval is the max time that the function can be activated again. Just pass in 0 to disable this check (like I stated above). Timeout is the max time that the pump will run during the current activation before the pump is shutoff. If this value is exceeded, then you either a) set it too short b) the reservoir is dry or c) the pump has failed/died/whatever and the switches will not tell the pump to stop. You will most likely not be triggering the activation again until the problem is fixed.
If you want to use the single ato functions and use the high switch as a failsafe, then you will have to look at the previous post by alex about how he coded is failsafe high switch into his PDE file. Here is his code:
I tweaked it to be an else statement because if it's active you do one thing and otherwise you do something else. It just looks better and there are less logical checks.
Code: Select all
if(ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Off(Port1);
ReefAngel.Relay.Off(Box1_Port6);
}
else
{
ReefAngel.Relay.On(Port1);
ReefAngel.Relay.On(Box1_Port6);
}
This implies having the wires underwater (at the bottom).
Hope this helps.
curt