UniSet  2.6.0
ModbusClient.h
00001 // -------------------------------------------------------------------------
00002 #ifndef ModbusClient_H_
00003 #define ModbusClient_H_
00004 // -------------------------------------------------------------------------
00005 #include <string>
00006 #include <memory>
00007 #include "Mutex.h"
00008 #include "Debug.h"
00009 #include "Configuration.h"
00010 #include "PassiveTimer.h"
00011 #include "ModbusTypes.h"
00012 // -------------------------------------------------------------------------
00013 namespace uniset
00014 {
00015 // -------------------------------------------------------------------------
00018 class ModbusClient
00019 {
00020     public:
00021 
00022         ModbusClient();
00023         virtual ~ModbusClient();
00024 
00025         // ------------- Modbus-функции ----------------------------------------
00031         ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr,
00032                                               ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00033         throw(ModbusRTU::mbException);
00034 
00040         ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr,
00041                                                      ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00042         throw(ModbusRTU::mbException);
00043 
00044 
00050         ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr,
00051                                                 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00052         throw(ModbusRTU::mbException);
00053 
00059         ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr,
00060                                                ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00061         throw(ModbusRTU::mbException);
00062 
00068         ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr,
00069                                                       ModbusRTU::ModbusData reg, bool cmd )
00070         throw(ModbusRTU::mbException);
00071 
00077         ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr,
00078                                                         ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data )
00079         throw(ModbusRTU::mbException);
00080 
00082         ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ForceCoilsMessage& msg )
00083         throw(ModbusRTU::mbException);
00084 
00086         ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::WriteOutputMessage& msg )
00087         throw(ModbusRTU::mbException);
00088 
00090         ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr,
00091                                                 ModbusRTU::DiagnosticsSubFunction subfunc,
00092                                                 ModbusRTU::ModbusData dat = 0 )
00093         throw(ModbusRTU::mbException);
00094 
00098         ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
00099                                               ModbusRTU::ModbusByte devID,
00100                                               ModbusRTU::ModbusByte objID )
00101         throw(ModbusRTU::mbException);
00102 
00112         ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr,
00113                                                       ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec,
00114                                                       ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year,
00115                                                       ModbusRTU::ModbusByte century )
00116         throw(ModbusRTU::mbException);
00117 
00118 
00125         ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00126                 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 )
00127         throw(ModbusRTU::mbException);
00128 
00134         void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00135                            const char* save2filename, timeout_t part_timeout_msec = 2000 )
00136         throw(ModbusRTU::mbException);
00137 
00138         // ---------------------------------------------------------------------
00140         void setTimeout( timeout_t msec );
00141 
00145         int setAfterSendPause( timeout_t msec );
00146 
00148         inline void setSleepPause( timeout_t usec )
00149         {
00150             sleepPause_usec = usec;
00151         }
00152 
00153         void initLog( std::shared_ptr<uniset::Configuration> conf, const std::string& name, const std::string& logfile = "" );
00154         void setLog( std::shared_ptr<DebugStream> dlog );
00155 
00156         inline void setCRCNoCheckit( bool set )
00157         {
00158             crcNoCheckit = set;
00159         }
00160         inline bool isCRCNoCheckit() const
00161         {
00162             return crcNoCheckit;
00163         }
00164 
00165         virtual void cleanupChannel() {}
00166 
00167     protected:
00168 
00175         virtual size_t getNextData( unsigned char* buf, size_t len ) = 0;
00176 
00178         virtual void setChannelTimeout( timeout_t msec ) = 0;
00179 
00180         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) = 0;
00181 
00183         virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
00184                                             ModbusRTU::ModbusMessage& qreply, timeout_t timeout ) = 0;
00185 
00186         // -------------------------------------
00188         virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg );
00189 
00191         virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc,
00192                                            ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00193 
00194         virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc,
00195                                                ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00196 
00197         timeout_t replyTimeOut_ms;    
00198         timeout_t aftersend_msec;    
00199         timeout_t sleepPause_usec;     
00201         bool crcNoCheckit;
00202 
00203         uniset::uniset_rwmutex sendMutex;
00204         std::shared_ptr<DebugStream> dlog;
00205 
00206         void printProcessingTime();
00207         PassiveTimer tmProcessing;
00208 
00209     private:
00210 
00211         ModbusRTU::ModbusMessage qreply;   
00212         ModbusRTU::ModbusMessage qbuf;     
00213 };
00214 // -------------------------------------------------------------------------
00215 } // end of namespace uniset
00216 // -------------------------------------------------------------------------
00217 #endif // ModbusClient_H_
00218 // -------------------------------------------------------------------------