Expand description
Safe Rust bindings for IEC 60870-5-101/104 protocols.
This crate provides safe wrappers around the lib60870-C library for implementing IEC 60870-5-104 (TCP/IP) communication.
§Features
- Client (Master): Connect to IEC 104 servers and send commands
- Server (Slave): Accept connections and send spontaneous data
- Safe API: Automatic memory management, Rust callbacks
- Common types: Quality descriptors, cause of transmission, timestamps
§Quick Start - Client
use lib60870::client::{Connection, ConnectionBuilder};
use lib60870::types::{CauseOfTransmission, QOI_STATION};
let mut conn = ConnectionBuilder::new("127.0.0.1", 2404)
.originator_address(3)
.build()
.expect("Failed to create connection");
conn.set_handlers(
|event| println!("Event: {:?}", event),
|asdu| {
println!("Received: {:?}", asdu);
for obj in asdu.parse_objects() {
println!(" {:?}", obj);
}
true
},
);
if conn.connect() {
conn.send_start_dt();
conn.send_interrogation(CauseOfTransmission::Activation, 1, QOI_STATION);
std::thread::sleep(std::time::Duration::from_secs(5));
}§Quick Start - Server
use lib60870::server::{Server, ServerBuilder};
use lib60870::types::{CauseOfTransmission, Quality};
let mut server = ServerBuilder::new()
.local_port(2404)
.build()
.expect("Failed to create server");
server.set_connection_event_handler(|event| {
println!("Connection event: {:?}", event);
});
server.set_interrogation_handler(|conn, asdu, qoi| {
println!("Interrogation for group {}", qoi);
conn.send_act_con(&asdu, false);
// Send data...
conn.send_act_term(&asdu);
true
});
server.start();
// Send spontaneous data
loop {
server.send_measured_scaled(
CauseOfTransmission::Spontaneous,
1, // Common address
100, // IOA
42, // Value
Quality::GOOD,
);
std::thread::sleep(std::time::Duration::from_secs(1));
}§Crate Features
tls- Enable TLS support (downloads and links mbedtls 2.28)debug- Enable printf debug output in lib60870no-threads- Disable threading support (for embedded systems)tcp-keepalive- Enable TCP keep-alive
§License
lib60870 is dual-licensed under GPLv3 and a commercial license. See https://github.com/mz-automation/lib60870 for details.
Re-exports§
pub use asdu::Asdu;pub use client::Connection;pub use client::ConnectionBuilder;pub use info::DoublePoint;pub use info::DoublePointValue;pub use info::InfoObject;pub use info::Ioa;pub use info::MeasuredFloat;pub use info::MeasuredNormalized;pub use info::MeasuredScaled;pub use info::SingleCommand;pub use info::SinglePoint;pub use server::MasterConnection;pub use server::Server;pub use server::ServerBuilder;pub use time::Timestamp;pub use types::CauseOfTransmission;pub use types::ConnectionEvent;pub use types::PeerConnectionEvent;pub use types::Quality;pub use types::ServerMode;pub use types::TypeId;pub use types::DEFAULT_PORT;pub use types::DEFAULT_TLS_PORT;pub use types::QOI_STATION;
Modules§
- asdu
- Application Service Data Unit (ASDU) for IEC 60870-5.
- client
- IEC 60870-5-104 client (master) implementation.
- info
- Information object types for IEC 60870-5.
- server
- IEC 60870-5-104 server (slave) implementation.
- sys
- Raw FFI bindings - use only if you need low-level access. Raw FFI bindings to lib60870-C.
- time
- Time types for IEC 60870-5-101/104.
- types
- Common types and enums for IEC 60870-5-101/104.
Functions§
- library_
version - Get the lib60870 library version.
- set_
debug_ output - Enable or disable debug output.