write method
Write a single register value.
Parameters:
client: Modbus clientname: Register namevalue: Value to write
Implementation
Future<void> write(ModbusClient client, String name, dynamic value) async {
final reg = registers.firstWhere((r) => r.name == name,
orElse: () => throw ArgumentError('Register "$name" not found'));
if (reg.readOnly) {
throw StateError('Register "$name" is read-only');
}
final bytes = reg.encode(value);
switch (reg.type) {
case RegisterType.coil:
if (reg.registerCount == 1) {
await client.writeSingleCoil(slaveId, reg.address, value as bool);
} else {
await client.writeMultipleCoils(slaveId, reg.address, reg.registerCount, bytes);
}
break;
case RegisterType.holdingRegister:
if (reg.registerCount == 1 && reg.dataType == DataType.uint16) {
await client.writeSingleRegister(slaveId, reg.address, value as int);
} else {
await client.writeMultipleRegistersBytes(
slaveId, reg.address, reg.registerCount, bytes);
}
break;
default:
throw StateError('Cannot write to ${reg.type}');
}
}