2023-02-16 12:57:06 +00:00
|
|
|
using InnovEnergy.Lib.Protocols.Modbus.Connections;
|
|
|
|
|
|
|
|
namespace InnovEnergy.Lib.Protocols.Modbus.Clients;
|
|
|
|
|
2023-04-20 13:03:13 +00:00
|
|
|
using Booleans = IReadOnlyList<Boolean>;
|
|
|
|
using UInt16s = IReadOnlyList<UInt16>;
|
2023-02-16 12:57:06 +00:00
|
|
|
|
|
|
|
// TODO: ModbusClient = Framer(TCP/RTU) + Connection(Serial/TCP) + Encoder(binary/ascii) + quirk(+1/0)
|
|
|
|
// Transport
|
|
|
|
|
|
|
|
public abstract class ModbusClient
|
|
|
|
{
|
2023-04-20 13:03:13 +00:00
|
|
|
internal ModbusConnection Connection { get; }
|
|
|
|
internal Byte SlaveId { get; }
|
2023-03-07 10:19:15 +00:00
|
|
|
|
2023-02-16 12:57:06 +00:00
|
|
|
// TODO: add additional functions: coils...
|
|
|
|
|
2023-04-20 13:03:13 +00:00
|
|
|
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);
|
2023-02-16 12:57:06 +00:00
|
|
|
|
2023-04-20 13:03:13 +00:00
|
|
|
protected ModbusClient(ModbusConnection connection, Byte slaveId)
|
2023-02-16 12:57:06 +00:00
|
|
|
{
|
2023-04-20 13:03:13 +00:00
|
|
|
Connection = connection;
|
|
|
|
SlaveId = slaveId;
|
2023-02-16 12:57:06 +00:00
|
|
|
}
|
2023-04-20 13:03:13 +00:00
|
|
|
}
|