UniSet  2.6.0
ModbusTCPMaster.h
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 // -------------------------------------------------------------------------