UniSet  2.6.0
ModbusTCPMaster.h
1 #ifndef ModbusTCPMaster_H_
2 #define ModbusTCPMaster_H_
3 // -------------------------------------------------------------------------
4 #include <memory>
5 #include <string>
6 #include <queue>
7 #include <Poco/Net/SocketStream.h>
8 #include "UTCPStream.h"
9 #include "ModbusTypes.h"
10 #include "ModbusClient.h"
11 // -------------------------------------------------------------------------
12 namespace uniset
13 {
14  // -------------------------------------------------------------------------
17  public ModbusClient
18  {
19  public:
20 
22  virtual ~ModbusTCPMaster();
23 
24  bool connect( const std::string& addr, int port, bool closeOldConnection = true ) noexcept;
25  bool connect( const Poco::Net::SocketAddress& addr, int _port, bool closeOldConnection = true ) noexcept;
26 
27  void disconnect();
28  void forceDisconnect();
29  bool isConnection() const;
30 
31  static bool checkConnection( const std::string& ip, int port, int timeout_msec = 100 );
32 
33  inline void setForceDisconnect( bool s )
34  {
35  force_disconnect = s;
36  }
37 
38  bool reconnect();
39  void cleanInputStream();
40 
41  virtual void cleanupChannel() override
42  {
43  cleanInputStream();
44  }
45 
46  inline std::string getAddress() const
47  {
48  return iaddr;
49  }
50  inline int getPort() const
51  {
52  return port;
53  }
54 
55  void setReadTimeout( timeout_t msec );
56  timeout_t getReadTimeout() const;
57 
58  protected:
59 
60  virtual size_t getNextData(unsigned char* buf, size_t len ) override;
61  virtual void setChannelTimeout( timeout_t msec ) override;
62  virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) override;
63  virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
64  ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
65 
66  private:
67  //ost::TCPStream* tcp;
68  std::shared_ptr<UTCPStream> tcp;
69  ModbusRTU::ModbusData nTransaction;
70  std::queue<unsigned char> qrecv;
71  PassiveTimer ptTimeout;
72  std::string iaddr = { "" };
73  int port = { 0 };
74  bool force_disconnect = { false };
75  int keepAliveTimeout = { 1000 };
76 
77  timeout_t readTimeout = { 50 }; // timeout на чтение очередной порции данных
78  };
79  // -------------------------------------------------------------------------
80 } // end of namespace uniset
81 // -------------------------------------------------------------------------
82 #endif // ModbusTCPMaster_H_
83 // -------------------------------------------------------------------------
Пассивный таймер
Definition: PassiveTimer.h:90
virtual void setChannelTimeout(timeout_t msec) override
Definition: ModbusTCPMaster.cc:57
Definition: CallbackTimer.h:29
Definition: ModbusClient.h:18
virtual size_t getNextData(unsigned char *buf, size_t len) override
Definition: ModbusTCPMaster.cc:52
virtual ModbusRTU::mbErrCode query(ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage &msg, ModbusRTU::ModbusMessage &reply, timeout_t timeout) override
Definition: ModbusTCPMaster.cc:84
Definition: ModbusTypes.h:190
Definition: ModbusTCPMaster.h:16