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
00094 ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
00095 ModbusRTU::ModbusByte devID,
00096 ModbusRTU::ModbusByte objID )
00097 throw(ModbusRTU::mbException);
00098
00108 ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr,
00109 ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec,
00110 ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year,
00111 ModbusRTU::ModbusByte century )
00112 throw(ModbusRTU::mbException);
00113
00114
00121 ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00122 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec=2000 )
00123 throw(ModbusRTU::mbException);
00124
00130 void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00131 const char* save2filename, timeout_t part_timeout_msec=2000 )
00132 throw(ModbusRTU::mbException);
00133
00134
00136 void setTimeout( timeout_t msec );
00137
00141 int setAfterSendPause( timeout_t msec );
00142
00144 inline void setSleepPause( timeout_t usec ){ sleepPause_usec = usec; }
00145
00146 void initLog( UniSetTypes::Configuration* conf, const std::string name, const std::string logfile="" );
00147 void setLog( DebugStream& dlog );
00148
00149
00150 inline void setCRCNoCheckit( bool set ){ crcNoCheckit = set; }
00151 inline bool isCRCNoCheckit(){ return crcNoCheckit; }
00152
00153 virtual void cleanupChannel(){}
00154
00155 protected:
00156
00163 virtual int getNextData( unsigned char* buf, int len )=0;
00164
00166 virtual void setChannelTimeout( timeout_t msec )=0;
00167
00168 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0;
00169
00171 virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
00172 ModbusRTU::ModbusMessage& reply, timeout_t timeout )=0;
00173
00174
00176 virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg );
00177
00179 virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc,
00180 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00181
00182 virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc,
00183 ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00184
00185
00186
00187 ModbusRTU::ModbusMessage reply;
00188 ModbusRTU::ModbusMessage qbuf;
00190 timeout_t replyTimeOut_ms;
00191 timeout_t aftersend_msec;
00192 timeout_t sleepPause_usec;
00194 bool crcNoCheckit;
00195
00196 UniSetTypes::uniset_mutex sendMutex;
00197 DebugStream dlog;
00198
00199 void printProcessingTime();
00200 PassiveTimer tmProcessing;
00201
00202
00203
00204 private:
00205 };
00206
00207 #endif // ModbusClient_H_
00208