Master

Struct Master 

Source
pub struct Master { /* private fields */ }
Expand description

Blocking Modbus RTU master that enforces Modbus idle timing rules between frames.

Implementations§

Source§

impl Master

Source

pub fn new_rs485(path: &str, baud_rate: u32) -> Result<Self>

Builds a master configured for an RS-485 style setup (8N1, blocking I/O).

The port timeout is pinned to the Modbus RTU silent interval (T3.5) for the supplied baud rate so that the reader can detect frame boundaries.


§Examples
use modbus_rtu::Master;

let master = Master::new_rs485("/dev/ttyUSB0", 9_600)?;
assert_eq!(master.baud_rate(), 9_600);
Source

pub fn baud_rate(&self) -> u32

Returns the baud rate currently configured on the serial link.


§Examples
use modbus_rtu::Master;

let master = Master::new_rs485("/dev/ttyUSB0", 38_400)?;
assert_eq!(master.baud_rate(), 38_400);
Source

pub fn set_baudrate(&mut self, baud_rate: u32) -> Result<()>

Updates the serial baud rate and matching Modbus idle timeout.


§Examples
use modbus_rtu::Master;

let mut master = Master::new_rs485("/dev/ttyUSB0", 9_600)?;
master.set_baudrate(19_200)?;
assert_eq!(master.baud_rate(), 19_200);
Source

pub fn send(&mut self, req: &Request<'_>) -> Result<Response, Error>

Sends a Modbus RTU request and waits for the corresponding response.

Broadcast requests return immediately after the frame is flushed because the Modbus RTU spec forbids responses to slave id 0.


§Examples
use modbus_rtu::{Function, Master, Request};

let mut master = Master::new_rs485("/dev/ttyUSB0", 19_200)?;
let func = Function::ReadHoldingRegisters { starting_address: 0x0000, quantity: 2 };
let request = Request::new(0x01, &func, std::time::Duration::from_millis(200));
let response = master.send(&request)?;
assert!(response.is_success());

Trait Implementations§

Source§

impl Debug for Master

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Master

§

impl !RefUnwindSafe for Master

§

impl Send for Master

§

impl !Sync for Master

§

impl Unpin for Master

§

impl !UnwindSafe for Master

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.