Modbus exception 2 while polling holding registers.
Hi,
I'm polling holding registers in blocks of 100 registers from several Nodes. Everything works fine, but sometimes, I'm receiving a Modbus exception 2. I'm pretty sure I'm sending the right address to poll on each Node, and as I mention this issue appears randomly, so I normally read the register values for each of them.
'Error: Modbus exception 2: Illegal data address (register not supported by device)\n at ModbusRTU._onReceive (/Users/saguado/Development/node/minim/node_modules/modbus-serial/index.js:371:21)\n at TcpPort.emit (node:events:527:28)\n at Socket.
This is my code inside my for loop (every 100 registers):
await client.readHoldingRegisters(n, nTo)
.then(async result => {
// console.log(result.data.length);
if (result) {
// let modbusStates = [];
await result.data.forEach((register, index) => {
// modbusStates.push(states[register]);
if (node.connections[index + n].value != states[register]) {
node.connections[index + n].value = states[register];
registerChanges = true;
// TODO: Saves changes in a list to console.log
}
});
// console.log(Nodo: ${node.slaveId} | registers: ${node.registers}(${nTo}/${result.data.length}));
// console.log(Nodo: ${node.slaveId} | registers: ${node.registers}(${nTo}/${result.data.length}) \n${result.data});
}
}).catch(err => {
if (err) {
if (err.errno == 'ECONNREFUSED') {
clearInterval(intervalId);
if (client.isOpen) client.close();
modbusConnect(nodes);
} else if (err.modbusCode = 2) {
console.log(Node Error: ${node.slaveId});
} else {
console.log(err.message);
}
}
});