首页 > 解决方案 > 通过 RTU 充当 modbus 从站 - 通信问题

问题描述

我正在使用以下代码来模拟 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进行通信。这会导致问题吗?

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

我也对新理论持开放态度。我的目标最终是通过命令将 modbus 数据传回主控server.on

编辑

如果我直接读取串口上的数据,我肯定会有数据进来:

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

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

标签: node.jsmodbus

解决方案


推荐阅读