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