Проблемы с записью последовательного порта nodejs?

Я использую модуль последовательного порта 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» установлен в другом месте кода.

Я не уверен, что происходит... есть идеи?


person io2work    schedule 23.01.2013    source источник


Ответы (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.

person Nicholas Kreidberg    schedule 31.03.2017