UniSet  2.2.1
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 // -------------------------------------------------------------------------
00015 class ModbusClient
00016 {
00017     public:
00018 
00019         ModbusClient();
00020         virtual ~ModbusClient();
00021 
00022         // ------------- Modbus-функции ----------------------------------------
00028         ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr,
00029                                               ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00030         throw(ModbusRTU::mbException);
00031 
00037         ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr,
00038                 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00039         throw(ModbusRTU::mbException);
00040 
00041 
00047         ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr,
00048                                                 ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00049         throw(ModbusRTU::mbException);
00050 
00056         ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr,
00057                                                ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
00058         throw(ModbusRTU::mbException);
00059 
00065         ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr,
00066                 ModbusRTU::ModbusData reg, bool cmd )
00067         throw(ModbusRTU::mbException);
00068 
00074         ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr,
00075                 ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data )
00076         throw(ModbusRTU::mbException);
00077 
00079         ModbusRTU::ForceCoilsRetMessage write0F( ModbusRTU::ForceCoilsMessage& msg )
00080         throw(ModbusRTU::mbException);
00081 
00083         ModbusRTU::WriteOutputRetMessage write10( ModbusRTU::WriteOutputMessage& msg )
00084         throw(ModbusRTU::mbException);
00085 
00087         ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr,
00088                                                 ModbusRTU::DiagnosticsSubFunction subfunc,
00089                                                 ModbusRTU::ModbusData dat = 0 )
00090         throw(ModbusRTU::mbException);
00091 
00095         ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
00096                                               ModbusRTU::ModbusByte devID,
00097                                               ModbusRTU::ModbusByte objID )
00098         throw(ModbusRTU::mbException);
00099 
00109         ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr,
00110                 ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec,
00111                 ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year,
00112                 ModbusRTU::ModbusByte century )
00113         throw(ModbusRTU::mbException);
00114 
00115 
00122         ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00123                 ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 )
00124         throw(ModbusRTU::mbException);
00125 
00131         void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
00132                            const char* save2filename, timeout_t part_timeout_msec = 2000 )
00133         throw(ModbusRTU::mbException);
00134 
00135         // ---------------------------------------------------------------------
00137         void setTimeout( timeout_t msec );
00138 
00142         int setAfterSendPause( timeout_t msec );
00143 
00145         inline void setSleepPause( timeout_t usec )
00146         {
00147             sleepPause_usec = usec;
00148         }
00149 
00150         void initLog( std::shared_ptr<UniSetTypes::Configuration> conf, const std::string& name, const std::string& logfile = "" );
00151         void setLog( std::shared_ptr<DebugStream> dlog );
00152 
00153 
00154         inline void setCRCNoCheckit( bool set )
00155         {
00156             crcNoCheckit = set;
00157         }
00158         inline bool isCRCNoCheckit()
00159         {
00160             return crcNoCheckit;
00161         }
00162 
00163         virtual void cleanupChannel() {}
00164 
00165     protected:
00166 
00173         virtual size_t getNextData( unsigned char* buf, int len ) = 0;
00174 
00176         virtual void setChannelTimeout( timeout_t msec ) = 0;
00177 
00178         virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) = 0;
00179 
00181         virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
00182                                             ModbusRTU::ModbusMessage& reply, timeout_t timeout ) = 0;
00183 
00184         // -------------------------------------
00186         virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg );
00187 
00189         virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc,
00190                                            ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00191 
00192         virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc,
00193                                                ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
00194 
00195 
00196 
00197         ModbusRTU::ModbusMessage reply;    
00198         ModbusRTU::ModbusMessage qbuf;     
00200         timeout_t replyTimeOut_ms;    
00201         timeout_t aftersend_msec;    
00202         timeout_t sleepPause_usec;     
00204         bool crcNoCheckit;
00205 
00206         UniSetTypes::uniset_rwmutex sendMutex;
00207         std::shared_ptr<DebugStream> dlog;
00208 
00209         void printProcessingTime();
00210         PassiveTimer tmProcessing;
00211 
00212     private:
00213 };
00214 // -------------------------------------------------------------------------
00215 #endif // ModbusClient_H_
00216 // -------------------------------------------------------------------------