@ya-modbus/transport 0.7.0 → 0.7.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.
Files changed (114) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/src/create-modbus-transport.d.ts.map +1 -0
  3. package/dist/cjs/src/create-modbus-transport.js.map +1 -0
  4. package/dist/cjs/src/factory.d.ts.map +1 -0
  5. package/dist/cjs/src/factory.js.map +1 -0
  6. package/dist/{esm → cjs/src}/index.d.ts +1 -0
  7. package/dist/cjs/src/index.d.ts.map +1 -0
  8. package/dist/cjs/{index.js → src/index.js} +3 -1
  9. package/dist/cjs/src/index.js.map +1 -0
  10. package/dist/cjs/src/manager.d.ts +91 -0
  11. package/dist/cjs/src/manager.d.ts.map +1 -0
  12. package/dist/cjs/src/manager.js +153 -0
  13. package/dist/cjs/src/manager.js.map +1 -0
  14. package/dist/cjs/src/mutex-transport.d.ts.map +1 -0
  15. package/dist/cjs/src/mutex-transport.js.map +1 -0
  16. package/dist/cjs/src/retry.d.ts.map +1 -0
  17. package/dist/cjs/src/retry.js.map +1 -0
  18. package/dist/cjs/src/rtu-transport.d.ts.map +1 -0
  19. package/dist/cjs/src/rtu-transport.js.map +1 -0
  20. package/dist/cjs/src/slave-transport.d.ts +61 -0
  21. package/dist/cjs/src/slave-transport.d.ts.map +1 -0
  22. package/dist/cjs/src/slave-transport.js +136 -0
  23. package/dist/cjs/src/slave-transport.js.map +1 -0
  24. package/dist/cjs/src/tcp-transport.d.ts.map +1 -0
  25. package/dist/cjs/src/tcp-transport.js.map +1 -0
  26. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  27. package/dist/esm/src/create-modbus-transport.d.ts.map +1 -0
  28. package/dist/esm/src/create-modbus-transport.js.map +1 -0
  29. package/dist/esm/src/factory.d.ts.map +1 -0
  30. package/dist/esm/src/factory.js.map +1 -0
  31. package/dist/{cjs → esm/src}/index.d.ts +1 -0
  32. package/dist/esm/src/index.d.ts.map +1 -0
  33. package/dist/esm/{index.js → src/index.js} +1 -0
  34. package/dist/esm/src/index.js.map +1 -0
  35. package/dist/esm/src/manager.d.ts +91 -0
  36. package/dist/esm/src/manager.d.ts.map +1 -0
  37. package/dist/esm/src/manager.js +148 -0
  38. package/dist/esm/src/manager.js.map +1 -0
  39. package/dist/esm/src/mutex-transport.d.ts.map +1 -0
  40. package/dist/esm/src/mutex-transport.js.map +1 -0
  41. package/dist/esm/src/retry.d.ts.map +1 -0
  42. package/dist/esm/src/retry.js.map +1 -0
  43. package/dist/esm/src/rtu-transport.d.ts.map +1 -0
  44. package/dist/esm/src/rtu-transport.js.map +1 -0
  45. package/dist/esm/src/slave-transport.d.ts +61 -0
  46. package/dist/esm/src/slave-transport.d.ts.map +1 -0
  47. package/dist/esm/src/slave-transport.js +132 -0
  48. package/dist/esm/src/slave-transport.js.map +1 -0
  49. package/dist/esm/src/tcp-transport.d.ts.map +1 -0
  50. package/dist/esm/src/tcp-transport.js.map +1 -0
  51. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  52. package/package.json +10 -10
  53. package/dist/cjs/create-modbus-transport.d.ts.map +0 -1
  54. package/dist/cjs/create-modbus-transport.js.map +0 -1
  55. package/dist/cjs/factory.d.ts.map +0 -1
  56. package/dist/cjs/factory.js.map +0 -1
  57. package/dist/cjs/index.d.ts.map +0 -1
  58. package/dist/cjs/index.js.map +0 -1
  59. package/dist/cjs/manager.d.ts +0 -66
  60. package/dist/cjs/manager.d.ts.map +0 -1
  61. package/dist/cjs/manager.js +0 -136
  62. package/dist/cjs/manager.js.map +0 -1
  63. package/dist/cjs/mutex-transport.d.ts.map +0 -1
  64. package/dist/cjs/mutex-transport.js.map +0 -1
  65. package/dist/cjs/retry.d.ts.map +0 -1
  66. package/dist/cjs/retry.js.map +0 -1
  67. package/dist/cjs/rtu-transport.d.ts.map +0 -1
  68. package/dist/cjs/rtu-transport.js.map +0 -1
  69. package/dist/cjs/tcp-transport.d.ts.map +0 -1
  70. package/dist/cjs/tcp-transport.js.map +0 -1
  71. package/dist/esm/create-modbus-transport.d.ts.map +0 -1
  72. package/dist/esm/create-modbus-transport.js.map +0 -1
  73. package/dist/esm/factory.d.ts.map +0 -1
  74. package/dist/esm/factory.js.map +0 -1
  75. package/dist/esm/index.d.ts.map +0 -1
  76. package/dist/esm/index.js.map +0 -1
  77. package/dist/esm/manager.d.ts +0 -66
  78. package/dist/esm/manager.d.ts.map +0 -1
  79. package/dist/esm/manager.js +0 -132
  80. package/dist/esm/manager.js.map +0 -1
  81. package/dist/esm/mutex-transport.d.ts.map +0 -1
  82. package/dist/esm/mutex-transport.js.map +0 -1
  83. package/dist/esm/retry.d.ts.map +0 -1
  84. package/dist/esm/retry.js.map +0 -1
  85. package/dist/esm/rtu-transport.d.ts.map +0 -1
  86. package/dist/esm/rtu-transport.js.map +0 -1
  87. package/dist/esm/tcp-transport.d.ts.map +0 -1
  88. package/dist/esm/tcp-transport.js.map +0 -1
  89. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  90. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  91. /package/dist/cjs/{create-modbus-transport.d.ts → src/create-modbus-transport.d.ts} +0 -0
  92. /package/dist/cjs/{create-modbus-transport.js → src/create-modbus-transport.js} +0 -0
  93. /package/dist/cjs/{factory.d.ts → src/factory.d.ts} +0 -0
  94. /package/dist/cjs/{factory.js → src/factory.js} +0 -0
  95. /package/dist/cjs/{mutex-transport.d.ts → src/mutex-transport.d.ts} +0 -0
  96. /package/dist/cjs/{mutex-transport.js → src/mutex-transport.js} +0 -0
  97. /package/dist/cjs/{retry.d.ts → src/retry.d.ts} +0 -0
  98. /package/dist/cjs/{retry.js → src/retry.js} +0 -0
  99. /package/dist/cjs/{rtu-transport.d.ts → src/rtu-transport.d.ts} +0 -0
  100. /package/dist/cjs/{rtu-transport.js → src/rtu-transport.js} +0 -0
  101. /package/dist/cjs/{tcp-transport.d.ts → src/tcp-transport.d.ts} +0 -0
  102. /package/dist/cjs/{tcp-transport.js → src/tcp-transport.js} +0 -0
  103. /package/dist/esm/{create-modbus-transport.d.ts → src/create-modbus-transport.d.ts} +0 -0
  104. /package/dist/esm/{create-modbus-transport.js → src/create-modbus-transport.js} +0 -0
  105. /package/dist/esm/{factory.d.ts → src/factory.d.ts} +0 -0
  106. /package/dist/esm/{factory.js → src/factory.js} +0 -0
  107. /package/dist/esm/{mutex-transport.d.ts → src/mutex-transport.d.ts} +0 -0
  108. /package/dist/esm/{mutex-transport.js → src/mutex-transport.js} +0 -0
  109. /package/dist/esm/{retry.d.ts → src/retry.d.ts} +0 -0
  110. /package/dist/esm/{retry.js → src/retry.js} +0 -0
  111. /package/dist/esm/{rtu-transport.d.ts → src/rtu-transport.d.ts} +0 -0
  112. /package/dist/esm/{rtu-transport.js → src/rtu-transport.js} +0 -0
  113. /package/dist/esm/{tcp-transport.d.ts → src/tcp-transport.d.ts} +0 -0
  114. /package/dist/esm/{tcp-transport.js → src/tcp-transport.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
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.7.2](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/transport@0.7.1...@ya-modbus/transport@0.7.2) (2026-02-11)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **transport:** multiple devices on same bus use correct slave ID ([#235](https://github.com/groupsky/ya-modbus/issues/235)) ([7259914](https://github.com/groupsky/ya-modbus/commit/7259914ca2583c5222c99f3306de87961975d2c4)), closes [#171](https://github.com/groupsky/ya-modbus/issues/171)
11
+
12
+ ## [0.7.1](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/transport@0.7.0...@ya-modbus/transport@0.7.1) (2026-02-06)
13
+
14
+ **Note:** Version bump only for package @ya-modbus/transport
15
+
6
16
  # [0.7.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/transport@0.6.0...@ya-modbus/transport@0.7.0) (2026-01-11)
7
17
 
8
18
  ### Features
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-modbus-transport.d.ts","sourceRoot":"","sources":["../../../src/create-modbus-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,SAAS,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,MAAU,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,SAAS,CAoGX"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-modbus-transport.js","sourceRoot":"","sources":["../../../src/create-modbus-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGvE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AAEpC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAA;AASnD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAejF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/factory.ts"],"names":[],"mappings":";;AAgCA,0CAeC;AA7CD,yDAAuE;AACvE,yDAAuE;AAWvE;;GAEG;AACH,SAAS,WAAW,CAAC,MAAuB;IAC1C,OAAO,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAA;AAChD,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,eAAe,CAAC,MAAuB;IAC3D,qDAAqD;IACrD,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,IAAA,qCAAkB,EAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,OAAO,IAAA,qCAAkB,EAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;AAC9E,CAAC"}
@@ -11,4 +11,5 @@ export { createModbusTransport } from './create-modbus-transport.js';
11
11
  export { withRetry, MAX_RETRIES, RETRY_DELAY_MS, type RetryLogger } from './retry.js';
12
12
  export { TransportManager, type TransportStats } from './manager.js';
13
13
  export { MutexTransport } from './mutex-transport.js';
14
+ export { SlaveTransport } from './slave-transport.js';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
@@ -6,7 +6,7 @@
6
6
  * and transport pooling with mutex-based RTU bus serialization
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.MutexTransport = exports.TransportManager = exports.RETRY_DELAY_MS = exports.MAX_RETRIES = exports.withRetry = exports.createModbusTransport = exports.createTCPTransport = exports.createRTUTransport = exports.createTransport = void 0;
9
+ exports.SlaveTransport = exports.MutexTransport = exports.TransportManager = exports.RETRY_DELAY_MS = exports.MAX_RETRIES = exports.withRetry = exports.createModbusTransport = exports.createTCPTransport = exports.createRTUTransport = exports.createTransport = void 0;
10
10
  var factory_js_1 = require("./factory.js");
11
11
  Object.defineProperty(exports, "createTransport", { enumerable: true, get: function () { return factory_js_1.createTransport; } });
12
12
  var rtu_transport_js_1 = require("./rtu-transport.js");
@@ -23,4 +23,6 @@ var manager_js_1 = require("./manager.js");
23
23
  Object.defineProperty(exports, "TransportManager", { enumerable: true, get: function () { return manager_js_1.TransportManager; } });
24
24
  var mutex_transport_js_1 = require("./mutex-transport.js");
25
25
  Object.defineProperty(exports, "MutexTransport", { enumerable: true, get: function () { return mutex_transport_js_1.MutexTransport; } });
26
+ var slave_transport_js_1 = require("./slave-transport.js");
27
+ Object.defineProperty(exports, "SlaveTransport", { enumerable: true, get: function () { return slave_transport_js_1.SlaveTransport; } });
26
28
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAAoE;AAA3D,6GAAA,eAAe,OAAA;AACxB,uDAAuE;AAA9D,sHAAA,kBAAkB,OAAA;AAC3B,uDAAuE;AAA9D,sHAAA,kBAAkB,OAAA;AAC3B,2EAAoE;AAA3D,mIAAA,qBAAqB,OAAA;AAC9B,uCAAqF;AAA5E,qGAAA,SAAS,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,0GAAA,cAAc,OAAA;AAC/C,2CAAoE;AAA3D,8GAAA,gBAAgB,OAAA;AACzB,2DAAqD;AAA5C,oHAAA,cAAc,OAAA;AACvB,2DAAqD;AAA5C,oHAAA,cAAc,OAAA"}
@@ -0,0 +1,91 @@
1
+ import type { Transport } from '@ya-modbus/driver-types';
2
+ import type { TransportConfig } from './factory.js';
3
+ /**
4
+ * Statistics about managed transports
5
+ */
6
+ export interface TransportStats {
7
+ totalTransports: number;
8
+ rtuTransports: number;
9
+ tcpTransports: number;
10
+ }
11
+ /**
12
+ * TransportManager pools modbus-serial clients and provides slave-specific transports.
13
+ *
14
+ * Key behaviors:
15
+ * - Pools modbus-serial clients by physical connection (excluding slave ID)
16
+ * - RTU clients are pooled by bus configuration (port, baud rate, parity, etc.)
17
+ * - TCP clients are pooled by host and port
18
+ * - Returns SlaveTransport instances that set the slave ID before each operation
19
+ * - Multiple devices on the same connection share a single client and mutex
20
+ * - All operations are serialized using async-mutex to prevent race conditions
21
+ *
22
+ * This architecture solves the multi-device problem:
23
+ * - Each device gets its own SlaveTransport with its own slave ID
24
+ * - All devices on the same bus share the same client and mutex
25
+ * - Slave ID is set dynamically before each operation
26
+ * - No more hardcoded slave IDs that affect all devices on a bus
27
+ *
28
+ * IMPORTANT: Shared Resource Ownership
29
+ * Multiple SlaveTransport instances share the same client and mutex. This is
30
+ * intentional and correct:
31
+ * - Shared client: Avoids port contention (can't open serial port twice)
32
+ * - Shared mutex: Ensures serialized access to the bus
33
+ * - SlaveTransport.close(): Does not close shared client (use closeAll() for cleanup)
34
+ */
35
+ export declare class TransportManager {
36
+ private readonly connections;
37
+ /**
38
+ * Get or create a transport for the given configuration.
39
+ * Returns a new SlaveTransport instance bound to the slave ID in the config.
40
+ * Multiple devices on the same physical connection share the same client and mutex.
41
+ *
42
+ * @param config - RTU or TCP transport configuration
43
+ * @returns SlaveTransport instance for the specific slave device
44
+ */
45
+ getTransport(config: TransportConfig): Promise<Transport>;
46
+ /**
47
+ * Get statistics about managed connections
48
+ *
49
+ * @returns Transport statistics
50
+ */
51
+ getStats(): TransportStats;
52
+ /**
53
+ * Close all managed connections and clear the pool.
54
+ * Errors during close are logged but do not stop the process.
55
+ */
56
+ closeAll(): Promise<void>;
57
+ /**
58
+ * Generate a unique key for a physical connection.
59
+ * Excludes slave ID so multiple devices on the same bus share a connection.
60
+ * For RTU: Key includes all bus parameters (port, baud, parity, etc.)
61
+ * For TCP: Key includes host and port
62
+ *
63
+ * @param config - Transport configuration
64
+ * @returns Physical connection key string
65
+ */
66
+ private getPhysicalConnectionKey;
67
+ /**
68
+ * Create and configure an RTU modbus-serial client.
69
+ * Does NOT set slave ID - that's handled by SlaveTransport.
70
+ *
71
+ * @param config - RTU configuration
72
+ * @returns Connected ModbusRTU client
73
+ */
74
+ private createRTUClient;
75
+ /**
76
+ * Create and configure a TCP modbus-serial client.
77
+ * Does NOT set slave ID - that's handled by SlaveTransport.
78
+ *
79
+ * @param config - TCP configuration
80
+ * @returns Connected ModbusRTU client
81
+ */
82
+ private createTCPClient;
83
+ /**
84
+ * Type guard to check if config is RTU
85
+ *
86
+ * @param config - Transport configuration
87
+ * @returns True if RTU config
88
+ */
89
+ private isRTUConfig;
90
+ }
91
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,OAAO,KAAK,EAAwB,eAAe,EAAE,MAAM,cAAc,CAAA;AAazE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IAEjE;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IA6B/D;;;;OAIG;IACH,QAAQ,IAAI,cAAc;IAS1B;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAShC;;;;;;OAMG;YACW,eAAe;IAe7B;;;;;;OAMG;YACW,eAAe;IAU7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAGpB"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransportManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const async_mutex_1 = require("async-mutex");
6
+ const modbus_serial_1 = tslib_1.__importDefault(require("modbus-serial"));
7
+ const slave_transport_js_1 = require("./slave-transport.js");
8
+ /**
9
+ * TransportManager pools modbus-serial clients and provides slave-specific transports.
10
+ *
11
+ * Key behaviors:
12
+ * - Pools modbus-serial clients by physical connection (excluding slave ID)
13
+ * - RTU clients are pooled by bus configuration (port, baud rate, parity, etc.)
14
+ * - TCP clients are pooled by host and port
15
+ * - Returns SlaveTransport instances that set the slave ID before each operation
16
+ * - Multiple devices on the same connection share a single client and mutex
17
+ * - All operations are serialized using async-mutex to prevent race conditions
18
+ *
19
+ * This architecture solves the multi-device problem:
20
+ * - Each device gets its own SlaveTransport with its own slave ID
21
+ * - All devices on the same bus share the same client and mutex
22
+ * - Slave ID is set dynamically before each operation
23
+ * - No more hardcoded slave IDs that affect all devices on a bus
24
+ *
25
+ * IMPORTANT: Shared Resource Ownership
26
+ * Multiple SlaveTransport instances share the same client and mutex. This is
27
+ * intentional and correct:
28
+ * - Shared client: Avoids port contention (can't open serial port twice)
29
+ * - Shared mutex: Ensures serialized access to the bus
30
+ * - SlaveTransport.close(): Does not close shared client (use closeAll() for cleanup)
31
+ */
32
+ class TransportManager {
33
+ constructor() {
34
+ this.connections = new Map();
35
+ }
36
+ /**
37
+ * Get or create a transport for the given configuration.
38
+ * Returns a new SlaveTransport instance bound to the slave ID in the config.
39
+ * Multiple devices on the same physical connection share the same client and mutex.
40
+ *
41
+ * @param config - RTU or TCP transport configuration
42
+ * @returns SlaveTransport instance for the specific slave device
43
+ */
44
+ async getTransport(config) {
45
+ const key = this.getPhysicalConnectionKey(config);
46
+ const isRTU = this.isRTUConfig(config);
47
+ // Get or create the shared connection
48
+ let entry = this.connections.get(key);
49
+ if (!entry) {
50
+ // Create new client for this physical connection
51
+ const client = isRTU ? await this.createRTUClient(config) : await this.createTCPClient(config);
52
+ entry = {
53
+ client,
54
+ mutex: new async_mutex_1.Mutex(),
55
+ config,
56
+ isRTU,
57
+ };
58
+ this.connections.set(key, entry);
59
+ }
60
+ // Return a new SlaveTransport for this specific slave
61
+ return new slave_transport_js_1.SlaveTransport(config.slaveId, entry.client, entry.mutex, config.maxRetries ?? 3, config.logger);
62
+ }
63
+ /**
64
+ * Get statistics about managed connections
65
+ *
66
+ * @returns Transport statistics
67
+ */
68
+ getStats() {
69
+ const entries = Array.from(this.connections.values());
70
+ return {
71
+ totalTransports: entries.length,
72
+ rtuTransports: entries.filter((e) => e.isRTU).length,
73
+ tcpTransports: entries.filter((e) => !e.isRTU).length,
74
+ };
75
+ }
76
+ /**
77
+ * Close all managed connections and clear the pool.
78
+ * Errors during close are logged but do not stop the process.
79
+ */
80
+ async closeAll() {
81
+ const closePromises = Array.from(this.connections.values()).map(async (entry) => {
82
+ try {
83
+ await new Promise((resolve) => {
84
+ entry.client.close(resolve);
85
+ });
86
+ }
87
+ catch (error) {
88
+ // Log but don't throw - we want to close all connections
89
+ console.error('Error closing connection:', error);
90
+ }
91
+ });
92
+ await Promise.all(closePromises);
93
+ this.connections.clear();
94
+ }
95
+ /**
96
+ * Generate a unique key for a physical connection.
97
+ * Excludes slave ID so multiple devices on the same bus share a connection.
98
+ * For RTU: Key includes all bus parameters (port, baud, parity, etc.)
99
+ * For TCP: Key includes host and port
100
+ *
101
+ * @param config - Transport configuration
102
+ * @returns Physical connection key string
103
+ */
104
+ getPhysicalConnectionKey(config) {
105
+ if (this.isRTUConfig(config)) {
106
+ return `rtu:${config.port}:${config.baudRate}:${config.dataBits}:${config.parity}:${config.stopBits}`;
107
+ }
108
+ // TCP config - safe to access host/port because isRTUConfig returned false
109
+ return `tcp:${config.host}:${config.port ?? 502}`;
110
+ }
111
+ /**
112
+ * Create and configure an RTU modbus-serial client.
113
+ * Does NOT set slave ID - that's handled by SlaveTransport.
114
+ *
115
+ * @param config - RTU configuration
116
+ * @returns Connected ModbusRTU client
117
+ */
118
+ async createRTUClient(config) {
119
+ const client = new modbus_serial_1.default();
120
+ await client.connectRTUBuffered(config.port, {
121
+ baudRate: config.baudRate,
122
+ dataBits: config.dataBits,
123
+ parity: config.parity,
124
+ stopBits: config.stopBits,
125
+ });
126
+ client.setTimeout(config.timeout ?? 1000);
127
+ return client;
128
+ }
129
+ /**
130
+ * Create and configure a TCP modbus-serial client.
131
+ * Does NOT set slave ID - that's handled by SlaveTransport.
132
+ *
133
+ * @param config - TCP configuration
134
+ * @returns Connected ModbusRTU client
135
+ */
136
+ async createTCPClient(config) {
137
+ const client = new modbus_serial_1.default();
138
+ await client.connectTCP(config.host, { port: config.port ?? 502 });
139
+ client.setTimeout(config.timeout ?? 1000);
140
+ return client;
141
+ }
142
+ /**
143
+ * Type guard to check if config is RTU
144
+ *
145
+ * @param config - Transport configuration
146
+ * @returns True if RTU config
147
+ */
148
+ isRTUConfig(config) {
149
+ return 'port' in config && typeof config.port === 'string' && !('host' in config);
150
+ }
151
+ }
152
+ exports.TransportManager = TransportManager;
153
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex-transport.d.ts","sourceRoot":"","sources":["../../../src/mutex-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,SAAS;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK;IAGzB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMrE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex-transport.js","sourceRoot":"","sources":["../../../src/mutex-transport.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;GAQG;AACH,MAAa,cAAc;IACzB,YACmB,SAAoB,EACpB,KAAY;QADZ,cAAS,GAAT,SAAS,CAAW;QACpB,UAAK,GAAL,KAAK,CAAO;IAC5B,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CAAC,OAAe,EAAE,KAAa;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,KAAa;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,KAAa;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,KAAa;QACtD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,KAAc;QACnD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAe,EAAE,MAAc;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,MAAc;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,4CAA4C;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IAC/B,CAAC;CACF;AA1DD,wCA0DC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6DAA6D;AAC7D,eAAO,MAAM,WAAW,IAAI,CAAA;AAE5B,mDAAmD;AACnD,eAAO,MAAM,cAAc,MAAM,CAAA;AAYjC;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;AAEjE;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,GAAE,MAAoB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/retry.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAmCH,8BAyBC;AA1DD,6DAA6D;AAChD,QAAA,WAAW,GAAG,CAAC,CAAA;AAE5B,mDAAmD;AACtC,QAAA,cAAc,GAAG,GAAG,CAAA;AAEjC;;;;;GAKG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAUD;;;;;;;;GAQG;AACI,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,aAAqB,mBAAW,EAChC,MAAoB;IAEpB,IAAI,SAAS,GAAU,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAE/D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAErE,kCAAkC;YAClC,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,8CAA8C;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;gBAC5B,CAAC;gBACD,MAAM,KAAK,CAAC,sBAAc,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtu-transport.d.ts","sourceRoot":"","sources":["../../../src/rtu-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAI9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa;IACb,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB9E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtu-transport.js","sourceRoot":"","sources":["../../../src/rtu-transport.ts"],"names":[],"mappings":";;AAoCA,gDAkBC;;AArDD,0EAAqC;AAErC,6EAAoE;AA2BpE;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,MAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,uBAAS,EAAE,CAAA;IAE9B,yBAAyB;IACzB,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAA;IAEF,eAAe;IACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE5B,cAAc;IACd,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;IAEzC,OAAO,IAAA,kDAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACxE,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { Transport } from '@ya-modbus/driver-types';
2
+ import type { Mutex } from 'async-mutex';
3
+ import type ModbusRTU from 'modbus-serial';
4
+ import { type RetryLogger } from './retry.js';
5
+ /**
6
+ * SlaveTransport wraps a shared ModbusRTU client with slave-specific addressing.
7
+ *
8
+ * Multiple SlaveTransport instances can share the same physical connection (serial port or TCP),
9
+ * each communicating with a different slave device. The slave ID is set before each operation
10
+ * to ensure requests are directed to the correct device.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const client = new ModbusRTU()
15
+ * await client.connectRTUBuffered('/dev/ttyUSB0', { baudRate: 9600 })
16
+ * const mutex = new Mutex()
17
+ *
18
+ * // Two devices on the same serial port
19
+ * const device1 = new SlaveTransport(1, client, mutex, 3)
20
+ * const device2 = new SlaveTransport(2, client, mutex, 3)
21
+ *
22
+ * // Each device talks to its own slave ID
23
+ * await device1.readHoldingRegisters(0, 10) // Reads from slave 1
24
+ * await device2.readHoldingRegisters(0, 10) // Reads from slave 2
25
+ * ```
26
+ */
27
+ export declare class SlaveTransport implements Transport {
28
+ private readonly slaveId;
29
+ private readonly client;
30
+ private readonly mutex;
31
+ private readonly maxRetries;
32
+ private readonly logger?;
33
+ /**
34
+ * @param slaveId - Modbus slave/unit ID for this device
35
+ * @param client - Shared ModbusRTU client instance
36
+ * @param mutex - Shared mutex for serializing operations on the bus
37
+ * @param maxRetries - Maximum retry attempts for failed operations (default: 3)
38
+ * @param logger - Optional callback to log retry attempts
39
+ */
40
+ constructor(slaveId: number, client: ModbusRTU, mutex: Mutex, maxRetries?: number, logger?: RetryLogger | undefined);
41
+ readHoldingRegisters(address: number, count: number): Promise<Buffer>;
42
+ readInputRegisters(address: number, count: number): Promise<Buffer>;
43
+ readCoils(address: number, count: number): Promise<Buffer>;
44
+ readDiscreteInputs(address: number, count: number): Promise<Buffer>;
45
+ writeSingleRegister(address: number, value: number): Promise<void>;
46
+ writeMultipleRegisters(address: number, values: Buffer): Promise<void>;
47
+ writeSingleCoil(address: number, value: boolean): Promise<void>;
48
+ writeMultipleCoils(address: number, values: Buffer): Promise<void>;
49
+ /**
50
+ * Close the underlying client connection.
51
+ *
52
+ * IMPORTANT: This method does not use mutex protection and should only
53
+ * be called during shutdown via TransportManager.closeAll(). Calling
54
+ * this while operations are in progress may cause connection errors.
55
+ *
56
+ * Individual SlaveTransport instances should NOT call close() directly
57
+ * as the client is shared across multiple devices on the same bus.
58
+ */
59
+ close(): Promise<void>;
60
+ }
61
+ //# sourceMappingURL=slave-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slave-transport.d.ts","sourceRoot":"","sources":["../../../src/slave-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,SAAS,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAS5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAZ1B;;;;;;OAMG;gBAEgB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,KAAK,EACZ,UAAU,GAAE,MAAU,EACtB,MAAM,CAAC,EAAE,WAAW,YAAA;IAGjC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcrE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc1D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SlaveTransport = void 0;
4
+ const retry_js_1 = require("./retry.js");
5
+ /**
6
+ * SlaveTransport wraps a shared ModbusRTU client with slave-specific addressing.
7
+ *
8
+ * Multiple SlaveTransport instances can share the same physical connection (serial port or TCP),
9
+ * each communicating with a different slave device. The slave ID is set before each operation
10
+ * to ensure requests are directed to the correct device.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const client = new ModbusRTU()
15
+ * await client.connectRTUBuffered('/dev/ttyUSB0', { baudRate: 9600 })
16
+ * const mutex = new Mutex()
17
+ *
18
+ * // Two devices on the same serial port
19
+ * const device1 = new SlaveTransport(1, client, mutex, 3)
20
+ * const device2 = new SlaveTransport(2, client, mutex, 3)
21
+ *
22
+ * // Each device talks to its own slave ID
23
+ * await device1.readHoldingRegisters(0, 10) // Reads from slave 1
24
+ * await device2.readHoldingRegisters(0, 10) // Reads from slave 2
25
+ * ```
26
+ */
27
+ class SlaveTransport {
28
+ /**
29
+ * @param slaveId - Modbus slave/unit ID for this device
30
+ * @param client - Shared ModbusRTU client instance
31
+ * @param mutex - Shared mutex for serializing operations on the bus
32
+ * @param maxRetries - Maximum retry attempts for failed operations (default: 3)
33
+ * @param logger - Optional callback to log retry attempts
34
+ */
35
+ constructor(slaveId, client, mutex, maxRetries = 3, logger) {
36
+ this.slaveId = slaveId;
37
+ this.client = client;
38
+ this.mutex = mutex;
39
+ this.maxRetries = maxRetries;
40
+ this.logger = logger;
41
+ }
42
+ async readHoldingRegisters(address, count) {
43
+ return this.mutex.runExclusive(async () => {
44
+ return (0, retry_js_1.withRetry)(async () => {
45
+ this.client.setID(this.slaveId);
46
+ const result = await this.client.readHoldingRegisters(address, count);
47
+ return result.buffer;
48
+ }, this.maxRetries, this.logger);
49
+ });
50
+ }
51
+ async readInputRegisters(address, count) {
52
+ return this.mutex.runExclusive(async () => {
53
+ return (0, retry_js_1.withRetry)(async () => {
54
+ this.client.setID(this.slaveId);
55
+ const result = await this.client.readInputRegisters(address, count);
56
+ return result.buffer;
57
+ }, this.maxRetries, this.logger);
58
+ });
59
+ }
60
+ async readCoils(address, count) {
61
+ return this.mutex.runExclusive(async () => {
62
+ return (0, retry_js_1.withRetry)(async () => {
63
+ this.client.setID(this.slaveId);
64
+ const result = await this.client.readCoils(address, count);
65
+ return result.buffer;
66
+ }, this.maxRetries, this.logger);
67
+ });
68
+ }
69
+ async readDiscreteInputs(address, count) {
70
+ return this.mutex.runExclusive(async () => {
71
+ return (0, retry_js_1.withRetry)(async () => {
72
+ this.client.setID(this.slaveId);
73
+ const result = await this.client.readDiscreteInputs(address, count);
74
+ return result.buffer;
75
+ }, this.maxRetries, this.logger);
76
+ });
77
+ }
78
+ async writeSingleRegister(address, value) {
79
+ return this.mutex.runExclusive(async () => {
80
+ return (0, retry_js_1.withRetry)(async () => {
81
+ this.client.setID(this.slaveId);
82
+ await this.client.writeRegister(address, value);
83
+ }, this.maxRetries, this.logger);
84
+ });
85
+ }
86
+ async writeMultipleRegisters(address, values) {
87
+ return this.mutex.runExclusive(async () => {
88
+ return (0, retry_js_1.withRetry)(async () => {
89
+ this.client.setID(this.slaveId);
90
+ await this.client.writeRegisters(address, values);
91
+ }, this.maxRetries, this.logger);
92
+ });
93
+ }
94
+ async writeSingleCoil(address, value) {
95
+ return this.mutex.runExclusive(async () => {
96
+ return (0, retry_js_1.withRetry)(async () => {
97
+ this.client.setID(this.slaveId);
98
+ await this.client.writeCoil(address, value);
99
+ }, this.maxRetries, this.logger);
100
+ });
101
+ }
102
+ async writeMultipleCoils(address, values) {
103
+ return this.mutex.runExclusive(async () => {
104
+ return (0, retry_js_1.withRetry)(async () => {
105
+ this.client.setID(this.slaveId);
106
+ // Convert Buffer to boolean array
107
+ const bools = [];
108
+ for (let i = 0; i < values.length * 8; i++) {
109
+ const byteIndex = Math.floor(i / 8);
110
+ const bitIndex = i % 8;
111
+ const byte = values[byteIndex];
112
+ bools.push((byte & (1 << bitIndex)) !== 0);
113
+ }
114
+ await this.client.writeCoils(address, bools);
115
+ }, this.maxRetries, this.logger);
116
+ });
117
+ }
118
+ /**
119
+ * Close the underlying client connection.
120
+ *
121
+ * IMPORTANT: This method does not use mutex protection and should only
122
+ * be called during shutdown via TransportManager.closeAll(). Calling
123
+ * this while operations are in progress may cause connection errors.
124
+ *
125
+ * Individual SlaveTransport instances should NOT call close() directly
126
+ * as the client is shared across multiple devices on the same bus.
127
+ */
128
+ async close() {
129
+ // Don't use mutex for close operation
130
+ return new Promise((resolve) => {
131
+ this.client.close(resolve);
132
+ });
133
+ }
134
+ }
135
+ exports.SlaveTransport = SlaveTransport;
136
+ //# sourceMappingURL=slave-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slave-transport.js","sourceRoot":"","sources":["../../../src/slave-transport.ts"],"names":[],"mappings":";;;AAIA,yCAAwD;AAExD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,cAAc;IACzB;;;;;;OAMG;IACH,YACmB,OAAe,EACf,MAAiB,EACjB,KAAY,EACZ,aAAqB,CAAC,EACtB,MAAoB;QAJpB,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAW;QACjB,UAAK,GAAL,KAAK,CAAO;QACZ,eAAU,GAAV,UAAU,CAAY;QACtB,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CAAC,OAAe,EAAE,KAAa;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACrE,OAAO,MAAM,CAAC,MAAM,CAAA;YACtB,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,KAAa;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACnE,OAAO,MAAM,CAAC,MAAM,CAAA;YACtB,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,KAAa;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBAC1D,OAAO,MAAM,CAAC,MAAM,CAAA;YACtB,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,KAAa;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACnE,OAAO,MAAM,CAAC,MAAM,CAAA;YACtB,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,KAAa;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACjD,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAe,EAAE,MAAc;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YACnD,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,KAAc;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC7C,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,MAAc;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,OAAO,IAAA,oBAAS,EACd,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/B,kCAAkC;gBAClC,MAAM,KAAK,GAAc,EAAE,CAAA;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;oBACnC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAW,CAAA;oBACxC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC5C,CAAC;gBACD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC9C,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,KAAK;QACT,sCAAsC;QACtC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AApJD,wCAoJC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp-transport.d.ts","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAa9E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp-transport.js","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":";;AA8BA,gDAaC;;AA1CD,0EAAqC;AAErC,6EAAoE;AAqBpE;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,MAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,uBAAS,EAAE,CAAA;IAE9B,wBAAwB;IACxB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAA;IAElE,eAAe;IACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE5B,cAAc;IACd,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;IAEzC,OAAO,IAAA,kDAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACxE,CAAC"}