【问题标题】:nodejs serialport write issues?nodejs串口写入问题?
【发布时间】:2013-01-07 06:05:54
【问题描述】:

我正在使用 nodejs 串行端口模块 (https://npmjs.org/package/serialport),但在写入串行端口时遇到问题。

如果我只是简单地写入端口,如下所示,串行设备永远不会收到命令。

var serialport = require("serialport");
var sp = new serialport.SerialPort(serialPortPath);
sp.write("SYST:ADDR?\n");

但是,如果我使用如下所示的 setTimeout,那么它似乎可以工作?

var serialport = require("serialport");
var sp = new serialport.SerialPort(serialPortPath);
setTimeout(function(){sp.write("SYST:ADDR?\n")},1000);

仅供参考,“serialPortPath”在代码中的其他位置设置。

我不确定发生了什么...有什么想法吗?

【问题讨论】:

    标签: node.js node-serialport


    【解决方案1】:

    我想我是从 github(https://github.com/voodootikigod/node-serialport 页面...基本上看起来我错过了“打开”事件,如下所示:

    serialPort.on("open", function () {
      console.log("open");
      serialPort.on("data", function(data) {
        console.log("data received: " + data);
      });  
      serialPort.write("SYST:ADDR?\n", function(err, results) {
        console.log("err: " + err);
        console.log("results: " + results);
      });  
    });
    

    【讨论】:

      【解决方案2】:

      这是另一种非常有效的方法,它允许对特定串行设备进行动态寻址。在我的情况下,我只对连接到连接到我们集成系统的 Numato 设备感兴趣,这就是为什么我在列表回调中有条件逻辑。

       exports.testSerial = function(data) {
          serialPort.list(function(err, ports) {
      
            var port = {};
      
            for(var i = 0; i < ports.length; i++) {
              try {
                if(typeof ports[i].manufacturer != 'undefined' && ports[i].manufacturer.includes("Numato")) {
                  port = ports[i];
                }
              } catch(err) {
                console.dir(err);
              }
            }
      
            // the port will be opened via the constructor of this call
            var numato = new serial(port.comName, {baudrate : 19200}, function(err) {
              if(err) {
                return console.dir(err);
              }
      
              // by having the write call within the callback you can access it directly w/o using .on()
              numato.write('relay ' + data.state + ' ' + data.channel + '\r', function(err) {
                if(err) {
                  console.dir('error writing');
                  console.dir(err);
                }
                console.dir('serial message written');
                numato.close();
              });
            });
      
            return true;
      
          });
       }
      

      希望这对将来的某人有所帮助!作为参考,这是库版本 4.0.7。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        相关资源
        最近更新 更多