UniSet  1.7.0
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         // ------------- 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 
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 // -------------------------------------------------------------------------