pub struct AsyncClientCore { /* private fields */ }Expand description
Shared async client handle.
Owns the mpsc::Sender that drives the background async task and a
watch::Receiver used for a synchronous has_pending_requests() query.
Dropping this value closes the channel, which causes the background
ClientTask to exit cleanly via its cmd_rx.recv() returning None.
Implementations§
Source§impl AsyncClientCore
impl AsyncClientCore
Sourcepub async fn connect(&self) -> Result<(), AsyncError>
pub async fn connect(&self) -> Result<(), AsyncError>
Establishes the underlying transport connection.
Must be called once before issuing Modbus requests. Can be called again after a disconnect to reconnect.
Sourcepub fn has_pending_requests(&self) -> bool
pub fn has_pending_requests(&self) -> bool
Returns true when there are requests in-flight awaiting a response.
This is a synchronous check — no .await required.
Sourcepub fn set_request_timeout(&self, timeout: Duration)
pub fn set_request_timeout(&self, timeout: Duration)
Sets a per-request deadline applied to every subsequent request call.
If a response is not received within timeout, the method returns
AsyncError::Timeout. The in-flight entry remains in the background
task until the transport delivers or errors; calling
connect resets transport state.
The timeout can be updated at any time and takes effect on the next
request. Call clear_request_timeout to
remove it.
Sourcepub fn clear_request_timeout(&self)
pub fn clear_request_timeout(&self)
Removes the per-request timeout set by
set_request_timeout, allowing requests to
wait indefinitely for a server response.
Sourcepub async fn read_multiple_coils(
&self,
unit_id: u8,
address: u16,
quantity: u16,
) -> Result<Coils, AsyncError>
pub async fn read_multiple_coils( &self, unit_id: u8, address: u16, quantity: u16, ) -> Result<Coils, AsyncError>
Reads multiple coils (FC 01) from address with the given quantity.
Returns the coil values packed into a Coils object.
Sourcepub async fn write_single_coil(
&self,
unit_id: u8,
address: u16,
value: bool,
) -> Result<(u16, bool), AsyncError>
pub async fn write_single_coil( &self, unit_id: u8, address: u16, value: bool, ) -> Result<(u16, bool), AsyncError>
Writes a single coil (FC 05) at address with the given boolean value.
Returns (address, value) echoed back by the server.
Sourcepub async fn write_multiple_coils(
&self,
unit_id: u8,
address: u16,
coils: &Coils,
) -> Result<(u16, u16), AsyncError>
pub async fn write_multiple_coils( &self, unit_id: u8, address: u16, coils: &Coils, ) -> Result<(u16, u16), AsyncError>
Writes multiple coils (FC 15) starting at address.
Returns (starting_address, quantity) echoed back by the server.
Sourcepub async fn read_holding_registers(
&self,
unit_id: u8,
address: u16,
quantity: u16,
) -> Result<Registers, AsyncError>
pub async fn read_holding_registers( &self, unit_id: u8, address: u16, quantity: u16, ) -> Result<Registers, AsyncError>
Reads holding registers (FC 03) from address with the given quantity.
Returns the register values as a Registers object.
Sourcepub async fn read_input_registers(
&self,
unit_id: u8,
address: u16,
quantity: u16,
) -> Result<Registers, AsyncError>
pub async fn read_input_registers( &self, unit_id: u8, address: u16, quantity: u16, ) -> Result<Registers, AsyncError>
Reads input registers (FC 04) from address with the given quantity.
Returns the register values as a Registers object.
Sourcepub async fn write_single_register(
&self,
unit_id: u8,
address: u16,
value: u16,
) -> Result<(u16, u16), AsyncError>
pub async fn write_single_register( &self, unit_id: u8, address: u16, value: u16, ) -> Result<(u16, u16), AsyncError>
Writes a single holding register (FC 06) at address with value.
Returns (address, value) echoed back by the server.
Sourcepub async fn write_multiple_registers(
&self,
unit_id: u8,
address: u16,
values: &[u16],
) -> Result<(u16, u16), AsyncError>
pub async fn write_multiple_registers( &self, unit_id: u8, address: u16, values: &[u16], ) -> Result<(u16, u16), AsyncError>
Writes multiple holding registers (FC 16) starting at address.
Returns (starting_address, quantity) echoed back by the server.
Sourcepub async fn read_write_multiple_registers(
&self,
unit_id: u8,
read_address: u16,
read_quantity: u16,
write_address: u16,
write_values: &[u16],
) -> Result<Registers, AsyncError>
pub async fn read_write_multiple_registers( &self, unit_id: u8, read_address: u16, read_quantity: u16, write_address: u16, write_values: &[u16], ) -> Result<Registers, AsyncError>
Performs a combined read/write on holding registers (FC 23).
Reads read_quantity registers starting at read_address and
simultaneously writes write_values starting at write_address.
Returns the read registers.
Sourcepub async fn mask_write_register(
&self,
unit_id: u8,
address: u16,
and_mask: u16,
or_mask: u16,
) -> Result<(), AsyncError>
pub async fn mask_write_register( &self, unit_id: u8, address: u16, and_mask: u16, or_mask: u16, ) -> Result<(), AsyncError>
Applies an AND/OR bitmask to a holding register (FC 22).
The resulting register value is (current & and_mask) | (or_mask & !and_mask).
Sourcepub async fn read_discrete_inputs(
&self,
unit_id: u8,
address: u16,
quantity: u16,
) -> Result<DiscreteInputs, AsyncError>
pub async fn read_discrete_inputs( &self, unit_id: u8, address: u16, quantity: u16, ) -> Result<DiscreteInputs, AsyncError>
Reads discrete inputs (FC 02) from address with the given quantity.
Returns the input states as a DiscreteInputs object.
Sourcepub async fn read_fifo_queue(
&self,
unit_id: u8,
address: u16,
) -> Result<FifoQueue, AsyncError>
pub async fn read_fifo_queue( &self, unit_id: u8, address: u16, ) -> Result<FifoQueue, AsyncError>
Reads the FIFO queue (FC 24) at address.
Returns up to 31 words from the FIFO queue as a FifoQueue object.
Sourcepub async fn read_file_record(
&self,
unit_id: u8,
sub_request: &SubRequest,
) -> Result<Vec<SubRequestParams>, AsyncError>
pub async fn read_file_record( &self, unit_id: u8, sub_request: &SubRequest, ) -> Result<Vec<SubRequestParams>, AsyncError>
Reads a file record (FC 20) described by sub_request.
Returns the sub-request response parameters for each requested record.
Sourcepub async fn write_file_record(
&self,
unit_id: u8,
sub_request: &SubRequest,
) -> Result<(), AsyncError>
pub async fn write_file_record( &self, unit_id: u8, sub_request: &SubRequest, ) -> Result<(), AsyncError>
Writes a file record (FC 21) described by sub_request.
Sourcepub async fn read_device_identification(
&self,
unit_id: u8,
read_device_id_code: ReadDeviceIdCode,
object_id: ObjectId,
) -> Result<DeviceIdentificationResponse, AsyncError>
pub async fn read_device_identification( &self, unit_id: u8, read_device_id_code: ReadDeviceIdCode, object_id: ObjectId, ) -> Result<DeviceIdentificationResponse, AsyncError>
Reads device identification objects (FC 43 / MEI 14).
Sourcepub async fn encapsulated_interface_transport(
&self,
unit_id: u8,
mei_type: EncapsulatedInterfaceType,
data: &[u8],
) -> Result<(EncapsulatedInterfaceType, Vec<u8>), AsyncError>
pub async fn encapsulated_interface_transport( &self, unit_id: u8, mei_type: EncapsulatedInterfaceType, data: &[u8], ) -> Result<(EncapsulatedInterfaceType, Vec<u8>), AsyncError>
Sends an encapsulated interface transport request (FC 43).
Returns the (mei_type, data) pair from the server response.
Sourcepub async fn read_exception_status(&self, unit_id: u8) -> Result<u8, AsyncError>
pub async fn read_exception_status(&self, unit_id: u8) -> Result<u8, AsyncError>
Reads the device exception status (FC 07).
Sourcepub async fn diagnostics(
&self,
unit_id: u8,
sub_function: DiagnosticSubFunction,
data: &[u16],
) -> Result<DiagnosticsDataResponse, AsyncError>
pub async fn diagnostics( &self, unit_id: u8, sub_function: DiagnosticSubFunction, data: &[u16], ) -> Result<DiagnosticsDataResponse, AsyncError>
Sends a diagnostics request (FC 08).
Returns DiagnosticsDataResponse with echoed sub_function and data.
Sourcepub async fn get_comm_event_counter(
&self,
unit_id: u8,
) -> Result<(u16, u16), AsyncError>
pub async fn get_comm_event_counter( &self, unit_id: u8, ) -> Result<(u16, u16), AsyncError>
Reads the communication event counter (FC 11).
Returns (status_word, event_count).
Sourcepub async fn get_comm_event_log(
&self,
unit_id: u8,
) -> Result<CommEventLogResponse, AsyncError>
pub async fn get_comm_event_log( &self, unit_id: u8, ) -> Result<CommEventLogResponse, AsyncError>
Reads the communication event log (FC 12).
Returns (status, event_count, message_count, events).
Sourcepub async fn report_server_id(&self, unit_id: u8) -> Result<Vec<u8>, AsyncError>
pub async fn report_server_id(&self, unit_id: u8) -> Result<Vec<u8>, AsyncError>
Requests the server identifier data (FC 17).
Returns the raw server ID byte array.