EtherIP: ControlLogix PLC Support

The "EtherIP" driver/device support module interfaces Allen Bradley ControlLogix 5000 PLCs and maybe also Compact Logix devices (see www.ab.com) 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 http://www.odva.org.

Documentation

Read the

which are all included in the sources for compilation and usage.

This should include all that's needed for sombody who already understands the ControlLogix PLC and IOCs.

Refer to the documentation that comes with the PLC or contact Allen Bradley or Rockwell with any questions regarding the PLC itself and its programming.

More links:

Sources

Since August 2010, the sources are on Source Forge as part of the EPICS Applications project's Mercurial repository:

Before that time, it was in the SNS CVS repository at ORNL. Last snapshot from there:

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.

kasemirk@ornl.gov