extern crate libmodbus_rs;
use libmodbus_rs::{Modbus, ModbusServer, ModbusMapping, ModbusTCP, MODBUS_TCP_MAX_ADU_LENGTH};
use libmodbus_rs::errors::*;
fn run() -> Result<()> {
let mut modbus = Modbus::new_tcp("127.0.0.1", 1502)?;
let modbus_mapping = ModbusMapping::new(500, 500, 500, 500)?;
let mut socket = modbus.tcp_listen(1)?;
modbus.tcp_accept(&mut socket)?;
loop {
let mut query = vec![0u8; MODBUS_TCP_MAX_ADU_LENGTH as usize];
match modbus.receive(&mut query) {
Ok(n) => {
modbus.reply(&query, n, &modbus_mapping)
}
Err(_) => {
break
}
}?;
}
println!("Quit the loop: Connection reset by peer");
Ok(())
}
fn main() {
if let Err(ref err) = run() {
println!("Error: {}", err);
std::process::exit(1)
}
}