nodbus-plus 0.8.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/.readthedocs.yaml +35 -0
  2. package/LICENSE.md +21 -21
  3. package/README.md +163 -48
  4. package/docs/Makefile +20 -0
  5. package/docs/client/channel.rst +209 -0
  6. package/docs/client/nodbus_master_serial.rst +559 -0
  7. package/docs/client/nodbus_master_tcp.rst +573 -0
  8. package/docs/conf.py +41 -0
  9. package/docs/images/01-readcoils.png +0 -0
  10. package/docs/images/02-readinputs.png +0 -0
  11. package/docs/images/03-readholding.png +0 -0
  12. package/docs/images/04-readinputsreg.png +0 -0
  13. package/docs/images/05-writecoil.png +0 -0
  14. package/docs/images/06-writeregister.png +0 -0
  15. package/docs/images/15-writecoil.png +0 -0
  16. package/docs/images/16.png +0 -0
  17. package/docs/images/22-mask.png +0 -0
  18. package/docs/images/23.png +0 -0
  19. package/docs/images/7.png +0 -0
  20. package/docs/images/modbus_pdu.png +0 -0
  21. package/docs/images/serial_adu.png +0 -0
  22. package/docs/images/tcp_adu.png +0 -0
  23. package/docs/index.rst +30 -0
  24. package/docs/make.bat +35 -0
  25. package/docs/protocol/modbus_master.rst +276 -0
  26. package/docs/protocol/modbus_master_serial.rst +290 -0
  27. package/docs/protocol/modbus_master_tcp.rst +296 -0
  28. package/docs/protocol/modbus_server.rst +469 -0
  29. package/docs/protocol/modbus_server_serial.rst +543 -0
  30. package/docs/protocol/modbus_server_tcp.rst +365 -0
  31. package/docs/requirements.txt +4 -0
  32. package/docs/server/net_server.rst +242 -0
  33. package/docs/server/nodbus_serial_server.rst +652 -0
  34. package/docs/server/nodbus_tcp_server.rst +505 -0
  35. package/docs/starting.rst +192 -0
  36. package/docs/static/simple logo.jpg +0 -0
  37. package/package.json +39 -30
  38. package/samples/mb_serial_server.js +77 -0
  39. package/samples/mb_tcp_client.js +114 -0
  40. package/samples/mb_tcp_server.js +58 -0
  41. package/src/client/net/serialchannel.js +195 -0
  42. package/src/client/net/tcpchannel.js +233 -0
  43. package/src/client/net/udpchannel.js +243 -0
  44. package/src/client/nodbus_serial_client.js +577 -0
  45. package/src/client/nodbus_tcp_client.js +542 -0
  46. package/src/nodbus-plus.js +157 -110
  47. package/src/protocol/modbus_master.js +298 -961
  48. package/src/protocol/modbus_master_serial.js +247 -0
  49. package/src/protocol/modbus_master_tcp.js +219 -0
  50. package/src/protocol/modbus_server.js +936 -0
  51. package/src/protocol/modbus_server_serial.js +368 -0
  52. package/src/protocol/modbus_server_tcp.js +129 -0
  53. package/src/protocol/utils.js +296 -0
  54. package/src/server/net/serialserver.js +184 -0
  55. package/src/server/net/tcpserver.js +290 -0
  56. package/src/server/net/udpserver.js +242 -0
  57. package/src/server/nodbus_serial_server.js +238 -0
  58. package/src/server/nodbus_tcp_server.js +249 -0
  59. package/test/modbus_master.test.js +279 -0
  60. package/test/modbus_master_serial.test.js +124 -0
  61. package/test/modbus_master_tcp.test.js +178 -0
  62. package/test/modbus_server.test.js +506 -0
  63. package/test/modbus_server_serial.test.js +328 -0
  64. package/test/modbus_server_tcp.test.js +91 -0
  65. package/test/nodbus_client_serial.test.js +307 -0
  66. package/test/nodbus_client_tcp.test.js +334 -0
  67. package/test/nodbus_server_serial.test.js +255 -0
  68. package/test/nodbus_server_tcp.test.js +216 -0
  69. package/CHANGELOG.md +0 -27
  70. package/src/client/m_stcp_client.js +0 -214
  71. package/src/client/m_tcp_client.js +0 -234
  72. package/src/net/tcpclient.js +0 -173
  73. package/src/net/tcpserver.js +0 -329
  74. package/src/protocol/adu.js +0 -40
  75. package/src/protocol/ascii_adu.js +0 -139
  76. package/src/protocol/boolean_register.js +0 -78
  77. package/src/protocol/functions/Force_Multiple_Coils.js +0 -76
  78. package/src/protocol/functions/Force_Single_Coil.js +0 -54
  79. package/src/protocol/functions/Mask_Holding_Register.js +0 -47
  80. package/src/protocol/functions/Preset_Multiple_Registers.js +0 -53
  81. package/src/protocol/functions/Preset_Single_Register.js +0 -39
  82. package/src/protocol/functions/Read_Coil_Status.js +0 -59
  83. package/src/protocol/functions/Read_Holding_Registers.js +0 -52
  84. package/src/protocol/functions/Read_Input_Registers.js +0 -52
  85. package/src/protocol/functions/Read_Input_Status.js +0 -58
  86. package/src/protocol/mbap.js +0 -60
  87. package/src/protocol/modbus_device.js +0 -35
  88. package/src/protocol/modbus_slave.js +0 -522
  89. package/src/protocol/pdu.js +0 -70
  90. package/src/protocol/rtu_adu.js +0 -122
  91. package/src/protocol/serial_adu.js +0 -29
  92. package/src/protocol/tcp_adu.js +0 -84
  93. package/src/protocol/word_register.js +0 -122
  94. package/src/server/m_stcp_server.js +0 -310
  95. package/src/server/m_tcp_server.js +0 -295
  96. package/test/modbus-stcp-server-test.js +0 -72
  97. package/test/modbus-stcp-server-test1.js +0 -72
  98. package/test/modbus-tcp-client-test.js +0 -159
  99. package/test/modbus-tcp-server-test.js +0 -75
  100. package/test/modbus-tcp-server-test2.js +0 -75
  101. package/test/modbus_stcp_client.js +0 -149
@@ -0,0 +1,307 @@
1
+ const Nodbus = require('../src/nodbus-plus');
2
+
3
+ //creating config file for basic server 1
4
+ let serverCfg = {
5
+ inputs : 524,
6
+ coils : 0,
7
+ holdingRegisters : 512,
8
+ inputRegisters : 256,
9
+ udpType : 'udp6',
10
+ port : 520
11
+ }
12
+
13
+ //creating config file for basic server 1
14
+ let serverCfg2 = {
15
+ transmitionMode : 1,
16
+ inputs : 524,
17
+ coils : 0,
18
+ holdingRegisters : 512,
19
+ inputRegisters : 256,
20
+ udpType : 'udp4',
21
+ port : 522
22
+ }
23
+
24
+ describe("rtu client", () => {
25
+
26
+ let server1 = Nodbus.createSerialServer('tcp', serverCfg);
27
+
28
+ let client = Nodbus.createSerialClient();
29
+ client.addChannel('server1', 'tcp1', {ip:'127.0.0.1', port: 520})
30
+ expect(client.isChannelReady('server1')).toEqual(false);
31
+
32
+ test("functions", (done) => {
33
+
34
+ expect(server1.isListening).toEqual(false);
35
+
36
+
37
+
38
+ client.on('transaction', (req, res) =>{
39
+ let reqAddress = req[0];
40
+ let resAddress = res[0];
41
+ let functionCode = req[1];
42
+ let valBuffer = Buffer.alloc(2);
43
+
44
+ expect(reqAddress).toEqual(resAddress)
45
+ expect(resAddress).toEqual(1)
46
+
47
+ switch(functionCode){
48
+ case 0x01:
49
+ expect(res.length).toEqual(6)
50
+ client.readInputs('server1', 1, 0, 2);
51
+ break;
52
+ case 0x02:
53
+ expect(res.length).toEqual(6)
54
+ client.readHoldingRegisters('server1', 1, 0, 2);
55
+ break
56
+ case 0x03:
57
+ expect(res.length).toEqual(9)
58
+ client.readInputRegisters('server1', 1, 0, 2);
59
+ break
60
+ case 0x04:
61
+ expect(res.length).toEqual(9)
62
+ client.forceSingleCoil(true, 'server1', 1, 5);
63
+ break;
64
+ case 0x05:
65
+ expect(res.length).toEqual(8)
66
+ expect(res[4]).toEqual(0xFF);
67
+ valBuffer[1] = 0x45;
68
+ client.presetSingleRegister(valBuffer, 'server1', 1, 10);
69
+ break;
70
+ case 0x06:
71
+ expect(res.length).toEqual(8)
72
+ expect(res[3]).toEqual(10);
73
+ expect(res[5]).toEqual(0x45);
74
+ let coils = [1, 1, 0, 0 , 1, 0, 0, 0, 1, 1, 1, 0];
75
+ client.forceMultipleCoils(coils, 'server1', 1, 12);
76
+ break
77
+ case 0x0f:
78
+ expect(res.length).toEqual(8)
79
+ expect(res[5]).toEqual(12);
80
+ valBuffer = Buffer.alloc(5);
81
+ let tempRegister = Buffer.alloc(2);
82
+ tempRegister.writeUint16BE(123);
83
+ client.setWordToBuffer(tempRegister, valBuffer, 0);
84
+ tempRegister.writeUint16BE(1234);
85
+ client.setWordToBuffer(tempRegister, valBuffer, 1);
86
+ client.presetMultiplesRegisters(valBuffer, 'server1', 1, 20);
87
+ break;
88
+ case 0x10:
89
+ expect(res.length).toEqual(8)
90
+ expect(res[5]).toEqual(2);
91
+ registerMask = [1, 0, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 2, 1];
92
+ client.maskHoldingRegister(registerMask, 'server1', 1, 22);
93
+ break;
94
+ case 0x16:
95
+ expect(res.length).toEqual(10)
96
+ expect(res[3]).toEqual(req[3]);
97
+ expect(res[5]).toEqual(req[5]);
98
+ expect(res[7]).toEqual(req[7]);
99
+ client.readWriteMultiplesRegisters(valBuffer, 'server1', 1, 10, 3, 20);
100
+ break
101
+ case 0x17:
102
+ expect(res.length).toEqual(11)
103
+ expect(res[2]).toEqual(6);
104
+ client.presetSingleRegister(valBuffer, 'server1', 0, 10);
105
+ break;
106
+ default:
107
+ client.disconnect('server1');
108
+ }
109
+
110
+
111
+ })
112
+
113
+ client.on('broadcast-timeout', () =>{
114
+ //console.log('broadcast timeout')
115
+ client.disconnect('server1');
116
+ })
117
+
118
+ client.on('connection-closed', ()=>{
119
+ //console.log('stopping server')
120
+ server1.stop()
121
+ })
122
+
123
+ client.on('connection', (id)=>{
124
+ //console.log('client connected')
125
+ let channel = client.channels.get(id);
126
+ expect(id).toEqual('server1');
127
+ expect(channel.ip).toEqual('127.0.0.1');
128
+ expect(channel.port).toEqual(520);
129
+ expect(client.isChannelReady(id)).toEqual(true);
130
+
131
+ client.readCoils('server1', 1, 0, 2);
132
+
133
+ })
134
+
135
+ server1.on('listening', (port)=>{
136
+ //console.log('server listenning')
137
+ let connectPromise = client.connect('server1');
138
+ });
139
+
140
+ server1.on('connection-closed', (has_error) => {
141
+ // console.log('client disconnected')
142
+ })
143
+
144
+ server1.on('closed', ()=>{
145
+ expect(server1.isListening).toEqual(false);
146
+ done()
147
+ })
148
+
149
+ server1.on('connection', (sock)=>{
150
+ //console.log('server say connection')
151
+ })
152
+
153
+ server1.on('data', (sock, data) => {
154
+ //console.log(data)
155
+ })
156
+
157
+ server1.start();
158
+
159
+
160
+
161
+ });
162
+
163
+
164
+ });
165
+
166
+ describe("ascii client", () => {
167
+
168
+ let server2 = Nodbus.createSerialServer('tcp', serverCfg2);
169
+
170
+ let client = Nodbus.createSerialClient();
171
+ client.addChannel('server2', 'tcp1', {ip:'127.0.0.1', port: 522})
172
+ expect(client.isChannelReady('server2')).toEqual(false);
173
+
174
+ test("functions", (done) => {
175
+
176
+ expect(server2.isListening).toEqual(false);
177
+
178
+
179
+
180
+ client.on('transaction', (req, res) =>{
181
+ let reqAddress = req[0];
182
+ let resAddress = res[0];
183
+ let functionCode = req[1];
184
+ let valBuffer = Buffer.alloc(2);
185
+
186
+ expect(reqAddress).toEqual(resAddress)
187
+
188
+
189
+ switch(functionCode){
190
+ case 0x01:
191
+ expect(res.length).toEqual(6)
192
+ client.readInputs('server2', 1, 0, 2, true);
193
+ break;
194
+ case 0x02:
195
+ expect(res.length).toEqual(6)
196
+ client.readHoldingRegisters('server2', 1, 0, 2, true);
197
+ break
198
+ case 0x03:
199
+ expect(res.length).toEqual(9)
200
+ client.readInputRegisters('server2', 1, 0, 2, true);
201
+ break
202
+ case 0x04:
203
+ expect(res.length).toEqual(9)
204
+ client.forceSingleCoil(true, 'server2', 1, 5, true);
205
+ break;
206
+ case 0x05:
207
+ expect(res.length).toEqual(8)
208
+ expect(res[4]).toEqual(0xFF);
209
+ valBuffer[1] = 0x45;
210
+ client.presetSingleRegister(valBuffer, 'server2', 1, 10, true);
211
+ break;
212
+ case 0x06:
213
+ expect(res.length).toEqual(8)
214
+ expect(res[3]).toEqual(10);
215
+ expect(res[5]).toEqual(0x45);
216
+ let coils = [1, 1, 0, 0 , 1, 0, 0, 0, 1, 1, 1, 0];
217
+ client.forceMultipleCoils(coils, 'server2', 1, 12, true);
218
+ break
219
+ case 0x0f:
220
+ expect(res.length).toEqual(8)
221
+ expect(res[5]).toEqual(12);
222
+ valBuffer = Buffer.alloc(5);
223
+ let tempRegister = Buffer.alloc(2);
224
+ tempRegister.writeUint16BE(123);
225
+ client.setWordToBuffer(tempRegister, valBuffer, 0);
226
+ tempRegister.writeUint16BE(1234);
227
+ client.setWordToBuffer(tempRegister, valBuffer, 1);
228
+ client.presetMultiplesRegisters(valBuffer, 'server2', 1, 20, true);
229
+ break;
230
+ case 0x10:
231
+ expect(res.length).toEqual(8)
232
+ expect(res[5]).toEqual(2);
233
+ registerMask = [1, 0, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 2, 1];
234
+ client.maskHoldingRegister(registerMask, 'server2', 1, 22, true);
235
+ break;
236
+ case 0x16:
237
+ expect(res.length).toEqual(10)
238
+ expect(res[3]).toEqual(req[3]);
239
+ expect(res[5]).toEqual(req[5]);
240
+ expect(res[7]).toEqual(req[7]);
241
+ client.readWriteMultiplesRegisters(valBuffer, 'server2', 1, 10, 3, 20, true);
242
+ break
243
+ case 0x17:
244
+ expect(res.length).toEqual(11)
245
+ expect(res[2]).toEqual(6);
246
+ client.disconnect('server2');
247
+ break;
248
+ default:
249
+ client.disconnect('server2');
250
+ }
251
+
252
+
253
+ })
254
+
255
+ client.on('connection-closed', ()=>{
256
+ //console.log('stopping server')
257
+ server2.stop()
258
+ })
259
+
260
+ client.on('connection', (id)=>{
261
+ //console.log('client connected')
262
+ let channel = client.channels.get(id);
263
+ expect(id).toEqual('server2');
264
+ expect(channel.ip).toEqual('127.0.0.1');
265
+ expect(channel.port).toEqual(522);
266
+ expect(client.isChannelReady(id)).toEqual(true);
267
+
268
+ client.readCoils('server2', 1, 0, 2, true);
269
+
270
+
271
+ })
272
+
273
+ server2.on('listening', (port)=>{
274
+ //console.log('server listenning')
275
+ let connectPromise = client.connect('server2');
276
+ });
277
+
278
+ server2.on('connection-closed', (has_error) => {
279
+ // console.log('client disconnected')
280
+ })
281
+
282
+ server2.on('closed', ()=>{
283
+ expect(server2.isListening).toEqual(false);
284
+ done()
285
+ })
286
+
287
+ server2.on('connection', (sock)=>{
288
+ //console.log('server say connection')
289
+ })
290
+
291
+ server2.on('data', (sock, data) => {
292
+ // console.log(data)
293
+ })
294
+
295
+ server2.on('write', (sock, data)=>{
296
+ // console.log(data)
297
+ })
298
+
299
+ server2.start();
300
+
301
+
302
+
303
+ });
304
+
305
+
306
+ });
307
+
@@ -0,0 +1,334 @@
1
+
2
+ const Nodbus = require('../src/nodbus-plus');
3
+
4
+ //creating config file for basic server 1
5
+ let serverCfg = {
6
+ inputs : 524,
7
+ coils : 0,
8
+ holdingRegisters : 512,
9
+ inputRegisters : 256,
10
+ udpType : 'udp6',
11
+ port : 510
12
+ }
13
+
14
+ //creating config file for basic server 1
15
+ let serverCfg2 = {
16
+ inputs : 524,
17
+ coils : 0,
18
+ holdingRegisters : 512,
19
+ inputRegisters : 256,
20
+ udpType : 'udp4',
21
+ port : 512
22
+ }
23
+
24
+ describe("tcp client", () => {
25
+
26
+ let server1 = Nodbus.createTcpServer('tcp', serverCfg);
27
+
28
+ let client = Nodbus.createTcpClient();
29
+ client.addChannel('server1', 'tcp1', {ip:'127.0.0.1', port: 510})
30
+ expect(client.isChannelReady('server1')).toEqual(false);
31
+
32
+ test("functions", (done) => {
33
+
34
+ expect(server1.isListening).toEqual(false);
35
+
36
+ let tCounter = 0; //used to count response.
37
+
38
+ client.on('transaction', (req, res) =>{
39
+ let reqId = req.readUInt16BE(0);
40
+ let resId = res.readUInt16BE(0);
41
+ let unitId = req[6]
42
+ let functionCode = req[7];
43
+
44
+ expect(reqId).toEqual(resId)
45
+ expect(unitId).toEqual(255)
46
+
47
+ switch(functionCode){
48
+ case 0x01:
49
+ expect(res.length).toEqual(10)
50
+ tCounter++;
51
+ break;
52
+ case 0x02:
53
+ expect(res.length).toEqual(10)
54
+ tCounter++;
55
+ break
56
+ case 0x03:
57
+ expect(res.length).toEqual(13)
58
+ tCounter++;
59
+ break
60
+ case 0x04:
61
+ expect(res.length).toEqual(13)
62
+ tCounter++;
63
+ break;
64
+ case 0x05:
65
+ expect(res.length).toEqual(12)
66
+ expect(res[10]).toEqual(0xFF);
67
+ tCounter++;
68
+ break;
69
+ case 0x06:
70
+ expect(res.length).toEqual(12)
71
+ expect(res[9]).toEqual(10);
72
+ expect(res[11]).toEqual(0x45);
73
+ tCounter++;
74
+ break
75
+ case 0x0f:
76
+ expect(res.length).toEqual(12)
77
+ expect(res[11]).toEqual(12);
78
+ tCounter++;
79
+ break;
80
+ case 0x10:
81
+ expect(res.length).toEqual(12)
82
+ expect(res[11]).toEqual(2);
83
+ tCounter++;
84
+ break;
85
+ case 0x16:
86
+ expect(res.length).toEqual(14)
87
+ expect(res[9]).toEqual(req[9]);
88
+ expect(res[11]).toEqual(req[11]);
89
+ expect(res[13]).toEqual(req[13]);
90
+ tCounter++;
91
+ break
92
+ case 0x17:
93
+ expect(res.length).toEqual(15)
94
+ expect(res[8]).toEqual(6);
95
+ tCounter++;
96
+ expect(tCounter).toEqual(10);
97
+ client.disconnect('server1');
98
+ break;
99
+ default:
100
+ client.disconnect('server1');
101
+ }
102
+
103
+
104
+ })
105
+
106
+ client.on('connection-closed', ()=>{
107
+ //console.log('stopping server')
108
+ server1.stop()
109
+ })
110
+
111
+ client.on('connection', (id)=>{
112
+ //console.log('client connected')
113
+ let channel = client.channels.get(id);
114
+ expect(id).toEqual('server1');
115
+ expect(channel.ip).toEqual('127.0.0.1');
116
+ expect(channel.port).toEqual(510);
117
+ expect(client.isChannelReady(id)).toEqual(true);
118
+
119
+ client.readCoils('server1', 255, 0, 2);
120
+ client.readInputs('server1', 255, 0, 2);
121
+ client.readHoldingRegisters('server1', 255, 0, 2);
122
+ client.readInputRegisters('server1', 255, 0, 2);
123
+ client.forceSingleCoil(true, 'server1', 255, 5);
124
+ let valBuffer = Buffer.alloc(2);
125
+ valBuffer[1] = 0x45;
126
+ client.presetSingleRegister(valBuffer, 'server1', 255, 10);
127
+ let coils = [1, 1, 0, 0 , 1, 0, 0, 0, 1, 1, 1, 0];
128
+ client.forceMultipleCoils(coils, 'server1', 255, 12);
129
+ valBuffer = Buffer.alloc(5);
130
+ let tempRegister = Buffer.alloc(2);
131
+ tempRegister.writeUint16BE(123);
132
+ client.setWordToBuffer(tempRegister, valBuffer, 0);
133
+ tempRegister.writeUint16BE(1234);
134
+ client.setWordToBuffer(tempRegister, valBuffer, 1);
135
+ client.presetMultiplesRegisters(valBuffer, 'server1', 255, 20);
136
+ registerMask = [1, 0, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 2, 1];
137
+ client.maskHoldingRegister(registerMask, 'server1', 255, 22);
138
+ client.readWriteMultiplesRegisters(valBuffer, 'server1', 255, 10, 3, 20);
139
+
140
+
141
+
142
+ })
143
+
144
+ server1.on('listening', (port)=>{
145
+ //console.log('server listenning')
146
+ let connectPromise = client.connect('server1');
147
+ });
148
+
149
+ server1.on('connection-closed', (has_error) => {
150
+ // console.log('client disconnected')
151
+ })
152
+
153
+ server1.on('closed', ()=>{
154
+ expect(server1.isListening).toEqual(false);
155
+ done()
156
+ })
157
+
158
+ server1.on('connection', (sock)=>{
159
+ //console.log('server say connection')
160
+ })
161
+
162
+ server1.on('data', (sock, data) => {
163
+ //console.log(data)
164
+ })
165
+
166
+ server1.start();
167
+
168
+
169
+
170
+ });
171
+
172
+
173
+ });
174
+
175
+ describe("udp client", () => {
176
+
177
+ let server2 = Nodbus.createTcpServer('udp4', serverCfg2);
178
+
179
+ let client2 = Nodbus.createTcpClient();
180
+
181
+ client2.addChannel('server2', 'udp1', {ip:'127.0.0.1', port: 512, udpType:'udp4',})
182
+
183
+ expect(client2.isChannelReady('server2')).toEqual(false);
184
+
185
+ test("functions", (done) => {
186
+
187
+ expect(server2.isListening).toEqual(false);
188
+
189
+ let tCounter = 0; //used to count response.
190
+
191
+ client2.on('transaction', (req, res) =>{
192
+ let reqId = req.readUInt16BE(0);
193
+ let resId = res.readUInt16BE(0);
194
+ let unitId = req[6]
195
+ let functionCode = req[7];
196
+
197
+ expect(reqId).toEqual(resId)
198
+ expect(unitId).toEqual(255)
199
+
200
+ switch(functionCode){
201
+ case 0x01:
202
+ expect(res.length).toEqual(10)
203
+ tCounter++;
204
+ break;
205
+ case 0x02:
206
+ expect(res.length).toEqual(10)
207
+ tCounter++;
208
+ break
209
+ case 0x03:
210
+ expect(res.length).toEqual(13)
211
+ tCounter++;
212
+ break
213
+ case 0x04:
214
+ expect(res.length).toEqual(13)
215
+ tCounter++;
216
+ break;
217
+ case 0x05:
218
+ expect(res.length).toEqual(12)
219
+ expect(res[10]).toEqual(0xFF);
220
+ tCounter++;
221
+ break;
222
+ case 0x06:
223
+ expect(res.length).toEqual(12)
224
+ expect(res[9]).toEqual(10);
225
+ expect(res[11]).toEqual(0x45);
226
+ tCounter++;
227
+ break
228
+ case 0x0f:
229
+ expect(res.length).toEqual(12)
230
+ expect(res[11]).toEqual(12);
231
+ tCounter++;
232
+ break;
233
+ case 0x10:
234
+ expect(res.length).toEqual(12)
235
+ expect(res[11]).toEqual(2);
236
+ tCounter++;
237
+ break;
238
+ case 0x16:
239
+ expect(res.length).toEqual(14)
240
+ expect(res[9]).toEqual(req[9]);
241
+ expect(res[11]).toEqual(req[11]);
242
+ expect(res[13]).toEqual(req[13]);
243
+ tCounter++;
244
+ break
245
+ case 0x17:
246
+ expect(res.length).toEqual(15)
247
+ expect(res[8]).toEqual(6);
248
+ tCounter++;
249
+ expect(tCounter).toEqual(10);
250
+ client2.disconnect('server2');
251
+ break;
252
+ default:
253
+ client2.disconnect('server2');
254
+ }
255
+
256
+
257
+ })
258
+
259
+ client2.on('connection-closed', ()=>{
260
+ //console.log('stopping server')
261
+ server2.stop()
262
+ })
263
+
264
+ client2.on('connection', (id)=>{
265
+ //console.log('client connected')
266
+ let channel = client2.channels.get(id);
267
+ expect(id).toEqual('server2');
268
+ expect(channel.ip).toEqual('127.0.0.1');
269
+ expect(channel.port).toEqual(512);
270
+ expect(client2.isChannelReady(id)).toEqual(true);
271
+ client2.readCoils('server2', 255, 0, 2);
272
+ client2.readInputs('server2', 255, 0, 2);
273
+ client2.readHoldingRegisters('server2', 255, 0, 2);
274
+ client2.readInputRegisters('server2', 255, 0, 2);
275
+ client2.forceSingleCoil(true, 'server2', 255, 5);
276
+ let valBuffer = Buffer.alloc(2);
277
+ valBuffer[1] = 0x45;
278
+ client2.presetSingleRegister(valBuffer, 'server2', 255, 10);
279
+ let coils = [1, 1, 0, 0 , 1, 0, 0, 0, 1, 1, 1, 0];
280
+ client2.forceMultipleCoils(coils, 'server2', 255, 12);
281
+ valBuffer = Buffer.alloc(5);
282
+ let tempRegister = Buffer.alloc(2);
283
+ tempRegister.writeUint16BE(123);
284
+ client2.setWordToBuffer(tempRegister, valBuffer, 0);
285
+ tempRegister.writeUint16BE(1234);
286
+ client2.setWordToBuffer(tempRegister, valBuffer, 1);
287
+ client2.presetMultiplesRegisters(valBuffer, 'server2', 255, 20);
288
+ registerMask = [1, 0, 2, 0, 0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 2, 1];
289
+ client2.maskHoldingRegister(registerMask, 'server2', 255, 22);
290
+ client2.readWriteMultiplesRegisters(valBuffer, 'server2', 255, 10, 3, 20);
291
+
292
+
293
+ })
294
+
295
+ client2.on('write', (id, req) =>{
296
+ //console.log(req)
297
+ })
298
+
299
+ server2.on('listening', (port)=>{
300
+ //console.log('server listenning')
301
+ client2.connect('server2');
302
+ });
303
+
304
+ server2.on('connection-closed', (has_error) => {
305
+ // console.log('client disconnected')
306
+ })
307
+
308
+ server2.on('closed', ()=>{
309
+ //console.log('server closed')
310
+ expect(server2.isListening).toEqual(false);
311
+ let channel = client2.channels.get('server2');
312
+ channel.coreChannel.close();
313
+ setTimeout(()=>{
314
+ done();
315
+ }, 250)
316
+
317
+ })
318
+
319
+ server2.on('connection', (sock)=>{
320
+ //console.log('server say connection')
321
+ })
322
+
323
+ server2.on('data', (sock, data) => {
324
+ //console.log(data)
325
+ })
326
+
327
+ server2.start();
328
+
329
+
330
+
331
+ });
332
+
333
+
334
+ });