@ya-modbus/emulator 0.10.0 → 0.10.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/CHANGELOG.md +8 -0
- package/dist/cjs/src/transports/rtu.d.ts.map +1 -1
- package/dist/cjs/src/transports/rtu.js +7 -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/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/transports/rtu.d.ts.map +1 -1
- package/dist/esm/src/transports/rtu.js +7 -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/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
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.10.2](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/emulator@0.10.1...@ya-modbus/emulator@0.10.2) (2026-02-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @ya-modbus/emulator
|
|
9
|
+
|
|
10
|
+
## [0.10.1](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/emulator@0.10.0...@ya-modbus/emulator@0.10.1) (2026-02-07)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @ya-modbus/emulator
|
|
13
|
+
|
|
6
14
|
# [0.10.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/emulator@0.9.0...@ya-modbus/emulator@0.10.0) (2026-02-07)
|
|
7
15
|
|
|
8
16
|
### Features
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtu.d.ts","sourceRoot":"","sources":["../../../../src/transports/rtu.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"rtu.d.ts","sourceRoot":"","sources":["../../../../src/transports/rtu.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAChB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,cAAc,CAAC,CAAuD;IAC9E,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,kBAAkB;IAKhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8EtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI/E;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,cAAc;IAe5B;;OAEG;YACW,eAAe;CAa9B"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.RtuTransport = void 0;
|
|
9
9
|
const modbus_serial_1 = require("modbus-serial");
|
|
10
|
+
const modbus_protocol_helpers_js_1 = require("../utils/modbus-protocol-helpers.js");
|
|
10
11
|
const base_js_1 = require("./base.js");
|
|
11
12
|
class RtuTransport extends base_js_1.BaseTransport {
|
|
12
13
|
constructor(config) {
|
|
@@ -122,25 +123,9 @@ class RtuTransport extends base_js_1.BaseTransport {
|
|
|
122
123
|
if (!this.requestHandler) {
|
|
123
124
|
throw new Error('No request handler set');
|
|
124
125
|
}
|
|
125
|
-
|
|
126
|
-
const request = Buffer.alloc(6);
|
|
127
|
-
request[0] = unitID;
|
|
128
|
-
request[1] = functionCode;
|
|
129
|
-
request.writeUInt16BE(addr, 2);
|
|
130
|
-
request.writeUInt16BE(length, 4);
|
|
131
|
-
// Call handler
|
|
126
|
+
const request = (0, modbus_protocol_helpers_js_1.buildRegisterReadRequest)({ unitID, functionCode, addr, length });
|
|
132
127
|
const response = await this.requestHandler(unitID, request);
|
|
133
|
-
|
|
134
|
-
const byteCount = response[2];
|
|
135
|
-
if (byteCount === undefined || response.length < 3 + byteCount) {
|
|
136
|
-
throw new Error('Invalid response');
|
|
137
|
-
}
|
|
138
|
-
// Extract register values
|
|
139
|
-
const values = [];
|
|
140
|
-
for (let i = 0; i < byteCount / 2; i++) {
|
|
141
|
-
values.push(response.readUInt16BE(3 + i * 2));
|
|
142
|
-
}
|
|
143
|
-
return values;
|
|
128
|
+
return (0, modbus_protocol_helpers_js_1.parseRegisterReadResponse)(response);
|
|
144
129
|
}
|
|
145
130
|
/**
|
|
146
131
|
* Handle register write operations
|
|
@@ -149,30 +134,7 @@ class RtuTransport extends base_js_1.BaseTransport {
|
|
|
149
134
|
if (!this.requestHandler) {
|
|
150
135
|
throw new Error('No request handler set');
|
|
151
136
|
}
|
|
152
|
-
|
|
153
|
-
let request;
|
|
154
|
-
if (functionCode === 0x06) {
|
|
155
|
-
// Write single register
|
|
156
|
-
request = Buffer.alloc(6);
|
|
157
|
-
request[0] = unitID;
|
|
158
|
-
request[1] = functionCode;
|
|
159
|
-
request.writeUInt16BE(addr, 2);
|
|
160
|
-
request.writeUInt16BE(values[0] ?? 0, 4);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
// Write multiple registers
|
|
164
|
-
const byteCount = values.length * 2;
|
|
165
|
-
request = Buffer.alloc(7 + byteCount);
|
|
166
|
-
request[0] = unitID;
|
|
167
|
-
request[1] = functionCode;
|
|
168
|
-
request.writeUInt16BE(addr, 2);
|
|
169
|
-
request.writeUInt16BE(values.length, 4);
|
|
170
|
-
request[6] = byteCount;
|
|
171
|
-
for (let i = 0; i < values.length; i++) {
|
|
172
|
-
request.writeUInt16BE(values[i] ?? 0, 7 + i * 2);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// Call handler and ignore response
|
|
137
|
+
const request = (0, modbus_protocol_helpers_js_1.buildRegisterWriteRequest)({ unitID, functionCode, addr, values });
|
|
176
138
|
await this.requestHandler(unitID, request);
|
|
177
139
|
}
|
|
178
140
|
/**
|
|
@@ -182,24 +144,9 @@ class RtuTransport extends base_js_1.BaseTransport {
|
|
|
182
144
|
if (!this.requestHandler) {
|
|
183
145
|
throw new Error('No request handler set');
|
|
184
146
|
}
|
|
185
|
-
|
|
186
|
-
const request = Buffer.alloc(6);
|
|
187
|
-
request[0] = unitID;
|
|
188
|
-
request[1] = functionCode;
|
|
189
|
-
request.writeUInt16BE(addr, 2);
|
|
190
|
-
request.writeUInt16BE(length, 4);
|
|
191
|
-
// Call handler
|
|
147
|
+
const request = (0, modbus_protocol_helpers_js_1.buildCoilReadRequest)({ unitID, functionCode, addr, length });
|
|
192
148
|
const response = await this.requestHandler(unitID, request);
|
|
193
|
-
|
|
194
|
-
const byteCount = response[2];
|
|
195
|
-
if (byteCount === undefined || response.length < 4) {
|
|
196
|
-
throw new Error('Invalid response');
|
|
197
|
-
}
|
|
198
|
-
const coilByte = response[3];
|
|
199
|
-
if (coilByte === undefined) {
|
|
200
|
-
throw new Error('Invalid response');
|
|
201
|
-
}
|
|
202
|
-
return (coilByte & 0x01) === 1;
|
|
149
|
+
return (0, modbus_protocol_helpers_js_1.parseCoilReadResponse)(response);
|
|
203
150
|
}
|
|
204
151
|
/**
|
|
205
152
|
* Handle coil write operations
|
|
@@ -208,13 +155,7 @@ class RtuTransport extends base_js_1.BaseTransport {
|
|
|
208
155
|
if (!this.requestHandler) {
|
|
209
156
|
throw new Error('No request handler set');
|
|
210
157
|
}
|
|
211
|
-
|
|
212
|
-
const request = Buffer.alloc(6);
|
|
213
|
-
request[0] = unitID;
|
|
214
|
-
request[1] = functionCode;
|
|
215
|
-
request.writeUInt16BE(addr, 2);
|
|
216
|
-
request.writeUInt16BE(value ? 0xff00 : 0x0000, 4);
|
|
217
|
-
// Call handler and ignore response
|
|
158
|
+
const request = (0, modbus_protocol_helpers_js_1.buildCoilWriteRequest)({ unitID, functionCode, addr, value });
|
|
218
159
|
await this.requestHandler(unitID, request);
|
|
219
160
|
}
|
|
220
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtu.js","sourceRoot":"","sources":["../../../../src/transports/rtu.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rtu.js","sourceRoot":"","sources":["../../../../src/transports/rtu.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../../../src/transports/tcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../../../src/transports/tcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,cAAc,CAAC,CAAuD;IAC9E,OAAO,CAAC,MAAM,CAAC,CAAW;IAC1B,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,kBAAkB;IAKhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI/E;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,cAAc;IAe5B;;OAEG;YACW,eAAe;CAa9B"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.TcpTransport = void 0;
|
|
9
9
|
const modbus_serial_1 = require("modbus-serial");
|
|
10
|
+
const modbus_protocol_helpers_js_1 = require("../utils/modbus-protocol-helpers.js");
|
|
10
11
|
const base_js_1 = require("./base.js");
|
|
11
12
|
class TcpTransport extends base_js_1.BaseTransport {
|
|
12
13
|
constructor(config) {
|
|
@@ -109,25 +110,9 @@ class TcpTransport extends base_js_1.BaseTransport {
|
|
|
109
110
|
if (!this.requestHandler) {
|
|
110
111
|
throw new Error('No request handler set');
|
|
111
112
|
}
|
|
112
|
-
|
|
113
|
-
const request = Buffer.alloc(6);
|
|
114
|
-
request[0] = unitID;
|
|
115
|
-
request[1] = functionCode;
|
|
116
|
-
request.writeUInt16BE(addr, 2);
|
|
117
|
-
request.writeUInt16BE(length, 4);
|
|
118
|
-
// Call handler
|
|
113
|
+
const request = (0, modbus_protocol_helpers_js_1.buildRegisterReadRequest)({ unitID, functionCode, addr, length });
|
|
119
114
|
const response = await this.requestHandler(unitID, request);
|
|
120
|
-
|
|
121
|
-
const byteCount = response[2];
|
|
122
|
-
if (byteCount === undefined || response.length < 3 + byteCount) {
|
|
123
|
-
throw new Error('Invalid response');
|
|
124
|
-
}
|
|
125
|
-
// Extract register values
|
|
126
|
-
const values = [];
|
|
127
|
-
for (let i = 0; i < byteCount / 2; i++) {
|
|
128
|
-
values.push(response.readUInt16BE(3 + i * 2));
|
|
129
|
-
}
|
|
130
|
-
return values;
|
|
115
|
+
return (0, modbus_protocol_helpers_js_1.parseRegisterReadResponse)(response);
|
|
131
116
|
}
|
|
132
117
|
/**
|
|
133
118
|
* Handle register write operations
|
|
@@ -136,30 +121,7 @@ class TcpTransport extends base_js_1.BaseTransport {
|
|
|
136
121
|
if (!this.requestHandler) {
|
|
137
122
|
throw new Error('No request handler set');
|
|
138
123
|
}
|
|
139
|
-
|
|
140
|
-
let request;
|
|
141
|
-
if (functionCode === 0x06) {
|
|
142
|
-
// Write single register
|
|
143
|
-
request = Buffer.alloc(6);
|
|
144
|
-
request[0] = unitID;
|
|
145
|
-
request[1] = functionCode;
|
|
146
|
-
request.writeUInt16BE(addr, 2);
|
|
147
|
-
request.writeUInt16BE(values[0] ?? 0, 4);
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
// Write multiple registers
|
|
151
|
-
const byteCount = values.length * 2;
|
|
152
|
-
request = Buffer.alloc(7 + byteCount);
|
|
153
|
-
request[0] = unitID;
|
|
154
|
-
request[1] = functionCode;
|
|
155
|
-
request.writeUInt16BE(addr, 2);
|
|
156
|
-
request.writeUInt16BE(values.length, 4);
|
|
157
|
-
request[6] = byteCount;
|
|
158
|
-
for (let i = 0; i < values.length; i++) {
|
|
159
|
-
request.writeUInt16BE(values[i] ?? 0, 7 + i * 2);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// Call handler and ignore response
|
|
124
|
+
const request = (0, modbus_protocol_helpers_js_1.buildRegisterWriteRequest)({ unitID, functionCode, addr, values });
|
|
163
125
|
await this.requestHandler(unitID, request);
|
|
164
126
|
}
|
|
165
127
|
/**
|
|
@@ -169,24 +131,9 @@ class TcpTransport extends base_js_1.BaseTransport {
|
|
|
169
131
|
if (!this.requestHandler) {
|
|
170
132
|
throw new Error('No request handler set');
|
|
171
133
|
}
|
|
172
|
-
|
|
173
|
-
const request = Buffer.alloc(6);
|
|
174
|
-
request[0] = unitID;
|
|
175
|
-
request[1] = functionCode;
|
|
176
|
-
request.writeUInt16BE(addr, 2);
|
|
177
|
-
request.writeUInt16BE(length, 4);
|
|
178
|
-
// Call handler
|
|
134
|
+
const request = (0, modbus_protocol_helpers_js_1.buildCoilReadRequest)({ unitID, functionCode, addr, length });
|
|
179
135
|
const response = await this.requestHandler(unitID, request);
|
|
180
|
-
|
|
181
|
-
const byteCount = response[2];
|
|
182
|
-
if (byteCount === undefined || response.length < 4) {
|
|
183
|
-
throw new Error('Invalid response');
|
|
184
|
-
}
|
|
185
|
-
const coilByte = response[3];
|
|
186
|
-
if (coilByte === undefined) {
|
|
187
|
-
throw new Error('Invalid response');
|
|
188
|
-
}
|
|
189
|
-
return (coilByte & 0x01) === 1;
|
|
136
|
+
return (0, modbus_protocol_helpers_js_1.parseCoilReadResponse)(response);
|
|
190
137
|
}
|
|
191
138
|
/**
|
|
192
139
|
* Handle coil write operations
|
|
@@ -195,13 +142,7 @@ class TcpTransport extends base_js_1.BaseTransport {
|
|
|
195
142
|
if (!this.requestHandler) {
|
|
196
143
|
throw new Error('No request handler set');
|
|
197
144
|
}
|
|
198
|
-
|
|
199
|
-
const request = Buffer.alloc(6);
|
|
200
|
-
request[0] = unitID;
|
|
201
|
-
request[1] = functionCode;
|
|
202
|
-
request.writeUInt16BE(addr, 2);
|
|
203
|
-
request.writeUInt16BE(value ? 0xff00 : 0x0000, 4);
|
|
204
|
-
// Call handler and ignore response
|
|
145
|
+
const request = (0, modbus_protocol_helpers_js_1.buildCoilWriteRequest)({ unitID, functionCode, addr, value });
|
|
205
146
|
await this.requestHandler(unitID, request);
|
|
206
147
|
}
|
|
207
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../../src/transports/tcp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../../src/transports/tcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modbus protocol buffer building and parsing utilities
|
|
3
|
+
*
|
|
4
|
+
* These pure functions handle the low-level Modbus protocol details
|
|
5
|
+
* (buffer construction, parsing) independent of the transport layer.
|
|
6
|
+
*/
|
|
7
|
+
export interface RegisterReadRequest {
|
|
8
|
+
unitID: number;
|
|
9
|
+
functionCode: number;
|
|
10
|
+
addr: number;
|
|
11
|
+
length: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RegisterWriteRequest {
|
|
14
|
+
unitID: number;
|
|
15
|
+
functionCode: number;
|
|
16
|
+
addr: number;
|
|
17
|
+
values: number[];
|
|
18
|
+
}
|
|
19
|
+
export interface CoilReadRequest {
|
|
20
|
+
unitID: number;
|
|
21
|
+
functionCode: number;
|
|
22
|
+
addr: number;
|
|
23
|
+
length: number;
|
|
24
|
+
}
|
|
25
|
+
export interface CoilWriteRequest {
|
|
26
|
+
unitID: number;
|
|
27
|
+
functionCode: number;
|
|
28
|
+
addr: number;
|
|
29
|
+
value: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Builds a Modbus register read request buffer
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildRegisterReadRequest(params: RegisterReadRequest): Buffer;
|
|
35
|
+
/**
|
|
36
|
+
* Parses register values from a Modbus response buffer
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseRegisterReadResponse(response: Buffer): number[];
|
|
39
|
+
/**
|
|
40
|
+
* Builds a Modbus register write request buffer
|
|
41
|
+
* Handles both single (0x06) and multiple (0x10) register writes
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildRegisterWriteRequest(params: RegisterWriteRequest): Buffer;
|
|
44
|
+
/**
|
|
45
|
+
* Builds a Modbus coil read request buffer
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildCoilReadRequest(params: CoilReadRequest): Buffer;
|
|
48
|
+
/**
|
|
49
|
+
* Parses a single coil value from a Modbus response buffer
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseCoilReadResponse(response: Buffer): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Builds a Modbus coil write request buffer
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildCoilWriteRequest(params: CoilWriteRequest): Buffer;
|
|
56
|
+
//# sourceMappingURL=modbus-protocol-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modbus-protocol-helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/modbus-protocol-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAO5E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAWpE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAuB9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAOpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAW/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAOtE"}
|
|
@@ -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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"}
|