writeSingleRegister method

  1. @override
Future<void> writeSingleRegister(
  1. int slaveId,
  2. int address,
  3. int value
)
override

Write single register (FC 06).

Writes a single 16-bit value to a holding register.

Parameters:

  • slaveId: The slave device ID (0-247, 0 for broadcast)
  • address: Register address
  • value: 16-bit value to write (0-65535)

Example:

await client.writeSingleRegister(1, 0, 1234);

Implementation

@override
Future<void> writeSingleRegister(
    int slaveId, int address, int value) async {
  if (slaveId > _addressMax) {
    throw ArgumentError(
        'modbus: slaveId \'$slaveId\' must be between \'$addressBroadCast\' and \'$_addressMax\'');
  }

  final response = await send(
    slaveId,
    ProtocolDataUnit(
      funcCodeWriteSingleRegister,
      uint16ToBytes([address, value]),
    ),
  );

  if (response.data.length != 4) {
    throw Exception(
        'modbus: response data size \'${response.data.length}\' does not match expected \'4\'');
  }

  final rspAddress = bytesToUint16(response.data.sublist(0, 2))[0];
  if (rspAddress != address) {
    throw Exception(
        'modbus: response address \'$rspAddress\' does not match request \'$address\'');
  }

  final rspValue = bytesToUint16(response.data.sublist(2, 4))[0];
  if (rspValue != value) {
    throw Exception(
        'modbus: response value \'$rspValue\' does not match request \'$value\'');
  }
}