UniSet
1.4.0
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef ModbusClient_H_ 00003 #define ModbusClient_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <string> 00006 #include "Mutex.h" 00007 #include "Debug.h" 00008 #include "Configuration.h" 00009 #include "PassiveTimer.h" 00010 #include "ModbusTypes.h" 00011 // ------------------------------------------------------------------------- 00014 class ModbusClient 00015 { 00016 public: 00017 00018 ModbusClient(); 00019 virtual ~ModbusClient(); 00020 00021 // ------------- Modbus-функции ---------------------------------------- 00027 ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr, 00028 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00029 throw(ModbusRTU::mbException); 00030 00036 ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr, 00037 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00038 throw(ModbusRTU::mbException); 00039 00040 00046 ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr, 00047 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00048 throw(ModbusRTU::mbException); 00049 00055 ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr, 00056 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count ) 00057 throw(ModbusRTU::mbException); 00058 00064 ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr, 00065 ModbusRTU::ModbusData reg, bool cmd ) 00066 throw(ModbusRTU::mbException); 00067 00073 ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr, 00074 ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data ) 00075 throw(ModbusRTU::mbException); 00076 00078 ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ForceCoilsMessage& msg ) 00079 throw(ModbusRTU::mbException); 00080 00082 ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::WriteOutputMessage& msg ) 00083 throw(ModbusRTU::mbException); 00084 00086 ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr, 00087 ModbusRTU::DiagnosticsSubFunction subfunc, 00088 ModbusRTU::ModbusData dat=0 ) 00089 throw(ModbusRTU::mbException); 00090 00100 ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr, 00101 ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec, 00102 ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year, 00103 ModbusRTU::ModbusByte century ) 00104 throw(ModbusRTU::mbException); 00105 00106 00113 ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00114 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec=2000 ) 00115 throw(ModbusRTU::mbException); 00116 00122 void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, 00123 const char* save2filename, timeout_t part_timeout_msec=2000 ) 00124 throw(ModbusRTU::mbException); 00125 00126 // --------------------------------------------------------------------- 00128 void setTimeout( timeout_t msec ); 00129 00133 int setAfterSendPause( timeout_t msec ); 00134 00136 inline void setSleepPause( timeout_t usec ){ sleepPause_usec = usec; } 00137 00138 void initLog( UniSetTypes::Configuration* conf, const std::string name, const std::string logfile="" ); 00139 void setLog( DebugStream& dlog ); 00140 00141 00142 inline void setCRCNoCheckit( bool set ){ crcNoCheckit = set; } 00143 inline bool isCRCNoCheckit(){ return crcNoCheckit; } 00144 00145 virtual void cleanupChannel(){} 00146 00147 protected: 00148 00155 virtual int getNextData( unsigned char* buf, int len )=0; 00156 00158 virtual void setChannelTimeout( timeout_t msec )=0; 00159 00160 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0; 00161 00163 virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, 00164 ModbusRTU::ModbusMessage& reply, timeout_t timeout )=0; 00165 00166 // ------------------------------------- 00168 virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg ); 00169 00171 virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc, 00172 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00173 00174 virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc, 00175 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00176 00177 00178 00179 ModbusRTU::ModbusMessage reply; 00180 ModbusRTU::ModbusMessage qbuf; 00182 timeout_t replyTimeOut_ms; 00183 timeout_t aftersend_msec; 00184 timeout_t sleepPause_usec; 00186 bool crcNoCheckit; 00187 00188 UniSetTypes::uniset_mutex sendMutex; 00189 DebugStream dlog; 00190 00191 void printProcessingTime(); 00192 PassiveTimer tmProcessing; 00193 00194 00195 00196 private: 00197 }; 00198 // ------------------------------------------------------------------------- 00199 #endif // ModbusClient_H_ 00200 // -------------------------------------------------------------------------