pub struct Frame { /* private fields */ }
Expand description
Modbus Frame
Implementations§
Source§impl Frame
impl Frame
Sourcepub fn tcp() -> Frame
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();
Sourcepub fn rtu() -> Frame
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();
Sourcepub fn read_coils_request(
&self,
unit_id: u8,
first_address: u16,
number: u16,
) -> Request
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 addressfirst_address
- Address of first coil to readnumber
- Number of coils to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_coils_request(0x01, 0x02, 0x08);
Sourcepub fn read_discrete_request(
&self,
unit_id: u8,
first_address: u16,
number: u16,
) -> Request
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 addressfirst_address
- Address of first discrete input to readnumber
- Number of discrete input to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_discrete_request(0x0B, 0x007A, 0x001C);
Sourcepub fn read_multiple_holding_registers_request(
&self,
unit_id: u8,
first_address: u16,
number: u16,
) -> Request
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 addressfirst_address
- Address of first register to readnumber
- Number of discrete input to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_multiple_holding_registers_request(0x0B, 0x006F, 0x0003);
Sourcepub fn read_input_registers_request(
&self,
unit_id: u8,
first_address: u16,
number: u16,
) -> Request
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 addressfirst_address
- Address of first register to readnumber
- Number of registers to read
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().read_input_registers_request(0x0B, 0x000A, 0x0001);
Sourcepub fn write_single_coil_request(
&self,
unit_id: u8,
address: u16,
value: u16,
) -> Request
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 addressaddress
- Address of coil to writevalue
- 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);
Sourcepub fn write_single_holding_register_request(
&self,
unit_id: u8,
address: u16,
value: u16,
) -> Request
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 addressaddress
- Address of Holding Register to writevalue
- Value to write
§Examples
use easy_modbus::Frame;
let request = Frame::tcp().write_single_holding_register_request(0x0B, 0x0004, 0xABCD);
Sourcepub fn write_multiple_coils_request(
&self,
unit_id: u8,
address: u16,
coils_number: u16,
values: Vec<u8>,
) -> Request
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 addressaddress
- Address of Holding Register to writecoils_number
- Number of coils to writevalues
- 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]
);
Sourcepub fn write_multiple_holding_registers_request(
&self,
unit_id: u8,
address: u16,
values: Vec<u8>,
) -> Request
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 addressaddress
- Address of first holding registers to writevalues
- 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],
);
Sourcepub fn read_coils_response(&self, unit_id: u8, values: Vec<u8>) -> Response
pub fn read_coils_response(&self, unit_id: u8, values: Vec<u8>) -> Response
Create a read coils response (Function Code: 0x01)
unit_id
- Server addressvalues
- 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]);
Sourcepub fn read_discrete_response(&self, unit_id: u8, values: Vec<u8>) -> Response
pub fn read_discrete_response(&self, unit_id: u8, values: Vec<u8>) -> Response
Create a read discrete response (Function Code: 0x02)
unit_id
- Server addressvalues
- Discrete input values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_discrete_response(0x0B, vec![0xAC, 0xDB, 0xFB, 0x0D]);
Sourcepub fn read_holding_register_response(
&self,
unit_id: u8,
values: Vec<u8>,
) -> Response
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 addressvalues
- Discrete input values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_discrete_response(0x0B, vec![0xAC, 0xDB, 0xFB, 0x0D]);
Sourcepub fn read_input_register_response(
&self,
unit_id: u8,
values: Vec<u8>,
) -> Response
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 addressvalues
- Register values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().read_input_register_response(0x01, vec![0x10, 0x2F]);
Sourcepub fn write_single_coil_response(
&self,
unit_id: u8,
address: u16,
value: u16,
) -> Response
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 addressvalues
- Register values
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_single_coil_response(0x01, 0x00BF, 0x0000);
Sourcepub fn write_single_holding_register_response(
&self,
unit_id: u8,
address: u16,
value: u16,
) -> Response
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 addressaddress
- Address of coilvalue
- 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);
Sourcepub fn write_multiple_coils_response(
&self,
unit_id: u8,
address: u16,
number: u16,
) -> Response
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 addressaddress
- Address of first written holding registercoils_number
- Number of written holding registers
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_multiple_coils_response(0x01, 0x001B, 0x0009);
Sourcepub fn write_multiple_holding_registers_response(
&self,
unit_id: u8,
address: u16,
number: u16,
) -> Response
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 addressaddress
- Address of first written holding registercoils_number
- Number of written holding registers
§Examples
use easy_modbus::Frame;
let response = Frame::tcp().write_multiple_holding_registers_response(0x01, 0x0012, 0x0002);
Sourcepub fn exception_response(
&self,
unit_id: u8,
function: Function,
exception: Exception,
) -> Response
pub fn exception_response( &self, unit_id: u8, function: Function, exception: Exception, ) -> Response
Create a exception response
unit_id
- Server addressfunction
- Modbus Function enumexception
- Modbus Exception enum
§Examples
use easy_modbus::{Exception, Frame, Function};
let response = Frame::tcp().exception_response(
0x0A,
Function::ReadCoils,
Exception::IllegalDataAddress,
);