|
UniSet
2.6.0
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef ModbusClient_H_ 00003 #define ModbusClient_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <string> 00006 #include <memory> 00007 #include "Mutex.h" 00008 #include "Debug.h" 00009 #include "Configuration.h" 00010 #include "PassiveTimer.h" 00011 #include "ModbusTypes.h" 00012 // ------------------------------------------------------------------------- 00013 namespace uniset 00014 { 00015 // ------------------------------------------------------------------------- 00018 class ModbusClient 00019 { 00020 public: 00021 00022 ModbusClient(); 00023 virtual ~ModbusClient(); 00024 00025 // ------------- Modbus-функции ---------------------------------------- 00031 ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr, 00032 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00033 throw(ModbusRTU::mbException); 00034 00040 ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr, 00041 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00042 throw(ModbusRTU::mbException); 00043 00044 00050 ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr, 00051 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00052 throw(ModbusRTU::mbException); 00053 00059 ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr, 00060 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00061 throw(ModbusRTU::mbException); 00062 00068 ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr, 00069 ModbusRTU::ModbusData reg, bool cmd ) 00070 throw(ModbusRTU::mbException); 00071 00077 ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr, 00078 ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data ) 00079 throw(ModbusRTU::mbException); 00080 00082 ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ForceCoilsMessage& msg ) 00083 throw(ModbusRTU::mbException); 00084 00086 ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::WriteOutputMessage& msg ) 00087 throw(ModbusRTU::mbException); 00088 00090 ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr, 00091 ModbusRTU::DiagnosticsSubFunction subfunc, 00092 ModbusRTU::ModbusData dat = 0 ) 00093 throw(ModbusRTU::mbException); 00094 00098 ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr, 00099 ModbusRTU::ModbusByte devID, 00100 ModbusRTU::ModbusByte objID ) 00101 throw(ModbusRTU::mbException); 00102 00112 ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr, 00113 ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec, 00114 ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year, 00115 ModbusRTU::ModbusByte century ) 00116 throw(ModbusRTU::mbException); 00117 00118 00125 ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00126 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 ) 00127 throw(ModbusRTU::mbException); 00128 00134 void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00135 const char* save2filename, timeout_t part_timeout_msec = 2000 ) 00136 throw(ModbusRTU::mbException); 00137 00138 // --------------------------------------------------------------------- 00140 void setTimeout( timeout_t msec ); 00141 00145 int setAfterSendPause( timeout_t msec ); 00146 00148 inline void setSleepPause( timeout_t usec ) 00149 { 00150 sleepPause_usec = usec; 00151 } 00152 00153 void initLog( std::shared_ptr<uniset::Configuration> conf, const std::string& name, const std::string& logfile = "" ); 00154 void setLog( std::shared_ptr<DebugStream> dlog ); 00155 00156 inline void setCRCNoCheckit( bool set ) 00157 { 00158 crcNoCheckit = set; 00159 } 00160 inline bool isCRCNoCheckit() const 00161 { 00162 return crcNoCheckit; 00163 } 00164 00165 virtual void cleanupChannel() {} 00166 00167 protected: 00168 00175 virtual size_t getNextData( unsigned char* buf, size_t len ) = 0; 00176 00178 virtual void setChannelTimeout( timeout_t msec ) = 0; 00179 00180 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) = 0; 00181 00183 virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 00184 ModbusRTU::ModbusMessage& qreply, timeout_t timeout ) = 0; 00185 00186 // ------------------------------------- 00188 virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg ); 00189 00191 virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc, 00192 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00193 00194 virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc, 00195 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00196 00197 timeout_t replyTimeOut_ms; 00198 timeout_t aftersend_msec; 00199 timeout_t sleepPause_usec; 00201 bool crcNoCheckit; 00202 00203 uniset::uniset_rwmutex sendMutex; 00204 std::shared_ptr<DebugStream> dlog; 00205 00206 void printProcessingTime(); 00207 PassiveTimer tmProcessing; 00208 00209 private: 00210 00211 ModbusRTU::ModbusMessage qreply; 00212 ModbusRTU::ModbusMessage qbuf; 00213 }; 00214 // ------------------------------------------------------------------------- 00215 } // end of namespace uniset 00216 // ------------------------------------------------------------------------- 00217 #endif // ModbusClient_H_ 00218 // -------------------------------------------------------------------------
1.7.6.1