tokio-modbus

A tokio-based modbus library.

Crates.io version Docs Build Status Coverage Status Percentage of issues still open Average time to resolve an issue

Features

Installation

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"] }

TCP client example

```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();

} ```

RTU client example

```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.

Protocol-Specification

License

MIT/Apache-2.0