1 // modbus with back end 2 module modbus.mbwbe; 3 4 import modbus.protocol; 5 import modbus.iface; 6 7 version(withSerialPort) 8 { 9 public import std.datetime : Duration, dur, hnsecs, nsecs, msecs, seconds; 10 public import serialport; 11 12 import modbus.backend.rtu; 13 14 /// Modbus with RTU backend based on existing serial port 15 class ModbusRTU : Modbus 16 { 17 protected: 18 SerialPort _com; 19 20 class Iface : SerialPortIface 21 { 22 override: 23 void write(const(void)[] msg) 24 { _com.write(msg, writeTimeout); } 25 void[] read(void[] buffer) 26 { return _com.read(buffer, readTimeout, readFrameGap); } 27 } 28 29 public: 30 31 /// 32 Duration writeTimeout = 100.msecs, 33 readTimeout = 1.seconds, 34 readFrameGap = 4.msecs; 35 36 /// 37 this(SerialPort sp) 38 { 39 import std.exception : enforce; 40 _com = enforce(sp, "serial port is null"); 41 super(new RTU(new Iface)); 42 } 43 44 @property 45 { 46 /// 47 SerialPort com() { return _com; } 48 /// 49 const(SerialPort) com() const { return _com; } 50 } 51 52 ~this() 53 { 54 com.destroy(); 55 } 56 } 57 }