@things-factory/integration-modbus 5.0.0-alpha.9 → 5.0.0-y.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.
@@ -27,10 +27,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.ModbusTCPConnector = void 0;
30
- const integration_base_1 = require("@things-factory/integration-base");
31
- const net_1 = __importDefault(require("net"));
32
30
  const modbus = __importStar(require("jsmodbus"));
31
+ const net_1 = require("net");
33
32
  const p_queue_1 = __importDefault(require("p-queue"));
33
+ const promise_socket_1 = __importDefault(require("promise-socket"));
34
+ const integration_base_1 = require("@things-factory/integration-base");
34
35
  const utils_1 = require("@things-factory/utils");
35
36
  class ModbusTCPConnector {
36
37
  async ready(connectionConfigs) {
@@ -40,100 +41,108 @@ class ModbusTCPConnector {
40
41
  async connect(config) {
41
42
  var [host, port = 502] = config.endpoint.split(':');
42
43
  var { params } = config;
43
- var clientSocket = new net_1.default.Socket();
44
+ var clientSocket = new net_1.Socket();
45
+ var promiseSocket = new promise_socket_1.default(clientSocket);
44
46
  var client = new modbus.client.TCP(clientSocket);
45
- clientSocket.on('error', console.error);
46
- clientSocket.connect({ host, port });
47
- var queue = new p_queue_1.default({ concurrency: 1 });
48
- var keepalive = params.keepalive;
49
- integration_base_1.ConnectionManager.addConnectionInstance(config, {
50
- readModBus: async function (objectType, address, quantity, { logger }) {
51
- return await queue.add(async () => {
52
- while (true) {
53
- try {
54
- var response;
55
- switch (objectType) {
56
- case 'descrete input':
57
- response = await client.readDiscreteInputs(address, quantity);
58
- break;
59
- case 'input register':
60
- response = await client.readInputRegisters(address, quantity);
61
- break;
62
- case 'holding register':
63
- response = await client.readHoldingRegisters(address, quantity);
64
- break;
65
- default:
66
- response = await client.readCoils(address, quantity);
67
- }
68
- var data = response && response.response._body.valuesAsArray.slice(0, quantity);
69
- logger.info(`${JSON.stringify(data)}`);
70
- return {
71
- data
72
- };
73
- }
74
- catch (e) {
75
- logger.error('readModBus command failed.');
76
- logger.error(e);
77
- if (keepalive) {
78
- clientSocket && clientSocket.destroy();
79
- clientSocket = new net_1.default.Socket();
80
- client = new modbus.client.TCP(clientSocket);
81
- clientSocket.on('error', console.error);
82
- clientSocket.connect({ host, port });
83
- await (0, utils_1.sleep)(1000);
47
+ try {
48
+ clientSocket.on('error', console.error);
49
+ await promiseSocket.connect(port, host);
50
+ var queue = new p_queue_1.default({ concurrency: 1 });
51
+ var keepalive = params.keepalive;
52
+ integration_base_1.ConnectionManager.addConnectionInstance(config, {
53
+ readModBus: async function (objectType, address, quantity, { logger }) {
54
+ return await queue.add(async () => {
55
+ while (true) {
56
+ try {
57
+ var response;
58
+ switch (objectType) {
59
+ case 'descrete input':
60
+ response = await client.readDiscreteInputs(address, quantity);
61
+ break;
62
+ case 'input register':
63
+ response = await client.readInputRegisters(address, quantity);
64
+ break;
65
+ case 'holding register':
66
+ response = await client.readHoldingRegisters(address, quantity);
67
+ break;
68
+ default:
69
+ response = await client.readCoils(address, quantity);
70
+ }
71
+ var data = response && response.response._body.valuesAsArray.slice(0, quantity);
72
+ logger.info(`${JSON.stringify(data)}`);
73
+ return {
74
+ data
75
+ };
84
76
  }
85
- else {
86
- throw e;
77
+ catch (e) {
78
+ logger.error('readModBus command failed.');
79
+ logger.error(e);
80
+ if (keepalive) {
81
+ promiseSocket && promiseSocket.destroy();
82
+ clientSocket = new net_1.Socket();
83
+ promiseSocket = new promise_socket_1.default(clientSocket);
84
+ client = new modbus.client.TCP(clientSocket);
85
+ clientSocket.on('error', console.error);
86
+ promiseSocket.connect(port, host);
87
+ await (0, utils_1.sleep)(1000);
88
+ }
89
+ else {
90
+ throw e;
91
+ }
87
92
  }
88
93
  }
89
- }
90
- });
91
- },
92
- writeSingleModBus: async function (objectType, address, value, { logger }) {
93
- return await queue.add(async () => {
94
- while (true) {
95
- try {
96
- var response;
97
- switch (objectType) {
98
- case 'holding register':
99
- await client.writeSingleRegister(address, parseInt(value));
100
- response = await client.readHoldingRegisters(address, 1);
101
- break;
102
- default:
103
- await client.writeSingleCoil(address, !!Number(value));
104
- response = await client.readCoils(address, 1);
94
+ });
95
+ },
96
+ writeSingleModBus: async function (objectType, address, value, { logger }) {
97
+ return await queue.add(async () => {
98
+ while (true) {
99
+ try {
100
+ var response;
101
+ switch (objectType) {
102
+ case 'holding register':
103
+ await client.writeSingleRegister(address, parseInt(value));
104
+ response = await client.readHoldingRegisters(address, 1);
105
+ break;
106
+ default:
107
+ await client.writeSingleCoil(address, !!Number(value));
108
+ response = await client.readCoils(address, 1);
109
+ }
110
+ var data = response && response.response._body.valuesAsArray[0];
111
+ logger.info(data);
112
+ return {
113
+ data
114
+ };
105
115
  }
106
- var data = response && response.response._body.valuesAsArray[0];
107
- logger.info(data);
108
- return {
109
- data
110
- };
111
- }
112
- catch (e) {
113
- logger.error('writeSingleModBus command failed.');
114
- logger.error(e);
115
- if (keepalive) {
116
- clientSocket && clientSocket.destroy();
117
- clientSocket = new net_1.default.Socket();
118
- client = new modbus.client.TCP(clientSocket);
119
- clientSocket.on('error', console.error);
120
- clientSocket.connect({ host, port });
121
- await (0, utils_1.sleep)(1000);
122
- }
123
- else {
124
- throw e;
116
+ catch (e) {
117
+ logger.error('writeSingleModBus command failed.');
118
+ logger.error(e);
119
+ if (keepalive) {
120
+ promiseSocket && promiseSocket.destroy();
121
+ clientSocket = new net_1.Socket();
122
+ promiseSocket = new promise_socket_1.default(clientSocket);
123
+ client = new modbus.client.TCP(clientSocket);
124
+ clientSocket.on('error', console.error);
125
+ promiseSocket.connect(port, host);
126
+ await (0, utils_1.sleep)(1000);
127
+ }
128
+ else {
129
+ throw e;
130
+ }
125
131
  }
126
132
  }
127
- }
128
- });
129
- },
130
- close: function () {
131
- queue.clear();
132
- keepalive = false;
133
- clientSocket.destroy();
134
- }
135
- });
136
- integration_base_1.ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) is connected`);
133
+ });
134
+ },
135
+ close: function () {
136
+ queue.clear();
137
+ keepalive = false;
138
+ promiseSocket.destroy();
139
+ }
140
+ });
141
+ integration_base_1.ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) is connected`);
142
+ }
143
+ catch (error) {
144
+ integration_base_1.ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) failed to connect`);
145
+ }
137
146
  }
138
147
  async disconnect(connection) {
139
148
  var { close } = integration_base_1.ConnectionManager.removeConnectionInstance(connection);
@@ -1 +1 @@
1
- {"version":3,"file":"modbus-tcp.js","sourceRoot":"","sources":["../../../server/engine/connector/modbus-tcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modbus-tcp.js","sourceRoot":"","sources":["../../../server/engine/connector/modbus-tcp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/integration-modbus",
3
- "version": "5.0.0-alpha.9",
3
+ "version": "5.0.0-y.0",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -23,10 +23,11 @@
23
23
  "clean": "npm run clean:server"
24
24
  },
25
25
  "dependencies": {
26
- "@things-factory/integration-base": "^5.0.0-alpha.9",
26
+ "@things-factory/integration-base": "^5.0.0-y.0",
27
27
  "jsmodbus": "^4.0.2",
28
28
  "p-queue": "^6.4.0",
29
+ "promise-socket": "^7.0.0",
29
30
  "serialport": "^9.0.2"
30
31
  },
31
- "gitHead": "c0f2f0758f80724cae6bbd56bbea43feef0f8a1c"
32
+ "gitHead": "2fb8066dae72d864b0fc3a5b439a18579fa39ee6"
32
33
  }
@@ -1,7 +1,9 @@
1
- import { ConnectionManager, Connector, Connection } from '@things-factory/integration-base'
2
- import net from 'net'
3
1
  import * as modbus from 'jsmodbus'
2
+ import { Socket } from 'net'
4
3
  import PQueue from 'p-queue'
4
+ import PromiseSocket from 'promise-socket'
5
+
6
+ import { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'
5
7
  import { sleep } from '@things-factory/utils'
6
8
 
7
9
  export class ModbusTCPConnector implements Connector {
@@ -15,110 +17,119 @@ export class ModbusTCPConnector implements Connector {
15
17
  var [host, port = 502] = config.endpoint.split(':')
16
18
  var { params } = config
17
19
 
18
- var clientSocket = new net.Socket()
19
- var client = new modbus.client.TCP(clientSocket)
20
-
21
- clientSocket.on('error', console.error)
22
- clientSocket.connect({ host, port })
23
-
24
- var queue = new PQueue({ concurrency: 1 })
25
- var keepalive = params.keepalive
26
-
27
- ConnectionManager.addConnectionInstance(config, {
28
- readModBus: async function (objectType, address, quantity, { logger }) {
29
- return await queue.add(async () => {
30
- while (true) {
31
- try {
32
- var response
33
-
34
- switch (objectType) {
35
- case 'descrete input':
36
- response = await client.readDiscreteInputs(address, quantity)
37
- break
38
- case 'input register':
39
- response = await client.readInputRegisters(address, quantity)
40
- break
41
- case 'holding register':
42
- response = await client.readHoldingRegisters(address, quantity)
43
- break
44
- default:
45
- response = await client.readCoils(address, quantity)
46
- }
47
-
48
- var data = response && response.response._body.valuesAsArray.slice(0, quantity)
49
- logger.info(`${JSON.stringify(data)}`)
50
- return {
51
- data
52
- }
53
- } catch (e) {
54
- logger.error('readModBus command failed.')
55
- logger.error(e)
56
-
57
- if (keepalive) {
58
- clientSocket && clientSocket.destroy()
20
+ var clientSocket = new Socket()
21
+ var promiseSocket = new PromiseSocket(clientSocket)
59
22
 
60
- clientSocket = new net.Socket()
61
- client = new modbus.client.TCP(clientSocket)
62
- clientSocket.on('error', console.error)
63
- clientSocket.connect({ host, port })
23
+ var client = new modbus.client.TCP(clientSocket)
64
24
 
65
- await sleep(1000)
66
- } else {
67
- throw e
25
+ try {
26
+ clientSocket.on('error', console.error)
27
+
28
+ await promiseSocket.connect(port, host)
29
+
30
+ var queue = new PQueue({ concurrency: 1 })
31
+ var keepalive = params.keepalive
32
+
33
+ ConnectionManager.addConnectionInstance(config, {
34
+ readModBus: async function (objectType, address, quantity, { logger }) {
35
+ return await queue.add(async () => {
36
+ while (true) {
37
+ try {
38
+ var response
39
+
40
+ switch (objectType) {
41
+ case 'descrete input':
42
+ response = await client.readDiscreteInputs(address, quantity)
43
+ break
44
+ case 'input register':
45
+ response = await client.readInputRegisters(address, quantity)
46
+ break
47
+ case 'holding register':
48
+ response = await client.readHoldingRegisters(address, quantity)
49
+ break
50
+ default:
51
+ response = await client.readCoils(address, quantity)
52
+ }
53
+
54
+ var data = response && response.response._body.valuesAsArray.slice(0, quantity)
55
+ logger.info(`${JSON.stringify(data)}`)
56
+ return {
57
+ data
58
+ }
59
+ } catch (e) {
60
+ logger.error('readModBus command failed.')
61
+ logger.error(e)
62
+
63
+ if (keepalive) {
64
+ promiseSocket && promiseSocket.destroy()
65
+
66
+ clientSocket = new Socket()
67
+ promiseSocket = new PromiseSocket(clientSocket)
68
+ client = new modbus.client.TCP(clientSocket)
69
+ clientSocket.on('error', console.error)
70
+ promiseSocket.connect(port, host)
71
+
72
+ await sleep(1000)
73
+ } else {
74
+ throw e
75
+ }
68
76
  }
69
77
  }
70
- }
71
- })
72
- },
73
- writeSingleModBus: async function (objectType, address, value, { logger }) {
74
- return await queue.add(async () => {
75
- while (true) {
76
- try {
77
- var response
78
-
79
- switch (objectType) {
80
- case 'holding register':
81
- await client.writeSingleRegister(address, parseInt(value))
82
- response = await client.readHoldingRegisters(address, 1)
83
- break
84
- default:
85
- await client.writeSingleCoil(address, !!Number(value))
86
- response = await client.readCoils(address, 1)
87
- }
88
-
89
- var data = response && response.response._body.valuesAsArray[0]
90
- logger.info(data)
91
- return {
92
- data
93
- }
94
- } catch (e) {
95
- logger.error('writeSingleModBus command failed.')
96
- logger.error(e)
97
-
98
- if (keepalive) {
99
- clientSocket && clientSocket.destroy()
100
-
101
- clientSocket = new net.Socket()
102
- client = new modbus.client.TCP(clientSocket)
103
- clientSocket.on('error', console.error)
104
- clientSocket.connect({ host, port })
105
-
106
- await sleep(1000)
107
- } else {
108
- throw e
78
+ })
79
+ },
80
+ writeSingleModBus: async function (objectType, address, value, { logger }) {
81
+ return await queue.add(async () => {
82
+ while (true) {
83
+ try {
84
+ var response
85
+
86
+ switch (objectType) {
87
+ case 'holding register':
88
+ await client.writeSingleRegister(address, parseInt(value))
89
+ response = await client.readHoldingRegisters(address, 1)
90
+ break
91
+ default:
92
+ await client.writeSingleCoil(address, !!Number(value))
93
+ response = await client.readCoils(address, 1)
94
+ }
95
+
96
+ var data = response && response.response._body.valuesAsArray[0]
97
+ logger.info(data)
98
+ return {
99
+ data
100
+ }
101
+ } catch (e) {
102
+ logger.error('writeSingleModBus command failed.')
103
+ logger.error(e)
104
+
105
+ if (keepalive) {
106
+ promiseSocket && promiseSocket.destroy()
107
+
108
+ clientSocket = new Socket()
109
+ promiseSocket = new PromiseSocket(clientSocket)
110
+ client = new modbus.client.TCP(clientSocket)
111
+ clientSocket.on('error', console.error)
112
+ promiseSocket.connect(port, host)
113
+
114
+ await sleep(1000)
115
+ } else {
116
+ throw e
117
+ }
109
118
  }
110
119
  }
111
- }
112
- })
113
- },
114
- close: function () {
115
- queue.clear()
116
- keepalive = false
117
- clientSocket.destroy()
118
- }
119
- })
120
-
121
- ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) is connected`)
120
+ })
121
+ },
122
+ close: function () {
123
+ queue.clear()
124
+ keepalive = false
125
+ promiseSocket.destroy()
126
+ }
127
+ })
128
+
129
+ ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) is connected`)
130
+ } catch (error) {
131
+ ConnectionManager.logger.info(`modbus-tcp connection(${config.name}:${config.endpoint}) failed to connect`)
132
+ }
122
133
  }
123
134
 
124
135
  async disconnect(connection: Connection) {