|
UniSet
2.2.1
|
00001 #ifndef MBTCPTestServer_H_ 00002 #define MBTCPTestServer_H_ 00003 // ------------------------------------------------------------------------- 00004 #include <string> 00005 #include <atomic> 00006 #include <ostream> 00007 #include <unordered_set> 00008 #include "ThreadCreator.h" 00009 #include "modbus/ModbusTCPServerSlot.h" 00010 // ------------------------------------------------------------------------- 00012 class MBTCPTestServer 00013 { 00014 public: 00015 MBTCPTestServer( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, const std::string& inetaddr, int port = 502, bool verbose = false ); 00016 ~MBTCPTestServer(); 00017 00018 inline void setVerbose( bool state ) 00019 { 00020 verbose = state; 00021 } 00022 00023 inline void setReply( long val ) 00024 { 00025 replyVal = val; 00026 } 00027 00028 inline void setIgnoreAddrMode( bool state ) 00029 { 00030 if( sslot ) 00031 sslot->setIgnoreAddrMode(state); 00032 } 00033 00034 void runThread(); 00036 void execute(); 00037 void setLog( std::shared_ptr<DebugStream> dlog ); 00038 00039 inline bool isRunning() 00040 { 00041 return isrunning; 00042 } 00043 00044 inline void disableExchange( bool set = true ) 00045 { 00046 disabled = set; 00047 } 00048 00049 inline bool getForceSingleCoilCmd() 00050 { 00051 return forceSingleCoilCmd; 00052 } 00053 inline int getLastWriteOutputSingleRegister() 00054 { 00055 return lastWriteOutputSingleRegister; 00056 } 00057 inline ModbusRTU::ForceCoilsMessage getLastForceCoilsQ() 00058 { 00059 return lastForceCoilsQ; 00060 } 00061 inline ModbusRTU::WriteOutputMessage getLastWriteOutput() 00062 { 00063 return lastWriteOutputQ; 00064 } 00065 00066 friend std::ostream& operator<<(std::ostream& os, const MBTCPTestServer* m ); 00067 00068 inline float getF2TestValue() 00069 { 00070 return f2_test_value; 00071 } 00072 00073 protected: 00074 // действия при завершении работы 00075 void sigterm( int signo ); 00076 00078 ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, 00079 ModbusRTU::ReadCoilRetMessage& reply ); 00081 ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, 00082 ModbusRTU::ReadInputStatusRetMessage& reply ); 00083 00085 ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, 00086 ModbusRTU::ReadOutputRetMessage& reply ); 00087 00089 ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, 00090 ModbusRTU::ReadInputRetMessage& reply ); 00091 00093 ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, 00094 ModbusRTU::ForceSingleCoilRetMessage& reply ); 00095 00097 ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, 00098 ModbusRTU::ForceCoilsRetMessage& reply ); 00099 00100 00102 ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, 00103 ModbusRTU::WriteOutputRetMessage& reply ); 00104 00106 ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, 00107 ModbusRTU::WriteSingleOutputRetMessage& reply ); 00108 00109 00110 ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, 00111 ModbusRTU::DiagnosticRetMessage& reply ); 00112 00113 ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, 00114 ModbusRTU::MEIMessageRetRDI& reply ); 00115 00117 ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 00118 ModbusRTU::JournalCommandRetMessage& reply ); 00119 00121 ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 00122 ModbusRTU::SetDateTimeRetMessage& reply ); 00123 00125 ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 00126 ModbusRTU::RemoteServiceRetMessage& reply ); 00127 00128 ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 00129 ModbusRTU::FileTransferRetMessage& reply ); 00130 00131 00133 ModbusTCPServerSlot* sslot; 00134 std::unordered_set<ModbusRTU::ModbusAddr> vaddr; 00136 bool verbose; 00137 long replyVal; 00138 bool forceSingleCoilCmd; 00139 int lastWriteOutputSingleRegister; 00140 ModbusRTU::ForceCoilsMessage lastForceCoilsQ; 00141 ModbusRTU::WriteOutputMessage lastWriteOutputQ; 00142 float f2_test_value = {0.0}; 00143 00144 #if 0 00145 typedef std::map<ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap; 00146 ExchangeErrorMap errmap; 00147 ModbusRTU::mbErrCode prev; 00148 00149 00150 // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 00151 // тип long. А это число передаётся в графику в виде аналогового датчика 00152 long askCount; 00155 typedef std::map<int, std::string> FileList; 00156 FileList flist; 00157 #endif 00158 00159 private: 00160 ThreadCreator<MBTCPTestServer>* thr; 00161 std::atomic_bool isrunning; 00162 bool disabled; 00163 std::string myname; 00164 }; 00165 // ------------------------------------------------------------------------- 00166 #endif // MBTCPTestServer_H_ 00167 // -------------------------------------------------------------------------
1.7.6.1