Struct easy_modbus::Frame
source · [−]pub struct Frame { /* private fields */ }Expand description
Modbus Frame
Implementations
sourceimpl 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,
);