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