|
UniSet
2.2.1
|
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<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(); 00039 void setLog( std::shared_ptr<DebugStream> dlog ); 00040 00041 protected: 00042 // действия при завершении работы 00043 void sigterm( int signo ); 00044 00046 ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, 00047 ModbusRTU::ReadCoilRetMessage& reply ); 00049 ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, 00050 ModbusRTU::ReadInputStatusRetMessage& reply ); 00051 00053 ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, 00054 ModbusRTU::ReadOutputRetMessage& reply ); 00055 00057 ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, 00058 ModbusRTU::ReadInputRetMessage& reply ); 00059 00061 ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, 00062 ModbusRTU::ForceSingleCoilRetMessage& reply ); 00063 00065 ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, 00066 ModbusRTU::ForceCoilsRetMessage& reply ); 00067 00068 00070 ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, 00071 ModbusRTU::WriteOutputRetMessage& reply ); 00072 00074 ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, 00075 ModbusRTU::WriteSingleOutputRetMessage& reply ); 00076 00078 ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 00079 ModbusRTU::JournalCommandRetMessage& reply ); 00080 00082 ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 00083 ModbusRTU::SetDateTimeRetMessage& reply ); 00084 00086 ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 00087 ModbusRTU::RemoteServiceRetMessage& reply ); 00088 00089 ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 00090 ModbusRTU::FileTransferRetMessage& reply ); 00091 00092 ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, 00093 ModbusRTU::DiagnosticRetMessage& reply ); 00094 00095 ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, 00096 ModbusRTU::MEIMessageRetRDI& reply ); 00097 00099 ModbusRTUSlaveSlot* rscomm; 00100 std::unordered_set<ModbusRTU::ModbusAddr> vaddr; 00102 bool verbose; 00103 #if 0 00104 typedef std::unordered_map<ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap; 00105 ExchangeErrorMap errmap; 00106 ModbusRTU::mbErrCode prev; 00107 00108 00109 // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 00110 // тип long. А это число передаётся в графику в виде аналогового датчика 00111 long askCount; 00114 typedef std::unordered_map<int, std::string> FileList; 00115 FileList flist; 00116 #endif 00117 long replyVal; 00118 long replyVal2; 00119 long replyVal3; 00120 private: 00121 00122 }; 00123 // ------------------------------------------------------------------------- 00124 #endif // MBSlave_H_ 00125 // -------------------------------------------------------------------------
1.7.6.1