using InnovEnergy.Lib.Protocols.Modbus.Connections; namespace InnovEnergy.Lib.Protocols.Modbus.Clients; using Booleans = IReadOnlyList; using UInt16s = IReadOnlyList; // TODO: ModbusClient = Framer(TCP/RTU) + Connection(Serial/TCP) + Encoder(binary/ascii) + quirk(+1/0) // Transport public abstract class ModbusClient { internal ModbusConnection Connection { get; } internal Byte SlaveId { get; } // TODO: add additional functions: coils... public abstract Booleans ReadCoils (UInt16 readAddress, UInt16 nValues); public abstract Booleans ReadDiscreteInputs (UInt16 readAddress, UInt16 nValues); public abstract UInt16s ReadInputRegisters (UInt16 readAddress, UInt16 nValues); public abstract UInt16s ReadHoldingRegisters(UInt16 readAddress, UInt16 nValues); public abstract UInt16 WriteCoils (UInt16 writeAddress, Booleans coils); public abstract UInt16 WriteRegisters (UInt16 writeAddress, UInt16s values); public abstract UInt16s ReadWriteRegisters (UInt16 readAddress, UInt16 nbToRead, UInt16 writeAddress, UInt16s registersToWrite); protected ModbusClient(ModbusConnection connection, Byte slaveId) { Connection = connection; SlaveId = slaveId; } }