UNPKG

@zandor300/jsmodbus

Version:

Implementation for the Serial/TCP Modbus protocol.

88 lines (87 loc) 2.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isWriteSingleRegisterRequestBody = isWriteSingleRegisterRequestBody; const codes_1 = require("../codes"); const request_body_js_1 = __importDefault(require("./request-body.js")); class WriteSingleRegisterRequestBody extends request_body_js_1.default { get address() { return this._address; } get value() { return this._value; } get buffer() { return this._buffer; } get name() { return 'WriteSingleRegister'; } get quantity() { return 1; } get count() { return 1; } get byteCount() { return 5; } static fromBuffer(buffer) { try { const fc = buffer.readUInt8(0); const address = buffer.readUInt16BE(1); const value = buffer.readUInt16BE(3); if (fc !== codes_1.FC.WRITE_SINGLE_HOLDING_REGISTER) { return null; } return new WriteSingleRegisterRequestBody(address, value); } catch (e) { return null; } } constructor(address, value) { super(codes_1.FC.WRITE_SINGLE_HOLDING_REGISTER); if (address > 0xFFFF) { throw new Error('InvalidStartAddress'); } this._address = address; if (value instanceof Buffer) { if (value.length !== 2) { throw new Error('InvalidBufferSize'); } this._buffer = value; } else { if (!Number.isInteger(value) || value < 0 || value > 0xFFFF) { throw new Error('InvalidValue'); } this._value = value; this._buffer = Buffer.alloc(2); this._buffer.writeUInt16BE(value, 0); } } createPayload() { const payload = Buffer.alloc(5); payload.writeUInt8(this._fc, 0); payload.writeUInt16BE(this._address, 1); if (this._buffer !== undefined) { this._buffer.copy(payload, 3, 0, 2); } else if (this._value !== undefined) { payload.writeUInt16BE(this._value, 3); } return payload; } } exports.default = WriteSingleRegisterRequestBody; function isWriteSingleRegisterRequestBody(x) { if (x instanceof WriteSingleRegisterRequestBody) { return true; } else { return false; } }