jsmodbus
Version:
Implementation for the Serial/TCP Modbus protocol.
67 lines (57 loc) • 1.52 kB
JavaScript
const Messages = {
0x01: 'ILLEGAL FUNCTION',
0x02: 'ILLEGAL DATA ADDRESS',
0x03: 'ILLEGAL DATA VALUE',
0x04: 'SLAVE DEVICE FAILURE',
0x05: 'ACKNOWLEDGE',
0x06: 'SLAVE DEVICE BUSY',
0x08: 'MEMORY PARITY ERROR',
0x0A: 'GATEWAY PATH UNAVAILABLE',
0x0B: 'GATEWAY TARGET DEVICE FAILED TO RESPOND'
}
const ModbusResponseBody = require('./response-body.js')
/** Modbus Excepiton Response Body
* @extends ModbusResponseBody
* @class
*/
class ExceptionResponseBody extends ModbusResponseBody {
/** Create Exception Response from buffer.
* @param {Number} fc Function Code
* @param {Buffer} buffer Buffer
* @returns {ExceptionResponseBody}
*/
static fromBuffer (buffer) {
const fc = buffer.readUInt8(0)
const code = buffer.readUInt8(1)
return new ExceptionResponseBody(fc - 0x80, code)
}
static fromRequest (requestBody) {
return new ExceptionResponseBody(requestBody.fc, requestBody.code)
}
/** Create ExceptionResponseBody
* @param {Number} fc Function Code
* @param {Number} code Exception Code
*/
constructor (fc, code) {
super(fc)
this._code = code
}
/** Exception Code */
get code () {
return this._code
}
/** Exception message */
get message () {
return Messages[this._code]
}
get byteCount () {
return 2
}
createPayload () {
const payload = Buffer.alloc(2)
payload.writeUInt8(this._fc, 0)
payload.writeUInt8(this._code, 1)
return payload
}
}
module.exports = ExceptionResponseBody