UniSet  1.4.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         
00076         ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 
00077                                                             ModbusRTU::JournalCommandRetMessage& reply );
00078 
00080         ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 
00081                                                             ModbusRTU::SetDateTimeRetMessage& reply );
00082 
00084         ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 
00085                                                             ModbusRTU::RemoteServiceRetMessage& reply );
00086 
00087         ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 
00088                                                             ModbusRTU::FileTransferRetMessage& reply );
00089 
00090 
00092         ModbusTCPServerSlot* sslot;
00093         ModbusRTU::ModbusAddr addr;         
00095         bool verbose;
00096         long replyVal;
00097 #if 0       
00098         typedef std::map<ModbusRTU::mbErrCode,unsigned int> ExchangeErrorMap;
00099         ExchangeErrorMap errmap;    
00100         ModbusRTU::mbErrCode prev;
00101 
00102 
00103         // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 
00104         // тип long. А это число передаётся в графику в виде аналогового датчика
00105         long askCount;  
00108         typedef std::map<int,std::string> FileList;
00109         FileList flist;
00110 #endif 
00111         
00112     private:
00113         
00114 };
00115 // -------------------------------------------------------------------------
00116 #endif // MBTCPServer_H_
00117 // -------------------------------------------------------------------------