UniSet  2.8.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  void setForceDisconnect( bool s );
34 
35  bool reconnect();
36  void cleanInputStream();
37 
38  virtual void cleanupChannel() override;
39 
40  std::string getAddress() const;
41  int getPort() const;
42 
43  void setReadTimeout( timeout_t msec );
44  timeout_t getReadTimeout() const;
45 
46  protected:
47 
48  virtual size_t getNextData(unsigned char* buf, size_t len ) override;
49  virtual void setChannelTimeout( timeout_t msec ) override;
50  virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, size_t len ) override;
51  virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
52  ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
53 
54  private:
55  //ost::TCPStream* tcp;
56  std::shared_ptr<UTCPStream> tcp;
57  ModbusRTU::ModbusData nTransaction;
58  std::queue<unsigned char> qrecv;
59  PassiveTimer ptTimeout;
60  std::string iaddr = { "" };
61  int port = { 0 };
62  bool force_disconnect = { false };
63  int keepAliveTimeout = { 1000 };
64 
65  timeout_t readTimeout = { 50 }; // timeout на чтение очередной порции данных
66  };
67  // -------------------------------------------------------------------------
68 } // end of namespace uniset
69 // -------------------------------------------------------------------------
70 #endif // ModbusTCPMaster_H_
71 // -------------------------------------------------------------------------
Пассивный таймер
Definition: PassiveTimer.h:92
virtual void setChannelTimeout(timeout_t msec) override
Definition: ModbusTCPMaster.cc:57
Definition: CommonEventLoop.h:14
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:210
Definition: ModbusTCPMaster.h:16