通过RTU充当modbus从机-通讯问题

问题描述 投票:0回答:1

我使用以下代码来模拟modbus从设备:

const modbus = require('jsmodbus')
const SerialPort = require('serialport')
const options = {
    baudRate: 115200
}
const socket = new SerialPort("COM4", options)
const server = new modbus.server.RTU(socket)

server.on('connect', function (client) {
    console.log("in connect")
    console.log(client);
});

server.on('connection', function (client) {
    console.log("in connection")
    console.log(client);
});

server.on('readHoldingRegisters', function (adr, len) {
    console.log("in readHoldingRegisters")
    console.log("adr: " + adr);
    console.log("len: " + len);
});

上面的代码实际上模拟了一个设备。当我运行此代码时,我设置的主设备可以看到从设备。问题是我似乎无法让服务器功能到达其

console.log
部分。

我有两种理论。

首先,我的从设备使用 jsmodbus 库来模拟服务器,而我的主设备使用 modbus-serial 进行通信。这会导致问题吗?

我的第二个理论是,我上面的代码是同时运行的,不会环顾四周或保持开放状态以查看未来的通信。我该如何解决这个问题?

我也对新理论持开放态度。我的目标最终是通过

server.on
命令将 modbus 数据传回主机。

编辑

直接读取串口数据就知道有数据进来了:

socket.on('readable', function () {
    console.log('Data:', socket.read()) //prints incoming buffer data
});

我仍然没有通过服务器命令获取数据。

node.js modbus
1个回答
0
投票

我已添加答案关于此处发布的其他问题

简而言之,事件侦听器当前仅在显式禁用缓冲区时才起作用:

const server = new modbus.server.RTU(socket, { coils: undefined, /* ... */ })
© www.soinside.com 2019 - 2024. All rights reserved.