【问题标题】:Error in detecting serial port path automatically自动检测串口路径出错
【发布时间】:2020-08-25 06:09:00
【问题描述】:

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

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

自动检测串口路径的代码:- (注意:如果我尝试在控制台上打印 portName 会打印确切的端口路径,例如 COM4、COM3 等。但是在打开端口时出错。最后查看错误。如果我将 portName 分配为硬编码,例如 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);
}

打开串口出错:

Serial port error: Error: Opening : Unknown error code 123

电脑配置:-

操作系统:Windows 10

节点版本:v12.18.3

NPM 版本:6.14.6

serialport@9.0.1

【问题讨论】:

  • 如果你 console.log(portName);var myPort = new serialport(portName, {baudRate:9600}); 之前记录正确的值吗?我问的原因是serialport.list().then( 是异步调用,您可能会在将值分配给portName 之前尝试打开端口。
  • 控制台上没有显示任何值。我该如何解决? @摩尔达
  • 问题已解决。谢谢你。 @摩尔达

标签: node.js node-serialport node-usb


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2013-03-21
    • 2015-08-13
    相关资源
    最近更新 更多