readHoldingRegistersBytes method
Read holding registers as bytes (FC 03).
Reads from 1 to 125 contiguous holding registers.
Parameters:
slaveId: The slave device ID (1-247)address: Starting address of holding registersquantity: Number of registers to read (1-125)
Returns: Raw bytes (quantity × 2 bytes, big-endian)
Implementation
@override
Future<Uint8List> readHoldingRegistersBytes(
int slaveId, int address, int quantity) async {
if (slaveId < _addressMin || slaveId > _addressMax) {
throw ArgumentError(
'modbus: slaveId \'$slaveId\' must be between \'$_addressMin\' and \'$_addressMax\'');
}
if (quantity < readRegQuantityMin || quantity > readRegQuantityMax) {
throw ArgumentError(
'modbus: quantity \'$quantity\' must be between \'$readRegQuantityMin\' and \'$readRegQuantityMax\'');
}
final response = await send(
slaveId,
ProtocolDataUnit(
funcCodeReadHoldingRegisters,
uint16ToBytes([address, quantity]),
),
);
if (response.data.length - 1 != response.data[0]) {
throw Exception(
'modbus: response data size \'${response.data.length - 1}\' does not match count \'${response.data[0]}\'');
}
if (response.data[0] != quantity * 2) {
throw Exception(
'modbus: response data size \'${response.data[0]}\' does not match quantity to bytes \'${quantity * 2}\'');
}
return Uint8List.fromList(response.data.sublist(1));
}