ModbusTCPServer.h
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
00039
00040
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