A tokio-based modbus library.
Add this to your Cargo.toml
:
toml
[dependencies]
tokio-modbus = "*"
If you like to use Modbus TCP only:
toml
[dependencies]
tokio-modbus = { version = "*", default-features = false, features = ["tcp"] }
If you like to use Modbus RTU only:
toml
[dependencies]
tokio-modbus = { version = "*", default-features = false, features = ["rtu"] }
```rust extern crate futures; extern crate tokiocore; extern crate tokiomodbus;
use tokiocore::reactor::Core; use futures::future::Future; use tokiomodbus::{Client, TcpClient};
pub fn main() { let mut core = Core::new().unwrap(); let handle = core.handle(); let addr = "192.168.0.222:502".parse().unwrap();
let task = TcpClient::connect(&addr, &handle).and_then(|client| {
println!("Fetching the coupler ID");
client
.read_input_registers(0x1000, 7)
.and_then(move |buff| {
println!("Response is '{:?}'", buff);
Ok(())
})
});
core.run(task).unwrap();
} ```
```rust extern crate futures; extern crate tokiocore; extern crate tokiomodbus; extern crate tokio_serial;
use tokiocore::reactor::Core; use futures::future::Future; use tokiomodbus::{Client, RtuClient}; use tokio_serial::{BaudRate, Serial, SerialPortSettings};
pub fn main() { let mut core = Core::new().unwrap(); let handle = core.handle(); let ttypath = "/dev/ttyUSB0"; let serveraddr = 0x01;
let mut settings = SerialPortSettings::default();
settings.baud_rate = BaudRate::Baud19200;
let mut port = Serial::from_path(tty_path, &settings, &handle).unwrap();
port.set_exclusive(false).unwrap();
let task = RtuClient::connect(port, server_addr, &handle).and_then(|client| {
println!("Reading a sensor value");
client
.read_holding_registers(0x082B, 2)
.and_then(move |res| {
println!("Sensor value is: {:?}", res);
Ok(())
})
});
core.run(task).unwrap();
} ```
More examples can be found in the examples folder.
MIT/Apache-2.0