|
UniSet
2.6.0
|
00001 #ifndef ModbusTCPMaster_H_ 00002 #define ModbusTCPMaster_H_ 00003 // ------------------------------------------------------------------------- 00004 #include <memory> 00005 #include <string> 00006 #include <queue> 00007 #include <Poco/Net/SocketStream.h> 00008 #include "UTCPStream.h" 00009 #include "ModbusTypes.h" 00010 #include "ModbusClient.h" 00011 // ------------------------------------------------------------------------- 00012 namespace uniset 00013 { 00014 // ------------------------------------------------------------------------- 00016 class ModbusTCPMaster: 00017 public ModbusClient 00018 { 00019 public: 00020 00021 ModbusTCPMaster(); 00022 virtual ~ModbusTCPMaster(); 00023 00024 bool connect( const std::string& addr, int port, bool closeOldConnection = true ) noexcept; 00025 bool connect( const Poco::Net::SocketAddress& addr, int _port, bool closeOldConnection = true ) noexcept; 00026 00027 void disconnect(); 00028 void forceDisconnect(); 00029 bool isConnection() const; 00030 00031 static bool checkConnection( const std::string& ip, int port, int timeout_msec = 100 ); 00032 00033 inline void setForceDisconnect( bool s ) 00034 { 00035 force_disconnect = s; 00036 } 00037 00038 bool reconnect(); 00039 void cleanInputStream(); 00040 00041 virtual void cleanupChannel() override 00042 { 00043 cleanInputStream(); 00044 } 00045 00046 inline std::string getAddress() const 00047 { 00048 return iaddr; 00049 } 00050 inline int getPort() const 00051 { 00052 return port; 00053 } 00054 00055 void setReadTimeout( timeout_t msec ); 00056 timeout_t getReadTimeout() const; 00057 00058 protected: 00059 00060 virtual size_t getNextData(unsigned char* buf, size_t len ) override; 00061 virtual void setChannelTimeout( timeout_t msec ) override; 00062 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) override; 00063 virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 00064 ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override; 00065 00066 private: 00067 //ost::TCPStream* tcp; 00068 std::shared_ptr<UTCPStream> tcp; 00069 ModbusRTU::ModbusData nTransaction; 00070 std::queue<unsigned char> qrecv; 00071 PassiveTimer ptTimeout; 00072 std::string iaddr = { "" }; 00073 int port = { 0 }; 00074 bool force_disconnect = { false }; 00075 int keepAliveTimeout = { 1000 }; 00076 00077 timeout_t readTimeout = { 50 }; // timeout на чтение очередной порции данных 00078 }; 00079 // ------------------------------------------------------------------------- 00080 } // end of namespace uniset 00081 // ------------------------------------------------------------------------- 00082 #endif // ModbusTCPMaster_H_ 00083 // -------------------------------------------------------------------------
1.7.6.1