UniSet  2.8.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-функции ----------------------------------------
33  ModbusRTU::ReadCoilRetMessage read01( ModbusRTU::ModbusAddr addr,
34  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
35 
43  ModbusRTU::ReadInputStatusRetMessage read02( ModbusRTU::ModbusAddr addr,
44  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
45 
46 
54  ModbusRTU::ReadOutputRetMessage read03( ModbusRTU::ModbusAddr addr,
55  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
56 
64  ModbusRTU::ReadInputRetMessage read04( ModbusRTU::ModbusAddr addr,
65  ModbusRTU::ModbusData start, ModbusRTU::ModbusData count );
66 
74  ModbusRTU::ForceSingleCoilRetMessage write05( ModbusRTU::ModbusAddr addr,
75  ModbusRTU::ModbusData reg, bool cmd );
76 
84  ModbusRTU::WriteSingleOutputRetMessage write06( ModbusRTU::ModbusAddr addr,
85  ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data );
86 
89 
92 
94  ModbusRTU::DiagnosticRetMessage diag08( ModbusRTU::ModbusAddr addr,
95  ModbusRTU::DiagnosticsSubFunction subfunc,
96  ModbusRTU::ModbusData dat = 0 );
97 
102  ModbusRTU::MEIMessageRetRDI read4314( ModbusRTU::ModbusAddr addr,
103  ModbusRTU::ModbusByte devID,
104  ModbusRTU::ModbusByte objID );
105 
117  ModbusRTU::SetDateTimeRetMessage setDateTime( ModbusRTU::ModbusAddr addr,
118  ModbusRTU::ModbusByte hour, ModbusRTU::ModbusByte min, ModbusRTU::ModbusByte sec,
119  ModbusRTU::ModbusByte day, ModbusRTU::ModbusByte mon, ModbusRTU::ModbusByte year,
120  ModbusRTU::ModbusByte century );
121 
122 
131  ModbusRTU::FileTransferRetMessage partOfFileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
132  ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec = 2000 );
133 
141  void fileTransfer( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile,
142  const std::string& save2filename, timeout_t part_timeout_msec = 2000 );
143 
144  // ---------------------------------------------------------------------
146  void setTimeout( timeout_t msec );
147 
151  int setAfterSendPause( timeout_t msec );
152 
154  inline void setSleepPause( timeout_t usec )
155  {
156  sleepPause_usec = usec;
157  }
158 
159  void initLog( std::shared_ptr<uniset::Configuration> conf, const std::string& name, const std::string& logfile = "" );
160  void setLog( std::shared_ptr<DebugStream> dlog );
161 
162  inline void setCRCNoCheckit( bool set )
163  {
164  crcNoCheckit = set;
165  }
166  inline bool isCRCNoCheckit() const
167  {
168  return crcNoCheckit;
169  }
170 
171  virtual void cleanupChannel() {}
172 
173  protected:
174 
181  virtual size_t getNextData( unsigned char* buf, size_t len ) = 0;
182 
184  virtual void setChannelTimeout( timeout_t msec ) = 0;
185 
186  virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) = 0;
187 
189  virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
190  ModbusRTU::ModbusMessage& qreply, timeout_t timeout ) = 0;
191 
192  // -------------------------------------
194  virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& msg );
195 
197  virtual ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte qfunc,
198  ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
199 
200  virtual ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusByte qfunc,
201  ModbusRTU::ModbusMessage& rbuf, timeout_t timeout );
202 
203  timeout_t replyTimeOut_ms;
204  timeout_t aftersend_msec;
205  timeout_t sleepPause_usec;
207  bool crcNoCheckit;
208 
209  uniset::uniset_rwmutex sendMutex;
210  std::shared_ptr<DebugStream> dlog;
211 
212  void printProcessingTime();
213  PassiveTimer tmProcessing;
214 
215  private:
216 
217  ModbusRTU::ModbusMessage qreply;
219  };
220  // -------------------------------------------------------------------------
221 } // end of namespace uniset
222 // -------------------------------------------------------------------------
223 #endif // ModbusClient_H_
224 // -------------------------------------------------------------------------
Пассивный таймер
Definition: PassiveTimer.h:92
ModbusRTU::WriteOutputRetMessage write10(ModbusRTU::WriteOutputMessage &msg)
Definition: ModbusClient.cc:213
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:279
Definition: CommonEventLoop.h:14
Definition: ModbusTypes.h:842
Definition: ModbusClient.h:18
ModbusRTU::ForceSingleCoilRetMessage write05(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData reg, bool cmd)
Definition: ModbusClient.cc:142
Definition: ModbusTypes.h:802
virtual size_t getNextData(unsigned char *buf, size_t len)=0
Definition: ModbusTypes.h:896
virtual ModbusRTU::mbErrCode send(ModbusRTU::ModbusMessage &msg)
Definition: ModbusClient.cc:1416
timeout_t aftersend_msec
Definition: ModbusClient.h:204
Definition: ModbusTypes.h:664
Definition: ModbusTypes.h:1601
Definition: ModbusTypes.h:1174
ModbusRTU::MEIMessageRetRDI read4314(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusByte devID, ModbusRTU::ModbusByte objID)
Definition: ModbusClient.cc:255
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:234
Definition: ModbusTypes.h:376
timeout_t replyTimeOut_ms
Definition: ModbusClient.h:203
Definition: ModbusTypes.h:1241
ModbusRTU::WriteSingleOutputRetMessage write06(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData reg, ModbusRTU::ModbusData data)
Definition: ModbusClient.cc:167
timeout_t sleepPause_usec
Definition: ModbusClient.h:205
Definition: Mutex.h:31
Definition: ModbusTypes.h:725
ModbusRTU::FileTransferRetMessage partOfFileTransfer(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, ModbusRTU::ModbusData numpack, timeout_t part_timeout_msec=2000)
Definition: ModbusClient.cc:391
void setSleepPause(timeout_t usec)
Definition: ModbusClient.h:154
virtual ModbusRTU::mbErrCode query(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage &msg, ModbusRTU::ModbusMessage &qreply, timeout_t timeout)=0
void fileTransfer(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData idFile, const std::string &save2filename, timeout_t part_timeout_msec=2000)
Definition: ModbusClient.cc:301
void setTimeout(timeout_t msec)
Definition: ModbusClient.cc:48
int setAfterSendPause(timeout_t msec)
Definition: ModbusClient.cc:53
Definition: ModbusTypes.h:575
Definition: ModbusTypes.h:210
ModbusRTU::ReadInputStatusRetMessage read02(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:80
ModbusRTU::ReadOutputRetMessage read03(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:101
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:406
Definition: ModbusTypes.h:1434
ModbusRTU::ReadInputRetMessage read04(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusData start, ModbusRTU::ModbusData count)
Definition: ModbusClient.cc:122
ModbusRTU::ForceCoilsRetMessage write0F(ModbusRTU::ForceCoilsMessage &msg)
Definition: ModbusClient.cc:191