S
Hi All, I must admit that I'm not much of a lurker, because I haven't been lurking all that long. Please excuse any of my comments that seem silly/redundant/etc.. Apparently what you're trying to do with the LinuxPLC/PuffinPLC project is to make the basis for a free PLC, that anyone can use, and anyone can add to. True open source, and I'm very excited. Now, let me give you a few background details about myself - I took engineering in university, and have since been working in the Control Systems Integration field. My experience includes: OSes: Windows, QNX 4.x, QNX Neutrino, QNX RTP, and Linux. Throw in a real time OS course in there too. Controllers: Modicon Compact 984, AB SLC500, PLC5, and ControlLogix 5000. Also, Steeplechase VLC. FieldBus technologies: DeviceNet, ControlNet. ----------- Now, I'm eager to participate in this project, but my first reaction is that there is a lack of direction or vision. If I may make a comparison, when Linus Torvalds started Linux, he had a very clear goal in mind: "Make a UNIX for the PC". I think that someone needs to state a similar one-liner, and make it the motto of your project. Several suggestions come to mind... "Make a PLC for Linux", for instance. However, that doesn't quite capture what I think it is you're trying to do here. Your real motive, perhaps, is to "Create an open PLC architecture". That way, you're not tying yourself to any particular OS, or hardware. Some of you are probably wrinkling your foreheads right now, so let me try to explain with an analogy. Most of you are probably familiar with the concept of object oriented programming, and many of you have expressed interest in applying these concepts to PLCs. Now, in an OO environment, if you want to create something big, you don't need to start writing classes - all you really need to do is design a really good set if interfaces to those classes. The implementation can't be written until the interface is defined. Back to PuffinPLC... Rather than actually saying that your PLC is a group of processes running on a Linux box (which, by the way, is an *excellent* beginning), try saying that the "PLC Node" is really just a collection of "points" (instances of various data types) with built-in controls to limit access to those points. A "module" (good word) is an "executive" that accesses the points in a PLC Node (read and write). Note that you've already begun this with your idea of a central memory manager that co-ordinates communications amongst various modules. I would suggest one other addition... to borrow from the world of Unix, consider a *virtual* entity called a "Pipe". A Pipe moves a set of points from one PLC Node to another (think producer/consumer). A pipe might consist of a module that connects a PLC Node to a fieldbus, and another module at the other end that connects the fieldbus to another PLC Node. Another simpler situation might be a module that connects two PLC Nodes that reside on the same computer. The importance of a pipe is not that it moves data, but rather that it provides built-in handshaking between the two PLC Nodes. Now, as an integrator, I could design my system as a group of PLC Nodes, and I can put them wherever I want... two on this processor, one over here... I can use the Pipes as the synchronous binding of the system, and any two nodes can talk to each other to share the data (status, I/O, etc.) they need. Here's the important part for me though... Plug'n'Play. I want to be able to plug a new processor into my system, with preloaded Nodes and modules on it, and then I want to be able to dynamically create a virtual Pipe from wherever I'm currently logged on, to that new PLC Node, through any number of intermediate Nodes, so that I can do an online test and configuration of that new hardware. Basically, every PLC Node also needs to act as a *bridge* between any two of its communication links (modules). ...and then I want the interface scalable enough that it can be implemented (in basic form) on something as small as a microcontroller. I want to be able to plug a microcontroller PLC Node into my parallel port, and then create a pipe to that microcontroller through every intermediate node on the network, and through the parallel port driver module, so that I can access the internal coils of the PLC Node in that microcontroller. Can we do this?!?!? Please....
I want to help! _______________________________________________ LinuxPLC mailing list [email protected] http://linuxplc.org/mailman/listinfo/linuxplc