Profilux Programming Logic Tips, Tricks, and Examples
Intro:
The aim of this post is to help give people some perspective on how to use programming logic for your Profilux controllers. I have not had any sort of controller before and when I received my Profilux 4 Ultimate Package last week I was a bit star struck on the amount of settings the controller had to offer. At first glance I thought my P4 was limited, that is until I realized how the programming logic works. I have only owned a Profilux for about a week now, but I tend to be tech savvy and have a good understanding of how to implement programming logic. Lastly, let me go ahead and warn you that the programming logic that will be in this post is a bit limited since I only have the P4 ultimate package and nothing else, and to top it off since I have never owned a controller before I already have a lot of devices that have some sort of built in controller so unfortunately I do not have examples of more than just a few devices that I have set-up on the power bar.
Downloads and Info:
Before we go any further you will need to know what all the different settings do in the GCC software, without knowing how the settings work or what they mean you will be limiting the scope of your programming logic. Go to: https://www.aquariumcomputer.com/downloads/
You will need to first make sure your running the latest version of GCC and that your Profilux has up to date firmware. You will want to download several of the guides: Power bar 5.1 Manual, Profilux 4 Manual, Profilux 4 Programming Guide, and Programmable Logic Instructions. You will need to read these manuals and understand what all the different settings mean. It will take some time to read all of this. Make sure to keep the Programmable Logic Instructions Manual handy as you will need this to do your PL (Programming Logic).
My Tank & Equipment:
To understand my use of programming logic you will need to know how my tank is set-up and what equipment I have. My aquarium consists of two tanks, a 120g 48x24 and a 35g 38x18 frag tank plumbed to the same sump. The tank is a mixed reef and I have 20 fish with most of them being wrasses.
Lighting: Both tanks have DIY T5/LED hybrids
Water Flow: In my DT I have 2x mp40w QD’s and a Tunze 9410 in the frag tank
ATO: Tunze Osmolator 3155
Heaters: x2 Jager Eheim Heaters
Dosing Pump: Bubble Magus TM-01
Protein Skimmer: Eshopps Axium x-160
Return Pump: Jebao DCT 12000
Auto Feeder: Intellifeed Fish Feeder from Lifegard Aquatics
Controller: Profilux 4 Ultimate Package and no other accessories just yet.
Media Reactors: 1 carbon and 1 GFO reactor plumbed off a manifold from the return pump
Sensor Settings:
Before we can dive into the programming logic you will need to change some settings in the Probe/Sensor Controls. Here are how my temperature probe settings are configured in GCC.
You will notice that my alarm is active and deactivate control is turned off. It is crucial that you have deactivate control turned off. In theory deactivate control sounds like a good setting to turn on since it will cut the power to any device configured to your probe if an alarm is triggered. Let’s use the heaters as an example, let’s pretend that your tank loses power for several hours. In that time your tank temperature has dropped from 78 to 75. When the tank regains power and the Profilux temp probe says the tank is 75 it will trigger an alarm and thus will cut the power to the heaters. And if you are not home to witness this mistake your tank will run without heaters until you manually change a setting or turn the power back on. Instead of using this setting we will leave it off and configure your heater to not do what was mentioned above with programming logic. It’s entirely up to you, but I would repeat this setting for the other sensors unless your positive it will do no harm. Also for the temp probe you will want to change the default cooling difference from 0 to any number you desire as we will be using it in the PL for your heaters. I have no chiller, but the cooling difference will need to be turned on. And here are my salinity probe settings:
Currently I have no use for my PH and ORP reading since I don’t have any devices that use these probes and their settings, so as of for right now they are just for monitoring. The setting on deactivate control for my salinity probe is also off.
Switch Channels and Outlets:
Here is a picture of my Switch Channel and Outlet settings:
It is important to note that every single socket has the function set to programming logic. If you set your function to anything else, you are limiting the power of your Profilux. So far I have not found a single instance where using a different function setting for a socket gives you more scope of what you can control. Bare in mind I only have the base package, so I haven’t fully explored all the configurations due to the lack of various sensors/devices/equipment.
There are probably several different ways to achieve the same thing through the GCC settings but for my way of using PL you will want every socket set to the correct programming logic. And do not worry I will show you how to use PL so that your feed modes still work correctly, just because a pump is not set to the filter function does not mean that you cannot use feed mode to turn that device off, PL will still let you do that if you set it up correctly.
Programmable Logic:
I’m not claiming this is the best way to program your Profilux controller, and unfortunately these examples cannot be used as a cookie cutter for everyone. Since everyone’s controller and tank equipment are different you are more than likely not going to be able to use my exact PL configuration due to differing equipment or additional Profilux items like sensors and what not. It will be important that you document your PL statements very well so you can go back and edit them when you want to make a change. Also, I have tested all of my PL statements and I believe they are all working as intended, but I do make mistakes so please correct anything you see wrong.
The idea here is to basically build an infrastructure of programmable logic, I have set mine up in a way that lets me accomplish tasks that would not be possible without the use of PL. At this point you are going to need your Programmable Logic Instructions manual handy. We will start with my return pump settings.
(PL 8)
Since I do not have any level sensors I configured my return pump to turn off if both my salinity probe alarm and salinity probe decrease are to activate. The NAND function allows my return pump to stay on as long as the 2 input parameters are not both on at the same time. In other words, I want my return pump to turn off if my salinity reaches too high of a level, meaning that the water level has dropped inside my sump. Implementing a level sensor would accomplish this task much better but since I do not have one this is the best I could do for preventing the return pump to run dry.
(PL 9)
This PL statement is also for my return pump. This one isn’t necessary but I just wanted to ensure that if I ever activate maintenance 4 my pump will turn off. As long as both inputs are off then my return pump will be on, it will only shut off if maintenance 4 is activated.
(PL 7)
And this is my final PL for my return pump, this PL statement ties together the 2 previous statements and is ultimately the PL that I set to function in the sockets and switch menu. What it is saying is that as long as the 2 previous PL statements are ON then the return pump is ON, if either previous PL turns Off then the controller will switch the socket to the return pump OFF.
Now for my heaters, here is the first PL statement
(PL 3)
This PL turns OFF my heaters when both the chiller activates (remember the cooling difference setting in the probe menu) and the temperature probe sounds an alarm. This way the heater will only be turned off if the tank temperature is above the nominal temperature and will still function if the alarm is on but the tank temperature is below instead of above the nominal temperature.
(PL 17)
This PL statement only allows the heater to be on if the temp probe sets the heater to be on and if the cooling difference is not activated. This way my heater won’t ever be turned on if the chiller is activated, meaning the tank temperature is high enough to where the cooling difference turns on. I inverted the chiller setting to accomplish this, otherwise the heater would never turn on. This is mainly just for unforeseen glitches. It locks the heaters into their intended functionality, but this step isn’t really necessary.
(PL 16)
This statement ties together the 2 previous statements so that they must both be on for the heaters to turn on. If either statement switches to off, then it switches the heaters to off.
(PL 14)
This PL delays my heaters from turning back on for 90 seconds if the return pump is ever turned off. This gives my return pump some time to get started and circulating water throughout tank before the heaters kick on. This will also prevent my heaters from being delayed if they are turned off for any other reason. I only wanted the delay feature to be turned on if the return pump is turned off for any reason.
(PL 15)
This PL links my heaters to the return pump via the delay start (PL 14) This way if my return pump is ever turned off then my heaters will also be turned off and delayed upon restart. I wouldn’t want my heaters activated if there is no water circulation. It also ties together PL 16 so if at any time my return pump is turned off or PL 3 or PL 17 is switched to off then it will cut the power to my heater socket. This is ultimately what I set my function to in the switch menu for my heaters.
Here are my vortech settings with the feed mode included into the PL.
(PL 10)
(PL 11)
This way my vortech pumps are always ON unless I activate filter 1 (meaning feed mode 1) or the return pump is switched off for a water change via maintenance 4. I set it up this way so if my return pump gets shut off for any reason other than a water change the vortechs will continue to stay on in hopes that it will save the tank by continuing to circulate the water in the DT.
Lastly, I added a delay feature for when I activate maintenance 4 for a water change. Sometimes I fill the sump up and turn the return on while I pump water to the sump and the delay will only activate if I press the maintenance 4 button so in case I don’t have water back in the display they will not turn on immediately and run dry. I didn’t want my vortechs to delay start when I push feed modes so I set-up a way that it will only delay during a water change via PL 10. In order to achieve the results I wanted with the delay feature you have to invert the maintenance input so that it will function as intended for how I configured it. PL 11 is what I set my function to in the switch menu for my vortech socket.
For my ATO, since I’m using a Tunze Osmolator I already have a controller that has 2 sensors to control the top off pump so all I did was configure some PL statements to provide fault prevention and ease of maintenance when servicing the tank.
(PL 1)
PL 1 switches the socket off if the alarm is on and if my controller says the salinity needs to be increased. Meaning the only time the power will be switched off for the ATO is if the salinity reaches a low level, AKA the top off failed to turn off and dropped my salinity really low from diluting the tank with freshwater.
(PL 4)
PL 4 is used as a delay timer if I activate maintenance 4 (my water change button), I don’t want the top off being delayed unless this action were to occur.
(PL 6)
Lastly, PL6 ties together PL 1 and 4 so that if either one is to switch to off then my socket for my ATO will be turned off. I plan to expand more on my functionality whenever I get my hands on some level sensors. PL 6 is what I set my function to in the socket/switch menu for my ATO.
For my skimmer:
(PL 2)
PL 2 cuts the switch off to my skimmer if my salinity gets too high or low. Without float/optical sensors for my P4 this is my best attempt at shutting down the skimmer if the water level gets too high or low in my sump.
(PL 5)
PL 5 shuts my skimmer off and delays its start-up if my return pump is ever to shut off for any reason. This way my skimmer wont overflow if the return is shut down. This way my skimmer wont delay start if I turn it off for any other reason like when I clean the cup and change filter socks. Maintenance 1 and 2 on my controller are for the skimmer and ATO, I don't want either equipment to delay start when I push those buttons.
(PL 18)
PL 18 is what ties together PL 5 and PL 2 and is ultimately what I set my skimmer’s function to in the sockets and switch menu.
Conclusion
Currently I only have the 4 standard probes that came with my unit so a lot of the configurations I did were all based off readings from the sensors. It will be much more effective to use float/optical sensors for some of the PL statements I made. So, keep that in mind that I set this up the way it is because I just don’t have the level sensors yet. Hopefully this will give you a decent idea as to how to work with PL in order to achieve the functionality you desire for your controller. I would recommend making a list of your equipment and beneath that equipment list all the functions you want your PL to control, this will give you a good idea of what you want to accomplish. From there pull up your programmable logic manual and think things through carefully and attempt to setup the PL that you desire. It is imperative that you test all of your PL, I like to change the nominal settings on my probes to test the functionality of the PL I created. You can crank the nominal value really high or really low then watch the sockets through GCC to see if they are responding the way they should be.
Last edited: