writeSingleRegister method
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 addressvalue: 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\'');
}
}