@ya-modbus/transport 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +68 -0
  3. package/dist/cjs/src/connection.d.ts +90 -0
  4. package/dist/cjs/src/connection.d.ts.map +1 -0
  5. package/dist/cjs/src/connection.js +217 -0
  6. package/dist/cjs/src/connection.js.map +1 -0
  7. package/dist/cjs/src/create-modbus-transport.d.ts +4 -2
  8. package/dist/cjs/src/create-modbus-transport.d.ts.map +1 -1
  9. package/dist/cjs/src/create-modbus-transport.js +29 -28
  10. package/dist/cjs/src/create-modbus-transport.js.map +1 -1
  11. package/dist/cjs/src/index.d.ts +1 -0
  12. package/dist/cjs/src/index.d.ts.map +1 -1
  13. package/dist/cjs/src/index.js +4 -1
  14. package/dist/cjs/src/index.js.map +1 -1
  15. package/dist/cjs/src/manager.d.ts +10 -0
  16. package/dist/cjs/src/manager.d.ts.map +1 -1
  17. package/dist/cjs/src/manager.js +18 -6
  18. package/dist/cjs/src/manager.js.map +1 -1
  19. package/dist/cjs/src/rtu-transport.d.ts +4 -0
  20. package/dist/cjs/src/rtu-transport.d.ts.map +1 -1
  21. package/dist/cjs/src/rtu-transport.js +19 -10
  22. package/dist/cjs/src/rtu-transport.js.map +1 -1
  23. package/dist/cjs/src/slave-transport.d.ts +10 -5
  24. package/dist/cjs/src/slave-transport.d.ts.map +1 -1
  25. package/dist/cjs/src/slave-transport.js +42 -39
  26. package/dist/cjs/src/slave-transport.js.map +1 -1
  27. package/dist/cjs/src/tcp-transport.d.ts +3 -0
  28. package/dist/cjs/src/tcp-transport.d.ts.map +1 -1
  29. package/dist/cjs/src/tcp-transport.js +14 -5
  30. package/dist/cjs/src/tcp-transport.js.map +1 -1
  31. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  32. package/dist/esm/src/connection.d.ts +90 -0
  33. package/dist/esm/src/connection.d.ts.map +1 -0
  34. package/dist/esm/src/connection.js +211 -0
  35. package/dist/esm/src/connection.js.map +1 -0
  36. package/dist/esm/src/create-modbus-transport.d.ts +4 -2
  37. package/dist/esm/src/create-modbus-transport.d.ts.map +1 -1
  38. package/dist/esm/src/create-modbus-transport.js +29 -28
  39. package/dist/esm/src/create-modbus-transport.js.map +1 -1
  40. package/dist/esm/src/index.d.ts +1 -0
  41. package/dist/esm/src/index.d.ts.map +1 -1
  42. package/dist/esm/src/index.js +1 -0
  43. package/dist/esm/src/index.js.map +1 -1
  44. package/dist/esm/src/manager.d.ts +10 -0
  45. package/dist/esm/src/manager.d.ts.map +1 -1
  46. package/dist/esm/src/manager.js +18 -6
  47. package/dist/esm/src/manager.js.map +1 -1
  48. package/dist/esm/src/rtu-transport.d.ts +4 -0
  49. package/dist/esm/src/rtu-transport.d.ts.map +1 -1
  50. package/dist/esm/src/rtu-transport.js +19 -10
  51. package/dist/esm/src/rtu-transport.js.map +1 -1
  52. package/dist/esm/src/slave-transport.d.ts +10 -5
  53. package/dist/esm/src/slave-transport.d.ts.map +1 -1
  54. package/dist/esm/src/slave-transport.js +42 -39
  55. package/dist/esm/src/slave-transport.js.map +1 -1
  56. package/dist/esm/src/tcp-transport.d.ts +3 -0
  57. package/dist/esm/src/tcp-transport.d.ts.map +1 -1
  58. package/dist/esm/src/tcp-transport.js +14 -5
  59. package/dist/esm/src/tcp-transport.js.map +1 -1
  60. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  61. package/package.json +2 -2
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const async_mutex_1 = require("async-mutex");
6
6
  const modbus_serial_1 = tslib_1.__importDefault(require("modbus-serial"));
7
7
  const client_config_js_1 = require("./client-config.js");
8
+ const connection_js_1 = require("./connection.js");
8
9
  const slave_transport_js_1 = require("./slave-transport.js");
9
10
  /**
10
11
  * TransportManager pools modbus-serial clients and provides slave-specific transports.
@@ -16,6 +17,9 @@ const slave_transport_js_1 = require("./slave-transport.js");
16
17
  * - Returns SlaveTransport instances that set the slave ID before each operation
17
18
  * - Multiple devices on the same connection share a single client and mutex
18
19
  * - All operations are serialized using async-mutex to prevent race conditions
20
+ * - A lost connection (USB adapter unplugged, TCP connection closed) drops the client.
21
+ * The first request after a backoff opens a new client for all devices on the
22
+ * connection (see ModbusConnection)
19
23
  *
20
24
  * This architecture solves the multi-device problem:
21
25
  * - Each device gets its own SlaveTransport with its own slave ID
@@ -49,9 +53,10 @@ class TransportManager {
49
53
  let entry = this.connections.get(key);
50
54
  if (!entry) {
51
55
  // Create new client for this physical connection
52
- const client = isRTU ? await this.createRTUClient(config) : await this.createTCPClient(config);
56
+ const open = isRTU ? () => this.createRTUClient(config) : () => this.createTCPClient(config);
57
+ const client = await open();
53
58
  entry = {
54
- client,
59
+ connection: new connection_js_1.ModbusConnection(client, this.getTarget(config), open),
55
60
  mutex: new async_mutex_1.Mutex(),
56
61
  config,
57
62
  isRTU,
@@ -59,7 +64,7 @@ class TransportManager {
59
64
  this.connections.set(key, entry);
60
65
  }
61
66
  // Return a new SlaveTransport for this specific slave
62
- return new slave_transport_js_1.SlaveTransport(config.slaveId, entry.client, entry.mutex, config.maxRetries ?? 3, config.logger);
67
+ return new slave_transport_js_1.SlaveTransport(config.slaveId, entry.connection, entry.mutex, config.maxRetries ?? 3, config.logger);
63
68
  }
64
69
  /**
65
70
  * Get statistics about managed connections
@@ -81,9 +86,7 @@ class TransportManager {
81
86
  async closeAll() {
82
87
  const closePromises = Array.from(this.connections.values()).map(async (entry) => {
83
88
  try {
84
- await new Promise((resolve) => {
85
- entry.client.close(resolve);
86
- });
89
+ await entry.connection.close();
87
90
  }
88
91
  catch (error) {
89
92
  // Log but don't throw - we want to close all connections
@@ -109,6 +112,15 @@ class TransportManager {
109
112
  // TCP config - safe to access host/port because isRTUConfig returned false
110
113
  return `tcp:${config.host}:${config.port ?? 502}`;
111
114
  }
115
+ /**
116
+ * Describe a physical connection for error messages
117
+ *
118
+ * @param config - Transport configuration
119
+ * @returns Serial port path for RTU, host:port for TCP
120
+ */
121
+ getTarget(config) {
122
+ return this.isRTUConfig(config) ? config.port : `${config.host}:${config.port ?? 502}`;
123
+ }
112
124
  /**
113
125
  * Create and configure an RTU modbus-serial client.
114
126
  * Does NOT set slave ID - that's handled by SlaveTransport.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/manager.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,10 @@ export interface RTUConfig {
26
26
  /**
27
27
  * Create an RTU transport
28
28
  *
29
+ * When the serial port is lost (for example the USB adapter is unplugged), requests
30
+ * reject with a ConnectionLostError and the port is reopened on a later request
31
+ * (see ModbusConnection).
32
+ *
29
33
  * @param config - RTU configuration
30
34
  * @returns Transport implementation for RTU
31
35
  */
@@ -1 +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;AAK9F,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,CAc9E"}
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;AAM9F,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;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB9E"}
@@ -4,23 +4,32 @@ exports.createRTUTransport = createRTUTransport;
4
4
  const tslib_1 = require("tslib");
5
5
  const modbus_serial_1 = tslib_1.__importDefault(require("modbus-serial"));
6
6
  const client_config_js_1 = require("./client-config.js");
7
+ const connection_js_1 = require("./connection.js");
7
8
  const create_modbus_transport_js_1 = require("./create-modbus-transport.js");
8
9
  /**
9
10
  * Create an RTU transport
10
11
  *
12
+ * When the serial port is lost (for example the USB adapter is unplugged), requests
13
+ * reject with a ConnectionLostError and the port is reopened on a later request
14
+ * (see ModbusConnection).
15
+ *
11
16
  * @param config - RTU configuration
12
17
  * @returns Transport implementation for RTU
13
18
  */
14
19
  async function createRTUTransport(config) {
15
- const client = new modbus_serial_1.default();
16
- // Connect to serial port
17
- await client.connectRTUBuffered(config.port, {
18
- baudRate: config.baudRate,
19
- dataBits: config.dataBits,
20
- parity: config.parity,
21
- stopBits: config.stopBits,
22
- });
23
- (0, client_config_js_1.configureClient)(client, config.slaveId, config.timeout);
24
- return (0, create_modbus_transport_js_1.createModbusTransport)(client, config.maxRetries, config.logger);
20
+ const open = async () => {
21
+ const client = new modbus_serial_1.default();
22
+ // Connect to serial port
23
+ await client.connectRTUBuffered(config.port, {
24
+ baudRate: config.baudRate,
25
+ dataBits: config.dataBits,
26
+ parity: config.parity,
27
+ stopBits: config.stopBits,
28
+ });
29
+ (0, client_config_js_1.configureClient)(client, config.slaveId, config.timeout);
30
+ return client;
31
+ };
32
+ const connection = new connection_js_1.ModbusConnection(await open(), config.port, open);
33
+ return (0, create_modbus_transport_js_1.createModbusTransport)(connection, config.maxRetries, config.logger);
25
34
  }
26
35
  //# sourceMappingURL=rtu-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rtu-transport.js","sourceRoot":"","sources":["../../../src/rtu-transport.ts"],"names":[],"mappings":";;AAqCA,gDAcC;;AAlDD,0EAAqC;AAErC,yDAAoD;AACpD,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,IAAA,kCAAe,EAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAEvD,OAAO,IAAA,kDAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACxE,CAAC"}
1
+ {"version":3,"file":"rtu-transport.js","sourceRoot":"","sources":["../../../src/rtu-transport.ts"],"names":[],"mappings":";;AA0CA,gDAkBC;;AA3DD,0EAAqC;AAErC,yDAAoD;AACpD,mDAAkD;AAClD,6EAAoE;AA2BpE;;;;;;;;;GASG;AACI,KAAK,UAAU,kBAAkB,CAAC,MAAiB;IACxD,MAAM,IAAI,GAAG,KAAK,IAAwB,EAAE;QAC1C,MAAM,MAAM,GAAG,IAAI,uBAAS,EAAE,CAAA;QAE9B,yBAAyB;QACzB,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAA;QAEF,IAAA,kCAAe,EAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,gCAAgB,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxE,OAAO,IAAA,kDAAqB,EAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC5E,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Transport } from '@ya-modbus/driver-types';
2
2
  import type { Mutex } from 'async-mutex';
3
3
  import type ModbusRTU from 'modbus-serial';
4
+ import { type ModbusConnection } from './connection.js';
4
5
  import { type RetryLogger } from './retry.js';
5
6
  /**
6
7
  * SlaveTransport wraps a shared ModbusRTU client with slave-specific addressing.
@@ -9,15 +10,19 @@ import { type RetryLogger } from './retry.js';
9
10
  * each communicating with a different slave device. The slave ID is set before each operation
10
11
  * to ensure requests are directed to the correct device.
11
12
  *
13
+ * Requests on a lost connection reject with a ConnectionLostError. When the shared
14
+ * ModbusConnection can reopen its client, all devices on the connection use the new client.
15
+ *
12
16
  * @example
13
17
  * ```typescript
14
18
  * const client = new ModbusRTU()
15
19
  * await client.connectRTUBuffered('/dev/ttyUSB0', { baudRate: 9600 })
20
+ * const connection = new ModbusConnection(client, '/dev/ttyUSB0')
16
21
  * const mutex = new Mutex()
17
22
  *
18
23
  * // 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)
24
+ * const device1 = new SlaveTransport(1, connection, mutex, 3)
25
+ * const device2 = new SlaveTransport(2, connection, mutex, 3)
21
26
  *
22
27
  * // Each device talks to its own slave ID
23
28
  * await device1.readHoldingRegisters(0, 10) // Reads from slave 1
@@ -26,18 +31,18 @@ import { type RetryLogger } from './retry.js';
26
31
  */
27
32
  export declare class SlaveTransport implements Transport {
28
33
  private readonly slaveId;
29
- private readonly client;
30
34
  private readonly mutex;
31
35
  private readonly maxRetries;
32
36
  private readonly logger?;
37
+ private readonly connection;
33
38
  /**
34
39
  * @param slaveId - Modbus slave/unit ID for this device
35
- * @param client - Shared ModbusRTU client instance
40
+ * @param client - Shared connection, or a ModbusRTU client that is not shared with other transports
36
41
  * @param mutex - Shared mutex for serializing operations on the bus
37
42
  * @param maxRetries - Maximum retry attempts for failed operations (default: 3)
38
43
  * @param logger - Optional callback to log retry attempts
39
44
  */
40
- constructor(slaveId: number, client: ModbusRTU, mutex: Mutex, maxRetries?: number, logger?: RetryLogger | undefined);
45
+ constructor(slaveId: number, client: ModbusConnection | ModbusRTU, mutex: Mutex, maxRetries?: number, logger?: RetryLogger | undefined);
41
46
  readHoldingRegisters(address: number, count: number): Promise<Buffer>;
42
47
  readInputRegisters(address: number, count: number): Promise<Buffer>;
43
48
  readCoils(address: number, count: number): Promise<Buffer>;
@@ -1 +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"}
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,EAAgB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAW5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAd1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAE7C;;;;;;OAMG;gBAEgB,OAAO,EAAE,MAAM,EAChC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACnB,KAAK,EAAE,KAAK,EACZ,UAAU,GAAE,MAAU,EACtB,MAAM,CAAC,EAAE,WAAW,YAAA;IAKjC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAerE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe1D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxE;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SlaveTransport = void 0;
4
+ const connection_js_1 = require("./connection.js");
4
5
  const retry_js_1 = require("./retry.js");
5
6
  /**
6
7
  * SlaveTransport wraps a shared ModbusRTU client with slave-specific addressing.
@@ -9,15 +10,19 @@ const retry_js_1 = require("./retry.js");
9
10
  * each communicating with a different slave device. The slave ID is set before each operation
10
11
  * to ensure requests are directed to the correct device.
11
12
  *
13
+ * Requests on a lost connection reject with a ConnectionLostError. When the shared
14
+ * ModbusConnection can reopen its client, all devices on the connection use the new client.
15
+ *
12
16
  * @example
13
17
  * ```typescript
14
18
  * const client = new ModbusRTU()
15
19
  * await client.connectRTUBuffered('/dev/ttyUSB0', { baudRate: 9600 })
20
+ * const connection = new ModbusConnection(client, '/dev/ttyUSB0')
16
21
  * const mutex = new Mutex()
17
22
  *
18
23
  * // 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)
24
+ * const device1 = new SlaveTransport(1, connection, mutex, 3)
25
+ * const device2 = new SlaveTransport(2, connection, mutex, 3)
21
26
  *
22
27
  * // Each device talks to its own slave ID
23
28
  * await device1.readHoldingRegisters(0, 10) // Reads from slave 1
@@ -27,82 +32,82 @@ const retry_js_1 = require("./retry.js");
27
32
  class SlaveTransport {
28
33
  /**
29
34
  * @param slaveId - Modbus slave/unit ID for this device
30
- * @param client - Shared ModbusRTU client instance
35
+ * @param client - Shared connection, or a ModbusRTU client that is not shared with other transports
31
36
  * @param mutex - Shared mutex for serializing operations on the bus
32
37
  * @param maxRetries - Maximum retry attempts for failed operations (default: 3)
33
38
  * @param logger - Optional callback to log retry attempts
34
39
  */
35
40
  constructor(slaveId, client, mutex, maxRetries = 3, logger) {
36
41
  this.slaveId = slaveId;
37
- this.client = client;
38
42
  this.mutex = mutex;
39
43
  this.maxRetries = maxRetries;
40
44
  this.logger = logger;
45
+ this.connection = (0, connection_js_1.toConnection)(client);
41
46
  }
42
47
  async readHoldingRegisters(address, count) {
43
48
  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);
49
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
50
+ client.setID(this.slaveId);
51
+ const result = await client.readHoldingRegisters(address, count);
47
52
  return result.buffer;
48
- }, this.maxRetries, this.logger);
53
+ }), this.maxRetries, this.logger);
49
54
  });
50
55
  }
51
56
  async readInputRegisters(address, count) {
52
57
  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);
58
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
59
+ client.setID(this.slaveId);
60
+ const result = await client.readInputRegisters(address, count);
56
61
  return result.buffer;
57
- }, this.maxRetries, this.logger);
62
+ }), this.maxRetries, this.logger);
58
63
  });
59
64
  }
60
65
  async readCoils(address, count) {
61
66
  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);
67
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
68
+ client.setID(this.slaveId);
69
+ const result = await client.readCoils(address, count);
65
70
  return result.buffer;
66
- }, this.maxRetries, this.logger);
71
+ }), this.maxRetries, this.logger);
67
72
  });
68
73
  }
69
74
  async readDiscreteInputs(address, count) {
70
75
  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);
76
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
77
+ client.setID(this.slaveId);
78
+ const result = await client.readDiscreteInputs(address, count);
74
79
  return result.buffer;
75
- }, this.maxRetries, this.logger);
80
+ }), this.maxRetries, this.logger);
76
81
  });
77
82
  }
78
83
  async writeSingleRegister(address, value) {
79
84
  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);
85
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
86
+ client.setID(this.slaveId);
87
+ await client.writeRegister(address, value);
88
+ }), this.maxRetries, this.logger);
84
89
  });
85
90
  }
86
91
  async writeMultipleRegisters(address, values) {
87
92
  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);
93
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
94
+ client.setID(this.slaveId);
95
+ await client.writeRegisters(address, values);
96
+ }), this.maxRetries, this.logger);
92
97
  });
93
98
  }
94
99
  async writeSingleCoil(address, value) {
95
100
  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);
101
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
102
+ client.setID(this.slaveId);
103
+ await client.writeCoil(address, value);
104
+ }), this.maxRetries, this.logger);
100
105
  });
101
106
  }
102
107
  async writeMultipleCoils(address, values) {
103
108
  return this.mutex.runExclusive(async () => {
104
- return (0, retry_js_1.withRetry)(async () => {
105
- this.client.setID(this.slaveId);
109
+ return (0, retry_js_1.withRetry)(() => this.connection.run(async (client) => {
110
+ client.setID(this.slaveId);
106
111
  // Convert Buffer to boolean array
107
112
  const bools = [];
108
113
  for (let i = 0; i < values.length * 8; i++) {
@@ -111,8 +116,8 @@ class SlaveTransport {
111
116
  const byte = values[byteIndex];
112
117
  bools.push((byte & (1 << bitIndex)) !== 0);
113
118
  }
114
- await this.client.writeCoils(address, bools);
115
- }, this.maxRetries, this.logger);
119
+ await client.writeCoils(address, bools);
120
+ }), this.maxRetries, this.logger);
116
121
  });
117
122
  }
118
123
  /**
@@ -127,9 +132,7 @@ class SlaveTransport {
127
132
  */
128
133
  async close() {
129
134
  // Don't use mutex for close operation
130
- return new Promise((resolve) => {
131
- this.client.close(resolve);
132
- });
135
+ return this.connection.close();
133
136
  }
134
137
  }
135
138
  exports.SlaveTransport = SlaveTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"slave-transport.js","sourceRoot":"","sources":["../../../src/slave-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slave-transport.js","sourceRoot":"","sources":["../../../src/slave-transport.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,9 @@ export interface TCPConfig {
20
20
  /**
21
21
  * Create a TCP transport
22
22
  *
23
+ * When the connection is lost, requests reject with a ConnectionLostError and the
24
+ * connection is reopened on a later request (see ModbusConnection).
25
+ *
23
26
  * @param config - TCP configuration
24
27
  * @returns Transport implementation for TCP
25
28
  */
@@ -1 +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;AAKxD,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,CAS9E"}
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;AAMxD,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;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAc9E"}
@@ -4,18 +4,27 @@ exports.createTCPTransport = createTCPTransport;
4
4
  const tslib_1 = require("tslib");
5
5
  const modbus_serial_1 = tslib_1.__importDefault(require("modbus-serial"));
6
6
  const client_config_js_1 = require("./client-config.js");
7
+ const connection_js_1 = require("./connection.js");
7
8
  const create_modbus_transport_js_1 = require("./create-modbus-transport.js");
8
9
  /**
9
10
  * Create a TCP transport
10
11
  *
12
+ * When the connection is lost, requests reject with a ConnectionLostError and the
13
+ * connection is reopened on a later request (see ModbusConnection).
14
+ *
11
15
  * @param config - TCP configuration
12
16
  * @returns Transport implementation for TCP
13
17
  */
14
18
  async function createTCPTransport(config) {
15
- const client = new modbus_serial_1.default();
16
- // Connect to TCP server
17
- await client.connectTCP(config.host, { port: config.port ?? 502 });
18
- (0, client_config_js_1.configureClient)(client, config.slaveId, config.timeout);
19
- return (0, create_modbus_transport_js_1.createModbusTransport)(client, config.maxRetries, config.logger);
19
+ const port = config.port ?? 502;
20
+ const open = async () => {
21
+ const client = new modbus_serial_1.default();
22
+ // Connect to TCP server
23
+ await client.connectTCP(config.host, { port });
24
+ (0, client_config_js_1.configureClient)(client, config.slaveId, config.timeout);
25
+ return client;
26
+ };
27
+ const connection = new connection_js_1.ModbusConnection(await open(), `${config.host}:${port}`, open);
28
+ return (0, create_modbus_transport_js_1.createModbusTransport)(connection, config.maxRetries, config.logger);
20
29
  }
21
30
  //# sourceMappingURL=tcp-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcp-transport.js","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":";;AA+BA,gDASC;;AAvCD,0EAAqC;AAErC,yDAAoD;AACpD,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,IAAA,kCAAe,EAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAEvD,OAAO,IAAA,kDAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AACxE,CAAC"}
1
+ {"version":3,"file":"tcp-transport.js","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":";;AAmCA,gDAcC;;AAhDD,0EAAqC;AAErC,yDAAoD;AACpD,mDAAkD;AAClD,6EAAoE;AAqBpE;;;;;;;;GAQG;AACI,KAAK,UAAU,kBAAkB,CAAC,MAAiB;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,IAAwB,EAAE;QAC1C,MAAM,MAAM,GAAG,IAAI,uBAAS,EAAE,CAAA;QAE9B,wBAAwB;QACxB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAE9C,IAAA,kCAAe,EAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,gCAAgB,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IACrF,OAAO,IAAA,kDAAqB,EAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC5E,CAAC"}