node-modbus-serial icon indicating copy to clipboard operation
node-modbus-serial copied to clipboard

Modbus exception 2 while polling holding registers.

Open saguado69 opened this issue 3 years ago • 0 comments

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. (/Users/saguado/Development/node/minim/node_modules/modbus-serial/ports/tcpport.js:92:20)\n at Socket.emit (node:events:527:28)\n at addChunk (node:internal/streams/readable:315:12)\n at readableAddChunk (node:internal/streams/readable:289:9)\n at Socket.Readable.push (node:internal/streams/readable:228:10)\n at TCP.onStreamRead (node:internal/stream_base_commons:190:23)\n at TCP.callbackTrampoline (node:internal/async_hooks:130:17)'

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); } } });

saguado69 avatar Aug 19 '22 17:08 saguado69