UniSet  1.7.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(){ cleanInputStream(); }
00036 
00037     protected:
00038         
00039         virtual int getNextData( unsigned char* buf, int len );
00040         virtual void setChannelTimeout( timeout_t msec );
00041         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len );
00042         virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 
00043                                             ModbusRTU::ModbusMessage& reply, timeout_t timeout );
00044 
00045     private:
00046         UTCPStream* tcp;
00047         ModbusRTU::ModbusData nTransaction;
00048         std::queue<unsigned char> qrecv;
00049         PassiveTimer ptTimeout;
00050         std::string iaddr;
00051         int port;
00052         bool force_disconnect;
00053 };
00054 // -------------------------------------------------------------------------
00055 #endif // ModbusTCPMaster_H_
00056 // -------------------------------------------------------------------------