UniSet 2.32.1
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( uniset::ModbusRTU::ReadCoilMessage& query,
140 uniset::ModbusRTU::mbErrCode readInputStatus( uniset::ModbusRTU::ReadInputStatusMessage& query,
142
144 uniset::ModbusRTU::mbErrCode readOutputRegisters( uniset::ModbusRTU::ReadOutputMessage& query,
146
148 uniset::ModbusRTU::mbErrCode readInputRegisters( uniset::ModbusRTU::ReadInputMessage& query,
150
152 uniset::ModbusRTU::mbErrCode forceSingleCoil( uniset::ModbusRTU::ForceSingleCoilMessage& query,
154
156 uniset::ModbusRTU::mbErrCode forceMultipleCoils( uniset::ModbusRTU::ForceCoilsMessage& query,
158
159
161 uniset::ModbusRTU::mbErrCode writeOutputRegisters( uniset::ModbusRTU::WriteOutputMessage& query,
163
167
168
169 uniset::ModbusRTU::mbErrCode diagnostics( uniset::ModbusRTU::DiagnosticMessage& query,
171
172 uniset::ModbusRTU::mbErrCode read4314( uniset::ModbusRTU::MEIMessageRDI& query,
174
176 uniset::ModbusRTU::mbErrCode journalCommand( uniset::ModbusRTU::JournalCommandMessage& query,
178
180 uniset::ModbusRTU::mbErrCode setDateTime( uniset::ModbusRTU::SetDateTimeMessage& query,
182
184 uniset::ModbusRTU::mbErrCode remoteService( uniset::ModbusRTU::RemoteServiceMessage& query,
186
187 uniset::ModbusRTU::mbErrCode fileTransfer( 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 writeOutputSingleRegister(uniset::ModbusRTU::WriteSingleOutputMessage &query, uniset::ModbusRTU::WriteSingleOutputRetMessage &reply)
Definition MBTCPTestServer.cc:334
uniset::ModbusTCPServerSlot * sslot
Definition MBTCPTestServer.h:192
uniset::ModbusRTU::mbErrCode remoteService(uniset::ModbusRTU::RemoteServiceMessage &query, uniset::ModbusRTU::RemoteServiceRetMessage &reply)
Definition MBTCPTestServer.cc:421
uniset::ModbusRTU::mbErrCode writeOutputRegisters(uniset::ModbusRTU::WriteOutputMessage &query, uniset::ModbusRTU::WriteOutputRetMessage &reply)
Definition MBTCPTestServer.cc:306
uniset::ModbusRTU::mbErrCode forceMultipleCoils(uniset::ModbusRTU::ForceCoilsMessage &query, uniset::ModbusRTU::ForceCoilsRetMessage &reply)
Definition MBTCPTestServer.cc:291
uniset::ModbusRTU::mbErrCode readCoilStatus(uniset::ModbusRTU::ReadCoilMessage &query, uniset::ModbusRTU::ReadCoilRetMessage &reply)
Definition MBTCPTestServer.cc:107
void execute()
Definition MBTCPTestServer.cc:95
uniset::ModbusRTU::mbErrCode journalCommand(uniset::ModbusRTU::JournalCommandMessage &query, uniset::ModbusRTU::JournalCommandRetMessage &reply)
Definition MBTCPTestServer.cc:366
uniset::ModbusRTU::mbErrCode setDateTime(uniset::ModbusRTU::SetDateTimeMessage &query, uniset::ModbusRTU::SetDateTimeRetMessage &reply)
Definition MBTCPTestServer.cc:406
uniset::ModbusRTU::mbErrCode forceSingleCoil(uniset::ModbusRTU::ForceSingleCoilMessage &query, uniset::ModbusRTU::ForceSingleCoilRetMessage &reply)
Definition MBTCPTestServer.cc:349
uniset::ModbusRTU::mbErrCode readInputStatus(uniset::ModbusRTU::ReadInputStatusMessage &query, uniset::ModbusRTU::ReadInputStatusRetMessage &reply)
Definition MBTCPTestServer.cc:155
uniset::ModbusRTU::mbErrCode readInputRegisters(uniset::ModbusRTU::ReadInputMessage &query, uniset::ModbusRTU::ReadInputRetMessage &reply)
Definition MBTCPTestServer.cc:203
std::unordered_set< uniset::ModbusRTU::ModbusAddr > vaddr
Definition MBTCPTestServer.h:193
uniset::ModbusRTU::mbErrCode readOutputRegisters(uniset::ModbusRTU::ReadOutputMessage &query, uniset::ModbusRTU::ReadOutputRetMessage &reply)
Definition MBTCPTestServer.cc:248
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:1118
Definition ModbusTypes.h:1176
Definition ModbusTypes.h:1575
Definition ModbusTypes.h:1603
Definition ModbusTypes.h:727
Definition ModbusTypes.h:804
Definition ModbusTypes.h:937
Definition ModbusTypes.h:1310
Definition ModbusTypes.h:1333
Definition ModbusTypes.h:1188
Definition ModbusTypes.h:1243
Definition ModbusTypes.h:347
Definition ModbusTypes.h:378
Definition ModbusTypes.h:636
Definition ModbusTypes.h:666
Definition ModbusTypes.h:447
Definition ModbusTypes.h:548
Definition ModbusTypes.h:577
Definition ModbusTypes.h:1456
Definition ModbusTypes.h:1489
Definition ModbusTypes.h:1398
Definition ModbusTypes.h:1436
Definition ModbusTypes.h:844
Definition ModbusTypes.h:898
Definition ModbusTypes.h:1033