|
UniSet
2.6.0
|
00001 #ifndef MBTCPServer_H_ 00002 #define MBTCPServer_H_ 00003 // ------------------------------------------------------------------------- 00004 #include <unordered_set> 00005 #include <string> 00006 #include "modbus/ModbusTCPServerSlot.h" 00007 00008 // ------------------------------------------------------------------------- 00010 class MBTCPServer 00011 { 00012 public: 00013 MBTCPServer( const std::unordered_set<uniset::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 uniset::timeout_t setAfterSendPause( uniset::timeout_t msec ) 00027 { 00028 return sslot->setAfterSendPause(msec); 00029 } 00030 00031 void execute(); 00032 void setLog( std::shared_ptr<DebugStream>& dlog ); 00033 00034 void setMaxSessions( size_t max ); 00035 00036 protected: 00037 // действия при завершении работы 00038 void sigterm( int signo ); 00039 00041 uniset::ModbusRTU::mbErrCode readCoilStatus( uniset::ModbusRTU::ReadCoilMessage& query, 00042 uniset::ModbusRTU::ReadCoilRetMessage& reply ); 00044 uniset::ModbusRTU::mbErrCode readInputStatus( uniset::ModbusRTU::ReadInputStatusMessage& query, 00045 uniset::ModbusRTU::ReadInputStatusRetMessage& reply ); 00046 00048 uniset::ModbusRTU::mbErrCode readOutputRegisters( uniset::ModbusRTU::ReadOutputMessage& query, 00049 uniset::ModbusRTU::ReadOutputRetMessage& reply ); 00050 00052 uniset::ModbusRTU::mbErrCode readInputRegisters( uniset::ModbusRTU::ReadInputMessage& query, 00053 uniset::ModbusRTU::ReadInputRetMessage& reply ); 00054 00056 uniset::ModbusRTU::mbErrCode forceSingleCoil( uniset::ModbusRTU::ForceSingleCoilMessage& query, 00057 uniset::ModbusRTU::ForceSingleCoilRetMessage& reply ); 00058 00060 uniset::ModbusRTU::mbErrCode forceMultipleCoils( uniset::ModbusRTU::ForceCoilsMessage& query, 00061 uniset::ModbusRTU::ForceCoilsRetMessage& reply ); 00062 00063 00065 uniset::ModbusRTU::mbErrCode writeOutputRegisters( uniset::ModbusRTU::WriteOutputMessage& query, 00066 uniset::ModbusRTU::WriteOutputRetMessage& reply ); 00067 00069 uniset::ModbusRTU::mbErrCode writeOutputSingleRegister( uniset::ModbusRTU::WriteSingleOutputMessage& query, 00070 uniset::ModbusRTU::WriteSingleOutputRetMessage& reply ); 00071 00072 00073 uniset::ModbusRTU::mbErrCode diagnostics( uniset::ModbusRTU::DiagnosticMessage& query, 00074 uniset::ModbusRTU::DiagnosticRetMessage& reply ); 00075 00076 uniset::ModbusRTU::mbErrCode read4314( uniset::ModbusRTU::MEIMessageRDI& query, 00077 uniset::ModbusRTU::MEIMessageRetRDI& reply ); 00078 00080 uniset::ModbusRTU::mbErrCode journalCommand( uniset::ModbusRTU::JournalCommandMessage& query, 00081 uniset::ModbusRTU::JournalCommandRetMessage& reply ); 00082 00084 uniset::ModbusRTU::mbErrCode setDateTime( uniset::ModbusRTU::SetDateTimeMessage& query, 00085 uniset::ModbusRTU::SetDateTimeRetMessage& reply ); 00086 00088 uniset::ModbusRTU::mbErrCode remoteService( uniset::ModbusRTU::RemoteServiceMessage& query, 00089 uniset::ModbusRTU::RemoteServiceRetMessage& reply ); 00090 00091 uniset::ModbusRTU::mbErrCode fileTransfer( uniset::ModbusRTU::FileTransferMessage& query, 00092 uniset::ModbusRTU::FileTransferRetMessage& reply ); 00093 00094 00096 uniset::ModbusTCPServerSlot* sslot; 00097 std::unordered_set<uniset::ModbusRTU::ModbusAddr> vaddr; 00099 bool verbose = { false }; 00100 long replyVal = { -1 }; 00101 #if 0 00102 typedef std::unordered_map<uniset::ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap; 00103 ExchangeErrorMap errmap; 00104 uniset::ModbusRTU::mbErrCode prev; 00105 00106 00107 // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 00108 // тип long. А это число передаётся в графику в виде аналогового датчика 00109 long askCount; 00112 typedef std::unordered_map<int, std::string> FileList; 00113 FileList flist; 00114 #endif 00115 00116 private: 00117 00118 }; 00119 // ------------------------------------------------------------------------- 00120 #endif // MBTCPServer_H_ 00121 // -------------------------------------------------------------------------
1.7.6.1