UniSet  1.4.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 
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 // -------------------------------------------------------------------------