UniSet  2.6.0
ModbusClient.h
1 // -------------------------------------------------------------------------
2 #ifndef ModbusClient_H_
3 #define ModbusClient_H_
4 // -------------------------------------------------------------------------
5 #include <string>
6 #include <memory>
7 #include "Mutex.h"
8 #include "Debug.h"
9 #include "Configuration.h"
10 #include "PassiveTimer.h"
11 #include "ModbusTypes.h"
12 // -------------------------------------------------------------------------
13 namespace uniset
14 {
15  // -------------------------------------------------------------------------
19  {
20  public:
21 
22  ModbusClient();
23  virtual ~ModbusClient();
24 
25  // ------------- Modbus-функции ----------------------------------------
31  ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr,
32  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
34 
40  ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr,
41  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
43 
44 
50  ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr,
51  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
53 
59  ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr,
60  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count )
62 
68  ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr,
69  ModbusRTU::ModbusData reg, bool cmd )
71 
77  ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr,
78  ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data )
80 
84 
88 
90  ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr,
91  ModbusRTU::DiagnosticsSubFunction subfunc,
92  ModbusRTU::ModbusData dat = 0 )
94 
98  ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
99  ModbusRTU::ModbusByte devID,
100  ModbusRTU::ModbusByte objID )
101  throw(ModbusRTU::mbException);
102 
112  ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr,
113  ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec,
114  ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year,
115  ModbusRTU::ModbusByte century )
116  throw(ModbusRTU::mbException);
117 
118 
125  ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
126  ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 )
127  throw(ModbusRTU::mbException);
128 
134  void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
135  const char* save2filename, timeout_t part_timeout_msec = 2000 )
136  throw(ModbusRTU::mbException);
137 
138  // ---------------------------------------------------------------------
140  void setTimeout( timeout_t msec );
141 
145  int setAfterSendPause( timeout_t msec );
146 
148  inline void setSleepPause( timeout_t usec )
149  {
150  sleepPause_usec = usec;
151  }
152 
153  void initLog( std::shared_ptr<uniset::Configuration> conf, const std::string& name, const std::string& logfile = "" );
154  void setLog( std::shared_ptr<DebugStream> dlog );
155 
156  inline void setCRCNoCheckit( bool set )
157  {
158  crcNoCheckit = set;
159  }
160  inline bool isCRCNoCheckit() const
161  {
162  return crcNoCheckit;
163  }
164 
165  virtual void cleanupChannel() {}
166 
167  protected:
168 
175  virtual size_t getNextData( unsigned char* buf, size_t len ) = 0;
176 
178  virtual void setChannelTimeout( timeout_t msec ) = 0;
179 
180  virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) = 0;
181 
183  virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
184  ModbusRTU::ModbusMessage& qreply, timeout_t timeout ) = 0;
185 
186  // -------------------------------------
188  virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg );
189 
191  virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc,
192  ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
193 
194  virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc,
195  ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
196 
197  timeout_t replyTimeOut_ms;
198  timeout_t aftersend_msec;
199  timeout_t sleepPause_usec;
201  bool crcNoCheckit;
202 
203  uniset::uniset_rwmutex sendMutex;
204  std::shared_ptr<DebugStream> dlog;
205 
206  void printProcessingTime();
207  PassiveTimer tmProcessing;
208 
209  private:
210 
211  ModbusRTU::ModbusMessage qreply;
213  };
214  // -------------------------------------------------------------------------
215 } // end of namespace uniset
216 // -------------------------------------------------------------------------
217 #endif // ModbusClient_H_
218 // -------------------------------------------------------------------------
Пассивный таймер
Definition: PassiveTimer.h:90
ModbusRTU::WriteOutputRetMessage write10(ModbusRTU::WriteOutputMessage &msg)
Definition: ModbusClient.cc:162
ModbusRTU::SetDateTimeRetMessage setDateTime(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec, ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year, ModbusRTU::ModbusByte century)
Definition: ModbusClient.cc:204
Definition: CallbackTimer.h:29
Definition: ModbusTypes.h:824
Definition: ModbusClient.h:18
ModbusRTU::ForceSingleCoilRetMessage write05(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData reg, bool cmd)
Definition: ModbusClient.cc:118
Definition: ModbusTypes.h:784
virtual size_t getNextData(unsigned char *buf, size_t len)=0
Definition: ModbusTypes.h:878
virtual ModbusRTU::mbErrCode send(ModbusRTU::ModbusMessage &msg)
Definition: ModbusClient.cc:1344
timeout_t aftersend_msec
Definition: ModbusClient.h:198
Definition: ModbusTypes.h:644
void fileTransfer(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, const char *save2filename, timeout_t part_timeout_msec=2000)
Definition: ModbusClient.cc:227
Definition: ModbusTypes.h:1583
Definition: ModbusTypes.h:1156
ModbusRTU::MEIMessageRetRDI read4314(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte devID, ModbusRTU::ModbusByte objID)
Definition: ModbusClient.cc:189
ModbusRTU::ReadCoilRetMessage read01(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:60
ModbusRTU::DiagnosticRetMessage diag08(ModbusRTU::ModbusAddr addr, ModbusRTU::DiagnosticsSubFunction subfunc, ModbusRTU::ModbusData dat=0)
Definition: ModbusClient.cc:174
Definition: ModbusTypes.h:356
timeout_t replyTimeOut_ms
Definition: ModbusClient.h:197
Definition: ModbusRTUErrors.h:40
Definition: ModbusTypes.h:1223
ModbusRTU::WriteSingleOutputRetMessage write06(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data)
Definition: ModbusClient.cc:134
timeout_t sleepPause_usec
Definition: ModbusClient.h:199
Definition: Mutex.h:32
Definition: ModbusTypes.h:705
ModbusRTU::FileTransferRetMessage partOfFileTransfer(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec=2000)
Definition: ModbusClient.cc:318
void setSleepPause(timeout_t usec)
Definition: ModbusClient.h:148
virtual ModbusRTU::mbErrCode query(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage &msg, ModbusRTU::ModbusMessage &qreply, timeout_t timeout)=0
void setTimeout(timeout_t msec)
Definition: ModbusClient.cc:48
int setAfterSendPause(timeout_t msec)
Definition: ModbusClient.cc:53
Definition: ModbusTypes.h:555
Definition: ModbusTypes.h:190
ModbusRTU::ReadInputStatusRetMessage read02(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:74
ModbusRTU::ReadOutputRetMessage read03(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:89
virtual void setChannelTimeout(timeout_t msec)=0
virtual ModbusRTU::mbErrCode recv(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc, ModbusRTU::ModbusMessage &rbuf, timeout_t timeout)
Definition: ModbusClient.cc:334
Definition: ModbusTypes.h:1416
ModbusRTU::ReadInputRetMessage read04(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:104
ModbusRTU::ForceCoilsRetMessage write0F(ModbusRTU::ForceCoilsMessage &msg)
Definition: ModbusClient.cc:149