Knowledge Center
Getting Started12 min readSCADAmatic Engineering

EtherNet/IP: a quick introduction

High level concepts: Objects, services, and messaging

Updated 2026-09-17

This article is a quick introduction to EtherNet/IP for PLC and SCADA programmers who are using it for the first time, or who want a refresher on the terminology. EtherNet/IP is the protocol behind almost every Allen-Bradley ControlLogix and CompactLogix communication path, and it is the reason a SCADA system can ask a controller for Pump_1.Speed by name instead of by register number.

We'll build the vocabulary from the top down: EtherNet/IP, then CIP, then objects, services, addressing, messaging types, and device roles. We finish with a tutorial that reads data from one ControlLogix controller into another.

What is EtherNet/IP?

EtherNet/IP is an industrial communication protocol published by ODVA (the Open DeviceNet Vendors Association). The "IP" does not stand for Internet Protocol, it stands for Industrial Protocol.

EtherNet/IP does not invent a new application language. It takes an existing one, the Common Industrial Protocol (CIP), and defines how to carry it over ordinary Ethernet and TCP/IP.

Because it runs on unmodified Ethernet, EtherNet/IP works over the same switches, cables, and VLANs as the rest of your plant network. No special media, no special NICs.

What is CIP?

CIP is a media-independent application layer. It defines what the message means, not how the bits get across the wire. Three concepts are crucial to understand the data in the CIP packet:

  1. Objects — everything inside a device is modeled as an object (its identity, its network interface, a tag).
  2. Services — the verbs you can perform on those objects (get, set, reset, read tag, write tag).
  3. Connections — the agreements two devices make about how data flows between them (on demand, or cyclically at a fixed rate).

Because CIP sits above the network, the same objects and services appear on every CIP network. An object read via DeviceNet reads the same over EtherNet/IP. That is the whole point of the family.

CIP APPLICATION LAYERCommon Industrial Protocol (CIP)OBJECTS · SERVICES · CONNECTIONS · PROFILESEtherNet/IPTCP + UDP / IPEthernetControlNetCTDMACoax / fiberDeviceNetCANDeviceNet cableCompoNetTDMAFlat/round cableNETWORK ADAPTATIONPHYSICAL LAYERSAME OBJECTS AND SERVICES ON EVERY NETWORK
CIP is the shared application layer; EtherNet/IP is CIP carried over standard Ethernet

EtherNet/IP is one adaptation of CIP. Its siblings are ControlNet, DeviceNet, and CompoNet.

Objects in CIP

An object is a self-contained collection of related data and behavior inside a device. CIP sorts objects into three buckets.

Required objects

Every conformant device implements a set of required objects so that any client can interrogate any device without prior knowledge. The most common ones you'll meet:

ObjectClass codeWhat it holds
Identity0x01Vendor ID, device type, product code, revision, serial number, product name
Message Router0x02Routes every explicit request to the right target object
Assembly0x04Blocks of I/O data grouped for cyclic transfer
Connection Manager0x06Opens, maintains, and closes CIP connections
TCP/IP Interface0xF5IP address, subnet, gateway, hostname
Ethernet Link0xF6Link speed, duplex, interface counters

Application objects

Application objects model the data specific to the device's function. They are defined in the CIP specification so that similar information in a device created by one manufacturer will be stored in the same format as that of another manufacturer. Examples of application objects are:

  • Analog Input Point (0x0A) and Analog Output Point (0x0B)
  • Discrete Input Point (0x08) and Discrete Output Point (0x09)

Vendor-specific objects

Vendor-specific objects let device vendors define custom data structures unique to their devices. Vendors typically document these objects and how EtherNet/IP clients can interact with them.

Class codes from 0x64 upward are reserved for vendors.

ControlLogix PLCs provide a great example of vendor-specific objects. EtherNet/IP itself does not provide a mechanism for reading a tag database, so ControlLogix PLCs use custom vendor objects to allow clients to query tag names and tag values:

  • Symbol object (0x6B) — used to represent the controller-scoped tag information including tag name, data type, and value.
  • Template object (0x6C) — the definitions of UDTs, so a client can decode a structured tag's bytes.

These two objects are why a ControlLogix PLC tag database can be viewed by EtherNet/IP clients as a list of human readable names and values as opposed to a list of numeric addresses and hard to decipher values.

Classes and Instances

All objects in EtherNet/IP are either a class or an instance. A class is a template for an instance. The class contains the definition for what data an instance will hold when an instance is created. It's very similar to classes and instances in object oriented programming languages. If your coming from a ControlLogix PLC programming environment, you can think of templates like user defined data types (UDTs) and instances like tags set to a UDT type.

  • Class — the type of object. "Analog Input" is a class. Identified by a class code.
  • Instance — one specific occurrence of that class. Analog input #1 and analog input #2 are two instances of the same class.

EtherNet/IP clients can query a class for information about its instances — for example, ask it to report the list of instance IDs created from it.

This is useful for EtherNet/IP clients in SCADA software that want to present a list of tags in a ControlLogix PLC to the user. In ControlLogix PLCs, the Symbol Object class (0x6B) has an instance for every tag in the controller-scoped tag table. First, SCADA EtherNet/IP clients ask the Symbol Class (0x6B) to provide a list of all instance IDs belonging to the Symbol Class (0x6B) class. Then, the client queries each instance to get the tag name, data type, and value.

Again, the Symbol Object class is a Rockwell specific vendor object and not specified by ODVA in the EtherNet/IP standard. Other PLC vendors supporting EtherNet/IP can choose to represent their tag tables a different way. That's the flexibility EtherNet/IP provides with vendor defined objects.

Attributes

An attribute is one data item inside an instance — a value, a status word, a data type, an alarm limit, a product name. Attributes are identified by a numeric attribute ID within the instance, and each object class definition dictates which attribute IDs its instances carry and what each one means.

Example Identity Object (0x01) for ControlLogix PLC

Here is an example of an address to the product name attribute stored in the identity object of a ControlLogix PLC, expanded to show several of the attributes the identity object carries and the values a real 1756-L83E controller could store in them:

TermValueMeaning
Attribute1Vendor ID — 1 for Rockwell Automation
Attribute2Device Type — 0x0E for a programmable logic controller
Attribute3Product Code — a number specific to the model of CPU and is set by Rockwell
Attribute4Revision — e.g. 4.011
Attribute5Status — a bit-packed word showing the controller state
Attribute6Serial Number — a unique hex value, e.g. 0xA3F27B10
Attribute7Product Name — a short string, e.g. 1756-L83E/B
CIP DEVICE (e.g. CONTROLLOGIX CONTROLLER)Message RouterCLASS 0x02 · ROUTES EVERY EXPLICIT REQUESTREQUIRED OBJECTSIdentity0x01Assembly0x04Connection Mgr0x06TCP/IP Interface0xF5APPLICATION OBJECT CLASSESAnalog Input0x0ADiscrete Output0x09VENDOR SPECIFICSymbol0x6B · TAG NAMESTemplate0x6C · DATA TYPESINSTANCE OF ONE OBJECT CLASSClass 0x0AANALOG INPUTInstance 1FIRST AI POINTInstance 2SECOND AI POINTAttribute 3 — ValueAttribute 7 — Data Type
Simplified CIP object model

Services: what you can do with objects

Objects hold data, but on their own they are inert. A service is the action a client requests against an object, the verb of the sentence. When an EtherNet/IP client wants to take some form of action on data held within an EtherNet/IP server, it sends a request to trigger a service (e.g. read an attribute value) along with certain parameters (which attribute value to read).

Services are like methods of an instance of a class in an object oriented programming language. They allow actions to be taken on the data within an object.

Object = the noun (data). Service = the verb (what to do with it). Path = the address (which one).

Services belong in one of three categories:

  • Common services — defined by CIP and understood by every device (get an attribute, set an attribute, reset).
  • Object-specific services — defined by one object class.
  • Vendor-specific services — defined by device vendors for their own custom objects.

Common service codes

CodeServiceWhat it does
0x01Get_Attributes_AllReturns every attribute of an instance in one shot
0x02Set_Attributes_AllWrites every attribute of an instance
0x05ResetResets the object (and often the device)
0x0AMultiple_Service_PacketBundles several services into one request
0x0EGet_Attribute_SingleReturns one attribute — the workhorse read
0x10Set_Attribute_SingleWrites one attribute — the workhorse write
0x55Get Instance Attribute ListBrowses the Symbol object to enumerate tags

Object specific services

Several required objects in the object model have object specific services. These services are defined by a single object class and are only meaningful for that class. The table below shows a couple examples, along with the object class each service belongs to.

CodeServiceObject classWhat it does
0x54Forward_OpenConnection Manager Object (0x06)Opens a connection between devices
0x4EForward_CloseConnection Manager Object (0x06)Closes a connection between devices

Vendor Specific Services

Just as device vendors can create custom classes, they can also create services specific to their devices.

ControlLogix PLCs are a great example. The Symbol Object (0x6B) and Template Object (0x6C) vendor specific classes mentioned earlier also come with object specific services. The most common object specific services for Symbol Object (0x6B) are listed below.

CodeServiceWhat it does
0x4CRead Tag (Logix)Reads a named tag value
0x4DWrite Tag (Logix)Writes a named tag value
0x52Read Tag Fragmented (Logix)Reads a tag value too large for a single request
0x53Write Tag Fragmented (Logix)Writes a tag too large for a single request

Referencing Data

Referencing data (a class, an instance, an attribute) is done via something called a path in EtherNet/IP. A path is simply a concatenation of ID numbers that starts with the highest container to the most specific. For example, if attempting to identify the Identity object class (0x01), instance 1, product name (attribute 7), the path in human readable form is: 0x01, 1, 7.

When a path is encoded in EtherNet/IP transmissions, it's encoded using a data type definition called an EPATH, which simply defines how the ID numbers are packed and encoded into binary when transmitted over the wire to separate devices.

Human readable pathEPATH byte breakout
Class 0x01, Instance 1, Attribute 50x20 0x01 0x24 0x01 0x30 0x05
Class 0x01, Instance 1, Attribute 70x20 0x01 0x24 0x01 0x30 0x07

Breaking the bytes down:

  • 0x20 — Class segment, 8-bit value follows
  • 0x01 — the class ID (Identity object)
  • 0x24 — Instance segment, 8-bit value follows
  • 0x01 — the instance number
  • 0x30 — Attribute segment, 8-bit value follows
  • 0x05 / 0x07 — the attribute ID (Status / Product name)

Messaging

CIP allows for two very different types of messaging, explicit and implicit messaging.

Explicit Messaging

Everytime an EtherNet/IP client wants something from an EtherNet/IP server, it sends an explicit message. The request includes a service code (what the server should do), a path (what data the server should execute the service on), and other parameters specific to the service. It is transmitted via TCP, so if the transmission packet is lost on the wire somewhere, the network hardware is guaranteed to attempt retransmitting or notifying the client of a transmission failure. While this is a very reliable way to provide on demand information to the client, it has a lot of overhead and is less efficient than implicit messaging.

Implicit Messaging

When an EtherNet/IP device needs data at frequent periodic intervals, implicit messaging is the better alternative. A typical use case is sending I/O point values from a remote I/O chassis to a PLC several times a second. Implicit messaging uses a "producer/consumer" model, which can be thought of like a subscription type model: a consuming device notifies a producing device that it would like data X, Y, Z sent every # ms, and the producer sends it as requested.

Rather than TCP, implicit messaging uses UDP, so the network does not spend time ensuring every packet arrives — if one is dropped, a newer packet arrives a few milliseconds later anyway.

With implicit messaging, a single message is sent from producer to consumer each time data is needed, rather than with explicit messaging where a request is always sent before the response. This effectively cuts network overhead in half.

EXPLICIT MESSAGING · TCPEtherNet/IP Cliente.g. SCADAEtherNet/IP Servere.g. PLCREQUEST: READ TAG Pump_1.SpeedRESPONSE: REAL 1780.5~100 msREQUEST: WRITE TAG Setpoint = 55.0RESPONSE: SUCCESS~100 msIMPLICIT MESSAGING · UDPEtherNet/IP Consumere.g. PLCEtherNet/IP Producere.g. Remote I/O RackCONNECTION REQUEST, I/O POINTS 1-100, EVERY 10MSDATA10 msDATA10 msDATA
Explicit and Implicit Diagram
ExplicitImplicit
TransportTCPUDP
PatternRequest / responseCyclic producer / consumer
Packet contentsService + path + dataData only
Typical rate100 ms – seconds5 – 20 ms
Typical useSCADA polling, MSG instructions, configurationRemote I/O, drives, safety

Types of EtherNet/IP devices

A device is classified by the roles it can perform. Many devices perform several at once — a ControlLogix PLC does all four.

RoleWhat it doesTypical example
ScannerOriginates implicit connections to cyclically exchange data with Adapters.ControlLogix PLC gathering data from remote I/O chassis
AdapterReceives implicit connections from scanners and sends data cyclically to scanners.Remote I/O chassis and motor drives
ClientOriginates explicit requests to interact with a server's dataSCADA/HMI, MSG instruction block in ControlLogix PLC
ServerResponds to explicit requests send from clientsControlLogix controller, SimServe

For a SCADA programmer, the pairing that matters is the bottom two: your SCADA is the EtherNet/IP client, and the controller is the EtherNet/IP server.

Where SimServe fits

Usually there isn't a second ControlLogix sitting on the bench, and the SCADA work still has to happen.

SimServe acts as the ControlLogix PLC. It presents a simulated PLC on the network — Identity object, Symbol object, tag names, data types, and live values — so an explicit message client can read and write it exactly as it would a real controller. Point your SCADA (or a MSG instruction from a real PLC) at SimServe's IP address, browse or type the tag names, and you get real EtherNet/IP responses with no controller, no chassis, and no rack of I/O.

That means tag databases, alarm logic, HMI screens, and historian configuration can all be built and validated before the panel ships — and re-validated any time you change something, without borrowing production hardware.