benthos ·

Connect Ethernet/IP PLCs with the Unified Namespace

With the new native Ethernet/IP (CIP) input in benthos-umh, you can harvest live tag data from CompactLogix, ControlLogix, Micro800 (and more) and stream it directly through UMH’s high-throughput pipeline. One YAML file, one Docker run, and your plant telemetry is real-time-ready.

Connect Ethernet/IP PLCs with the Unified Namespace
Readme of the new Ethernet/IP input plugin for benthos-umh

We are thrilled to announce a major addition to benthos-umh: native Ethernet/IP connectivity. With this plugin, you can pull live data from Ethernet/IP (i.e. CIP) capable controllers straight into the Unified Namespace (UNS).

Illustration of the dataflow in UMH

What is benthos-umh?

benthos‑umh is our high‑throughput stream processor, forked from Redpanda Connect (formerly Benthos). It powers every Data Flow Component and Protocol Converter you spin up in the UMH Management Console. Out of the box it already speaks OPC UA, Siemens S7, Modbus and SensorConnect. As of today Ethernet/IP joins the toolbox. Since it was built on top of Redpanda Connect, it also natively provides several key components as you can find here.

Why Ethernet/IP?

Ethernet/IP (Ethernet Industrial Protocol) is one of the most widely deployed industrial Ethernet standards.
It rides the full OSI stack – Ethernet (physical & data‑link), IP (network), and TCP/UDP (transport) – and layers the Common Industrial Protocol (CIP) or legacy PCCC on top:

Layering of CIP services on top of TCP/IP and Ethernet

Key capabilities

  • Real-time messaging: It provides explicit messaging (TCP) with a request/response communication model, as well as implicit messaging (UDP) with a producer-consumer model. With this baked in it allows not only for non-continuous data reading, but also for efficient cyclic data transfer.
  • Vendor neutrality: By leveraging the Ethernet/IP protocols, it provides the flexibility of using basic networking devices (i.e. switches)

Ethernet/IP in a nutshell

CIP vs PCCC

Key differences:

Addressing contrast for CIP and PCCC
CIP PCCC
Devices CompactLogix, ControlLogix, Micro800 PLC-5, SLC-5, early MicroLogix
Data model Tags & attributes (object-oriented) File-based (F, N, B, etc.)
Messaging Explicit (TCP) & Implicit (UDP) Explicit only (TCP)
Address syntax 192.168.0.10:MyPump.state 192.168.0.10:B3:1/0

We decided to focus on CIP first, driven by:

  1. Modern controllers overwhelmingly supporting CIP.
  2. Full duplex producer-consumer I/O for high-frequency telemetry.
  3. Cleaner tag semantics that can map 1-to-1 onto UNS topic naming.

Support for PCCC is on the roadmap (see below).

Explicit vs Implicit messaging

Explicit(TCP) Implicit(UDP)
Pattern Request / Response Producer -> Consumer
Typical payloads Configuration, diagnostics Fast cyclic I/O
Reliability Guaranteed delivery Best-effort, low-latency

Currently, we only use explicit messaging for all data, leveraging benthos-umh as a requester. Therefore, you cannot switch to implicit messaging right now. However, this feature will be available when we introduce a subscription-based model here.

How we extended benthos-umh

Integrating Ethernet/IP in the toolbox of input plugins was not a straightforward approach. It didn't feel like implementing only one protocol, because we needed to consider the differing underlying protocols at first. Once the strategy was set, however, we could begin the process in four key steps.

Implementation process

  1. Community-driven roadmap: As mentioned not only the quantity of CIP devices, but also the feedback from our UMH community members were early adopters who guided the spec.
  2. Robust plugin architecture: We implemented the new eip_plugin into benthos-umh to read tags and attributes via CIP, using retries and reconnection logic.
  3. Solid foundation: We built the plugin based on the open-source gologix library, which also provides continuous development.
  4. Comprehensive Testing: This library was also used to build a dockerized eip-server, that is used for testing purposes and will be integrated in CI as well.

Example configuration

The configuration for benthos-umh is very straightforward in a single YAML file. The key concepts of this can also be found in the Management Console, whenever you set up a Data Flow Component or a Protocol Converter. Therefore we've set up templates and some documentation within the console, which can also be found here.

A PLC tag set for Ethernet/IP might look like this:

MyPressureMachine/
pressure           <- REAL
temperature        <- INT
state              <- BOOL
powerConsumption[] <- REAL[10]

Tags in Ethernet/IP devices are usually names for objects or attributes and follow a specific naming schema:
<ip-address>:<TagSet>.<TagName>, wherein the <TagSet> is optional.

  • Read the whole object: 192.168.0.10:MyPressureMachine
  • Read a single attribute: 192.168.0.10:MyPressureMachine.state
  • Read an array slice: 192.168.0.10:MyPressureMachine.powerConsumption/0:10

All those patterns are now unified and simplified by the new plugin:

input:
  ethernetip:
    endpoint: "192.168.0.10:44818" # controller IP
    path: "1,0"                    # optional rack,slot
    tags:
      - name: "MyPressureMachine"
        type: "struct"
        alias: "machine"

      - name: "MyPressureMachine.pressure"
        type: "float32"
        alias: "machine_pressure"

      - name: "MyPressureMachine.temperature"
        type: "int16"
        alias: "machine_temperature"

      - name: "MyPressureMachine.state"
        type: "bool"
        alias: "machine_running"

      - name: "MyPressureMachine.powerConsumption"
        type: "arrayoffloat32"
        length: 10
        alias: "machine_power_curve"

This simplification is achieved through a Read Tag service provided by Ethernet/IP controllers. Currently, we use a continuous polling system, that updates values at predefined intervals (request/response). As previously mentioned we plan to also provide a subscription model, that could reduce the amount of data, which is read at once. This could be a significant improvement for large plants.

Looking Ahead

There are a couple of things already planned to further improve the experience for Ethernet/IP users.

  • multiRead: This feature should improve the efficiency when reading large quantities of tags.
  • listTags: We want to achieve something similar to the Tag-Browser for OPC UA, this will let you simply pick existing tags out of your devices.
  • Write support: At a certain point, we plan to enable writing back to Ethernet/IP devices.
  • Subscription model: This feature reduces the amount of data that needs to be read, since it focuses only on changing values and includes implicit messaging.
  • PCCC: This would expand support for Ethernet/IP devices to older devices.

Try it today

Deploy the Ethernet/IP Protocol Converter template in the UMH Management Console, or pull the latest benthos-umh Docker image:

docker run -v $(pwd)/config.yaml:/config.yaml ghcr.io/united-manufacturing-hub/benthos-umh:latest

It works out of the box with umh-core and, if you're on nightly release channel, with legacy UMH users as well.
If you have any questions or feedback feel free to join our Discord. We'd love to hear how Ethernet/IP works in your plant!

Read next

Node-RED meets Benthos!
benthos · Featured

Node-RED meets Benthos!

Yes, we’ve made it possible to bring Node-RED-style simplicity into Benthos pipelines, enabling your chosen LLM to handle tedious manufacturing connectivity and contextualization tasks—whether you’re prototyping or managing production-grade data flows.

Share, Engage, and Contribute!

Discover how you can share your ideas, contribute to our blog, and connect with us on other platforms.