UniSet  2.2.1
MBTCPTestServer.h
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 // -------------------------------------------------------------------------