首页 > 解决方案 > 我可以使用 node.js 监控现有的串行端口通信吗?

问题描述

我正在寻找自动化我已经使用 Eltima 串行端口监视器的过程。我有一个带有专有软件的硬件,它向我显示它通过串行接收的数据,但本机不允许任何数据记录。我使用串口监视器来嗅探通信,然后过滤掉我需要的数据,然后处理文本文件输出,直到我得到我想要的。我的问题是关于 node-serialport 或 socket.io 或类似的,以便嗅探已经打开的端口?我知道我可以使用这些打开端口,但对于初学者来说,我更愿意在现有连接上搭载一些东西,并简单地浏览我需要的信息,而不深入研究提供的 Windows 应用程序如何与硬件对话的细节。

如果问题看起来很复杂,我深表歉意,但我只是希望指出已知可行的方向,而不是给出完整的解决方案。我没有太多时间花在这上面,也不想为了发现它根本不能做我想做的事情而学习一个框架。有人可以确认节点解决方案是否可以侦听已经活动的端口吗?

标签: javascriptnode.js

解决方案


当然你可以从串口读取流。我可以想象的一种方法是(在linux环境中,因为我觉得它更舒服):考虑到您可以将流打印为纯文本

cat /dev/ttyS0 

您可以创建并调用一个 bash,您可以在其中读取您需要知道的 tty 正在建立的串行端口,然后您可以将 stdout 重定向到文件并执行一些 greps ...等等等等,之后您可以使用文件当您收到所需的值时,观察者会触发操作。

无论如何,它只是最快捷的方式之一(可能不是最好的)

关于使用 node.js 读取串行端口,互联网上有大量示例和库,例如:

https://www.npmjs.com/package/serialport

安装库:

npm install --save-dev serialport

在这样的事情之后(我没有尝试过),只需遵循一些文档:

var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
/*need to know in which port is connected in case of windows i think 
COM1*/
var serialPort = new SerialPort("/dev/ttyS0", {
  baudrate: 9600,
  parser: serialport.parsers.readline("\n")
});

serialPort.on("open", function () {
 console.log('open');
  serialPort.on('data', function(data) {
  console.log(data);
  });
});

希望我有所帮助

祝你好运!


推荐阅读