Nodejs - 如何充当 modbus rtu 服务器

Nodejs - How to act as modbus rtu server

我正在尝试设置一个接受 modbus RTU 轮询的侦听器。

我发现了很多与 modbus 相关的 npm 库,但它们都与来自其他 modbus 从站的轮询有关,或者充当 modbus TCP 服务器。我需要模拟 modbus 从站,而不是轮询器(充当 modbus RTU 服务器)

编辑:我找到了这个库 https://github.com/Cloud-Automation/node-modbus

源码里有个modbus-rtu-server.js文件,所以一直在尝试用这个。但是,在没有文档的情况下,我无法理解和使用该库。这是我尝试过的:

const modbus = require('jsmodbus')
const SerialPort = require('serialport')
const options = {
    baudRate: 9600
}
const socket = new SerialPort("/dev/ttyUSB0", options)
const server = new modbus.server.RTU(socket)
server.on('connect', function (client) {
    console.log(client);
});

这是我目前所知道的,但是 "connect" 事件从未发生过,我做错了什么?

服务器正在等待客户端连接。要使 connect 事件发生,您必须从客户端开始查询。这意味着您需要将第二个串行端口连接到 /dev/ttyUSB0 并从中启动 Modbus 查询。为此,您可以使用相同的库或任何其他工具,如 modpollQModMaster.

你还需要稍微开发一下你的服务器,因为现在它没有定义任何寄存器,所以不会有太大用处。

查看 TCP 示例,尤其是 SimpleServer。如您所见,您需要在服务器上定义 Modbus 寄存器或线圈,例如:

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

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

send(response)
})