CIP Object Model Explained: Classes, Instances, Attributes, and Services

By | April 14, 2026

Every CIP device — whether it is an Allen-Bradley PLC, a variable frequency drive, a remote I/O module, or a safety controller — organizes its data using the same object model. Understanding this model is the key to configuring, programming, and troubleshooting any CIP-based device.

CIP (Common Industrial Protocol) does not use register maps like Modbus. Instead, it uses an object-oriented structure where every piece of data belongs to a Class, an Instance of that class, and an Attribute of that instance. You access data by sending a Service request that specifies the Class, Instance, and Attribute.

This guide explains the CIP object model from the ground up: how classes, instances, and attributes work, what the standard CIP objects are, how services and connections function, and what the error codes mean when something goes wrong.

1. What Is the CIP Object Model

CIP models every device as a collection of objects. An object is a structured container that holds data (attributes) and supports operations (services).

This is fundamentally different from Modbus, where all data lives in flat register tables. In CIP, data is organized hierarchically:

Device → Object Class → Instance → Attribute

Every CIP device, regardless of vendor, uses this same structure. A Rockwell Automation CompactLogix PLC and a third-party VFD both expose their data through CIP objects with the same class codes, service codes, and addressing rules.

2. Classes, Instances, and Attributes

Class

A class is a template that defines a type of object. Each class has a unique Class ID (a numeric code). CIP defines many standard classes, and vendors can add their own.

Examples:

Class ID (hex)NamePurpose
0x01IdentityDevice identification (vendor, product, serial number)
0x02Message RouterRoutes explicit messages to the correct object
0x04AssemblyGroups I/O data into assemblies for implicit messaging
0x05ConnectionManages communication connections
0x06Connection ManagerCreates, manages, and tears down connections (Forward Open/Close)
0xF5TCP/IP InterfaceIP address, subnet mask, gateway (EtherNet/IP only)
0xF6Ethernet LinkLink speed, duplex, MAC address (EtherNet/IP only)

Instance

An instance is a specific occurrence of a class. Instance 0 is the class level (class attributes). Instance 1, 2, 3, etc. are individual object instances.

For example, a device with two Ethernet ports has:

  • Ethernet Link Object, Instance 1 → port 1
  • Ethernet Link Object, Instance 2 → port 2

Attribute

An attribute is a single data element within an instance. Each attribute has an Attribute ID (a numeric code).

For example, the Identity Object (Class 0x01), Instance 1 has:

Attribute IDNameData TypeDescription
1Vendor IDUINTODVA-assigned vendor identifier
2Device TypeUINTDevice type code
3Product CodeUINTVendor-specific product code
4RevisionStruct (USINT.USINT)Major.Minor revision
5StatusWORDDevice status bits
6Serial NumberUDINTUnique serial number
7Product NameSHORT_STRINGHuman-readable product name

3. How CIP Addressing Works: The EPATH

Every CIP message includes a path that tells the device where to deliver the request. This path is called an EPATH (Electronic Path) and is encoded as a sequence of segments.

The most common segment types:

SegmentFormatExample
Class ID8-bit or 16-bit logicalClass 0x01 (Identity)
Instance ID8-bit or 16-bit logicalInstance 1
Attribute ID8-bit or 16-bit logicalAttribute 7 (Product Name)
Port / LinkPort segmentBackplane port 1, slot 3
SymbolicASCII stringTag name (Logix-specific)

A typical EPATH for reading the Product Name from the Identity Object:

Class 0x01 → Instance 1 → Attribute 7

For Logix controllers, tags are addressed using symbolic segments — the tag name is sent as an ASCII string in the EPATH.

4. CIP Services: How Devices Exchange Data

A service is an operation you perform on an object. Every CIP message contains a service code that tells the target object what to do.

The general message format:

FieldDescription
Service CodeWhat operation to perform (1 byte)
Request PathEPATH — which Class/Instance/Attribute to target
Request DataService-specific data (e.g., the value to write)

The response format:

FieldDescription
Reply Service CodeOriginal service code with bit 7 set (0x80 OR’d)
General StatusSuccess (0x00) or an error code
Extended StatusAdditional error detail (if any)
Response DataThe requested data (for reads)

5. Common CIP Service Codes

Code (hex)NameDescription
0x01Get_Attributes_AllRead all attributes of an instance
0x02Set_Attributes_AllWrite all attributes of an instance
0x03Get_Attribute_ListRead specific attributes by ID
0x04Set_Attribute_ListWrite specific attributes by ID
0x05ResetReset the object or device
0x08CreateCreate a new object instance
0x09DeleteDelete an object instance
0x0DApply_AttributesApply configuration to a connection
0x0EGet_Attribute_SingleRead one specific attribute
0x10Set_Attribute_SingleWrite one specific attribute
0x11Find_Next_Object_InstanceSearch for instances
0x4BRead_Tag_ServiceRead a tag value (Logix-specific)
0x4CRead_Tag_Fragmented_ServiceRead a large tag in fragments
0x4DWrite_Tag_ServiceWrite a tag value (Logix-specific)
0x4EWrite_Tag_Fragmented_ServiceWrite a large tag in fragments
0x52Read_Modify_Write_TagAtomic read-modify-write (Logix)
0x54Forward_OpenEstablish a CIP connection
0x4EForward_CloseClose a CIP connection

Services 0x4B–0x4E and 0x52 are Logix-specific — used by Allen-Bradley ControlLogix and CompactLogix controllers for tag-based access.

6. Explicit Messaging vs Implicit Messaging

CIP defines two messaging types:

FeatureExplicit MessagingImplicit Messaging
PurposeConfiguration, diagnostics, tag reads/writesCyclic I/O data exchange
TransportTCP (EtherNet/IP port 44818)UDP (EtherNet/IP port 2222)
Message contentService code + Class/Instance/Attribute path + dataRaw I/O data only (no path)
PatternRequest → ResponseProducer → Consumer (continuous)
Connection typeUnconnected (UCMM) or connectedAlways connected (Forward Open required)
TimingOn-demandCyclic at the RPI (Requested Packet Interval)
Use caseRead device identity, change parameters, read tagsExchange input/output data between PLC and I/O module

7. The Connection Manager Object (Class 0x06)

The Connection Manager is the most important CIP object for real-time communication. It creates, manages, and tears down connections between devices.

Class Code: 0x06

Key services:

Service CodeNamePurpose
0x54Forward_OpenEstablish a new connection
0x4EForward_CloseClose an existing connection
0x52Unconnected_SendSend a message without a connection (routed through intermediary devices)
0x5BGet_Connection_DataRead connection status information

8. Forward Open and Forward Close

Forward Open (Service 0x54)

The Forward_Open service establishes a CIP connection for implicit I/O data exchange. It is the single most important message in EtherNet/IP.

Key parameters in the Forward_Open request:

ParameterDescription
Connection Serial NumberUnique identifier for this connection
Originator Vendor IDVendor ID of the requesting device
Originator Serial NumberSerial number of the requesting device
O→T Connection IDConnection ID for Originator-to-Target data
T→O Connection IDConnection ID for Target-to-Originator data
O→T RPIRequested Packet Interval for O→T direction (µs)
T→O RPIRequested Packet Interval for T→O direction (µs)
O→T Network Connection ParametersConnection size, type (point-to-point or multicast), priority
T→O Network Connection ParametersConnection size, type, priority
Transport Class/TriggerTransport class (0–3) and trigger type (cyclic, change-of-state, application)
Connection PathEPATH specifying the target — typically backplane/slot for I/O, or assembly instances

Connection Path Examples

I/O connection to a module in slot 3:

Port 1 (backplane), Link Address 3 → Configuration Assembly → O→T Assembly → T→O Assembly

Forward Close (Service 0x4E)

The Forward_Close service tears down an existing connection. It uses the Connection Serial Number, Vendor ID, and Originator Serial Number to identify which connection to close.

9. Transport Classes and Triggers

The Transport Class/Trigger byte in the Forward_Open defines how data flows:

BitFieldValues
7Direction0 = Client, 1 = Server
6–4Production Trigger0 = Cyclic, 1 = Change-of-State, 2 = Application Object
3–0Transport Class0, 1, 2, or 3

Transport Classes

ClassBehavior
0Produce-only or consume-only. No sequence counter.
1Produce-only or consume-only. 16-bit sequence counter prepended. Duplicates detected.
2Produce and consume. Server responds immediately (auto-reply). Sequence counter included.
3Produce and consume. Server responds after application processes data. Sequence counter included.

Class 0 and 1 are used for I/O connections. Class 3 is used for explicit messaging connections.

Production Triggers

TriggerWhen Data Is Produced
CyclicAt every RPI interval (timer-based)
Change-of-StateWhen the application data changes
Application ObjectWhen the application decides to produce

10. Standard CIP Object Library

CIP defines a large library of standard objects. The most commonly used:

Class ID (hex)NameRequired?Purpose
0x01IdentityRequiredDevice identification
0x02Message RouterRequiredRoutes explicit messages
0x04AssemblyCommonGroups I/O data into assemblies
0x05ConnectionRequiredManages connection endpoints
0x06Connection ManagerRequiredForward Open/Close, Unconnected Send
0x08Discrete Input PointOptionalSingle digital input
0x09Discrete Output PointOptionalSingle digital output
0x0AAnalog Input PointOptionalSingle analog input
0x0BAnalog Output PointOptionalSingle analog output
0x0FParameterCommonDevice parameters (drives, sensors)
0x23Acknowledge HandlerOptionalAcknowledges alarm messages
0x29Discrete Input GroupOptionalGroup of digital inputs
0x2ADiscrete Output GroupOptionalGroup of digital outputs
0x2BDiscrete GroupOptionalMixed I/O group
0xF5TCP/IP InterfaceEtherNet/IPIP configuration
0xF6Ethernet LinkEtherNet/IPLink status, speed, duplex

11. The Identity Object (Class 0x01)

Every CIP device must support the Identity Object. It provides basic identification.

Class Code: 0x01 Required: Yes, on all CIP devices

Instance Attributes

Attr IDNameData TypeAccess
1Vendor IDUINTGet
2Device TypeUINTGet
3Product CodeUINTGet
4RevisionStruct (Major.Minor)Get
5StatusWORDGet
6Serial NumberUDINTGet
7Product NameSHORT_STRINGGet

Services

ServiceCodeDescription
Get_Attributes_All0x01Returns all attributes in a single response
Reset0x05Resets the device (Type 0 = power cycle equivalent, Type 1 = return to factory defaults)
Get_Attribute_Single0x0ERead one attribute

Practical Use

In Wireshark, a List Identity response (EtherNet/IP encapsulation command 0x0063) returns the Identity Object data for device discovery. This is how engineering tools find devices on the network.

12. The Message Router Object (Class 0x02)

The Message Router receives all incoming explicit messages and routes them to the correct target object based on the EPATH in the request.

Class Code: 0x02 Required: Yes

Every explicit message — whether it arrives via UCMM (unconnected) or over a connected explicit messaging connection — passes through the Message Router first.

Message Router Request Format

FieldData TypeDescription
ServiceUSINTService code of the request
Request Path SizeUSINTNumber of 16-bit words in the path
Request PathPadded EPATHClass ID, Instance ID, Attribute ID
Request DataByte arrayService-specific data

Message Router Response Format

FieldData TypeDescription
Reply ServiceUSINTService code with bit 7 set
ReservedByteAlways 0
General StatusUSINTStatus code (0 = success)
Size of Additional StatusUSINTNumber of 16-bit words in additional status
Additional StatusArray of WORDExtended error information
Response DataByte arrayRequested data

13. The Connection Object (Class 0x05)

The Connection Object represents one endpoint of a CIP connection. When a Forward_Open succeeds, the Connection Manager creates an instance of the Connection Object.

Class Code: 0x05

Key Instance Attributes

Attr IDNameData TypeDescription
1StateUSINT0=Non-existent, 1=Configuring, 3=Established, 4=Timed Out
2Instance TypeUSINT0=Explicit Messaging, 1=I/O, 2=CIP Bridged
3Transport Class/TriggerBYTETransport class (0–3) and trigger type
7Produced Connection SizeUINTMax bytes transmitted
8Consumed Connection SizeUINTMax bytes received
9Expected Packet RateUINTRPI in milliseconds
10CIP Produced Connection IDUDINTConnection ID for outgoing data
11CIP Consumed Connection IDUDINTConnection ID for incoming data
12Watchdog Timeout ActionUSINT0=Transition to Timed Out, 1=Auto Delete, 2=Auto Reset

Connection States

ValueStateMeaning
0Non-existentNot yet created
1ConfiguringCreated, waiting for configuration
3EstablishedActive, exchanging data
4Timed OutInactivity/watchdog timeout occurred

14. The Assembly Object (Class 0x04)

The Assembly Object groups multiple data points into a single block for efficient I/O transfer. Instead of reading each point individually, the PLC reads or writes an entire assembly in one implicit message.

Class Code: 0x04

Assemblies are referenced by Instance ID in the Forward_Open connection path:

  • Input Assembly — data produced by the I/O device (T→O direction)
  • Output Assembly — data consumed by the I/O device (O→T direction)
  • Configuration Assembly — parameter data sent during connection setup

Assembly instance numbers are device-specific and documented in the device’s EDS file.

15. CIP General Status Codes

Every CIP response includes a General Status code. 0x00 means success. Anything else is an error.

Code (hex)NameMeaning
0x00SuccessService completed successfully
0x01Connection FailureConnection-related error (check extended status)
0x02Resource UnavailableDevice out of memory or resources
0x03Invalid Parameter ValueA parameter in the request is out of range
0x04Path Segment ErrorInvalid segment in the EPATH
0x05Path Destination UnknownTarget object does not exist
0x08Service Not SupportedThe target object does not support this service
0x09Invalid Attribute ValueAttribute value out of range
0x0AAttribute List ErrorOne or more attributes in a list request failed
0x0CObject State ConflictObject is in the wrong state for this service
0x0EAttribute Not SettableAttribute is read-only
0x10Device State ConflictDevice is not in the right mode
0x13Not Enough DataRequest is too short
0x14Attribute Not SupportedAttribute ID does not exist
0x15Too Much DataRequest is too long
0x1ETag Not FoundLogix tag name does not exist
0x20Invalid ParameterService-specific parameter error
0x26Bridge Request Too LargeMessage too large for routing path

16. CIP Extended Status Codes for Connection Manager

When a Forward_Open fails (General Status = 0x01), the Extended Status field provides the specific reason.

Extended Status (hex)MeaningCommon Cause
0x0100Connection in use or duplicate Forward OpenConnection already exists
0x0103Transport class and trigger not supportedDevice does not support the requested transport
0x0106Ownership conflictAnother scanner already owns this connection
0x0107Connection not found at targetWrong connection path (backplane/slot error)
0x0108Invalid connection typeMismatch in connection parameters
0x0109Invalid connection sizeO→T or T→O size does not match device
0x0110Target does not support requested RPIRPI too short for the device
0x0111RPI out of rangeRPI value is out of the supported range
0x0113RPI not acceptableConnection rejected due to RPI constraints
0x0116Invalid O→T connection sizeOutput assembly size mismatch
0x0117Invalid T→O connection sizeInput assembly size mismatch
0x0203Connection timed outTarget did not respond in time
0x0204Unconnected send timed outIntermediate router did not forward the message
0x0311Real time format not acceptableRun/idle header mismatch
0x0312No internal resourcesDevice cannot create more connections

17. How CIP Maps to EtherNet/IP, DeviceNet, and ControlNet

CIP is the application layer. The network adaptation defines how CIP messages are transported.

FeatureEtherNet/IPDeviceNetControlNet
Physical layerEthernet (100 Mbps / 1 Gbps)CAN bus (125–500 kbps)Coaxial cable (5 Mbps)
Explicit messaging transportTCP port 44818CAN Group 2 messagesScheduled/unscheduled slots
Implicit I/O transportUDP port 2222CAN Group 1 messagesScheduled bandwidth
Connection setupForward_Open via Connection ManagerPredefined connections or Forward_OpenForward_Open
Max nodesUnlimited (IP-based)64 per segment99 per segment
Connection ID32-bit (UDINT)11-bit CAN IDNetwork-allocated NCI

CIP is the same on all networks. Only the transport changes.

18. CIP Data Types

CIP uses IEC 61131-3 compatible data types:

CIP TypeSizeDescriptionRange
BOOL1 bitBooleanTRUE/FALSE
SINT1 byteSigned 8-bit integer-128 to +127
USINT1 byteUnsigned 8-bit integer0 to 255
INT2 bytesSigned 16-bit integer-32,768 to +32,767
UINT2 bytesUnsigned 16-bit integer0 to 65,535
DINT4 bytesSigned 32-bit integer-2,147,483,648 to +2,147,483,647
UDINT4 bytesUnsigned 32-bit integer0 to 4,294,967,295
REAL4 bytesIEEE 754 single-precision float±3.4 × 10³⁸
LREAL8 bytesIEEE 754 double-precision float±1.7 × 10³⁰⁸
STRINGVariableCharacter stringUp to 65,535 characters
SHORT_STRINGVariableShort string (1-byte length prefix)Up to 255 characters
WORD2 bytes16-bit bit stringBit-level access
DWORD4 bytes32-bit bit stringBit-level access

All CIP data is encoded in little-endian byte order (least significant byte first). This is the opposite of Modbus (big-endian).

Summary

The CIP object model is the foundation of EtherNet/IP, DeviceNet, and ControlNet communication. Every device exposes its data through classes, instances, and attributes — accessed using standardized service codes.

The key concepts:

  • Class → Instance → Attribute is the CIP addressing model (not register numbers)
  • Services define what operation to perform (Get, Set, Forward_Open, Read_Tag)
  • Explicit messaging (TCP 44818) is for configuration and diagnostics
  • Implicit messaging (UDP 2222) is for cyclic I/O data
  • Forward_Open (service 0x54) establishes I/O connections — it is the most important CIP message
  • General Status 0x00 = success. Anything else means an error — check the code tables.
  • CIP data is little-endian — the opposite of Modbus

For CIP port details, see: CIP Protocol Ports: How EtherNet/IP Uses Ports 44818 and 2222

For the full CIP architecture guide, see: What Is the CIP Protocol? Complete Guide

For Wireshark analysis, see: Wireshark for EtherNet/IP: How to Capture and Decode CIP Traffic

Author: Zakaria El Intissar

I'm an automation and industrial computing engineer with 12 years of experience in power system automation, SCADA communication protocols, and electrical protection. I build tools and write guides for Modbus, DNP3, IEC 101/103/104, and IEC 61850 on ScadaProtocols.com to help engineers decode, analyze, and troubleshoot real industrial communication systems.

Leave a Reply

Your email address will not be published. Required fields are marked *