UniSet  1.4.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 // -------------------------------------------------------------------------
00011 class ModbusTCPMaster:
00012     public ModbusClient
00013 {
00014     public:
00015 
00016         ModbusTCPMaster();
00017         virtual ~ModbusTCPMaster();
00018 
00019         void connect( const std::string addr, int port );
00020         void connect( ost::InetAddress addr, int port );
00021         void disconnect();
00022         bool isConnection();
00023 
00024         inline void setForceDisconnect( bool s )
00025         {
00026             force_disconnect = s;
00027         }
00028         
00029         void reconnect();
00030         void cleanInputStream();
00031         
00032         virtual void cleanupChannel(){ cleanInputStream(); }
00033 
00034     protected:
00035         
00036         virtual int getNextData( unsigned char* buf, int len );
00037         virtual void setChannelTimeout( timeout_t msec );
00038         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len );
00039         virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 
00040                                             ModbusRTU::ModbusMessage& reply, timeout_t timeout );
00041 
00042     private:
00043         ost::TCPStream* tcp;
00044         ModbusRTU::ModbusData nTransaction;
00045         std::queue<unsigned char> qrecv;
00046         PassiveTimer ptTimeout;
00047         std::string iaddr;
00048         bool force_disconnect;
00049 };
00050 // -------------------------------------------------------------------------
00051 #endif // ModbusTCPMaster_H_
00052 // -------------------------------------------------------------------------