1 /// 2 module modbus.protocol.base; 3 4 public import std.bitmanip : BitArray; 5 public import std.exception : enforce; 6 public import std.datetime.stopwatch; 7 public import std.conv : to; 8 9 version (modbus_verbose) 10 public import std.experimental.logger; 11 12 public import modbus.exception; 13 public import modbus.connection; 14 public import modbus.backend; 15 public import modbus.types; 16 public import modbus.func; 17 18 /// 19 abstract class Modbus 20 { 21 protected: 22 void[MAX_BUFFER] buffer; 23 24 Backend be; 25 Connection con; 26 public: 27 28 /// 29 this(Backend be, Connection con) 30 { 31 if (be is null) throwModbusException("backend is null"); 32 if (con is null) throwModbusException("connection is null"); 33 this.be = be; 34 this.con = con; 35 } 36 37 /// 38 Backend backend() @property { return be; } 39 /// 40 Connection connection() @property { return con; } 41 42 /++ Write to serial port 43 44 Params: 45 dev = modbus device address (number) 46 fnc = function number 47 args = writed data in native endian 48 Returns: 49 sended message 50 +/ 51 const(void)[] write(Args...)(ulong dev, ubyte fnc, Args args) 52 { 53 auto buf = be.buildMessage(buffer, dev, fnc, 0, args); 54 con.write(buf); 55 return buf; 56 } 57 58 // ditto 59 const(void)[] writeS(Args...)(ulong dev, ubyte fnc, ulong stamp, Args args) 60 { 61 auto buf = be.buildMessage(buffer, dev, fnc, stamp, args); 62 con.write(buf); 63 return buf; 64 } 65 }