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