UniSet 2.35.2
MBTCPTestServer.h
1#ifndef MBTCPTestServer_H_
2#define MBTCPTestServer_H_
3// -------------------------------------------------------------------------
4#include <string>
5#include <atomic>
6#include <ostream>
7#include <unordered_set>
8#include "modbus/ModbusTCPServerSlot.h"
9#include "VTypes.h"
10// -------------------------------------------------------------------------
13{
14 public:
15 MBTCPTestServer( const std::unordered_set<uniset::ModbusRTU::ModbusAddr>& vaddr, const std::string& inetaddr, int port = 502, bool verbose = false );
17
18 inline void setVerbose( bool state )
19 {
20 verbose = state;
21 }
22
23 inline void setReply( uint32_t val )
24 {
25 replyVal = val;
26 }
27
28 void execute();
29 void setLog( std::shared_ptr<DebugStream> dlog );
30
31 inline bool isRunning()
32 {
33 return ( sslot && sslot->isActive() );
34 }
35
36 inline void disableExchange( bool set = true )
37 {
38 disabled = set;
39 }
40
41 inline bool getForceSingleCoilCmd()
42 {
43 return forceSingleCoilCmd;
44 }
45 inline int16_t getLastWriteRegister( uint16_t reg )
46 {
47 return lastWriteRegister[reg].value;
48 }
49 inline float getLastWriteRegisterF2( uint16_t reg )
50 {
51 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
52 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
53 };
55 return (float)f2;
56 }
57 inline uint16_t getLastWriteRegisterByte( uint16_t reg )
58 {
59 uniset::VTypes::Byte b((uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value);
60 return (uint16_t)b;
61 }
62 inline float getLastWriteRegisterF2r( uint16_t reg )
63 {
64 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
65 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
66 };
68 return (float)f2r;
69 }
70 inline double getLastWriteRegisterF4( uint16_t reg )
71 {
72 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
73 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value,
74 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 2].value,
75 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 3].value
76 };
78 return (double)f4;
79 }
80 inline int32_t getLastWriteRegisterI2( uint16_t reg )
81 {
82 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
83 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
84 };
86 return (int32_t)i2;
87 }
88 inline int32_t getLastWriteRegisterI2r( uint16_t reg )
89 {
90 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
91 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
92 };
94 return (int32_t)i2r;
95 }
96 inline uint32_t getLastWriteRegisterU2( uint16_t reg )
97 {
98 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
99 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
100 };
102 return (uint32_t)u2;
103 }
104 inline uint32_t getLastWriteRegisterU2r( uint16_t reg )
105 {
106 uniset::ModbusRTU::ModbusData data[] = {(uniset::ModbusRTU::ModbusData)lastWriteRegister[reg].value,
107 (uniset::ModbusRTU::ModbusData)lastWriteRegister[reg + 1].value
108 };
110 return (uint32_t)u2r;
111 }
112 inline long getWriteRegisterCount( uint16_t reg )
113 {
114 return lastWriteRegister[reg].count;
115 }
116 inline uniset::ModbusRTU::ForceCoilsMessage getLastForceCoilsQ()
117 {
118 return lastForceCoilsQ;
119 }
120 inline uniset::ModbusRTU::WriteOutputMessage getLastWriteOutput()
121 {
122 return lastWriteOutputQ;
123 }
124
125 friend std::ostream& operator<<(std::ostream& os, const MBTCPTestServer* m );
126
127 inline float getF2TestValue()
128 {
129 return f2_test_value;
130 }
131
132 protected:
133 // действия при завершении работы
134 void sigterm( int signo );
135
137 uniset::ModbusRTU::mbErrCode readCoilStatus( const uniset::ModbusRTU::ReadCoilMessage& query,
140 uniset::ModbusRTU::mbErrCode readInputStatus( const uniset::ModbusRTU::ReadInputStatusMessage& query,
142
144 uniset::ModbusRTU::mbErrCode readOutputRegisters( const uniset::ModbusRTU::ReadOutputMessage& query,
146
148 uniset::ModbusRTU::mbErrCode readInputRegisters( const uniset::ModbusRTU::ReadInputMessage& query,
150
152 uniset::ModbusRTU::mbErrCode forceSingleCoil( const uniset::ModbusRTU::ForceSingleCoilMessage& query,
154
156 uniset::ModbusRTU::mbErrCode forceMultipleCoils( const uniset::ModbusRTU::ForceCoilsMessage& query,
158
159
161 uniset::ModbusRTU::mbErrCode writeOutputRegisters( const uniset::ModbusRTU::WriteOutputMessage& query,
163
165 uniset::ModbusRTU::mbErrCode writeOutputSingleRegister( const uniset::ModbusRTU::WriteSingleOutputMessage& query,
167
168
169 uniset::ModbusRTU::mbErrCode diagnostics( const uniset::ModbusRTU::DiagnosticMessage& query,
171
172 uniset::ModbusRTU::mbErrCode read4314( const uniset::ModbusRTU::MEIMessageRDI& query,
174
176 uniset::ModbusRTU::mbErrCode journalCommand( const uniset::ModbusRTU::JournalCommandMessage& query,
178
180 uniset::ModbusRTU::mbErrCode setDateTime( const uniset::ModbusRTU::SetDateTimeMessage& query,
182
184 uniset::ModbusRTU::mbErrCode remoteService( const uniset::ModbusRTU::RemoteServiceMessage& query,
186
187 uniset::ModbusRTU::mbErrCode fileTransfer( const uniset::ModbusRTU::FileTransferMessage& query,
189
190
193 std::unordered_set<uniset::ModbusRTU::ModbusAddr> vaddr;
195 bool verbose;
196 uint32_t replyVal;
197 bool forceSingleCoilCmd;
198 struct regData
199 {
200 int16_t value = {0};
201 long count = {0};
202 void setValue(int16_t val)
203 {
204 value = val;
205 count++;
206 }
207 };
208 std::unordered_map<int16_t, regData> lastWriteRegister;
211 float f2_test_value = {0.0};
212
213#if 0
214 typedef std::map<uniset::ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap;
215 ExchangeErrorMap errmap;
216 uniset::ModbusRTU::mbErrCode prev;
217
218
219 // можно было бы сделать unsigned, но аналоговые датчики у нас имеют
220 // тип long. А это число передаётся в графику в виде аналогового датчика
221 long askCount;
224 typedef std::map<int, std::string> FileList;
225 FileList flist;
226#endif
227
228 private:
229 bool disabled;
230 std::string myname;
231};
232// -------------------------------------------------------------------------
233#endif // MBTCPTestServer_H_
234// -------------------------------------------------------------------------
Definition MBTCPTestServer.h:13
uniset::ModbusRTU::mbErrCode readInputRegisters(const uniset::ModbusRTU::ReadInputMessage &query, uniset::ModbusRTU::ReadInputRetMessage &reply)
Definition MBTCPTestServer.cc:178
uniset::ModbusRTU::mbErrCode setDateTime(const uniset::ModbusRTU::SetDateTimeMessage &query, uniset::ModbusRTU::SetDateTimeRetMessage &reply)
Definition MBTCPTestServer.cc:360
uniset::ModbusTCPServerSlot * sslot
Definition MBTCPTestServer.h:192
uniset::ModbusRTU::mbErrCode remoteService(const uniset::ModbusRTU::RemoteServiceMessage &query, uniset::ModbusRTU::RemoteServiceRetMessage &reply)
Definition MBTCPTestServer.cc:375
uniset::ModbusRTU::mbErrCode forceSingleCoil(const uniset::ModbusRTU::ForceSingleCoilMessage &query, uniset::ModbusRTU::ForceSingleCoilRetMessage &reply)
Definition MBTCPTestServer.cc:303
uniset::ModbusRTU::mbErrCode writeOutputSingleRegister(const uniset::ModbusRTU::WriteSingleOutputMessage &query, uniset::ModbusRTU::WriteSingleOutputRetMessage &reply)
Definition MBTCPTestServer.cc:288
uniset::ModbusRTU::mbErrCode journalCommand(const uniset::ModbusRTU::JournalCommandMessage &query, uniset::ModbusRTU::JournalCommandRetMessage &reply)
Definition MBTCPTestServer.cc:320
void execute()
Definition MBTCPTestServer.cc:95
uniset::ModbusRTU::mbErrCode readCoilStatus(const uniset::ModbusRTU::ReadCoilMessage &query, uniset::ModbusRTU::ReadCoilRetMessage &reply)
Definition MBTCPTestServer.cc:107
std::unordered_set< uniset::ModbusRTU::ModbusAddr > vaddr
Definition MBTCPTestServer.h:193
uniset::ModbusRTU::mbErrCode forceMultipleCoils(const uniset::ModbusRTU::ForceCoilsMessage &query, uniset::ModbusRTU::ForceCoilsRetMessage &reply)
Definition MBTCPTestServer.cc:245
uniset::ModbusRTU::mbErrCode readOutputRegisters(const uniset::ModbusRTU::ReadOutputMessage &query, uniset::ModbusRTU::ReadOutputRetMessage &reply)
Definition MBTCPTestServer.cc:213
uniset::ModbusRTU::mbErrCode readInputStatus(const uniset::ModbusRTU::ReadInputStatusMessage &query, uniset::ModbusRTU::ReadInputStatusRetMessage &reply)
Definition MBTCPTestServer.cc:143
uniset::ModbusRTU::mbErrCode writeOutputRegisters(const uniset::ModbusRTU::WriteOutputMessage &query, uniset::ModbusRTU::WriteOutputRetMessage &reply)
Definition MBTCPTestServer.cc:260
Definition ModbusTCPServerSlot.h:16
Definition VTypes.h:198
Definition VTypes.h:57
static size_t wsize()
Definition VTypes.h:88
Definition VTypes.h:116
Definition VTypes.h:144
static size_t wsize()
Definition VTypes.h:175
Definition VTypes.h:351
static size_t wsize()
Definition VTypes.h:382
Definition VTypes.h:402
Definition VTypes.h:428
static size_t wsize()
Definition VTypes.h:459
Definition VTypes.h:489
Definition MBTCPTestServer.h:199
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:1249
Definition ModbusTypes.h:1309
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