readFIFOQueue method
Read FIFO queue (FC 24).
Reads the contents of a First-In-First-Out queue of registers.
Parameters:
slaveId: The slave device ID (1-247)address: FIFO pointer address
Returns: FIFO queue contents as bytes (max 31 registers)
Implementation
@override
Future<Uint8List> readFIFOQueue(int slaveId, int address) async {
if (slaveId < _addressMin || slaveId > _addressMax) {
throw ArgumentError(
'modbus: slaveId \'$slaveId\' must be between \'$_addressMin\' and \'$_addressMax\'');
}
final response = await send(
slaveId,
ProtocolDataUnit(
funcCodeReadFIFOQueue,
uint16ToBytes([address]),
),
);
if (response.data.length < 4) {
throw Exception(
'modbus: response data size \'${response.data.length}\' is less than expected \'4\'');
}
final count = bytesToUint16(response.data.sublist(0, 2))[0];
if (response.data.length - 2 != count) {
throw Exception(
'modbus: response data size \'${response.data.length - 2}\' does not match count \'$count\'');
}
final fifoCount = bytesToUint16(response.data.sublist(2, 4))[0];
if (fifoCount > 31) {
throw Exception(
'modbus: fifo count \'$fifoCount\' is greater than expected \'31\'');
}
return Uint8List.fromList(response.data.sublist(4));
}