modbus-connect
Version:
Modbus RTU over Web Serial and Node.js SerialPort
47 lines (37 loc) • 1.37 kB
JavaScript
// function-codes/report-slave-id.js
const { FUNCTION_CODES } = require('../constants/constants.js');
const { allocUint8Array, isUint8Array } = require('../utils/utils.js');
/**
* Строит PDU запроса Report Slave ID (0x11)
* @returns {Uint8Array}
*/
function buildReportSlaveIdRequest() {
const pdu = allocUint8Array(1);
pdu[0] = FUNCTION_CODES.REPORT_SLAVE_ID;
return pdu;
}
/**
* Разбирает PDU ответа на Report Slave ID
* @param {Uint8Array} pdu
* @returns {{ slaveId: number, isRunning: boolean, data: Uint8Array }}
*/
function parseReportSlaveIdResponse(pdu) {
if (!isUint8Array(pdu)) {
throw new TypeError('PDU must be Uint8Array');
}
if (pdu[0] !== FUNCTION_CODES.REPORT_SLAVE_ID) {
throw new Error(`Invalid function code: expected 0x11, got 0x${pdu[0].toString(16)}`);
}
const byteCount = pdu[1];
if (pdu.length !== byteCount + 2) {
throw new Error(`Invalid byte count: expected ${byteCount}, got ${pdu.length - 2}`);
}
const slaveId = pdu[2];
const isRunning = pdu[3] === 0xFF;
const data = pdu.slice(4); // Остальные байты — произвольные
return { slaveId, isRunning, data };
}
module.exports = {
buildReportSlaveIdRequest,
parseReportSlaveIdResponse
}