UniSet
1.4.0
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef ModbusTCPServer_H_ 00003 #define ModbusTCPServer_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <string> 00006 #include <queue> 00007 #include <cc++/socket.h> 00008 #include "Mutex.h" 00009 #include "Debug.h" 00010 #include "Configuration.h" 00011 #include "PassiveTimer.h" 00012 #include "ModbusTypes.h" 00013 #include "ModbusServer.h" 00014 00015 // ------------------------------------------------------------------------- 00017 class ModbusTCPServer: 00018 public ModbusServer, 00019 public ost::TCPSocket 00020 { 00021 public: 00022 ModbusTCPServer( ost::InetAddress &ia, int port=502 ); 00023 virtual ~ModbusTCPServer(); 00024 00025 virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout ); 00026 00027 inline void setIgnoreAddrMode( bool st ){ ignoreAddr = st; } 00028 inline bool getIgnoreAddrMode(){ return ignoreAddr; } 00029 00030 void cleanInputStream(); 00031 virtual void cleanupChannel(){ cleanInputStream(); } 00032 00033 virtual void terminate(); 00034 00035 protected: 00036 00037 virtual ModbusRTU::mbErrCode pre_send_request( ModbusRTU::ModbusMessage& request ); 00038 // virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request ); 00039 00040 // realisation (see ModbusServer.h) 00041 virtual int getNextData( unsigned char* buf, int len ); 00042 virtual void setChannelTimeout( timeout_t msec ); 00043 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ); 00044 00045 virtual ModbusRTU::mbErrCode tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAPHeader& mhead ); 00046 00047 ost::tpport_t port; 00048 ost::TCPStream tcp; 00049 ost::InetAddress iaddr; 00050 std::queue<unsigned char> qrecv; 00051 ModbusTCP::MBAPHeader curQueryHeader; 00052 00053 bool ignoreAddr; 00054 00055 private: 00056 00057 }; 00058 // ------------------------------------------------------------------------- 00059 #endif // ModbusTCPServer_H_ 00060 // -------------------------------------------------------------------------