write method

Future<void> write(
  1. ModbusClient client,
  2. String name,
  3. dynamic value
)

Write a single register value.

Parameters:

  • client: Modbus client
  • name: Register name
  • value: 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}');
  }
}