UniSet  1.7.0
MBTCPServer.h
00001 #ifndef MBTCPServer_H_
00002 #define MBTCPServer_H_
00003 // -------------------------------------------------------------------------
00004 //#include <map>
00005 #include <string>
00006 #include "modbus/ModbusTCPServerSlot.h"
00007 
00008 // -------------------------------------------------------------------------
00010 class MBTCPServer
00011 {
00012     public:
00013         MBTCPServer( ModbusRTU::ModbusAddr myaddr, const std::string& inetaddr, int port=502, bool verbose=false );
00014         ~MBTCPServer();
00015 
00016         inline void setVerbose( bool state )
00017         {
00018             verbose = state;
00019         }
00020         
00021         inline void setReply( long val )
00022         {
00023             replyVal = val;
00024         }
00025 
00026         inline void setIgnoreAddrMode( bool state )
00027         {
00028             if( sslot )
00029                 sslot->setIgnoreAddrMode(state);
00030         }
00031 
00032         void execute(); 
00033         void setLog( DebugStream& dlog );
00034 
00035     protected:
00036         // действия при завершении работы
00037         void sigterm( int signo );
00038 
00040         ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, 
00041                                                     ModbusRTU::ReadCoilRetMessage& reply );
00043         ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, 
00044                                                     ModbusRTU::ReadInputStatusRetMessage& reply );
00045 
00047         ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, 
00048                                                     ModbusRTU::ReadOutputRetMessage& reply );
00049 
00051         ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, 
00052                                                     ModbusRTU::ReadInputRetMessage& reply );
00053 
00055         ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, 
00056                                                         ModbusRTU::ForceSingleCoilRetMessage& reply );
00057 
00059         ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, 
00060                                                     ModbusRTU::ForceCoilsRetMessage& reply );
00061 
00062 
00064         ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, 
00065                                                         ModbusRTU::WriteOutputRetMessage& reply );
00066 
00068         ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, 
00069                                                         ModbusRTU::WriteSingleOutputRetMessage& reply );
00070 
00071 
00072         ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, 
00073                                             ModbusRTU::DiagnosticRetMessage& reply );
00074         
00075         ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, 
00076                                                         ModbusRTU::MEIMessageRetRDI& reply );
00077 
00079         ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 
00080                                                             ModbusRTU::JournalCommandRetMessage& reply );
00081 
00083         ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 
00084                                                             ModbusRTU::SetDateTimeRetMessage& reply );
00085 
00087         ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 
00088                                                             ModbusRTU::RemoteServiceRetMessage& reply );
00089 
00090         ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 
00091                                                             ModbusRTU::FileTransferRetMessage& reply );
00092 
00093 
00095         ModbusTCPServerSlot* sslot;
00096         ModbusRTU::ModbusAddr addr;         
00098         bool verbose;
00099         long replyVal;
00100 #if 0       
00101         typedef std::map<ModbusRTU::mbErrCode,unsigned int> ExchangeErrorMap;
00102         ExchangeErrorMap errmap;    
00103         ModbusRTU::mbErrCode prev;
00104 
00105 
00106         // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 
00107         // тип long. А это число передаётся в графику в виде аналогового датчика
00108         long askCount;  
00111         typedef std::map<int,std::string> FileList;
00112         FileList flist;
00113 #endif 
00114         
00115     private:
00116         
00117 };
00118 // -------------------------------------------------------------------------
00119 #endif // MBTCPServer_H_
00120 // -------------------------------------------------------------------------