Production-focused EtherNet/IP library for Allen-Bradley CompactLogix and ControlLogix PLCs.
Version Status
- Current stable release:
0.7.0 - Previous stable release:
0.6.3 - Real-hardware validation evidence is included for the release
Release snapshot:
- simulator, FFI, Rust, and C# regression gates were completed for
0.7.0 - real-hardware validation was completed on one CompactLogix and one ControlLogix target
0.7.0is the current released line
Project Focus
- Rust core library
- C# wrapper (
RustEtherNetIp.dll) - Industrial PC applications (Windows/Linux/macOS)
- Deterministic behavior and regression safety
Key Capabilities
- Native support for all 13 common AB data types:
BOOL,SINT,INT,DINT,LINT,USINT,UINT,UDINT,ULINT,REAL,LREAL,STRING,UDT - Advanced tag addressing: program-scoped tags, array indexing, bit access, nested UDT paths
- Route path support for backplane/slot routing (ControlLogix)
- Batch operations (
read_tags_batch,write_tags_batch,execute_batch) - Tag-group polling API (
upsert_tag_group,read_tag_group_once,subscribe_tag_group) - UDT discovery and metadata access
- Real-time subscriptions and health-check APIs
- C# wrapper for .NET integration
Known PLC/Firmware Limitations
Some write behaviors are restricted by PLC firmware (not library protocol implementation):
- Direct writes to standalone
STRINGtags can fail on some controllers - Direct writes to
STRINGmembers inside UDTs can fail on some controllers - Direct writes to UDT array element members (for example
MyUdtArray[0].Member) can fail
Real-hardware note from the 0.7.0 release validation:
- Validated on
5069-L320ERMS3, firmware35, at192.168.0.1:44818 - Validated on
1756-L81ES, firmware37, via1756-EN3TRslot0at192.168.0.101:44818 - On that CompactLogix target, normal reads/writes, route-path access, subscriptions, UDT reads, and batch operations are working
- On that ControlLogix target, the same main read/write, route-path, subscription, UDT-read, and batch paths are working
- On that same target, the remaining observed firmware-imposed limits are:
- direct
STRINGwrites, which can surface as batch-level0x1Eor extended0x2107 - direct writes to UDT array element members, which surface as
0x2107
- direct
Recommended pattern for restricted cases: read-modify-write the full UDT/array element.
Detailed technical background and examples:
- AB String/UDT write limitations
- CompactLogix real-PLC validation record
- CompactLogix C# wrapper validation record
- ControlLogix real-PLC validation record
- ControlLogix C# wrapper validation record
Installation
Rust
[]
= "0.7.0"
= { = "1", = ["full"] }
C#
Quick Start (Rust)
use ;
async
Quick Start (C#)
using RustEtherNetIp;
using var client = new EtherNetIpClient();
if (client.Connect("192.168.1.100:44818"))
{
bool running = client.ReadBool("Program:Main.MotorRunning");
int count = client.ReadDint("Program:Main.ProductionCount");
client.WriteBool("Program:Main.Start", true);
client.WriteDint("Program:Main.SetPoint", 1500);
Console.WriteLine($"running={running}, count={count}");
}
Batch Operations
use ;
// Batch write
let writes = vec!;
let write_results = client.write_tags_batch.await?;
// Mixed batch
let ops = vec!;
let mixed_results = client.execute_batch.await?;
Tag Group Event Handling
Rust
use ;
let mut client = connect.await?;
client
.upsert_tag_group
.await?;
let sub = client.subscribe_tag_group.await?;
while let Some = sub.wait_for_update.await
C#
client.UpsertTagGroup("cell_1", new[] { "DINT_TAG", "PressureTag" }, updateRateMs: 250);
var group = client.SubscribeToTagGroup("cell_1");
group.PollingEvent += (_, evt) =>
{
switch (evt.Kind)
{
case TagGroupEventKind.Data:
// All tags good
break;
case TagGroupEventKind.PartialError:
// Mixed quality; inspect evt.Errors per tag
break;
case TagGroupEventKind.ReadFailure:
// Entire cycle failed; inspect evt.ErrorMessage + evt.Failure
break;
}
};
Build and Test
Examples
.NET
&&
&&
&&
Rust
Documentation
- API docs (docs.rs)
- Programmer manual (Rust + C#)
- Official sources traceability
- PLC/simulator compatibility matrix (0.7.0)
- C# wrapper guide
- Tag introspection
- Troubleshooting
- Changelog
Community and Support
Contributing
See CONTRIBUTING.md.
License
MIT. See LICENSE.
Safety Notice
This software is provided "AS IS". Validate thoroughly in your own environment before production deployment, especially for industrial control systems.