EtherIP: ControlLogix PLC Support

The "EtherIP" driver/device support module interfaces Allen Bradley ControlLogix 5000 PLCs as well as Compact Logix devices (see via Ethernet to EPICS IOCs under EPICS R3.13 or R3.14.

It is using a TCP/IP based protocol called EtherNet/IP, where the "IP" stands for Industrial Protocol. EtherNet/IP was also known as ControlNet over Ethernet or CIP over Ethernet, where "CIP" in turn used to be Control and Information Protocol as used by ControlNet, but got renamed into Common Industrial Protocol. If you're not confused, yet, please refer to


Since December 2014, the sources are on GitHub in (Note there is also a Java version of the basic communication library, not connected to an EPCIS IOC, in

Go there, select a release "Tag", for example "ether_ip-2-26", or "master" for the latest, then use the "Download ZIP" button to download a release.

Or use these direct links:

Before, sources were on Source Forge as part of the EPICS Applications project's Mercurial repository.


EtherNet/IP on anything but ControlLogix 5000

There are many other devices besides ControlLogix 5000 which support EtherNet/IP: FlexLogix I/O, PLC5, ...
A common question is: Will this EtherIP driver/device support work with XYZ?

The driver does seem to work with Compact Logix as well. Feel free to try others, but I'm afraid the answer will mostly be: no.

This software accesses the ControlLogix 5000 PLC via CIP service codes 0x0A, 0x4C, 0x4D, all of which are, as far as I know, specific to the ControlLogix 5000, and will not be understood by any other EtherNet/IP device except maybe Compact Logix.

The ControlNet/EtherNet/IP specifications include an "Object Library". In there you find an "Identity" object, to be implemented by any EtherNet/IP device. This driver uses it to obtain the serial number of the Logix 5000 ENET module.

There is a "Message Router" object: We use that to get from the ENET module to the Logix 5000 controller where the ladder logic runs. Other devices like FlexLogix might also implement a MessageRouter object, but when we contact that the same way as we contact the MessageRouter on the Logix 5000 ENET module, I'm pretty sure the response will be: "Invalid Path", because the path from the Logix 5000 ENET module to the controller in slot 0 of the Logix 5000 backplane simply doesn't exist on FlexLogix.

Then there are "Discrete Input Point", "Output Point", "Analog Input Point" etc. objects: Maybe you can use those to access I/O points on any "EtherNet/IP" device. But I was't getting anywhere with them for the Logix 5000. And in order to read/write tags in the Logix 5000 ladder logic, which is what I ultimately wanted to do, I had to use the ControlLogix-specific service codes. So any compatibility to other devices using "EtherNet/IP" is probably limited to generic parts of the protocol.