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