UNPKG

modbus-connect

Version:

Modbus RTU over Web Serial and Node.js SerialPort

58 lines (50 loc) 1.95 kB
// function-codes/SGM130/set-controller-time.js const FUNCTION_CODE = 0x6F; const REQUEST_SIZE = 10; const RESPONSE_MIN_SIZE = 1; /** * Формирует PDU-запрос для установки времени на контроллере. * @param {{ * seconds: number, * minutes: number, * hours: number, * day: number, * month: number, * year: number * }} time - Объект с компонентами времени * @returns {Uint8Array} - PDU запроса (10 байт) * @throws {TypeError} Если параметры времени некорректны */ function buildSetControllerTimeRequest(time) { const buffer = new ArrayBuffer(REQUEST_SIZE); const view = new DataView(buffer); view.setUint8(0, FUNCTION_CODE); view.setUint8(1, 0x00); // резерв view.setUint8(2, 0x00); // резерв view.setUint8(3, time.seconds); view.setUint8(4, time.minutes); view.setUint8(5, time.hours); view.setUint8(6, time.day); view.setUint8(7, time.month); view.setUint16(8, time.year, true); // little-endian return new Uint8Array(buffer); } /** * Проверяет ответ на команду установки времени. * @param {Uint8Array} pdu - Полученный PDU ответа * @returns {boolean} - true если ответ валиден * @throws {Error} Если ответ некорректен */ function parseSetControllerTimeResponse(pdu) { if (!(pdu instanceof Uint8Array)) { throw new TypeError('PDU must be Uint8Array'); } if (pdu.length < RESPONSE_MIN_SIZE || pdu[0] !== FUNCTION_CODE) { throw new Error(`Invalid response: expected min ${RESPONSE_MIN_SIZE} bytes starting with 0x${FUNCTION_CODE.toString(16)}`); } return true; } module.exports = { buildSetControllerTimeRequest, parseSetControllerTimeResponse };