Cloud-Automation / node-modbus

Modbus TCP Client/Server implementation for Node.JS
467 stars 174 forks source link

(server)unhandled event error #246

Closed miladghasemid closed 4 years ago

miladghasemid commented 5 years ago

Hello, I have run sample server code. OS: windows Node: v8.11.1 npm: v5.6.0

when i disconnect client from server, the following is shown and process terminates.

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: read ECONNRESET
    at _errnoException (util.js:1022:11)
    at TCP.onread (net.js:628:25)

code:

const modbus = require('jsmodbus')
const net = require('net')
const netServer = new net.Server()
const holding = Buffer.alloc(10000)
const server = new modbus.server.TCP(netServer, {
  holding: holding
})

server.on('connection', function (client) {
  console.log('New Connection')
})

server.on('readCoils', function (request, response, send) {
  /* Implement your own */

  response.body.coils[0] = true
  response.body.coils[1] = false

  send(response)
})

server.on('readHoldingRegisters', function (request, response, send) {

  /* Implement your own */

})

server.on('preWriteSingleRegister', function (value, address) {
  console.log('Write Single Register')
  console.log('Original {register, value}: {', address, ',', server.holding.readUInt16BE(address), '}')
})

server.on('WriteSingleRegister', function (value, address) {
  console.log('New {register, value}: {', address, ',', server.holding.readUInt16BE(address), '}')
})

server.on('writeMultipleCoils', function (value) {
  console.log('Write multiple coils - Existing: ', value)
})

server.on('postWriteMultipleCoils', function (value) {
  console.log('Write multiple coils - Complete: ', value)
})

/* server.on('writeMultipleRegisters', function (value) {
  console.log('Write multiple registers - Existing: ', value)
}) */

server.on('postWriteMultipleRegisters', function (value) {
  console.log('Write multiple registers - Complete: ', holding.readUInt16BE(0))
})

server.on('connection', function (client) {

  /* work with the modbus tcp client */

})

server.coils.writeUInt16BE(0x0000, 0)
server.coils.writeUInt16BE(0x0000, 2)
server.coils.writeUInt16BE(0x0000, 4)
server.coils.writeUInt16BE(0x0000, 6)

server.discrete.writeUInt16BE(0x5678, 0)

server.holding.writeUInt16BE(0x0001, 0)
server.holding.writeUInt16BE(0x0002, 2)
server.holding.writeUInt16BE(0x0003, 4)
server.holding.writeUInt16BE(0x0004, 6)
server.holding.writeUInt16BE(0x0005, 8)
server.holding.writeUInt16BE(0x0006, 10)
server.holding.writeUInt16BE(0x0007, 12)
server.holding.writeUInt16BE(0x0008, 14)

server.input.writeUInt16BE(0xff00, 0)
server.input.writeUInt16BE(0xff00, 2)

console.log(process.argv[2])
netServer.listen(process.argv[2] || 1502)
stefanpoeter commented 5 years ago

What jsmodbus are you using?

Usually Socket Events are not handled by the module. Try catching Socket errors by subscribing to the error Events on the tcp Socket.