自动检测串行端口路径时出错

问题描述

我是node-serialport的新手,在自动检测串行端口时遇到一些问题。下面是我的代码

var serialport = require('serialport');
var portName = " ";

用于自动检测串行端口路径的代码:- (注意:如果我尝试在控制台上打印portName,则会打印确切的端口路径,例如COM4,COM3等。但是在打开端口时出错。请参阅结尾处的错误。并且如果我将portName指定为硬编码,例如{{1} },那么它将成功运行。)

var portName = "COM4";

从串行端口读取数据的代码:-

serialport.list().then(
  ports => {
    ports.forEach(port => {
    if(port.manufacturer.includes("Silicon Labs")&&port.pnpId.includes("USB\\VID_10C4&PID_EA60\\0001")){
    console.log("Port Set");
    portName = port.path;
    }
   })
  },err => {
   console.error('Error listing ports',err)
  }
 );

打开串行端口时出错:

var myPort = new serialport(portName,{baudrate:9600}); var Readline = serialport.parsers.Readline; var parser = new Readline(); myPort.pipe(parser); myPort.on('open',showPortOpen); parser.on('data',readSerialData); myPort.on('close',showPortClose); myPort.on('error',showError); function showPortopen() { console.log('port open. Data rate: ' + myPort.baudrate); } function readSerialData(data) { console.log(data); return; } function showPortClose() { console.log('port closed.'); } function showError(error) { console.log('Serial port error: ' + error); }

计算机配置:-

操作系统:Windows 10

节点版本:v12.18.3

NPM版本:6.14.6

serialport@9.0.1

解决方法

问题已解决。我对代码做了一些更改。

用于自动检测串行端口路径的代码:-

serialport.list().then(
  ports => {
    ports.forEach(port => {
    if(port.manufacturer.includes("Silicon Labs")&&port.pnpId.includes("USB\\VID_10C4&PID_EA60\\0001")){
    console.log("Port Set");
    portName = port.path;
    var myPort = new serialport(portName,{baudRate:9600});
    var Readline = serialport.parsers.Readline;
    var parser = new Readline();
    myPort.pipe(parser);
    myPort.on('open',showPortOpen);
    parser.on('data',readSerialData);
    myPort.on('close',showPortClose);
    myPort.on('error',showError);
    }
   })
  },err => {
   console.error('Error listing ports',err)
  }
 );

从串行端口读取数据的代码:-

function showPortOpen() {
  console.log('port open. Data rate: ' + myPort.baudRate);
}
function readSerialData(data) {
  console.log(data);
  return;
}

function showPortClose() {
  console.log('port closed.');
}

function showError(error) {
  console.log('Serial port error: ' + error);
}