|
UniSet
2.2.1
|
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 // ------------------------------------------------------------------------- 00015 class ModbusClient 00016 { 00017 public: 00018 00019 ModbusClient(); 00020 virtual ~ModbusClient(); 00021 00022 // ------------- Modbus-функции ---------------------------------------- 00028 ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr, 00029 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00030 throw(ModbusRTU::mbException); 00031 00037 ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr, 00038 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00039 throw(ModbusRTU::mbException); 00040 00041 00047 ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr, 00048 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00049 throw(ModbusRTU::mbException); 00050 00056 ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr, 00057 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00058 throw(ModbusRTU::mbException); 00059 00065 ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr, 00066 ModbusRTU::ModbusData reg, bool cmd ) 00067 throw(ModbusRTU::mbException); 00068 00074 ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr, 00075 ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data ) 00076 throw(ModbusRTU::mbException); 00077 00079 ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ForceCoilsMessage& msg ) 00080 throw(ModbusRTU::mbException); 00081 00083 ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::WriteOutputMessage& msg ) 00084 throw(ModbusRTU::mbException); 00085 00087 ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr, 00088 ModbusRTU::DiagnosticsSubFunction subfunc, 00089 ModbusRTU::ModbusData dat = 0 ) 00090 throw(ModbusRTU::mbException); 00091 00095 ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr, 00096 ModbusRTU::ModbusByte devID, 00097 ModbusRTU::ModbusByte objID ) 00098 throw(ModbusRTU::mbException); 00099 00109 ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr, 00110 ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec, 00111 ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year, 00112 ModbusRTU::ModbusByte century ) 00113 throw(ModbusRTU::mbException); 00114 00115 00122 ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00123 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 ) 00124 throw(ModbusRTU::mbException); 00125 00131 void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00132 const char* save2filename, timeout_t part_timeout_msec = 2000 ) 00133 throw(ModbusRTU::mbException); 00134 00135 // --------------------------------------------------------------------- 00137 void setTimeout( timeout_t msec ); 00138 00142 int setAfterSendPause( timeout_t msec ); 00143 00145 inline void setSleepPause( timeout_t usec ) 00146 { 00147 sleepPause_usec = usec; 00148 } 00149 00150 void initLog( std::shared_ptr<UniSetTypes::Configuration> conf, const std::string& name, const std::string& logfile = "" ); 00151 void setLog( std::shared_ptr<DebugStream> dlog ); 00152 00153 00154 inline void setCRCNoCheckit( bool set ) 00155 { 00156 crcNoCheckit = set; 00157 } 00158 inline bool isCRCNoCheckit() 00159 { 00160 return crcNoCheckit; 00161 } 00162 00163 virtual void cleanupChannel() {} 00164 00165 protected: 00166 00173 virtual size_t getNextData( unsigned char* buf, int len ) = 0; 00174 00176 virtual void setChannelTimeout( timeout_t msec ) = 0; 00177 00178 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) = 0; 00179 00181 virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 00182 ModbusRTU::ModbusMessage& reply, timeout_t timeout ) = 0; 00183 00184 // ------------------------------------- 00186 virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg ); 00187 00189 virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc, 00190 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00191 00192 virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc, 00193 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00194 00195 00196 00197 ModbusRTU::ModbusMessage reply; 00198 ModbusRTU::ModbusMessage qbuf; 00200 timeout_t replyTimeOut_ms; 00201 timeout_t aftersend_msec; 00202 timeout_t sleepPause_usec; 00204 bool crcNoCheckit; 00205 00206 UniSetTypes::uniset_rwmutex sendMutex; 00207 std::shared_ptr<DebugStream> dlog; 00208 00209 void printProcessingTime(); 00210 PassiveTimer tmProcessing; 00211 00212 private: 00213 }; 00214 // ------------------------------------------------------------------------- 00215 #endif // ModbusClient_H_ 00216 // -------------------------------------------------------------------------
1.7.6.1