Expand description
EtherNet/IP client library for Allen-Bradley CompactLogix and ControlLogix PLCs.
rust-ethernet-ip provides async Rust APIs for explicit EtherNet/IP and CIP
tag operations, plus FFI surfaces used by the repository’s .NET wrapper.
The current released crate line is 1.0.0.
§Highlights
- Async client API via
EipClient - Symbolic tag addressing, including program-scoped tags, array indexing, and nested UDT paths
- Batch reads, writes, and mixed execution with
BatchOperation - Route-path support for backplane and routed topologies via
RoutePath - UDT discovery, schema export, diagnostics, subscriptions, and tag-group polling
§Quick Start
use rust_ethernet_ip::{EipClient, PlcValue};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = EipClient::connect("192.168.1.100:44818").await?;
let running = client.read_tag("Program:Main.MotorRunning").await?;
client
.write_tag("Program:Main.SetPoint", PlcValue::Dint(1500))
.await?;
println!("running={running:?}");
Ok(())
}Routed example:
use rust_ethernet_ip::{EipClient, RoutePath};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let route = RoutePath::new().add_slot(0);
let _client = EipClient::with_route_path("192.168.1.100:44818", route).await?;
Ok(())
}§Known PLC/Firmware Limits
Real-hardware validation for the 1.0.0 release line confirmed that some
direct write shapes are controller/firmware limitations rather than library
protocol defects:
- Direct writes to standalone
STRINGtags can fail - Direct writes to
STRINGmembers inside UDTs can fail - Direct writes to members of UDT array elements can fail
On the validated CompactLogix 5069-L320ERMS3 firmware 35 and
ControlLogix 1756-L81ES firmware 37 targets, these failures surfaced as
0x2107 and, for some batch STRING cases, batch-level 0x1E embedded
service errors.
Recommended pattern for restricted cases: read-modify-write the full UDT or UDT array element instead of directly writing the nested restricted member.
Re-exports§
pub use batch::BatchConfig;pub use batch::BatchError;pub use batch::BatchOperation;pub use batch::BatchResult;pub use client::Backoff;pub use client::Client;pub use client::ConnectionEvent;pub use client::EipClient;pub use client::RetryClient;pub use client::RetryPolicy;pub use config::ConnectionConfig;pub use config::LogFormat;pub use config::LogLevel;pub use config::LogRotationSchedule;pub use config::LoggingConfig;pub use config::MonitoringConfig;pub use config::PerformanceConfig;pub use config::PlcSpecificConfig;pub use config::ProductionConfig;pub use config::SecurityConfig;pub use error::EtherNetIpError;pub use error::Result;pub use fleet::Fleet;pub use fleet::FleetEvent;pub use monitoring::ConnectionMetrics;pub use monitoring::DiagnosticsSnapshot;pub use monitoring::ErrorCategory;pub use monitoring::ErrorMetrics;pub use monitoring::HealthCheckMode;pub use monitoring::HealthMetrics;pub use monitoring::HealthStatus;pub use monitoring::MonitoringMetrics;pub use monitoring::OperationMetrics;pub use monitoring::PerformanceMetrics;pub use monitoring::ProductionMonitor;pub use plc_manager::PlcConfig;pub use plc_manager::PlcConnection;pub use plc_manager::PlcManager;pub use route::RouteHop;pub use route::RoutePath;pub use schema::SchemaCapabilities;pub use schema::SchemaDataType;pub use schema::SchemaExport;pub use schema::SchemaLibraryInfo;pub use schema::SchemaRoutePath;pub use schema::SchemaScope;pub use schema::SchemaTag;pub use schema::SchemaTargetInfo;pub use schema::SchemaUdt;pub use schema::SchemaUdtMember;pub use subscription::SubscriptionManager;pub use subscription::SubscriptionManager as RealTimeSubscriptionManager;pub use subscription::SubscriptionOptions;pub use subscription::SubscriptionOptions as RealTimeSubscriptionOptions;pub use subscription::TagSubscription;pub use subscription::TagSubscription as RealTimeSubscription;pub use tag_group::TagGroupConfig;pub use tag_group::TagGroupEvent;pub use tag_group::TagGroupEventKind;pub use tag_group::TagGroupFailureCategory;pub use tag_group::TagGroupFailureDiagnostic;pub use tag_group::TagGroupSnapshot;pub use tag_group::TagGroupSubscription;pub use tag_group::TagGroupValueResult;pub use tag_manager::TagCache;pub use tag_manager::TagManager;pub use tag_manager::TagMetadata;pub use tag_manager::TagPermissions;pub use tag_manager::TagScope;
Modules§
- batch
- client
- config
- error
- fleet
- monitoring
- plc_
manager - route
- schema
- subscription
- tag_
group - tag_
manager - tag_
path - types
- udt
- version
Structs§
- TagAttributes
- Tag attributes from PLC
- UdtData
- UdtDefinition
- Definition of a User Defined Type
- UdtMember
- Member of a UDT
- UdtTemplate
- UDT Template information from PLC
Enums§
Traits§
- Ether
NetIp Stream - Trait for streams that can be used with EipClient
Functions§
- init_
tracing - Initialize tracing subscriber with environment-based filtering
- try_
init_ tracing - Try to initialize tracing subscriber (non-panicking version)