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