stream: blocks[i].copy is not a function

var modbus = require("modbus-stream");

module.exports = {
    initModbus: function() {
         modbus.tcp.server({ debug: "server" }, (connection) => {
              connection.readHoldingRegisters( {address: 0, quantity: 1}, (err, info) => {
                   console.log("response", info.response.data);
              });
         }).listen(12345, () => {
              modbus.tcp.connect(12345, { debug: "client" }, (err, connection) => {
                   connection.on("read-holding-registers", (request, reply) => {
                        reply(null, [234]);
                   });
              });
         });
    }
}

Hi, thanks for your effort. Could not achieve just a simple thing. What can be wrong here?

Error output:

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

TypeError: blocks[i].copy is not a function
    at Object.blocksToBuffer [as buildResponse] (/home/ubuntu/workspace/EasygenSlave/node_modules/modbus-stream/node_modules/modbus-pdu/lib/Helpers.js:111:13)
    at Object.build (/home/ubuntu/workspace/EasygenSlave/node_modules/modbus-stream/node_modules/modbus-pdu/lib/Modbus.js:113:30)
    at /home/ubuntu/workspace/EasygenSlave/node_modules/modbus-stream/lib/transport/transport.js:165:75
    at Stream.<anonymous> (/home/ubuntu/workspace/EasygenSlave/modbus-tcp-server.js:12:13)
    at emitTwo (events.js:87:13)
    at Stream.emit (events.js:172:7)
    at Transport.<anonymous> (/home/ubuntu/workspace/EasygenSlave/node_modules/modbus-stream/lib/stream.js:44:10)
    at emitThree (events.js:97:13)
    at Transport.emit (events.js:175:7)
    at handle (/home/ubuntu/workspace/EasygenSlave/node_modules/modbus-stream/lib/transport/transport.js:156:16)

Can you give me guidance when you are available? Cheers.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 17 (10 by maintainers)

Most upvoted comments

With this module you can create any role and make requests from either role (slave or master)

const modbus = require("modbus-stream");

modbus.tcp.server({ debug: "server" }, (connection) => {
	connection.on("error", (err) => {
		console.log("server error", err);
	});
	connection.on("read-coils", (req, reply) => {
		console.log(req); // <--- look at this object
		return reply(null, [ 1, 0, 1, 0, 0, .... ]);
	});
}).listen(502, () => {
	console.log("server ready");
});