Struct Frame

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

Modbus Frame

Implementations§

Source§

impl Frame

Source

pub fn tcp() -> Frame

Create a TCP frame

A Modbus variant used for communications over TCP/IP networks.

§Examples
use easy_modbus::Frame;
let tcp = Frame::tcp();
Source

pub fn rtu() -> Frame

Create a RTU frame

Used in serial communication, and is the most common implementation available for Modbus.

§Examples
use easy_modbus::Frame;
let rut = Frame::rtu();
Source

pub fn read_coils_request( &self, unit_id: u8, first_address: u16, number: u16, ) -> Request

Create a read coils request (Function Code: 0x01)

  • unit_id - Server address
  • first_address - Address of first coil to read
  • number - Number of coils to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_coils_request(0x01, 0x02, 0x08);
Source

pub fn read_discrete_request( &self, unit_id: u8, first_address: u16, number: u16, ) -> Request

Create a read discrete Request (Function Code: 0x02)

  • unit_id - Server address
  • first_address - Address of first discrete input to read
  • number - Number of discrete input to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_discrete_request(0x0B, 0x007A, 0x001C);
Source

pub fn read_multiple_holding_registers_request( &self, unit_id: u8, first_address: u16, number: u16, ) -> Request

Create a read multiple holding registers request (Function Code: 0x03)

  • unit_id - Server address
  • first_address - Address of first register to read
  • number - Number of discrete input to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_multiple_holding_registers_request(0x0B, 0x006F, 0x0003);
Source

pub fn read_input_registers_request( &self, unit_id: u8, first_address: u16, number: u16, ) -> Request

Create a read input registers request (Function Code: 0x04)

  • unit_id - Server address
  • first_address - Address of first register to read
  • number - Number of registers to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_input_registers_request(0x0B, 0x000A, 0x0001);
Source

pub fn write_single_coil_request( &self, unit_id: u8, address: u16, value: u16, ) -> Request

Create a write single coil request (Function Code: 0x05)

  • unit_id - Server address
  • address - Address of coil to write
  • value - Value to write. 0 (0x0000) for off, 65,280 (0xFF00) for on.
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().write_single_coil_request(0x0B, 0x00BF, 0x0000);
Source

pub fn write_single_holding_register_request( &self, unit_id: u8, address: u16, value: u16, ) -> Request

Create a write single holding register request (Function Code: 0x06)

  • unit_id - Server address
  • address - Address of Holding Register to write
  • value - Value to write
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().write_single_holding_register_request(0x0B, 0x0004, 0xABCD);
Source

pub fn write_multiple_coils_request( &self, unit_id: u8, address: u16, coils_number: u16, values: Vec<u8>, ) -> Request

Create a write multiple coils request (Function Code: 0x0F)

  • unit_id - Server address
  • address - Address of Holding Register to write
  • coils_number - Number of coils to write
  • values - Coil values. Value of each coil is binary (0 for off, 1 for on).
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().write_multiple_coils_request(
    0x0B,
    0x001B,
    0x0009,
    vec![0x4D, 0x01]
);
Source

pub fn write_multiple_holding_registers_request( &self, unit_id: u8, address: u16, values: Vec<u8>, ) -> Request

Create a write multiple coils request (Function Code: 0x10)

  • unit_id - Server address
  • address - Address of first holding registers to write
  • values - New values of holding registers
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().write_multiple_holding_registers_request(
    0x0B,
    0x0012,
    vec![0x0B, 0x0A, 0xC1, 0x02],
);
Source

pub fn read_coils_response(&self, unit_id: u8, values: Vec<u8>) -> Response

Create a read coils response (Function Code: 0x01)

  • unit_id - Server address
  • values - Coil input values, Values of each coil input is binary (0 for off, 1 for on). First requested coil input is as least significant bit of first byte in reply. If number of coils inputs is not a multiple of 8, most significant bits of last byte will be stuffed zeros.
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_coils_response(0x0B, vec![0xCD, 0x6B, 0xB2, 0x7F]);
Source

pub fn read_discrete_response(&self, unit_id: u8, values: Vec<u8>) -> Response

Create a read discrete response (Function Code: 0x02)

  • unit_id - Server address
  • values - Discrete input values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_discrete_response(0x0B, vec![0xAC, 0xDB, 0xFB, 0x0D]);
Source

pub fn read_holding_register_response( &self, unit_id: u8, values: Vec<u8>, ) -> Response

Create a read holding register response (Function Code: 0x03)

  • unit_id - Server address
  • values - Discrete input values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_discrete_response(0x0B, vec![0xAC, 0xDB, 0xFB, 0x0D]);
Source

pub fn read_input_register_response( &self, unit_id: u8, values: Vec<u8>, ) -> Response

Create a read input register response (Function Code: 0x04)

  • unit_id - Server address
  • values - Register values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_input_register_response(0x01, vec![0x10, 0x2F]);
Source

pub fn write_single_coil_response( &self, unit_id: u8, address: u16, value: u16, ) -> Response

Create a write single coil response (Function Code: 0x05)

  • unit_id - Server address
  • values - Register values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_single_coil_response(0x01, 0x00BF, 0x0000);
Source

pub fn write_single_holding_register_response( &self, unit_id: u8, address: u16, value: u16, ) -> Response

Create a write single coil response (Function Code: 0x06)

  • unit_id - Server address
  • address - Address of coil
  • value - Value to write. 0 (0x0000) for off, 65,280 (0xFF00) for on.
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_single_holding_register_response(0x01, 0x0004, 0xFF00);
Source

pub fn write_multiple_coils_response( &self, unit_id: u8, address: u16, number: u16, ) -> Response

Create a write multiple coils response (Function Code: 0x0F)

  • unit_id - Server address
  • address - Address of first written holding register
  • coils_number - Number of written holding registers
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_multiple_coils_response(0x01, 0x001B, 0x0009);
Source

pub fn write_multiple_holding_registers_response( &self, unit_id: u8, address: u16, number: u16, ) -> Response

Create a write multiple holding registers response (Function Code: 0x10)

  • unit_id - Server address
  • address - Address of first written holding register
  • coils_number - Number of written holding registers
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_multiple_holding_registers_response(0x01, 0x0012, 0x0002);
Source

pub fn exception_response( &self, unit_id: u8, function: Function, exception: Exception, ) -> Response

Create a exception response

  • unit_id - Server address
  • function - Modbus Function enum
  • exception - Modbus Exception enum
§Examples
use easy_modbus::{Exception, Frame, Function};
let response = Frame::tcp().exception_response(
    0x0A,
    Function::ReadCoils,
    Exception::IllegalDataAddress,
);

Trait Implementations§

Source§

impl Debug for Frame

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for Frame

§

impl RefUnwindSafe for Frame

§

impl Send for Frame

§

impl Sync for Frame

§

impl Unpin for Frame

§

impl UnwindSafe for Frame

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.