In programming terms, a virtual outlet is essentially a [boolean] variable you can program like any other outlet based on various inputs and then use to program other outlets or trigger an alarm. When a virtual outlet is 'on,' it doesn't do anything directly like a physical outlet.
'Normal' outlets are the 120V outlets in the EB4/EB8/EB832, and the DC24 outlets. If you think of your typical heater outlet, you would program it something like this:
Fallback OFF
If Temp < 78.0 Then ON
If Temp > 78.5 Then OFF
We could make a virtual outlet called vHeater and program it with the exact same code, then program the heater outlet like this:
Fallback OFF
If Output vHeater = ON then ON
(Note that the fallback statement is used to set the default state of an EB outlet if it looses communication with the controller, so it is unnecessary and useless for a virtual outlet.) In this example, the heater outlet is not using the temperature probe values directly, rather it is using the value of the virtual outlet (which in turn looks at the temp probe.)
This is just an example; there is really no benefit to doing it this way, but you can have more complex programming in a virtual outlet making the apex programming more flexible. There are a couple of potential benefits of doing this:
- Virtual outlets can be logged like any other outlets, so you can look back in the log to see what has happened
- A virtual outlet can be used in the programming of multiple other outlets, making it easier to write the code
- Virtual outlet names can make it easier to understand what code means (especially since we can't use comments)
- virtual outlets can let you do more complex logic programming that is difficult or impossible to do otherwise.
- There are probably more benefits that others can elucidate.
As an example, in my setup, I have a couple of momentary push buttons connected to my breakout box that I use to activate a 'feed mode.' Apex will not let you activate any of the true feed modes with button, so I created virtual outlets called vFeedA, vFeedB, etc. I have the vFeedA outlet programmed like this:
Set OFFIf TopBtn CLOSED Then ON
Defer 010:00 Then OFF
This means the virtual outlet (variable) vFeedA turns on when the button TopBtn is pushed and stays on for 10 minutes. In my skimmer programming I have the statement
If Output VFeedA = ON Then OFF
to turn off the skimmer during the virtual feed mode.
Hope this makes sense