QUOTE (HandledException @ Sep 1 2009, 12:36 PM)

With that said, I would advise against putting your entire program (or a large portion thereof) into an add on. In my opinion that's not what they are designed for. I personally use add ons to encapsulate small bits of logic which I use often, which helps me out a lot in the code re-use department. Other than that I chop things up logically into programs and go from there. In the end add ons are just another tool in our arsenal, complete with their own strengths and weaknesses.
Actually, add-ons were intended for what you suggest but I've noticed that even some of the AB guys are now suggesting that addons accidentally became a way to implement true modular programming with data encapsulation, hiding, etc. These conceptual ideas have been floating around in the traditional programming world for years and have slowly shown to be valuable over the past couple decades because it allows for separation of concerns. In other words, I can program a "black box". The black box takes some input data, does something useful, and outputs some other data. Once the box is written, I can use/reuse the box as often as desired or needed while working in a different part of my program.
Inside the black box, I can forget about the details outside the box and deal only with what the box is intended to do.
Using this style of programming, code tends to be a few lines long at most and it simplifies things down to the point of reducing bugs and errors substantially.
Until the add-on instruction came along, PLC's really didn't have a good way of doing this.
It's not true object-oriented programming because the AOI's are not encapsulated inside the data structures (UDT's) and because the UDT's are global in scope. But, it's getting closer and gives you roughly 90% of the object-oriented programming result.
The larger problem I have with it is dealing with the environment. It's the same argument that argues for the use of ladder logic and/or function block rather than structured text...that is, one of your target audiences (electricians) would be utterly confused by that style of programming and have a very hard time troubleshooting a modular program implemented with nests of add on instructions.
SOOO....we have routines, programs, and tasks. It's not quite as fancy and creative as the AOI but with some proper care and feeding, you can get close to the same goal.
To date, I've toyed with the concept but since I can't get over the hurdle of what to do about maintenance folks, I haven't used AOI's as a true programming idiom yet.