extern crate libmodbus_rs;
use libmodbus_rs::{Modbus, ModbusServer, ModbusMapping, ModbusTCP};
fn run() -> Result<(), String> {
let mut modbus = Modbus::new_tcp("127.0.0.1", 1502).expect("could not create modbus TCP context");
let modbus_mapping = ModbusMapping::new(500, 500, 500, 500).expect("could not create Modbus Mapping");
let mut socket = modbus.tcp_listen(1).expect("could not listen");
modbus.tcp_accept(&mut socket).expect("could not create socket");
loop {
let mut query = vec![0u8; Modbus::TCP_MAX_ADU_LENGTH as usize];
match modbus.receive(&mut query) {
Ok(num) => modbus.reply(&query, num, &modbus_mapping),
Err(err) => {
println!("ERROR while parsing: {}", err);
break;
},
}
.expect("could not receive message");
}
println!("Quit the loop: ");
Ok(())
}
fn main() {
if let Err(ref err) = run() {
println!("Error: {}", err);
std::process::exit(1)
}
}