@iobroker/modbus 7.0.2
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.
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/build/convert.d.ts +2 -0
- package/build/convert.js +102 -0
- package/build/convert.js.map +1 -0
- package/build/index.d.ts +88 -0
- package/build/index.js +1005 -0
- package/build/index.js.map +1 -0
- package/build/lib/Master.d.ts +27 -0
- package/build/lib/Master.js +811 -0
- package/build/lib/Master.js.map +1 -0
- package/build/lib/Put.d.ts +19 -0
- package/build/lib/Put.js +113 -0
- package/build/lib/Put.js.map +1 -0
- package/build/lib/Slave.d.ts +15 -0
- package/build/lib/Slave.js +545 -0
- package/build/lib/Slave.js.map +1 -0
- package/build/lib/common.d.ts +3 -0
- package/build/lib/common.js +371 -0
- package/build/lib/common.js.map +1 -0
- package/build/lib/crc16modbus.d.ts +1 -0
- package/build/lib/crc16modbus.js +33 -0
- package/build/lib/crc16modbus.js.map +1 -0
- package/build/lib/jsmodbus/modbus-client-core.d.ts +78 -0
- package/build/lib/jsmodbus/modbus-client-core.js +528 -0
- package/build/lib/jsmodbus/modbus-client-core.js.map +1 -0
- package/build/lib/jsmodbus/modbus-server-core.d.ts +33 -0
- package/build/lib/jsmodbus/modbus-server-core.js +363 -0
- package/build/lib/jsmodbus/modbus-server-core.js.map +1 -0
- package/build/lib/jsmodbus/transports/errors.d.ts +7 -0
- package/build/lib/jsmodbus/transports/errors.js +40 -0
- package/build/lib/jsmodbus/transports/errors.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-client-serial.d.ts +23 -0
- package/build/lib/jsmodbus/transports/modbus-client-serial.js +154 -0
- package/build/lib/jsmodbus/transports/modbus-client-serial.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.d.ts +24 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.js +166 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.d.ts +34 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.js +138 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp.d.ts +27 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp.js +123 -0
- package/build/lib/jsmodbus/transports/modbus-client-tcp.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-server-serial.d.ts +29 -0
- package/build/lib/jsmodbus/transports/modbus-server-serial.js +206 -0
- package/build/lib/jsmodbus/transports/modbus-server-serial.js.map +1 -0
- package/build/lib/jsmodbus/transports/modbus-server-tcp.d.ts +25 -0
- package/build/lib/jsmodbus/transports/modbus-server-tcp.js +112 -0
- package/build/lib/jsmodbus/transports/modbus-server-tcp.js.map +1 -0
- package/build/lib/loggingUtils.d.ts +11 -0
- package/build/lib/loggingUtils.js +37 -0
- package/build/lib/loggingUtils.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractValue = extractValue;
|
|
4
|
+
exports.writeValue = writeValue;
|
|
5
|
+
function extractValue(type, len, buffer, offset) {
|
|
6
|
+
let i1;
|
|
7
|
+
let i2;
|
|
8
|
+
let buf;
|
|
9
|
+
let _len;
|
|
10
|
+
let str = '';
|
|
11
|
+
switch (type) {
|
|
12
|
+
case 'uint8be':
|
|
13
|
+
return buffer.readUInt8(offset * 2 + 1);
|
|
14
|
+
case 'uint8le':
|
|
15
|
+
return buffer.readUInt8(offset * 2);
|
|
16
|
+
case 'int8be':
|
|
17
|
+
return buffer.readInt8(offset * 2 + 1);
|
|
18
|
+
case 'int8le':
|
|
19
|
+
return buffer.readInt8(offset * 2);
|
|
20
|
+
case 'uint16be':
|
|
21
|
+
return buffer.readUInt16BE(offset * 2);
|
|
22
|
+
case 'uint16le':
|
|
23
|
+
return buffer.readUInt16LE(offset * 2);
|
|
24
|
+
case 'int16be':
|
|
25
|
+
return buffer.readInt16BE(offset * 2);
|
|
26
|
+
case 'int16le':
|
|
27
|
+
return buffer.readInt16LE(offset * 2);
|
|
28
|
+
case 'uint32be':
|
|
29
|
+
return buffer.readUInt32BE(offset * 2);
|
|
30
|
+
case 'uint32le':
|
|
31
|
+
return buffer.readUInt32LE(offset * 2);
|
|
32
|
+
case 'uint32sw':
|
|
33
|
+
buf = Buffer.alloc(4);
|
|
34
|
+
buf[0] = buffer[offset * 2 + 2];
|
|
35
|
+
buf[1] = buffer[offset * 2 + 3];
|
|
36
|
+
buf[2] = buffer[offset * 2 + 0];
|
|
37
|
+
buf[3] = buffer[offset * 2 + 1];
|
|
38
|
+
return buf.readUInt32BE(0);
|
|
39
|
+
case 'uint32sb':
|
|
40
|
+
buf = Buffer.alloc(4);
|
|
41
|
+
buf[0] = buffer[offset * 2 + 1];
|
|
42
|
+
buf[1] = buffer[offset * 2 + 0];
|
|
43
|
+
buf[2] = buffer[offset * 2 + 3];
|
|
44
|
+
buf[3] = buffer[offset * 2 + 2];
|
|
45
|
+
return buf.readUInt32BE(0);
|
|
46
|
+
case 'int32be':
|
|
47
|
+
return buffer.readInt32BE(offset * 2);
|
|
48
|
+
case 'int32le':
|
|
49
|
+
return buffer.readInt32LE(offset * 2);
|
|
50
|
+
case 'int32sw':
|
|
51
|
+
buf = Buffer.alloc(4);
|
|
52
|
+
buf[0] = buffer[offset * 2 + 2];
|
|
53
|
+
buf[1] = buffer[offset * 2 + 3];
|
|
54
|
+
buf[2] = buffer[offset * 2 + 0];
|
|
55
|
+
buf[3] = buffer[offset * 2 + 1];
|
|
56
|
+
return buf.readInt32BE(0);
|
|
57
|
+
case 'int32sb':
|
|
58
|
+
buf = Buffer.alloc(4);
|
|
59
|
+
buf[0] = buffer[offset * 2 + 1];
|
|
60
|
+
buf[1] = buffer[offset * 2 + 0];
|
|
61
|
+
buf[2] = buffer[offset * 2 + 3];
|
|
62
|
+
buf[3] = buffer[offset * 2 + 2];
|
|
63
|
+
return buf.readInt32BE(0);
|
|
64
|
+
case 'uint64be':
|
|
65
|
+
return buffer.readUInt32BE(offset * 2) * 0x100000000 + buffer.readUInt32BE(offset * 2 + 4);
|
|
66
|
+
case 'uint64le':
|
|
67
|
+
return buffer.readUInt32LE(offset * 2) + buffer.readUInt32LE(offset * 2 + 4) * 0x100000000;
|
|
68
|
+
case 'int64be':
|
|
69
|
+
i1 = buffer.readInt32BE(offset * 2);
|
|
70
|
+
i2 = buffer.readUInt32BE(offset * 2 + 4);
|
|
71
|
+
if (i1 >= 0) {
|
|
72
|
+
return i1 * 0x100000000 + i2; // <<32 does not work
|
|
73
|
+
}
|
|
74
|
+
return i1 * 0x100000000 - i2; // I have no solution for that !
|
|
75
|
+
case 'int64le':
|
|
76
|
+
i2 = buffer.readUInt32LE(offset * 2);
|
|
77
|
+
i1 = buffer.readInt32LE(offset * 2 + 4);
|
|
78
|
+
if (i1 >= 0) {
|
|
79
|
+
return i1 * 0x100000000 + i2; // <<32 does not work
|
|
80
|
+
}
|
|
81
|
+
return i1 * 0x100000000 - i2; // I have no solution for that !
|
|
82
|
+
case 'floatbe':
|
|
83
|
+
return buffer.readFloatBE(offset * 2);
|
|
84
|
+
case 'floatle':
|
|
85
|
+
return buffer.readFloatLE(offset * 2);
|
|
86
|
+
case 'floatsw':
|
|
87
|
+
buf = Buffer.alloc(4);
|
|
88
|
+
buf[0] = buffer[offset * 2 + 2];
|
|
89
|
+
buf[1] = buffer[offset * 2 + 3];
|
|
90
|
+
buf[2] = buffer[offset * 2 + 0];
|
|
91
|
+
buf[3] = buffer[offset * 2 + 1];
|
|
92
|
+
return buf.readFloatBE(0);
|
|
93
|
+
case 'floatsb':
|
|
94
|
+
buf = Buffer.alloc(4);
|
|
95
|
+
buf[0] = buffer[offset * 2 + 1];
|
|
96
|
+
buf[1] = buffer[offset * 2 + 0];
|
|
97
|
+
buf[2] = buffer[offset * 2 + 3];
|
|
98
|
+
buf[3] = buffer[offset * 2 + 2];
|
|
99
|
+
return buf.readFloatBE(0);
|
|
100
|
+
case 'doublebe':
|
|
101
|
+
return buffer.readDoubleBE(offset * 2);
|
|
102
|
+
case 'doublele':
|
|
103
|
+
return buffer.readDoubleLE(offset * 2);
|
|
104
|
+
case 'string':
|
|
105
|
+
// find length
|
|
106
|
+
_len = 0;
|
|
107
|
+
while (buffer[offset * 2 + _len] && _len < len * 2) {
|
|
108
|
+
_len++;
|
|
109
|
+
}
|
|
110
|
+
return buffer.toString('ascii', offset * 2, offset * 2 + _len);
|
|
111
|
+
case 'stringle':
|
|
112
|
+
// find length
|
|
113
|
+
_len = 0;
|
|
114
|
+
while (_len < len * 2) {
|
|
115
|
+
if (buffer[offset * 2 + _len + 1]) {
|
|
116
|
+
str += String.fromCharCode(buffer[offset * 2 + _len + 1]);
|
|
117
|
+
if (buffer[offset * 2 + _len]) {
|
|
118
|
+
str += String.fromCharCode(buffer[offset * 2 + _len]);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
_len += 2;
|
|
128
|
+
}
|
|
129
|
+
return str;
|
|
130
|
+
case 'string16':
|
|
131
|
+
case 'string16le': {
|
|
132
|
+
// find length
|
|
133
|
+
_len = 0;
|
|
134
|
+
const corr = type === 'string16' ? 1 : 0;
|
|
135
|
+
while (_len < len * 2) {
|
|
136
|
+
const pos = offset * 2 + _len;
|
|
137
|
+
if (buffer[pos] || buffer[pos + 1]) {
|
|
138
|
+
str += String.fromCharCode(buffer[pos + corr] + (buffer[pos + (1 - corr)] << 8));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
_len += 2;
|
|
144
|
+
}
|
|
145
|
+
return str;
|
|
146
|
+
}
|
|
147
|
+
case 'rawhex':
|
|
148
|
+
// find length
|
|
149
|
+
_len = 0;
|
|
150
|
+
while (_len < len * 2) {
|
|
151
|
+
str += buffer[offset * 2 + _len].toString(16).padStart(2, '0');
|
|
152
|
+
_len += 1;
|
|
153
|
+
}
|
|
154
|
+
return str;
|
|
155
|
+
default:
|
|
156
|
+
throw new Error(`Invalid type: ${type}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function writeValue(type, value, len) {
|
|
160
|
+
let a0;
|
|
161
|
+
let a1;
|
|
162
|
+
let a2;
|
|
163
|
+
let buffer;
|
|
164
|
+
let _len;
|
|
165
|
+
switch (type) {
|
|
166
|
+
case 'uint8be':
|
|
167
|
+
buffer = Buffer.alloc(2);
|
|
168
|
+
buffer[0] = 0;
|
|
169
|
+
buffer.writeUInt8(value & 0xff, 1);
|
|
170
|
+
break;
|
|
171
|
+
case 'uint8le':
|
|
172
|
+
buffer = Buffer.alloc(2);
|
|
173
|
+
buffer[1] = 0;
|
|
174
|
+
buffer.writeUInt8(value & 0xff, 0);
|
|
175
|
+
break;
|
|
176
|
+
case 'int8be':
|
|
177
|
+
buffer = Buffer.alloc(2);
|
|
178
|
+
buffer[0] = 0;
|
|
179
|
+
buffer.writeInt8(value & 0xff, 1);
|
|
180
|
+
break;
|
|
181
|
+
case 'int8le':
|
|
182
|
+
buffer = Buffer.alloc(2);
|
|
183
|
+
buffer[1] = 0;
|
|
184
|
+
buffer.writeInt8(value & 0xff, 0);
|
|
185
|
+
break;
|
|
186
|
+
case 'uint16be':
|
|
187
|
+
buffer = Buffer.alloc(2);
|
|
188
|
+
buffer.writeUInt16BE(value, 0);
|
|
189
|
+
break;
|
|
190
|
+
case 'uint16le':
|
|
191
|
+
buffer = Buffer.alloc(2);
|
|
192
|
+
buffer.writeUInt16LE(value, 0);
|
|
193
|
+
break;
|
|
194
|
+
case 'int16be':
|
|
195
|
+
buffer = Buffer.alloc(2);
|
|
196
|
+
buffer.writeInt16BE(value, 0);
|
|
197
|
+
break;
|
|
198
|
+
case 'int16le':
|
|
199
|
+
buffer = Buffer.alloc(2);
|
|
200
|
+
buffer.writeInt16LE(value, 0);
|
|
201
|
+
break;
|
|
202
|
+
case 'uint32be':
|
|
203
|
+
buffer = Buffer.alloc(4);
|
|
204
|
+
buffer.writeUInt32BE(value, 0);
|
|
205
|
+
break;
|
|
206
|
+
case 'uint32le':
|
|
207
|
+
buffer = Buffer.alloc(4);
|
|
208
|
+
buffer.writeUInt32LE(value, 0);
|
|
209
|
+
break;
|
|
210
|
+
case 'uint32sw':
|
|
211
|
+
buffer = Buffer.alloc(4);
|
|
212
|
+
buffer.writeUInt32BE(value, 0);
|
|
213
|
+
a0 = buffer[0];
|
|
214
|
+
a1 = buffer[1];
|
|
215
|
+
buffer[0] = buffer[2];
|
|
216
|
+
buffer[1] = buffer[3];
|
|
217
|
+
buffer[2] = a0;
|
|
218
|
+
buffer[3] = a1;
|
|
219
|
+
break;
|
|
220
|
+
case 'uint32sb':
|
|
221
|
+
buffer = Buffer.alloc(4);
|
|
222
|
+
buffer.writeUInt32BE(value, 0);
|
|
223
|
+
a0 = buffer[0];
|
|
224
|
+
a2 = buffer[2];
|
|
225
|
+
buffer[0] = buffer[1];
|
|
226
|
+
buffer[2] = buffer[3];
|
|
227
|
+
buffer[1] = a0;
|
|
228
|
+
buffer[3] = a2;
|
|
229
|
+
break;
|
|
230
|
+
case 'int32be':
|
|
231
|
+
buffer = Buffer.alloc(4);
|
|
232
|
+
buffer.writeInt32BE(value, 0);
|
|
233
|
+
break;
|
|
234
|
+
case 'int32le':
|
|
235
|
+
buffer = Buffer.alloc(4);
|
|
236
|
+
buffer.writeInt32LE(value, 0);
|
|
237
|
+
break;
|
|
238
|
+
case 'int32sw':
|
|
239
|
+
buffer = Buffer.alloc(4);
|
|
240
|
+
buffer.writeInt32BE(value, 0);
|
|
241
|
+
a0 = buffer[0];
|
|
242
|
+
a1 = buffer[1];
|
|
243
|
+
buffer[0] = buffer[2];
|
|
244
|
+
buffer[1] = buffer[3];
|
|
245
|
+
buffer[2] = a0;
|
|
246
|
+
buffer[3] = a1;
|
|
247
|
+
break;
|
|
248
|
+
case 'int32sb':
|
|
249
|
+
buffer = Buffer.alloc(4);
|
|
250
|
+
buffer.writeInt32BE(value, 0);
|
|
251
|
+
a0 = buffer[0];
|
|
252
|
+
a2 = buffer[2];
|
|
253
|
+
buffer[0] = buffer[1];
|
|
254
|
+
buffer[2] = buffer[3];
|
|
255
|
+
buffer[1] = a0;
|
|
256
|
+
buffer[3] = a2;
|
|
257
|
+
break;
|
|
258
|
+
case 'uint64be':
|
|
259
|
+
buffer = Buffer.alloc(8);
|
|
260
|
+
buffer.writeUInt32BE(value >> 32, 0);
|
|
261
|
+
buffer.writeUInt32BE(value & 0xffffffff, 4);
|
|
262
|
+
break;
|
|
263
|
+
case 'uint64le':
|
|
264
|
+
buffer = Buffer.alloc(8);
|
|
265
|
+
buffer.writeUInt32LE(value & 0xffffffff, 0);
|
|
266
|
+
buffer.writeUInt32LE(value >> 32, 4);
|
|
267
|
+
break;
|
|
268
|
+
case 'int64be':
|
|
269
|
+
buffer = Buffer.alloc(8);
|
|
270
|
+
buffer.writeInt32BE(value >> 32, 0);
|
|
271
|
+
buffer.writeUInt32BE(value & 0xffffffff, 4);
|
|
272
|
+
break;
|
|
273
|
+
case 'int64le':
|
|
274
|
+
buffer = Buffer.alloc(8);
|
|
275
|
+
buffer.writeUInt32LE(value & 0xffffffff, 0);
|
|
276
|
+
buffer.writeInt32LE(value >> 32, 4);
|
|
277
|
+
break;
|
|
278
|
+
case 'floatbe':
|
|
279
|
+
buffer = Buffer.alloc(4);
|
|
280
|
+
buffer.writeFloatBE(value, 0);
|
|
281
|
+
break;
|
|
282
|
+
case 'floatle':
|
|
283
|
+
buffer = Buffer.alloc(4);
|
|
284
|
+
buffer.writeFloatLE(value, 0);
|
|
285
|
+
break;
|
|
286
|
+
case 'floatsw':
|
|
287
|
+
buffer = Buffer.alloc(4);
|
|
288
|
+
buffer.writeFloatBE(value, 0);
|
|
289
|
+
a0 = buffer[0];
|
|
290
|
+
a1 = buffer[1];
|
|
291
|
+
buffer[0] = buffer[2];
|
|
292
|
+
buffer[1] = buffer[3];
|
|
293
|
+
buffer[2] = a0;
|
|
294
|
+
buffer[3] = a1;
|
|
295
|
+
break;
|
|
296
|
+
case 'floatsb':
|
|
297
|
+
buffer = Buffer.alloc(4);
|
|
298
|
+
buffer.writeFloatBE(value, 0);
|
|
299
|
+
a0 = buffer[0];
|
|
300
|
+
a2 = buffer[2];
|
|
301
|
+
buffer[0] = buffer[1];
|
|
302
|
+
buffer[2] = buffer[3];
|
|
303
|
+
buffer[1] = a0;
|
|
304
|
+
buffer[3] = a2;
|
|
305
|
+
break;
|
|
306
|
+
case 'doublebe':
|
|
307
|
+
buffer = Buffer.alloc(8);
|
|
308
|
+
buffer.writeDoubleBE(value, 0);
|
|
309
|
+
break;
|
|
310
|
+
case 'doublele':
|
|
311
|
+
buffer = Buffer.alloc(8);
|
|
312
|
+
buffer.writeDoubleLE(value, 0);
|
|
313
|
+
break;
|
|
314
|
+
case 'string':
|
|
315
|
+
if (value === null) {
|
|
316
|
+
value = 'null';
|
|
317
|
+
}
|
|
318
|
+
value = value.toString();
|
|
319
|
+
_len = value.length + 1;
|
|
320
|
+
if (_len % 2) {
|
|
321
|
+
_len++;
|
|
322
|
+
}
|
|
323
|
+
buffer = Buffer.alloc(_len);
|
|
324
|
+
buffer.write(value, 0, value.length > _len ? _len : value.length, 'ascii');
|
|
325
|
+
break;
|
|
326
|
+
case 'stringle':
|
|
327
|
+
if (value === null) {
|
|
328
|
+
value = 'null';
|
|
329
|
+
}
|
|
330
|
+
value = value.toString();
|
|
331
|
+
_len = value.length + 1;
|
|
332
|
+
if (_len % 2) {
|
|
333
|
+
_len++;
|
|
334
|
+
}
|
|
335
|
+
buffer = Buffer.alloc(_len);
|
|
336
|
+
for (let b = 0; b < _len >> 1; b++) {
|
|
337
|
+
buffer.writeInt16LE((value.charCodeAt(b * 2) << 8) | value.charCodeAt(b * 2 + 1), b << 1);
|
|
338
|
+
if (b * 2 + 2 >= buffer.length) {
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
break;
|
|
343
|
+
case 'string16':
|
|
344
|
+
case 'string16le':
|
|
345
|
+
if (value === null) {
|
|
346
|
+
value = 'null';
|
|
347
|
+
}
|
|
348
|
+
value = value.toString();
|
|
349
|
+
_len = value.length + 1;
|
|
350
|
+
buffer = Buffer.alloc(len * 2);
|
|
351
|
+
for (let b = 0; b < _len && b < len; b++) {
|
|
352
|
+
buffer.writeInt16LE(value.charCodeAt(b) << (type === 'string16' ? 8 : 0), b * 2);
|
|
353
|
+
}
|
|
354
|
+
break;
|
|
355
|
+
case 'rawhex': {
|
|
356
|
+
if (value === null) {
|
|
357
|
+
value = '';
|
|
358
|
+
}
|
|
359
|
+
value = value.toString();
|
|
360
|
+
const _buffer = Buffer.from(value, 'hex');
|
|
361
|
+
// fix length
|
|
362
|
+
buffer = Buffer.alloc(len * 2);
|
|
363
|
+
_buffer.copy(buffer);
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
default:
|
|
367
|
+
throw new Error(`Invalid type: ${type}`);
|
|
368
|
+
}
|
|
369
|
+
return buffer;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/lib/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function crc16modbus(current: Buffer, previous?: number): number;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = crc16modbus;
|
|
4
|
+
const TABLE = [
|
|
5
|
+
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1,
|
|
6
|
+
0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40,
|
|
7
|
+
0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1,
|
|
8
|
+
0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
|
|
9
|
+
0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1,
|
|
10
|
+
0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40,
|
|
11
|
+
0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1,
|
|
12
|
+
0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
|
|
13
|
+
0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0,
|
|
14
|
+
0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740,
|
|
15
|
+
0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
|
|
16
|
+
0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
|
|
17
|
+
0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1,
|
|
18
|
+
0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140,
|
|
19
|
+
0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0,
|
|
20
|
+
0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
|
|
21
|
+
0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0,
|
|
22
|
+
0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341,
|
|
23
|
+
0x4100, 0x81c1, 0x8081, 0x4040,
|
|
24
|
+
];
|
|
25
|
+
const TABLE32 = new Int32Array(TABLE);
|
|
26
|
+
function crc16modbus(current, previous) {
|
|
27
|
+
let crc = typeof previous !== 'undefined' ? ~~previous : 0xffff;
|
|
28
|
+
for (let index = 0; index < current.length; index++) {
|
|
29
|
+
crc = (TABLE32[(crc ^ current[index]) & 0xff] ^ (crc >> 8)) & 0xffff;
|
|
30
|
+
}
|
|
31
|
+
return crc;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=crc16modbus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crc16modbus.js","sourceRoot":"","sources":["../../src/lib/crc16modbus.ts"],"names":[],"mappings":";;AAuBA,8BAMC;AA7BD,MAAM,KAAK,GAAG;IACV,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CACjC,CAAC;AACF,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAEtC,SAAwB,WAAW,CAAC,OAAe,EAAE,QAAiB;IAClE,IAAI,GAAG,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
export type ModbusReadResultBinary = {
|
|
3
|
+
unitId: number;
|
|
4
|
+
fc: number;
|
|
5
|
+
byteCount: number;
|
|
6
|
+
payload: Buffer;
|
|
7
|
+
data: boolean[];
|
|
8
|
+
};
|
|
9
|
+
type ModbusReadResultNumber = {
|
|
10
|
+
unitId: number;
|
|
11
|
+
fc: number;
|
|
12
|
+
byteCount: number;
|
|
13
|
+
payload: Buffer;
|
|
14
|
+
register: number[];
|
|
15
|
+
};
|
|
16
|
+
type ModbusWriteResultMultiple = {
|
|
17
|
+
unitId: number;
|
|
18
|
+
fc: number;
|
|
19
|
+
startAddress: number;
|
|
20
|
+
quantity: number;
|
|
21
|
+
};
|
|
22
|
+
type ModbusWriteResultSingleCoil = {
|
|
23
|
+
unitId: number;
|
|
24
|
+
fc: number;
|
|
25
|
+
outputAddress: number;
|
|
26
|
+
outputValue?: boolean;
|
|
27
|
+
};
|
|
28
|
+
type ModbusWriteResultSingleRegister = {
|
|
29
|
+
unitId: number;
|
|
30
|
+
fc: number;
|
|
31
|
+
registerAddress: number;
|
|
32
|
+
registerValue: number;
|
|
33
|
+
registerAddressRaw: Buffer;
|
|
34
|
+
registerValueRaw: Buffer;
|
|
35
|
+
};
|
|
36
|
+
type ModbusFcHandler = (error: {
|
|
37
|
+
message: string;
|
|
38
|
+
timeout?: number;
|
|
39
|
+
errorCode?: number;
|
|
40
|
+
exceptionCode?: number;
|
|
41
|
+
} | null, response?: ModbusReadResultBinary | ModbusReadResultNumber | ModbusWriteResultMultiple | ModbusWriteResultSingleCoil | ModbusWriteResultSingleRegister) => void;
|
|
42
|
+
type ModbusFcState = 'waiting' | 'init' | 'error' | 'ready' | 'connect' | 'closed';
|
|
43
|
+
export default abstract class ModbusClientCore extends EventEmitter {
|
|
44
|
+
#private;
|
|
45
|
+
protected readonly log: ioBroker.Logger;
|
|
46
|
+
private readonly responseHandler;
|
|
47
|
+
private currentRequest;
|
|
48
|
+
private reqFifo;
|
|
49
|
+
private readonly timeout;
|
|
50
|
+
private currentState;
|
|
51
|
+
protected constructor(options: {
|
|
52
|
+
logger: ioBroker.Logger;
|
|
53
|
+
timeout?: number;
|
|
54
|
+
});
|
|
55
|
+
inState(state: ModbusFcState): boolean;
|
|
56
|
+
getState(): ModbusFcState;
|
|
57
|
+
setState(newState: ModbusFcState): void;
|
|
58
|
+
flush: () => void;
|
|
59
|
+
onClosed(): void;
|
|
60
|
+
handleErrorPDU(pdu: Buffer): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Handle the incoming data, cut out the packet and send the pdu to the listener
|
|
63
|
+
*/
|
|
64
|
+
onData: (pdu: Buffer, unitId: number) => void;
|
|
65
|
+
queueRequest: (unitId: number, fc: number, pdu: Buffer, cb: ModbusFcHandler) => void;
|
|
66
|
+
abstract connect(): void;
|
|
67
|
+
abstract reconnect(): void;
|
|
68
|
+
abstract close(): void;
|
|
69
|
+
readCoils: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultBinary>;
|
|
70
|
+
readDiscreteInputs: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultBinary>;
|
|
71
|
+
readHoldingRegisters: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultNumber>;
|
|
72
|
+
readInputRegisters: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultNumber>;
|
|
73
|
+
writeSingleCoil: (unitId: number, address: number, value: boolean | Buffer) => Promise<ModbusWriteResultSingleCoil>;
|
|
74
|
+
writeSingleRegister: (unitId: number, address: number, value: Buffer | number) => Promise<ModbusWriteResultSingleRegister>;
|
|
75
|
+
writeMultipleCoils: (unitId: number, startAddress: number, data: Buffer | number[], N?: number) => Promise<ModbusWriteResultMultiple>;
|
|
76
|
+
writeMultipleRegisters: (unitId: number, startAddress: number, data: Buffer | number[]) => Promise<ModbusWriteResultMultiple>;
|
|
77
|
+
}
|
|
78
|
+
export {};
|