Rust
Async, typed access with full control over routes, batches, UDTs, diagnostics, and subscriptions.
rust-ethernet-ip = "1.2.0"
Open source · CompactLogix · ControlLogix
A cross-platform PLC communication library for direct CompactLogix and ControlLogix tag access, with first-class Rust, .NET, Python, C, and C++ APIs.
What it does: EtherNet/IP is the industrial Ethernet protocol Logix controllers use to exchange tag data. This driver lets your application read and write those tags without adding an OPC server.
Where the library fits
Build the interface your users need. This project owns the protocol, routing, and controller details between your application code and CompactLogix or ControlLogix tags.
Desktop HMI, web backend, MES service, collector, historian, or edge gateway.
Write normal application code in Rust, C#, Python, C, or C++.
Thin language bindings over one memory-safe Rust protocol core.
The layer this project providesSessions, symbolic paths, chassis routing, batching, fragmentation, and errors.
Read, write, discover, batch, and monitor CompactLogix or ControlLogix tags.
Web application note: the PLC connection belongs in your backend or edge service; browser JavaScript should call that service rather than opening an industrial protocol connection directly.
Choose your stack
Every binding runs through the same Rust implementation, so protocol fixes and controller behavior stay consistent.
Async, typed access with full control over routes, batches, UDTs, diagnostics, and subscriptions.
rust-ethernet-ip = "1.2.0"
Typed, idiomatic APIs for HMIs, MES integrations, Windows services, and ASP.NET applications.
dotnet add package RustEtherNetIp
PLC data for collectors, analytics, historians, APIs, pandas workflows, and edge services.
pip install rust-ethernet-ip==1.2.0
A checked-in C header and compact RAII wrapper for native, Qt, and industrial PC applications.
#include "rust_ethernet_ip.h"
use rust_ethernet_ip::{EipClient, PlcValue};
let mut plc = EipClient::connect("192.168.1.10:44818").await?;
let speed = plc.read_tag("Program:Main.Speed").await?;
plc.write_tag("Program:Main.Setpoint", PlcValue::Dint(1500)).await?;
using var plc = new EtherNetIpClient();
plc.Connect("192.168.1.10:44818");
var speed = plc.ReadDint("Program:Main.Speed");
plc.WriteDint("Program:Main.Setpoint", 1500);
from rust_ethernet_ip import EtherNetIpClient
with EtherNetIpClient("192.168.1.10:44818") as plc:
speed = plc.read_tag("Program:Main.Speed")
plc.write_tag("Program:Main.Setpoint", 1500)
Start in minutes
Direct CompactLogix or routed ControlLogix, controller tags or program tags—the same symbolic paths work across every supported language.
Installation guide →Evidence, not assumptions
The library targets CompactLogix and ControlLogix explicit tag access, including integrated Ethernet and chassis routing. Compatibility claims are tied to an exact processor, firmware, topology, release, and language binding—not only a family name.
Built for industrial software
Rust owns wire parsing, session state, routing, fragmentation, and controller-specific behavior.
C#, Python, and C/C++ share one native implementation and one compatibility contract.
Program tags, arrays, packed BOOLs, built-in and custom strings, nested UDTs, and routed chassis access.
Simulator tests, cross-language contracts, release gates, and real-hardware records live beside the code.
Open source · MIT
Read the docs, inspect the protocol core, or bring another processor and firmware into the compatibility matrix.