|
UniSet
2.2.1
|
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<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 void execute(); 00027 void setLog( std::shared_ptr<DebugStream>& dlog ); 00028 00029 protected: 00030 // действия при завершении работы 00031 void sigterm( int signo ); 00032 00034 ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, 00035 ModbusRTU::ReadCoilRetMessage& reply ); 00037 ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, 00038 ModbusRTU::ReadInputStatusRetMessage& reply ); 00039 00041 ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, 00042 ModbusRTU::ReadOutputRetMessage& reply ); 00043 00045 ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, 00046 ModbusRTU::ReadInputRetMessage& reply ); 00047 00049 ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, 00050 ModbusRTU::ForceSingleCoilRetMessage& reply ); 00051 00053 ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, 00054 ModbusRTU::ForceCoilsRetMessage& reply ); 00055 00056 00058 ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, 00059 ModbusRTU::WriteOutputRetMessage& reply ); 00060 00062 ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, 00063 ModbusRTU::WriteSingleOutputRetMessage& reply ); 00064 00065 00066 ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, 00067 ModbusRTU::DiagnosticRetMessage& reply ); 00068 00069 ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, 00070 ModbusRTU::MEIMessageRetRDI& reply ); 00071 00073 ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 00074 ModbusRTU::JournalCommandRetMessage& reply ); 00075 00077 ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 00078 ModbusRTU::SetDateTimeRetMessage& reply ); 00079 00081 ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 00082 ModbusRTU::RemoteServiceRetMessage& reply ); 00083 00084 ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 00085 ModbusRTU::FileTransferRetMessage& reply ); 00086 00087 00089 ModbusTCPServerSlot* sslot; 00090 std::unordered_set<ModbusRTU::ModbusAddr> vaddr; 00092 bool verbose; 00093 long replyVal; 00094 #if 0 00095 typedef std::unordered_map<ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap; 00096 ExchangeErrorMap errmap; 00097 ModbusRTU::mbErrCode prev; 00098 00099 00100 // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 00101 // тип long. А это число передаётся в графику в виде аналогового датчика 00102 long askCount; 00105 typedef std::unordered_map<int, std::string> FileList; 00106 FileList flist; 00107 #endif 00108 00109 private: 00110 00111 }; 00112 // ------------------------------------------------------------------------- 00113 #endif // MBTCPServer_H_ 00114 // -------------------------------------------------------------------------
1.7.6.1