modbus-connect
Version:
Modbus RTU over Web Serial and Node.js SerialPort
47 lines (39 loc) • 1.5 kB
JavaScript
// utils/detect-modbus-address.js
const createTransport = require('./factory.js');
const ModbusClient = require('../client.js');
const DEFAULT_SLAVE_IDS = Array.from({ length: 247 }, (_, i) => i + 1); // 1..247
/**
* Определение адреса (slave ID) подключенного Modbus RTU устройства.
*
* @param {string} transportType - 'node' или 'web'
* @param {object} options - настройки транспорта (baudRate, parity и т.д.)
* @param {Array<number>} slaveIds - опциональный список адресов для перебора
*
* @returns {number|null} Найденный адрес устройства или null
*/
async function detectModbusAddress(transportType, options, slaveIds = DEFAULT_SLAVE_IDS) {
let transport;
try {
transport = await createTransport(transportType, options);
await transport.connect();
for (const slaveId of slaveIds) {
const client = new ModbusClient(transport, slaveId, { timeout: 200 });
try {
await client.readHoldingRegisters(0, 1);
return slaveId;
} catch {
// Игнорируем ошибки
}
}
} finally {
if (transport) {
try {
await transport.disconnect();
} catch {}
}
}
return null;
}
module.exports = {
detectModbusAddress
}