@ya-modbus/emulator 0.9.0 → 0.10.1
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/CHANGELOG.md +10 -0
- package/README.md +18 -3
- package/dist/cjs/src/cli.d.ts.map +1 -1
- package/dist/cjs/src/cli.js +3 -0
- package/dist/cjs/src/cli.js.map +1 -1
- package/dist/cjs/src/emulator.d.ts.map +1 -1
- package/dist/cjs/src/emulator.js +1 -0
- package/dist/cjs/src/emulator.js.map +1 -1
- package/dist/cjs/src/transports/rtu.d.ts +1 -0
- package/dist/cjs/src/transports/rtu.d.ts.map +1 -1
- package/dist/cjs/src/transports/rtu.js +11 -66
- package/dist/cjs/src/transports/rtu.js.map +1 -1
- package/dist/cjs/src/transports/tcp.d.ts.map +1 -1
- package/dist/cjs/src/transports/tcp.js +7 -66
- package/dist/cjs/src/transports/tcp.js.map +1 -1
- package/dist/cjs/src/types/config.d.ts +2 -0
- package/dist/cjs/src/types/config.d.ts.map +1 -1
- package/dist/cjs/src/utils/config-loader.d.ts +1 -0
- package/dist/cjs/src/utils/config-loader.d.ts.map +1 -1
- package/dist/cjs/src/utils/config-loader.js.map +1 -1
- package/dist/cjs/src/utils/modbus-protocol-helpers.d.ts +56 -0
- package/dist/cjs/src/utils/modbus-protocol-helpers.d.ts.map +1 -0
- package/dist/cjs/src/utils/modbus-protocol-helpers.js +105 -0
- package/dist/cjs/src/utils/modbus-protocol-helpers.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/cli.d.ts.map +1 -1
- package/dist/esm/src/cli.js +3 -0
- package/dist/esm/src/cli.js.map +1 -1
- package/dist/esm/src/emulator.d.ts.map +1 -1
- package/dist/esm/src/emulator.js +1 -0
- package/dist/esm/src/emulator.js.map +1 -1
- package/dist/esm/src/transports/rtu.d.ts +1 -0
- package/dist/esm/src/transports/rtu.d.ts.map +1 -1
- package/dist/esm/src/transports/rtu.js +11 -66
- package/dist/esm/src/transports/rtu.js.map +1 -1
- package/dist/esm/src/transports/tcp.d.ts.map +1 -1
- package/dist/esm/src/transports/tcp.js +7 -66
- package/dist/esm/src/transports/tcp.js.map +1 -1
- package/dist/esm/src/types/config.d.ts +2 -0
- package/dist/esm/src/types/config.d.ts.map +1 -1
- package/dist/esm/src/utils/config-loader.d.ts +1 -0
- package/dist/esm/src/utils/config-loader.d.ts.map +1 -1
- package/dist/esm/src/utils/config-loader.js.map +1 -1
- package/dist/esm/src/utils/modbus-protocol-helpers.d.ts +56 -0
- package/dist/esm/src/utils/modbus-protocol-helpers.d.ts.map +1 -0
- package/dist/esm/src/utils/modbus-protocol-helpers.js +97 -0
- package/dist/esm/src/utils/modbus-protocol-helpers.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Modbus protocol buffer building and parsing utilities
|
|
4
|
+
*
|
|
5
|
+
* These pure functions handle the low-level Modbus protocol details
|
|
6
|
+
* (buffer construction, parsing) independent of the transport layer.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.buildRegisterReadRequest = buildRegisterReadRequest;
|
|
10
|
+
exports.parseRegisterReadResponse = parseRegisterReadResponse;
|
|
11
|
+
exports.buildRegisterWriteRequest = buildRegisterWriteRequest;
|
|
12
|
+
exports.buildCoilReadRequest = buildCoilReadRequest;
|
|
13
|
+
exports.parseCoilReadResponse = parseCoilReadResponse;
|
|
14
|
+
exports.buildCoilWriteRequest = buildCoilWriteRequest;
|
|
15
|
+
/**
|
|
16
|
+
* Builds a Modbus register read request buffer
|
|
17
|
+
*/
|
|
18
|
+
function buildRegisterReadRequest(params) {
|
|
19
|
+
const request = Buffer.alloc(6);
|
|
20
|
+
request[0] = params.unitID;
|
|
21
|
+
request[1] = params.functionCode;
|
|
22
|
+
request.writeUInt16BE(params.addr, 2);
|
|
23
|
+
request.writeUInt16BE(params.length, 4);
|
|
24
|
+
return request;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parses register values from a Modbus response buffer
|
|
28
|
+
*/
|
|
29
|
+
function parseRegisterReadResponse(response) {
|
|
30
|
+
const byteCount = response[2];
|
|
31
|
+
if (byteCount === undefined || response.length < 3 + byteCount) {
|
|
32
|
+
throw new Error('Invalid response');
|
|
33
|
+
}
|
|
34
|
+
const values = [];
|
|
35
|
+
for (let i = 0; i < byteCount / 2; i++) {
|
|
36
|
+
values.push(response.readUInt16BE(3 + i * 2));
|
|
37
|
+
}
|
|
38
|
+
return values;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Builds a Modbus register write request buffer
|
|
42
|
+
* Handles both single (0x06) and multiple (0x10) register writes
|
|
43
|
+
*/
|
|
44
|
+
function buildRegisterWriteRequest(params) {
|
|
45
|
+
if (params.functionCode === 0x06) {
|
|
46
|
+
// Write single register
|
|
47
|
+
const request = Buffer.alloc(6);
|
|
48
|
+
request[0] = params.unitID;
|
|
49
|
+
request[1] = params.functionCode;
|
|
50
|
+
request.writeUInt16BE(params.addr, 2);
|
|
51
|
+
request.writeUInt16BE(params.values[0] ?? 0, 4);
|
|
52
|
+
return request;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Write multiple registers
|
|
56
|
+
const byteCount = params.values.length * 2;
|
|
57
|
+
const request = Buffer.alloc(7 + byteCount);
|
|
58
|
+
request[0] = params.unitID;
|
|
59
|
+
request[1] = params.functionCode;
|
|
60
|
+
request.writeUInt16BE(params.addr, 2);
|
|
61
|
+
request.writeUInt16BE(params.values.length, 4);
|
|
62
|
+
request[6] = byteCount;
|
|
63
|
+
for (let i = 0; i < params.values.length; i++) {
|
|
64
|
+
request.writeUInt16BE(params.values[i] ?? 0, 7 + i * 2);
|
|
65
|
+
}
|
|
66
|
+
return request;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Builds a Modbus coil read request buffer
|
|
71
|
+
*/
|
|
72
|
+
function buildCoilReadRequest(params) {
|
|
73
|
+
const request = Buffer.alloc(6);
|
|
74
|
+
request[0] = params.unitID;
|
|
75
|
+
request[1] = params.functionCode;
|
|
76
|
+
request.writeUInt16BE(params.addr, 2);
|
|
77
|
+
request.writeUInt16BE(params.length, 4);
|
|
78
|
+
return request;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parses a single coil value from a Modbus response buffer
|
|
82
|
+
*/
|
|
83
|
+
function parseCoilReadResponse(response) {
|
|
84
|
+
const byteCount = response[2];
|
|
85
|
+
if (byteCount === undefined || response.length < 4) {
|
|
86
|
+
throw new Error('Invalid response');
|
|
87
|
+
}
|
|
88
|
+
const coilByte = response[3];
|
|
89
|
+
if (coilByte === undefined) {
|
|
90
|
+
throw new Error('Invalid response');
|
|
91
|
+
}
|
|
92
|
+
return (coilByte & 0x01) === 1;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Builds a Modbus coil write request buffer
|
|
96
|
+
*/
|
|
97
|
+
function buildCoilWriteRequest(params) {
|
|
98
|
+
const request = Buffer.alloc(6);
|
|
99
|
+
request[0] = params.unitID;
|
|
100
|
+
request[1] = params.functionCode;
|
|
101
|
+
request.writeUInt16BE(params.addr, 2);
|
|
102
|
+
request.writeUInt16BE(params.value ? 0xff00 : 0x0000, 4);
|
|
103
|
+
return request;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=modbus-protocol-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modbus-protocol-helpers.js","sourceRoot":"","sources":["../../../../src/utils/modbus-protocol-helpers.ts"],"names":[],"mappings":"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"}
|