ModbusClient.h
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
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