UNPKG

@zandor300/jsmodbus

Version:

Implementation for the Serial/TCP Modbus protocol.

159 lines (158 loc) 5.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Debug = require("debug"); const debug = Debug('modbus-client'); const request_1 = require("./request"); class MBClient { get connectionState() { return this._requestHandler.state; } get socket() { return this._socket; } get requestCount() { return this._requestHandler.requestCount; } constructor(socket) { this._dataListener = null; if (new.target === MBClient) { throw new TypeError('Cannot instantiate ModbusClient directly.'); } this._socket = socket; if (!socket) { throw new Error('NoSocketException.'); } this._dataListener = this._onData.bind(this); this._socket.on('data', this._dataListener); } destruct() { if (this._dataListener !== null) { this._socket.removeListener('data', this._dataListener); this._dataListener = null; } } readCoils(start, count) { debug('issuing new read coils request'); let request; try { request = new request_1.ReadCoilsRequestBody(start, count); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } readDiscreteInputs(start, count) { debug('issuing new read discrete inputs request'); let request; try { request = new request_1.ReadDiscreteInputsRequestBody(start, count); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } readHoldingRegisters(start, count) { debug('issuing new read holding registers request'); let request; try { request = new request_1.ReadHoldingRegistersRequestBody(start, count); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } readInputRegisters(start, count) { debug('issuing new read input registers request'); let request; try { request = new request_1.ReadInputRegistersRequestBody(start, count); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } writeSingleCoil(address, value) { debug('issuing new write single coil request'); let request; try { request = new request_1.WriteSingleCoilRequestBody(address, value); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } writeSingleRegister(address, value) { debug('issuing new write single register request'); let request; try { request = new request_1.WriteSingleRegisterRequestBody(address, value); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } writeMultipleCoils(start, values, quantity = 0) { debug('issuing new write multiple coils request'); let request; try { if (values instanceof Buffer) { request = new request_1.WriteMultipleCoilsRequestBody(start, values, quantity); } else { request = new request_1.WriteMultipleCoilsRequestBody(start, values); } } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } writeMultipleRegisters(start, values) { debug('issuing new write multiple registers request'); let request; try { request = new request_1.WriteMultipleRegistersRequestBody(start, values); } catch (e) { debug('unknown request error occurred'); return Promise.reject(e); } return this._requestHandler.register(request); } manuallyClearRequests(numRequests) { return this._requestHandler.manuallyRejectRequests(numRequests); } manuallyRejectCurrentRequest() { return this._requestHandler.manuallyRejectCurrentRequest(); } customErrorRequest(err) { return this._requestHandler.customErrorRequest(err); } _onData(data) { debug('received data'); this._responseHandler.handleData(data); do { const response = this._responseHandler.shift(); if (!response) { return; } if (this.unitId === response.unitId) { this._requestHandler.handle(response); } } while (1); } } exports.default = MBClient;