EtherNet/IP Guide
Read and write tags on Allen-Bradley and other CIP devices.
Overview
ControlBird's EtherNet/IP (EIP) support connects industrial automation systems to Allen-Bradley PLCs, including ControlLogix and CompactLogix families, using the CIP (Common Industrial Protocol) over TCP. Connectivity is tag-based: instead of addressing raw registers, you reference PLC tags by name and map each one to a field on a ControlBird Store entity. Reads, writes, and read/write round-trips are all supported, with configurable polling and per-connection timeouts for resilient operation across less-than-perfect networks.
ControlBird manages the CIP session over TCP and layers tag addressing, data-type mapping, polling, and observability on top.
New to device integration?
EtherNet/IP follows the same controller / endpoint / mapper pattern as every other protocol in ControlBird. For a hands-on introduction to wiring a device into the Store, start with walkthrough step 7: Connect a Device.
Capabilities
- Tag-based addressing using Allen-Bradley CIP syntax, including program scope and array indexing
- Read operations via polling-based tag value retrieval
- Write operations that update PLC tag values from Store fields
- Broad data-type support: Bool, Sint, Int, Dint, Lint, Real, Lreal, String, and UDT structures
- Configurable connection and operation timeouts
ArrayIndexandElementCountfields for array access- Direction control: Read, Write, or ReadWrite per mapper
- Persistent TCP heartbeat mode for stateful connection management
- Detailed protocol wire logging and metrics tracking
- Leader-Only and All-Warm connection modes for multi-endpoint deployments
Default Port
EtherNet/IP communicates over TCP port 44818, the standard Allen-Bradley EIP port defined by IEC 61158-5-12. ControlBird endpoints default to 127.0.0.1:44818; set the Host field to your PLC's network address.
Entity Model
An EtherNet/IP integration is built from three entity types. The controller owns one or more endpoints, and each endpoint is targeted by mappers that bind individual PLC tags to Store fields.
EipClientController
Manages EtherNet/IP client protocol connections and orchestrates the endpoint/mapper lifecycle.
| Field | Purpose |
|---|---|
| Name | Display name of the controller |
| Description | Free-text description |
| Disabled | Disables the controller and its connections |
| EndpointConnectionMode | LeaderOnly (default) or AllWarm for multi-endpoint load balancing |
| Endpoints | Holds the controller's endpoints |
| Faceplates | UI faceplate associations |
EipEndpoint
Configures the connection parameters for a specific Allen-Bradley PLC device.
| Field | Default | Purpose |
|---|---|---|
| Name | (none) | Display name of the endpoint |
| Description | (none) | Free-text description |
| Host | 127.0.0.1 | PLC network address |
| Port | 44818 | EtherNet/IP TCP port |
| ConnectionTimeoutMs | 5000 | Timeout for establishing the TCP/CIP session |
| OperationTimeoutMs | 10000 | Timeout for individual read/write operations |
| TlsEnabled | (none) | TLS toggle (see security note below) |
| Certificate | (none) | Certificate reference |
| Logging | Enabled | Protocol wire logging on/off |
| MaxLogFiles | 1 | Number of rotated log files retained |
| MaxLogSizeMb | 1 | Maximum size per log file (MB) |
| MinRetryBackoffMs | 1000 | Initial reconnect backoff |
| MaxRetryBackoffMs | 60000 | Maximum reconnect backoff |
| Faceplates | (none) | UI faceplate associations |
EipMapper
Maps an individual PLC tag to a ControlBird entity field, with direction and polling configuration.
| Field | Default | Purpose |
|---|---|---|
| Name | (none) | Display name of the mapper |
| Description | (none) | Free-text description |
| Direction | (none) | Read, Write, or ReadWrite |
| Disabled | (none) | Disables the mapper |
| PollIntervalMs | 1000 | Read polling frequency |
| ReadMode | Subscribe | Falls back to polling (see subscriptions note) |
| SourcePath | (none) | PLC tag name to read/write |
| TargetEntity | (none) | Store entity to bind the value to |
| TargetField | (none) | Store field on the target entity |
| ArrayIndex | 0 | Starting index for array tag access |
| ElementCount | 1 | Number of array elements to slice |
| TagName | (none) | PLC tag identifier |
| Faceplates | (none) | UI faceplate associations |
Tag Addressing
EtherNet/IP uses Allen-Bradley CIP tag syntax. Tag names accept alphanumeric characters and underscores; a colon denotes program scope, a dot accesses structure members, and brackets index into arrays.
| Syntax | Example | Meaning |
|---|---|---|
| Controller tag | Temperature | Top-level controller-scope tag |
| Program scope | MyProgram:MainRoutine.Temperature | Tag inside a program, via colon |
| Structure member | Motor.Speed | Member of a UDT, via dot |
| Array element | MyArray[5] | Single element of an array, via brackets |
Data Type Mapping
ControlBird maps PLC data types to its stored value types automatically. All integer widths collapse to Int, and all floating-point widths collapse to Float.
| PLC Type | ControlBird Value |
|---|---|
| Bool | Bool |
| Sint, Int, Dint, Lint | Int |
| Usint, Uint, Udint, Ulint | Int |
| Real, Lreal | Float |
| String | String |
| UDT (User-Defined Type) | Structure |
On write, ControlBird selects a compatible PLC integer or floating-point type based on the value being written, so you do not need to specify the wire type yourself.
Configuration Workflow
EtherNet/IP entities are created and managed through the Device Manager app in the Platform UI. A typical setup proceeds as follows.
- Create an EipEndpoint with the PLC's network address (
Host/Port). Defaults are127.0.0.1:44818. - Adjust
ConnectionTimeoutMs(default 5000ms) andOperationTimeoutMs(default 10000ms) to suit your network. - Create an EipClientController and choose its
EndpointConnectionMode:LeaderOnly(default) orAllWarmfor multi-endpoint load balancing. - Create EipMapper entities that link PLC tag names (
SourcePath) to ControlBird fields (TargetEntity/TargetField). - Set
Direction(Read,Write, orReadWrite) andReadMode.Subscribeis the default but resolves to polling, since native subscriptions are not supported. - Configure
PollIntervalMs(default 1000ms) for read polling frequency. - For array tags, set
ArrayIndex(default 0) andElementCount(default 1) on the mapper. - Keep the endpoint's
LoggingfieldEnabled(default) to capture protocol traffic while debugging.
Polling and Subscriptions
EtherNet/IP has no native subscription mechanism, so mappers fall back to polling. Even though a mapper's ReadMode shows Subscribe by default, value updates are obtained by reading each tag at the configured PollIntervalMs interval.
Connection management uses a persistent TCP heartbeat rather than poll-based liveness. The session is held open for stateful operation; if it drops, ControlBird reconnects using exponential backoff bounded by MinRetryBackoffMs (default 1000ms) and MaxRetryBackoffMs (default 60000ms).
Array Access
To read or write a slice of an array tag, combine the bracket syntax in the tag name with the mapper's array fields. ArrayIndex sets the starting element and ElementCount sets how many elements to transfer.
Tag: MyArray
ArrayIndex: 5
ElementCount: 10
// Reads MyArray[5] through MyArray[14]Security
TLS is not supported in transit
ControlBird's EtherNet/IP transport does not support TLS for EtherNet/IP traffic. To protect device communication, place the connection on a segmented control network or route it through a VPN. On newer PLC firmware, CIP Security can provide authenticated and encrypted CIP sessions. For general certificate handling in ControlBird, see the certificates guide.
Logging and Metrics
When an endpoint's Logging field is Enabled, ControlBird captures both transmitted requests (TX) and received responses (RX). Output is rotated across MaxLogFiles files (default 1), each capped at MaxLogSizeMb megabytes (default 1).
ControlBird also tracks runtime metrics for monitoring connection health and throughput, including active and cumulative connection counts, total tag reads and writes, and request success and error totals.
Multi-endpoint deployments
Use LeaderOnly when a single ControlBird node should own each PLC connection at a time, and AllWarm when you want every endpoint kept warm across nodes for load balancing. The choice is set on the EndpointConnectionMode field of the EipClientController.