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,279 @@
1
+ const ModbusClient = require('../').ModbusClient
2
+
3
+ describe("Read Coils status", () => {
4
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
5
+ let pdu2 = Buffer.from([0x01, 0x00, 0x48, 0x00, 0x0A]);
6
+
7
+ let testMaster = new ModbusClient();
8
+
9
+ it("request 1", () => {
10
+ let req1 = testMaster.readCoilStatusPdu(0, 3);
11
+ expect(req1[0]).toEqual(1);
12
+ expect(req1[1]).toEqual(0);
13
+ expect(req1[4]).toEqual(3);
14
+ expect(req1.length).toEqual(5);
15
+ } );
16
+ it("request 2", () => {
17
+ let req2 = testMaster.readCoilStatusPdu(0x48, 10);
18
+ expect(req2[0]).toEqual(1);
19
+ expect(req2[2]).toEqual(0x48);
20
+ expect(req2[4]).toEqual(10);
21
+ expect(req2.length).toEqual(5);
22
+ });
23
+
24
+ });
25
+
26
+ describe("Read Input status", () => {
27
+
28
+ let testMaster = new ModbusClient();
29
+
30
+ it("request 1", () => {
31
+ let req1 = testMaster.readInputStatusPdu(0, 3);
32
+ expect(req1[0]).toEqual(2);
33
+ expect(req1[1]).toEqual(0);
34
+ expect(req1[4]).toEqual(3);
35
+ expect(req1.length).toEqual(5);
36
+ } );
37
+ it("request 2", () => {
38
+ let req2 = testMaster.readInputStatusPdu(0x48, 10);
39
+ expect(req2[0]).toEqual(2);
40
+ expect(req2[2]).toEqual(0x48);
41
+ expect(req2[4]).toEqual(10);
42
+ expect(req2.length).toEqual(5);
43
+ });
44
+
45
+ });
46
+
47
+ describe("Read Holding register status", () => {
48
+
49
+ let testMaster = new ModbusClient();
50
+
51
+ it("request 1", () => {
52
+ let req1 = testMaster.readHoldingRegistersPdu(0, 3);
53
+ expect(req1[0]).toEqual(3);
54
+ expect(req1[1]).toEqual(0);
55
+ expect(req1[4]).toEqual(3);
56
+ expect(req1.length).toEqual(5);
57
+ } );
58
+ it("request 2", () => {
59
+ let req2 = testMaster.readHoldingRegistersPdu(0x48, 10);
60
+ expect(req2[0]).toEqual(3);
61
+ expect(req2[2]).toEqual(0x48);
62
+ expect(req2[4]).toEqual(10);
63
+ expect(req2.length).toEqual(5);
64
+ });
65
+
66
+ });
67
+
68
+ describe("Read Input register status", () => {
69
+
70
+ let testMaster = new ModbusClient();
71
+
72
+ it("request 1", () => {
73
+ let req1 = testMaster.readInputRegistersPdu(0, 3);
74
+ expect(req1[0]).toEqual(4);
75
+ expect(req1[1]).toEqual(0);
76
+ expect(req1[4]).toEqual(3);
77
+ expect(req1.length).toEqual(5);
78
+ } );
79
+ it("request 2", () => {
80
+ let req2 = testMaster.readInputRegistersPdu(0x48, 10);
81
+ expect(req2[0]).toEqual(4);
82
+ expect(req2[2]).toEqual(0x48);
83
+ expect(req2[4]).toEqual(10);
84
+ expect(req2.length).toEqual(5);
85
+ });
86
+
87
+ });
88
+
89
+ describe("force single Coils", () => {
90
+
91
+ let testMaster = new ModbusClient();
92
+
93
+ it("request 1", () => {
94
+ let req1 = testMaster.forceSingleCoilPdu(testMaster.boolToBuffer(true), 3);
95
+ expect(req1[0]).toEqual(5);
96
+ expect(req1[2]).toEqual(3);
97
+ expect(req1[3]).toEqual(0xFF);
98
+ expect(req1.length).toEqual(5);
99
+ } );
100
+ it("request 2", () => {
101
+ let req2 = testMaster.forceSingleCoilPdu(testMaster.boolToBuffer(false), 10);
102
+ expect(req2[0]).toEqual(5);
103
+ expect(req2[2]).toEqual(10);
104
+ expect(req2[4]).toEqual(0);
105
+ expect(req2.length).toEqual(5);
106
+ });
107
+
108
+ });
109
+
110
+ describe("Preset single register", () => {
111
+
112
+ let testMaster = new ModbusClient();
113
+ let val1 = Buffer.alloc(2);
114
+ val1[0] = 0x25;
115
+ val1[1] = 0x56;
116
+ it("request 1", () => {
117
+ let req1 = testMaster.presetSingleRegisterPdu(val1, 20);
118
+ expect(req1[0]).toEqual(6);
119
+ expect(req1[2]).toEqual(20);
120
+ expect(req1[4]).toEqual(0x56);
121
+ expect(req1.length).toEqual(5);
122
+ } );
123
+ it("request 2", () => {
124
+ let req2 = testMaster.presetSingleRegisterPdu(val1, 10);
125
+ expect(req2[0]).toEqual(6);
126
+ expect(req2[2]).toEqual(10);
127
+ expect(req2[3]).toEqual(0x25);
128
+ expect(req2.length).toEqual(5);
129
+ });
130
+
131
+ });
132
+
133
+ describe("write multiple Coils", () => {
134
+
135
+ let testMaster = new ModbusClient();
136
+ let val1 = Buffer.alloc(1);
137
+ let val2 = Buffer.alloc(2);
138
+ val1[0] = 0x36;
139
+ val2[0] = 0x74;
140
+ val2[1] = 0x25;
141
+
142
+ test("bools to buffer", () => {
143
+ let valBuffer = testMaster.boolsToBuffer([0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1]);
144
+ expect(valBuffer.length).toEqual(2);
145
+ expect(valBuffer[0]).toEqual(0xC2);
146
+ expect(valBuffer[1]).toEqual(0x04);
147
+ })
148
+
149
+ it("request 1", () => {
150
+ let req1 = testMaster.forceMultipleCoilsPdu(val1, 3, 5);
151
+ expect(req1[0]).toEqual(15);
152
+ expect(req1[2]).toEqual(3);
153
+ expect(req1[4]).toEqual(5);
154
+ expect(req1[5]).toEqual(1);
155
+ expect(req1[6]).toEqual(0x36);
156
+ } );
157
+
158
+ it("request 2", () => {
159
+ let req2 = testMaster.forceMultipleCoilsPdu(val2, 10, 12);
160
+ expect(req2[0]).toEqual(15);
161
+ expect(req2[2]).toEqual(10);
162
+ expect(req2[4]).toEqual(12);
163
+ expect(req2[5]).toEqual(2);
164
+ expect(req2[7]).toEqual(0x25);
165
+ });
166
+
167
+ });
168
+
169
+ describe("write multiple register", () => {
170
+
171
+ let testMaster = new ModbusClient();
172
+ let val1 = Buffer.alloc(4);
173
+ val1[0] = 0x25;
174
+ val1[1] = 0x56;
175
+ val1[2] = 0x46;
176
+ val1[3] = 0x63;
177
+
178
+ it("request 1", () => {
179
+ let req1 = testMaster.presetMultipleRegistersPdu(val1, 20);
180
+ expect(req1[0]).toEqual(16);
181
+ expect(req1[2]).toEqual(20);
182
+ expect(req1[4]).toEqual(2);
183
+ expect(req1[5]).toEqual(4);
184
+ expect(req1.length).toEqual(10);
185
+ } );
186
+ it("request 2", () => {
187
+ let req2 = testMaster.presetMultipleRegistersPdu(val1, 10, 3);
188
+ expect(req2[0]).toEqual(16);
189
+ expect(req2[2]).toEqual(10);
190
+ expect(req2[4]).toEqual(3);
191
+ expect(req2[5]).toEqual(6);
192
+ expect(req2.length).toEqual(12);
193
+ });
194
+
195
+ });
196
+
197
+ describe("mask holding register", () => {
198
+
199
+ let testMaster = new ModbusClient();
200
+ let val1 = new Array(16);
201
+ val1[0] = -1;
202
+ val1[1] = 0;
203
+ val1[2] = 1;
204
+ val1[3] = -1;
205
+ val1[4] = -1;
206
+ val1[5] = -1;
207
+ val1[6] = 0;
208
+ val1[7] = 0;
209
+ val1[8] = 1;
210
+ val1[9] = -1;
211
+ val1[10] = -1;
212
+ val1[11] = -1;
213
+ val1[12] = -1;
214
+ val1[13] = -1;
215
+ val1[14] = 1;
216
+ val1[15] = 1;
217
+
218
+ maskBuffer = testMaster.getMaskRegisterBuffer(val1);
219
+
220
+ it("request 1", () => {
221
+ let req1 = testMaster.maskHoldingRegisterPdu(maskBuffer, 20);
222
+ expect(req1[0]).toEqual(22);
223
+ expect(req1[2]).toEqual(20);
224
+ expect(req1.length).toEqual(7);
225
+ } );
226
+
227
+ it("mask", () => {
228
+ //masks
229
+ let andMask = maskBuffer.readUInt16BE(0);
230
+ let orMask = maskBuffer.readUInt16BE(2);
231
+ let testRegister = Buffer.alloc(2)
232
+ testRegister[0] = 0x9A;
233
+ testRegister[1] = 0xFB;
234
+ let currentContent = testRegister.readUInt16BE(0);
235
+ let finalResult = (currentContent & andMask) | (orMask & (~andMask));
236
+ let finalBuffer = Buffer.alloc(2);
237
+ finalBuffer.writeUInt16BE(finalResult, 0);
238
+ expect(maskBuffer[0]).toEqual(0x3E);
239
+ expect(maskBuffer[1]).toEqual(0x39);
240
+ expect(maskBuffer[2]).toEqual(0xFF);
241
+ expect(maskBuffer[3]).toEqual(0x3D);
242
+ expect(finalResult).toEqual(0xDB3D);
243
+ expect(finalBuffer[0]).toEqual(0xDB);
244
+ expect(finalBuffer[1]).toEqual(0x3D);
245
+ });
246
+
247
+ });
248
+
249
+ describe("read and write multiple register", () => {
250
+
251
+ let testMaster = new ModbusClient();
252
+ let val1 = Buffer.alloc(4);
253
+ val1[0] = 0x25;
254
+ val1[1] = 0x56;
255
+ val1[2] = 0x46;
256
+ val1[3] = 0x63;
257
+
258
+ it("request 1", () => {
259
+ let req1 = testMaster.readWriteMultipleRegistersPdu(val1, 20, 5, 100);
260
+ expect(req1[0]).toEqual(23);
261
+ expect(req1[2]).toEqual(20);
262
+ expect(req1[4]).toEqual(5);
263
+ expect(req1[6]).toEqual(100);
264
+ expect(req1[8]).toEqual(2);
265
+ expect(req1[9]).toEqual(4);
266
+ expect(req1.length).toEqual(14);
267
+ } );
268
+ it("request 2", () => {
269
+ let req2 = testMaster.readWriteMultipleRegistersPdu(val1, 10, 3, 20, 5);
270
+ expect(req2[0]).toEqual(23);
271
+ expect(req2[2]).toEqual(10);
272
+ expect(req2[4]).toEqual(3);
273
+ expect(req2[6]).toEqual(20);
274
+ expect(req2[8]).toEqual(5);
275
+ expect(req2[9]).toEqual(10);
276
+ expect(req2.length).toEqual(20);
277
+ });
278
+
279
+ });
@@ -0,0 +1,124 @@
1
+ const ModbusSerialClient = require('../').ModbusSerialClient
2
+
3
+
4
+ describe("Make reqest Buffer", () => {
5
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
6
+ let pdu2 = [0x01, 0x00, 0x48, 0x00, 0x0A, 0x05];
7
+
8
+ let testMaster = new ModbusSerialClient();
9
+
10
+ it("fail to make request", () => {
11
+
12
+ req1 = testMaster.makeRequest(10, pdu2);
13
+ req2 = testMaster.makeRequest(258, pdu1);
14
+ expect(req1).toEqual(null);
15
+ expect(req2).toEqual(null);
16
+
17
+
18
+ } );
19
+
20
+ it("successful request", () => {
21
+
22
+ req1 = testMaster.makeRequest(2, pdu1);
23
+ expect(req1[0]).toEqual(2);
24
+ expect(req1[1]).toEqual(1);
25
+ expect(req1[3]).toEqual(0);
26
+ expect(req1[5]).toEqual(3);
27
+ expect(req1[6]).toEqual(0x7C);
28
+ expect(req1[7]).toEqual(0x38);
29
+ expect(req1.length).toEqual(8);
30
+ });
31
+
32
+ it("successful request Ascii", () => {
33
+
34
+ req = testMaster.makeRequest(2, pdu1);
35
+ req1 = testMaster.aduRtuToAscii(req)
36
+ expect(req1[0]).toEqual(0x3A);
37
+ expect(req1[2]).toEqual(0x32);
38
+ expect(req1[4]).toEqual(0x31);
39
+ expect(req1[12]).toEqual(0x33);
40
+ expect(req1[13]).toEqual(0x46);
41
+ expect(req1[14]).toEqual(0x41);
42
+ expect(req1.length).toEqual(17);
43
+ });
44
+
45
+ });
46
+
47
+
48
+ describe("setReqTimer", () => {
49
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
50
+
51
+ let testMaster = new ModbusSerialClient();
52
+
53
+ it("successful request", () => {
54
+
55
+ req1 = testMaster.makeRequest(2, pdu1);
56
+
57
+ let timed1 = testMaster.setReqTimer(1500);
58
+ expect(timed1).toEqual(-1);
59
+
60
+ testMaster.activeRequest = req1;
61
+ let timed3 = testMaster.setReqTimer(100);
62
+ let stored = testMaster.activeRequestTimerId;
63
+ expect(stored).toEqual(timed3);
64
+
65
+ testMaster.on('req-timeout', (req) =>{
66
+ expect(req[0]).toEqual(2);
67
+ expect(req[1]).toEqual(1);
68
+ })
69
+
70
+
71
+ });
72
+
73
+ });
74
+
75
+ describe('calc crc', () => {
76
+
77
+ let adu1 = Buffer.from([0x02, 0x07, 0x00, 0x00]);
78
+ let adu2 = Buffer.from([0x02, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03]);
79
+ let adu3 = Buffer.from([0x02, 0x01, 0x01, 0x00, 0x00, 0x03]);
80
+
81
+ let testMaster = new ModbusSerialClient();
82
+
83
+ it('crc', ()=>{
84
+ crc1 = testMaster.calcCRC(adu1);
85
+ crc2 = testMaster.calcCRC(adu2);
86
+ crc3 = testMaster.calcCRC(adu3);
87
+
88
+ expect(crc1).toEqual(0x4112);
89
+ expect(crc2).toEqual(0x7C38);
90
+ expect(crc3).toEqual(0x51CC);
91
+
92
+ })
93
+
94
+
95
+ })
96
+
97
+ describe("processResAdu", () => {
98
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
99
+
100
+ let testMaster = new ModbusSerialClient();
101
+
102
+ it("response", () => {
103
+
104
+
105
+ req1 = testMaster.makeRequest(2, pdu1);
106
+ testMaster.activeRequest = req1;
107
+
108
+ let timed3 = testMaster.setReqTimer(100);
109
+
110
+ let res = Buffer.from([0x02, 0x01, 0x01, 0x00, 0x05, 0x80]);
111
+
112
+ testMaster.processResAdu(res);
113
+
114
+ testMaster.on('transaction', (req, res) =>{
115
+
116
+ expect(req[0]).toEqual(2);
117
+ expect(req[5]).toEqual(3);
118
+ expect(res[0]).toEqual(2);
119
+ expect(stored[5]).toEqual(80);
120
+ })
121
+
122
+ });
123
+
124
+ });
@@ -0,0 +1,178 @@
1
+ const ModbusTcpClient = require('../').ModbusTcpClient
2
+
3
+ describe("Make Mbap header", () => {
4
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
5
+ let pdu2 = Buffer.from([0x01, 0x00, 0x48, 0x00, 0x0A, 0x05]);
6
+
7
+ let testMaster = new ModbusTcpClient();
8
+
9
+ it("header 1", () => {
10
+ testMaster.transactionCount = 1;
11
+ let header = testMaster.makeHeader(2, pdu1.length);
12
+ expect(header[0]).toEqual(0);
13
+ expect(header[1]).toEqual(1);
14
+ expect(header[3]).toEqual(0);
15
+ expect(header[5]).toEqual(6);
16
+ expect(header[6]).toEqual(2);
17
+ expect(header.length).toEqual(7);
18
+ } );
19
+ it("header 2", () => {
20
+ testMaster.transactionCount = 10;
21
+ let header = testMaster.makeHeader(20, pdu2.length);
22
+ expect(header[0]).toEqual(0);
23
+ expect(header[1]).toEqual(10);
24
+ expect(header[3]).toEqual(0);
25
+ expect(header[5]).toEqual(7);
26
+ expect(header[6]).toEqual(20);
27
+ expect(header.length).toEqual(7);
28
+ });
29
+
30
+ });
31
+
32
+ describe("Parse Mbap header", () => {
33
+ let header1 = [0x01, 0x01, 0x00, 0x00, 0x00, 0x05, 0x02];
34
+ let header2 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x00, 0x03]);
35
+ let header3 = Buffer.from([0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x05]);
36
+
37
+
38
+ let testMaster = new ModbusTcpClient();
39
+
40
+ it("header 1", () => {
41
+
42
+ expect(()=>{testMaster.parseHeader(header1)}).toThrow(TypeError);
43
+ expect(()=>{testMaster.parseHeader(header1)}).toThrow('Error: Header must be a buffer instance');
44
+
45
+ } );
46
+
47
+ it("header 2", () => {
48
+
49
+ expect(()=>{testMaster.parseHeader(header2)}).toThrow(RangeError);
50
+ expect(()=>{testMaster.parseHeader(header2)}).toThrow('Error: Header must be 7 bytes long');
51
+
52
+ } );
53
+
54
+ it("header 3", () => {
55
+
56
+ let header = testMaster.parseHeader(header3);
57
+ expect(header.transactionId).toEqual(16);
58
+ expect(header.protocolId).toEqual(0);
59
+ expect(header.length).toEqual(7);
60
+ expect(header.unitId).toEqual(5);
61
+ });
62
+
63
+ });
64
+
65
+ describe("Make reqest Buffer", () => {
66
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
67
+ let pdu2 = [0x01, 0x00, 0x48, 0x00, 0x0A, 0x05];
68
+
69
+ let testMaster = new ModbusTcpClient();
70
+
71
+ it("fail to make request", () => {
72
+
73
+ req1 = testMaster.makeRequest(10, pdu2);
74
+ req2 = testMaster.makeRequest(258, pdu1);
75
+ expect(req1).toEqual(null);
76
+ expect(req2).toEqual(null);
77
+
78
+
79
+ } );
80
+
81
+ it("successful request", () => {
82
+
83
+ testMaster.transactionCount = 10;
84
+
85
+ req1 = testMaster.makeRequest(2, pdu1);
86
+ expect(req1[1]).toEqual(11);
87
+ expect(req1[5]).toEqual(6);
88
+ expect(req1[6]).toEqual(2);
89
+ expect(req1[7]).toEqual(1);
90
+ expect(req1[11]).toEqual(3);
91
+ expect(req1.length).toEqual(12);
92
+ });
93
+
94
+ });
95
+
96
+ describe("storeRequest", () => {
97
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
98
+
99
+ let testMaster = new ModbusTcpClient();
100
+
101
+ it("successful request", () => {
102
+
103
+ testMaster.transactionCount = 10;
104
+
105
+ req1 = testMaster.makeRequest(2, pdu1);
106
+ let store = testMaster.storeRequest(req1);
107
+ expect(store).toEqual(true);
108
+ expect(testMaster.reqPool.has(11)).toEqual(true);
109
+ let stored = testMaster.reqPool.get(11);
110
+ expect(stored[1]).toEqual(11);
111
+ expect(stored[11]).toEqual(3);
112
+
113
+ });
114
+
115
+ });
116
+
117
+ describe("setReqTimer", () => {
118
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
119
+
120
+ let testMaster = new ModbusTcpClient();
121
+
122
+ it("successful request", () => {
123
+
124
+ testMaster.transactionCount = 10;
125
+
126
+ req1 = testMaster.makeRequest(2, pdu1);
127
+ testMaster.storeRequest(req1);
128
+ expect(testMaster.reqPool.has(11)).toEqual(true);
129
+ let timed1 = testMaster.setReqTimer(10, 1500);
130
+ let timed2 = testMaster.setReqTimer(11, 0);
131
+ let timed3 = testMaster.setReqTimer(11, 10);
132
+ expect(timed1).toEqual(-1);
133
+ expect(timed2).toEqual(-1);
134
+ expect(testMaster.reqTimersPool.has(11)).toEqual(true);
135
+ let stored = testMaster.reqTimersPool.get(11);
136
+ expect(stored).toEqual(timed3);
137
+
138
+ testMaster.on('req-timeout', (transactionId) =>{
139
+ expect(transactionId).toEqual(11);
140
+ })
141
+
142
+
143
+ });
144
+
145
+ });
146
+
147
+ describe("processResAdu", () => {
148
+ let pdu1 = Buffer.from([0x01, 0x00, 0x00, 0x00, 0x03]);
149
+
150
+ let testMaster = new ModbusTcpClient();
151
+
152
+ it("response", () => {
153
+
154
+ testMaster.transactionCount = 10;
155
+
156
+ req1 = testMaster.makeRequest(2, pdu1);
157
+ testMaster.storeRequest(req1);
158
+ expect(testMaster.reqPool.has(11)).toEqual(true);
159
+
160
+ let timed3 = testMaster.setReqTimer(11, 10);
161
+ expect(testMaster.reqTimersPool.has(11)).toEqual(true);
162
+
163
+ let res = Buffer.from([0x00, 0x0B, 0x00, 0x00, 0x00, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x03]);
164
+ testMaster.processResAdu(res);
165
+ expect(testMaster.reqTimersPool.has(11)).toEqual(false);
166
+ expect(testMaster.reqPool.has(11)).toEqual(false);
167
+
168
+ testMaster.on('transaction', (req, res) =>{
169
+
170
+ expect(req[1]).toEqual(11);
171
+ expect(req[11]).toEqual(3);
172
+ expect(res[1]).toEqual(11);
173
+ expect(res[11]).toEqual(3);
174
+ })
175
+
176
+ });
177
+
178
+ });