UniSet 2.35.2
ModbusTCPSession.h
1// -------------------------------------------------------------------------
2#ifndef ModbusTCPSession_H_
3#define ModbusTCPSession_H_
4// -------------------------------------------------------------------------
5#include <string>
6#include <queue>
7#include <unordered_map>
8#include <ev++.h>
9#include "ModbusServerSlot.h"
10#include "ModbusServer.h"
11#include "PassiveTimer.h"
12#include "UTCPCore.h"
13#include "UTCPStream.h"
14// -------------------------------------------------------------------------
15namespace uniset
16{
17 // -------------------------------------------------------------------------
34 public ModbusServerSlot,
35 public ModbusServer
36 {
37 public:
38
39 ModbusTCPSession( const Poco::Net::StreamSocket& s, const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t timeout );
40 virtual ~ModbusTCPSession();
41
42 void cleanInputStream();
43
44 virtual void cleanupChannel() override;
45 virtual void terminate() override;
46
47 typedef sigc::slot<void, const ModbusTCPSession*> FinalSlot;
48
49 void connectFinalSession( FinalSlot sl );
50
51 std::string getClientAddress() const;
52
53 void setSessionTimeout( double t );
54
55 // запуск обработки входящих запросов
56 void run( ev::loop_ref& loop );
57
58 virtual bool isActive() const override;
59
60 protected:
61
62 virtual void iowait( timeout_t msec ) override;
63
64 virtual ModbusRTU::mbErrCode realReceive( const std::unordered_set<ModbusRTU::ModbusAddr>& vmbaddr, timeout_t msecTimeout ) override;
65
66 void callback( ev::io& watcher, int revents );
67 void onTimeout( ev::timer& watcher, int revents );
68 virtual void readEvent( ev::io& watcher );
69 virtual void writeEvent( ev::io& watcher );
70 virtual void final();
71
72 virtual size_t getNextData( unsigned char* buf, int len ) override;
73 virtual void setChannelTimeout( timeout_t msec ) override;
74 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
75 virtual ModbusRTU::mbErrCode tcp_processing( ModbusRTU::MBAPHeader& mhead );
76 virtual ModbusRTU::mbErrCode make_adu_header( ModbusRTU::ModbusMessage& request ) override;
77 virtual ModbusRTU::mbErrCode post_send_request(ModbusRTU::ModbusMessage& request ) override;
78
79 virtual ModbusRTU::mbErrCode readCoilStatus( const ModbusRTU::ReadCoilMessage& query,
80 ModbusRTU::ReadCoilRetMessage& reply ) override;
81
82 virtual ModbusRTU::mbErrCode readInputStatus( const ModbusRTU::ReadInputStatusMessage& query,
84
85 virtual ModbusRTU::mbErrCode readOutputRegisters( const ModbusRTU::ReadOutputMessage& query,
86 ModbusRTU::ReadOutputRetMessage& reply ) override;
87
88 virtual ModbusRTU::mbErrCode readInputRegisters( const ModbusRTU::ReadInputMessage& query,
89 ModbusRTU::ReadInputRetMessage& reply ) override;
90
91 virtual ModbusRTU::mbErrCode forceSingleCoil( const ModbusRTU::ForceSingleCoilMessage& query,
93
94 virtual ModbusRTU::mbErrCode writeOutputSingleRegister( const ModbusRTU::WriteSingleOutputMessage& query,
96
97 virtual ModbusRTU::mbErrCode forceMultipleCoils( const ModbusRTU::ForceCoilsMessage& query,
98 ModbusRTU::ForceCoilsRetMessage& reply ) override;
99
100 virtual ModbusRTU::mbErrCode writeOutputRegisters( const ModbusRTU::WriteOutputMessage& query,
101 ModbusRTU::WriteOutputRetMessage& reply ) override;
102
103 virtual ModbusRTU::mbErrCode diagnostics( const ModbusRTU::DiagnosticMessage& query,
104 ModbusRTU::DiagnosticRetMessage& reply ) override;
105
106 virtual ModbusRTU::mbErrCode read4314( const ModbusRTU::MEIMessageRDI& query,
107 ModbusRTU::MEIMessageRetRDI& reply ) override;
108
109 virtual ModbusRTU::mbErrCode journalCommand( const ModbusRTU::JournalCommandMessage& query,
110 ModbusRTU::JournalCommandRetMessage& reply ) override;
111
112 virtual ModbusRTU::mbErrCode setDateTime( const ModbusRTU::SetDateTimeMessage& query,
113 ModbusRTU::SetDateTimeRetMessage& reply ) override;
114
115 virtual ModbusRTU::mbErrCode remoteService( const ModbusRTU::RemoteServiceMessage& query,
116 ModbusRTU::RemoteServiceRetMessage& reply ) override;
117
118 virtual ModbusRTU::mbErrCode fileTransfer( const ModbusRTU::FileTransferMessage& query,
119 ModbusRTU::FileTransferRetMessage& reply ) override;
120
121 private:
122 std::queue<unsigned char> qrecv;
123 std::unordered_set<ModbusRTU::ModbusAddr> vaddr;
124 ModbusRTU::MBAPHeader curQueryHeader;
125 PassiveTimer ptTimeout;
126 timeout_t timeout = { 0 };
128
129 ev::io io;
130 ev::timer ioTimeout;
131
132 std::shared_ptr<UTCPStream> sock;
133 std::queue<UTCPCore::Buffer*> qsend;
134 double sessTimeout = { 10.0 };
135
136 bool ignoreAddr = { false };
137 std::string peername = { "" };
138
139 std::string caddr = { "" };
140
141 FinalSlot slFin;
142
143 std::atomic_bool cancelled = { false };
144 PassiveTimer pt;
145 PassiveTimer ptWait;
146 };
147 // ---------------------------------------------------------------------
148} // end of namespace uniset
149// -------------------------------------------------------------------------
150#endif // ModbusTCPSession_H_
151// -------------------------------------------------------------------------
Definition ModbusServer.h:33
Definition ModbusServerSlot.h:14
The ModbusTCPSession class Класс рассчитан на совместную работу с ModbusTCPServer,...
Definition ModbusTCPSession.h:36
virtual ModbusRTU::mbErrCode readInputStatus(const ModbusRTU::ReadInputStatusMessage &query, ModbusRTU::ReadInputStatusRetMessage &reply) override
Definition ModbusTCPSession.cc:453
virtual ModbusRTU::mbErrCode fileTransfer(const ModbusRTU::FileTransferMessage &query, ModbusRTU::FileTransferRetMessage &reply) override
Definition ModbusTCPSession.cc:570
virtual ModbusRTU::mbErrCode writeOutputSingleRegister(const ModbusRTU::WriteSingleOutputMessage &query, ModbusRTU::WriteSingleOutputRetMessage &reply) override
Definition ModbusTCPSession.cc:533
virtual ModbusRTU::mbErrCode realReceive(const std::unordered_set< ModbusRTU::ModbusAddr > &vmbaddr, timeout_t msecTimeout) override
Definition ModbusTCPSession.cc:211
virtual ModbusRTU::mbErrCode read4314(const ModbusRTU::MEIMessageRDI &query, ModbusRTU::MEIMessageRetRDI &reply) override
Definition ModbusTCPSession.cc:514
virtual ModbusRTU::mbErrCode readCoilStatus(const ModbusRTU::ReadCoilMessage &query, ModbusRTU::ReadCoilRetMessage &reply) override
Definition ModbusTCPSession.cc:443
virtual ModbusRTU::mbErrCode readInputRegisters(const ModbusRTU::ReadInputMessage &query, ModbusRTU::ReadInputRetMessage &reply) override
Definition ModbusTCPSession.cc:474
virtual ModbusRTU::mbErrCode forceMultipleCoils(const ModbusRTU::ForceCoilsMessage &query, ModbusRTU::ForceCoilsRetMessage &reply) override
Definition ModbusTCPSession.cc:484
virtual ModbusRTU::mbErrCode setDateTime(const ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply) override
Definition ModbusTCPSession.cc:552
virtual ModbusRTU::mbErrCode journalCommand(const ModbusRTU::JournalCommandMessage &query, ModbusRTU::JournalCommandRetMessage &reply) override
Definition ModbusTCPSession.cc:543
virtual size_t getNextData(unsigned char *buf, int len) override
Definition ModbusTCPSession.cc:298
virtual ModbusRTU::mbErrCode forceSingleCoil(const ModbusRTU::ForceSingleCoilMessage &query, ModbusRTU::ForceSingleCoilRetMessage &reply) override
Definition ModbusTCPSession.cc:523
virtual ModbusRTU::mbErrCode writeOutputRegisters(const ModbusRTU::WriteOutputMessage &query, ModbusRTU::WriteOutputRetMessage &reply) override
Definition ModbusTCPSession.cc:495
virtual void setChannelTimeout(timeout_t msec) override
Definition ModbusTCPSession.cc:579
virtual ModbusRTU::mbErrCode readOutputRegisters(const ModbusRTU::ReadOutputMessage &query, ModbusRTU::ReadOutputRetMessage &reply) override
Definition ModbusTCPSession.cc:464
virtual ModbusRTU::mbErrCode diagnostics(const ModbusRTU::DiagnosticMessage &query, ModbusRTU::DiagnosticRetMessage &reply) override
Definition ModbusTCPSession.cc:505
virtual ModbusRTU::mbErrCode remoteService(const ModbusRTU::RemoteServiceMessage &query, ModbusRTU::RemoteServiceRetMessage &reply) override
Definition ModbusTCPSession.cc:561
Пассивный таймер
Definition PassiveTimer.h:94
Definition Calibration.h:27
Definition ModbusTypes.h:1175
Definition ModbusTypes.h:1237
Definition ModbusTypes.h:1664
Definition ModbusTypes.h:1697
Definition ModbusTypes.h:763
Definition ModbusTypes.h:841
Definition ModbusTypes.h:983
Definition ModbusTypes.h:1379
Definition ModbusTypes.h:1404
Definition ModbusTypes.h:192
Definition ModbusTypes.h:1249
Definition ModbusTypes.h:1309
Definition ModbusTypes.h:210
Definition ModbusTypes.h:421
Definition ModbusTypes.h:457
Definition ModbusTypes.h:664
Definition ModbusTypes.h:698
Definition ModbusTypes.h:494
Definition ModbusTypes.h:568
Definition ModbusTypes.h:601
Definition ModbusTypes.h:1537
Definition ModbusTypes.h:1572
Definition ModbusTypes.h:1473
Definition ModbusTypes.h:1514
Definition ModbusTypes.h:885
Definition ModbusTypes.h:940
Definition ModbusTypes.h:1084