readFIFOQueue method

  1. @override
Future<Uint8List> readFIFOQueue(
  1. int slaveId,
  2. int address
)
override

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));
}