UniSet  2.0.0
ModbusTCPMaster.h
00001 #ifndef ModbusTCPMaster_H_
00002 #define ModbusTCPMaster_H_
00003 // -------------------------------------------------------------------------
00004 #include <string>
00005 #include <queue>
00006 #include <cc++/socket.h>
00007 #include "ModbusTypes.h"
00008 #include "ModbusClient.h"
00009 #include "UTCPStream.h"
00010 // -------------------------------------------------------------------------
00012 class ModbusTCPMaster:
00013     public ModbusClient
00014 {
00015     public:
00016 
00017         ModbusTCPMaster();
00018         virtual ~ModbusTCPMaster();
00019 
00020         void connect( const std::string& addr, int port );
00021         void connect( ost::InetAddress addr, int port );
00022         void disconnect();
00023         bool isConnection();
00024 
00025         static bool checkConnection( const std::string& ip, int port, int timeout_msec=100 );
00026 
00027         inline void setForceDisconnect( bool s )
00028         {
00029             force_disconnect = s;
00030         }
00031 
00032         void reconnect();
00033         void cleanInputStream();
00034 
00035         virtual void cleanupChannel() override { cleanInputStream(); }
00036 
00037     protected:
00038 
00039         virtual int getNextData( unsigned char* buf, int len ) override;
00040         virtual void setChannelTimeout( timeout_t msec ) override;
00041         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
00042         virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 
00043                                             ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
00044 
00045     private:
00046         //ost::TCPStream* tcp;
00047         UTCPStream* tcp;
00048         ModbusRTU::ModbusData nTransaction;
00049         std::queue<unsigned char> qrecv;
00050         PassiveTimer ptTimeout;
00051         std::string iaddr;
00052         int port;
00053         bool force_disconnect;
00054 };
00055 // -------------------------------------------------------------------------
00056 #endif // ModbusTCPMaster_H_
00057 // -------------------------------------------------------------------------