@ya-modbus/transport 0.12.2 → 0.14.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 (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +30 -1
  3. package/dist/cjs/src/index.d.ts +1 -0
  4. package/dist/cjs/src/index.d.ts.map +1 -1
  5. package/dist/cjs/src/index.js +3 -1
  6. package/dist/cjs/src/index.js.map +1 -1
  7. package/dist/cjs/src/last-request.d.ts +29 -0
  8. package/dist/cjs/src/last-request.d.ts.map +1 -0
  9. package/dist/cjs/src/last-request.js +44 -0
  10. package/dist/cjs/src/last-request.js.map +1 -0
  11. package/dist/cjs/src/manager.d.ts +6 -3
  12. package/dist/cjs/src/manager.d.ts.map +1 -1
  13. package/dist/cjs/src/manager.js +15 -6
  14. package/dist/cjs/src/manager.js.map +1 -1
  15. package/dist/cjs/src/request-context.d.ts +27 -0
  16. package/dist/cjs/src/request-context.d.ts.map +1 -0
  17. package/dist/cjs/src/request-context.js +81 -0
  18. package/dist/cjs/src/request-context.js.map +1 -0
  19. package/dist/cjs/src/retry.d.ts +7 -0
  20. package/dist/cjs/src/retry.d.ts.map +1 -1
  21. package/dist/cjs/src/retry.js +1 -0
  22. package/dist/cjs/src/retry.js.map +1 -1
  23. package/dist/cjs/src/rtu-transport.d.ts +7 -0
  24. package/dist/cjs/src/rtu-transport.d.ts.map +1 -1
  25. package/dist/cjs/src/rtu-transport.js +2 -1
  26. package/dist/cjs/src/rtu-transport.js.map +1 -1
  27. package/dist/cjs/src/slave-transport.d.ts +18 -1
  28. package/dist/cjs/src/slave-transport.d.ts.map +1 -1
  29. package/dist/cjs/src/slave-transport.js +59 -53
  30. package/dist/cjs/src/slave-transport.js.map +1 -1
  31. package/dist/cjs/src/tcp-transport.d.ts.map +1 -1
  32. package/dist/cjs/src/tcp-transport.js +2 -1
  33. package/dist/cjs/src/tcp-transport.js.map +1 -1
  34. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  35. package/dist/esm/src/index.d.ts +1 -0
  36. package/dist/esm/src/index.d.ts.map +1 -1
  37. package/dist/esm/src/index.js +1 -0
  38. package/dist/esm/src/index.js.map +1 -1
  39. package/dist/esm/src/last-request.d.ts +29 -0
  40. package/dist/esm/src/last-request.d.ts.map +1 -0
  41. package/dist/esm/src/last-request.js +40 -0
  42. package/dist/esm/src/last-request.js.map +1 -0
  43. package/dist/esm/src/manager.d.ts +6 -3
  44. package/dist/esm/src/manager.d.ts.map +1 -1
  45. package/dist/esm/src/manager.js +15 -6
  46. package/dist/esm/src/manager.js.map +1 -1
  47. package/dist/esm/src/request-context.d.ts +27 -0
  48. package/dist/esm/src/request-context.d.ts.map +1 -0
  49. package/dist/esm/src/request-context.js +77 -0
  50. package/dist/esm/src/request-context.js.map +1 -0
  51. package/dist/esm/src/retry.d.ts +7 -0
  52. package/dist/esm/src/retry.d.ts.map +1 -1
  53. package/dist/esm/src/retry.js +1 -1
  54. package/dist/esm/src/retry.js.map +1 -1
  55. package/dist/esm/src/rtu-transport.d.ts +7 -0
  56. package/dist/esm/src/rtu-transport.d.ts.map +1 -1
  57. package/dist/esm/src/rtu-transport.js +2 -1
  58. package/dist/esm/src/rtu-transport.js.map +1 -1
  59. package/dist/esm/src/slave-transport.d.ts +18 -1
  60. package/dist/esm/src/slave-transport.d.ts.map +1 -1
  61. package/dist/esm/src/slave-transport.js +59 -53
  62. package/dist/esm/src/slave-transport.js.map +1 -1
  63. package/dist/esm/src/tcp-transport.d.ts.map +1 -1
  64. package/dist/esm/src/tcp-transport.js +2 -1
  65. package/dist/esm/src/tcp-transport.js.map +1 -1
  66. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  67. package/package.json +2 -2
@@ -1,4 +1,5 @@
1
1
  import { toConnection } from './connection.js';
2
+ import { LastRequest } from './last-request.js';
2
3
  import { withRetry } from './retry.js';
3
4
  /**
4
5
  * SlaveTransport wraps a shared ModbusRTU client with slave-specific addressing.
@@ -10,6 +11,10 @@ import { withRetry } from './retry.js';
10
11
  * Requests on a lost connection reject with a ConnectionLostError. When the shared
11
12
  * ModbusConnection can reopen its client, all devices on the connection use the new client.
12
13
  *
14
+ * With an `interDeviceDelay` and a LastRequest shared by the transports on the connection, a
15
+ * request waits after a request to another slave. Some meters do not answer a request that
16
+ * comes too soon after another meter's reply.
17
+ *
13
18
  * @example
14
19
  * ```typescript
15
20
  * const client = new ModbusRTU()
@@ -33,88 +38,71 @@ export class SlaveTransport {
33
38
  * @param mutex - Shared mutex for serializing operations on the bus
34
39
  * @param maxRetries - Maximum retry attempts for failed operations (default: 3)
35
40
  * @param logger - Optional callback to log retry attempts
41
+ * @param interDeviceDelay - Pause in milliseconds before a request to this slave when the
42
+ * previous request on the connection went to another slave, counted from the end of that
43
+ * request (default: 0, no pause)
44
+ * @param lastRequest - Last request on the connection, the same for all transports that share
45
+ * the mutex. interDeviceDelay needs it.
36
46
  */
37
- constructor(slaveId, client, mutex, maxRetries = 3, logger) {
47
+ constructor(slaveId, client, mutex, maxRetries = 3, logger, interDeviceDelay = 0, lastRequest = new LastRequest()) {
38
48
  this.slaveId = slaveId;
39
49
  this.mutex = mutex;
40
50
  this.maxRetries = maxRetries;
41
51
  this.logger = logger;
52
+ this.interDeviceDelay = interDeviceDelay;
53
+ this.lastRequest = lastRequest;
42
54
  this.connection = toConnection(client);
43
55
  }
44
56
  async readHoldingRegisters(address, count) {
45
- return this.mutex.runExclusive(async () => {
46
- return withRetry(() => this.connection.run(async (client) => {
47
- client.setID(this.slaveId);
48
- const result = await client.readHoldingRegisters(address, count);
49
- return result.buffer;
50
- }), this.maxRetries, this.logger);
57
+ return this.request(async (client) => {
58
+ const result = await client.readHoldingRegisters(address, count);
59
+ return result.buffer;
51
60
  });
52
61
  }
53
62
  async readInputRegisters(address, count) {
54
- return this.mutex.runExclusive(async () => {
55
- return withRetry(() => this.connection.run(async (client) => {
56
- client.setID(this.slaveId);
57
- const result = await client.readInputRegisters(address, count);
58
- return result.buffer;
59
- }), this.maxRetries, this.logger);
63
+ return this.request(async (client) => {
64
+ const result = await client.readInputRegisters(address, count);
65
+ return result.buffer;
60
66
  });
61
67
  }
62
68
  async readCoils(address, count) {
63
- return this.mutex.runExclusive(async () => {
64
- return withRetry(() => this.connection.run(async (client) => {
65
- client.setID(this.slaveId);
66
- const result = await client.readCoils(address, count);
67
- return result.buffer;
68
- }), this.maxRetries, this.logger);
69
+ return this.request(async (client) => {
70
+ const result = await client.readCoils(address, count);
71
+ return result.buffer;
69
72
  });
70
73
  }
71
74
  async readDiscreteInputs(address, count) {
72
- return this.mutex.runExclusive(async () => {
73
- return withRetry(() => this.connection.run(async (client) => {
74
- client.setID(this.slaveId);
75
- const result = await client.readDiscreteInputs(address, count);
76
- return result.buffer;
77
- }), this.maxRetries, this.logger);
75
+ return this.request(async (client) => {
76
+ const result = await client.readDiscreteInputs(address, count);
77
+ return result.buffer;
78
78
  });
79
79
  }
80
80
  async writeSingleRegister(address, value) {
81
- return this.mutex.runExclusive(async () => {
82
- return withRetry(() => this.connection.run(async (client) => {
83
- client.setID(this.slaveId);
84
- await client.writeRegister(address, value);
85
- }), this.maxRetries, this.logger);
81
+ return this.request(async (client) => {
82
+ await client.writeRegister(address, value);
86
83
  });
87
84
  }
88
85
  async writeMultipleRegisters(address, values) {
89
- return this.mutex.runExclusive(async () => {
90
- return withRetry(() => this.connection.run(async (client) => {
91
- client.setID(this.slaveId);
92
- await client.writeRegisters(address, values);
93
- }), this.maxRetries, this.logger);
86
+ return this.request(async (client) => {
87
+ await client.writeRegisters(address, values);
94
88
  });
95
89
  }
96
90
  async writeSingleCoil(address, value) {
97
- return this.mutex.runExclusive(async () => {
98
- return withRetry(() => this.connection.run(async (client) => {
99
- client.setID(this.slaveId);
100
- await client.writeCoil(address, value);
101
- }), this.maxRetries, this.logger);
91
+ return this.request(async (client) => {
92
+ await client.writeCoil(address, value);
102
93
  });
103
94
  }
104
95
  async writeMultipleCoils(address, values) {
105
- return this.mutex.runExclusive(async () => {
106
- return withRetry(() => this.connection.run(async (client) => {
107
- client.setID(this.slaveId);
108
- // Convert Buffer to boolean array
109
- const bools = [];
110
- for (let i = 0; i < values.length * 8; i++) {
111
- const byteIndex = Math.floor(i / 8);
112
- const bitIndex = i % 8;
113
- const byte = values[byteIndex];
114
- bools.push((byte & (1 << bitIndex)) !== 0);
115
- }
116
- await client.writeCoils(address, bools);
117
- }), this.maxRetries, this.logger);
96
+ return this.request(async (client) => {
97
+ // Convert Buffer to boolean array
98
+ const bools = [];
99
+ for (let i = 0; i < values.length * 8; i++) {
100
+ const byteIndex = Math.floor(i / 8);
101
+ const bitIndex = i % 8;
102
+ const byte = values[byteIndex];
103
+ bools.push((byte & (1 << bitIndex)) !== 0);
104
+ }
105
+ await client.writeCoils(address, bools);
118
106
  });
119
107
  }
120
108
  /**
@@ -132,5 +120,23 @@ export class SlaveTransport {
132
120
  // Don't use mutex for close operation
133
121
  return this.connection.close();
134
122
  }
123
+ /**
124
+ * Run a request to this slave while no other request uses the bus: wait for the pause after
125
+ * a request to another slave, then send it with retries
126
+ */
127
+ request(send) {
128
+ return this.mutex.runExclusive(async () => {
129
+ await this.lastRequest.waitBefore(this.slaveId, this.interDeviceDelay);
130
+ try {
131
+ return await withRetry(() => this.connection.run(async (client) => {
132
+ client.setID(this.slaveId);
133
+ return send(client);
134
+ }), this.maxRetries, this.logger);
135
+ }
136
+ finally {
137
+ this.lastRequest.ended(this.slaveId);
138
+ }
139
+ });
140
+ }
135
141
  }
136
142
  //# sourceMappingURL=slave-transport.js.map
@@ -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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"}
@@ -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;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,yFAAyF;IACzF,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"}
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;AAOxD,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,yFAAyF;IACzF,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,CAiB9E"}
@@ -2,6 +2,7 @@ import ModbusRTU from 'modbus-serial';
2
2
  import { configureClient, connectTCP } from './client-config.js';
3
3
  import { ModbusConnection } from './connection.js';
4
4
  import { createModbusTransport } from './create-modbus-transport.js';
5
+ import { withRequestContext } from './request-context.js';
5
6
  /**
6
7
  * Create a TCP transport
7
8
  *
@@ -21,6 +22,6 @@ export async function createTCPTransport(config) {
21
22
  return client;
22
23
  };
23
24
  const connection = new ModbusConnection(await open(), `${config.host}:${port}`, open);
24
- return createModbusTransport(connection, config.maxRetries, config.logger);
25
+ return withRequestContext(createModbusTransport(connection, config.maxRetries, config.logger), `${config.host}:${port}, slave ${config.slaveId}`);
25
26
  }
26
27
  //# sourceMappingURL=tcp-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcp-transport.js","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAqBpE;;;;;;;;GAQG;AACH,MAAM,CAAC,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,SAAS,EAAE,CAAA;QAE9B,wBAAwB;QACxB,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE3D,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IACrF,OAAO,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC5E,CAAC"}
1
+ {"version":3,"file":"tcp-transport.js","sourceRoot":"","sources":["../../../src/tcp-transport.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAqBzD;;;;;;;;GAQG;AACH,MAAM,CAAC,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,SAAS,EAAE,CAAA;QAE9B,wBAAwB;QACxB,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE3D,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IACrF,OAAO,kBAAkB,CACvB,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EACnE,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,WAAW,MAAM,CAAC,OAAO,EAAE,CAClD,CAAA;AACH,CAAC"}