UniSet
1.4.0
|
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 // -------------------------------------------------------------------------