2016-09-15 2 views
0

У меня есть сервер, который разговаривает с последовательным устройством. Если я непосредственно сконфигурирую последовательный порт inline в коде, он работает так, как ожидалось. Однако, если я передаю конфигурацию с помощью функции для создания нового объекта serialport, синтаксический анализатор не работает.Parialer Serialport не работает, когда сконфигурирован в функции

код, который работает:

// serial port initialization: 
var serialport = require('serialport'), // include the serialport library 
SerialPort = serialport.SerialPort, // make a local instance of serial 
portName = process.argv[2], // get the port name from the command line 
portConfig = { 
    baudrate : 9600, 
    databits : 8, 
    parity : 'none', 
    stopBits : 1, 
    buffersize : 4096, 
    parser : serialport.parsers.readline('\n') 
}; 
console.log(portConfig); 

// open the serial port: 
var myPort = new SerialPort(portName, portConfig); 
console.log(myPort); 

код, который не работает:

И объект данных, передаваемый в функцию (это жестко закодировано сейчас с параметрами мы знаем работу) :

function configureSerialPort(){ 
var portBundle = [{ 
    baudrate: 9600, 
    databits: 8, 
    parity: 'none', 
    stopBits: 1, 
    buffersize: 4096, 
}, 
{ 
    portName: 'com21' 
}]; 
socket.send(JSON.stringify(portBundle)); 
} 

порт myPort настраивается с помощью ввода с помощью кнопки на веб-сайте , Который читается над гнездом:

// this function runs if there's input from the client: 
socket.on('message', function (data) { 
    console.log("Client request received."); 
    console.log("SerialSend: " + data); 
    //check to see if the port is configured, if not, run configuration 
    if (typeof myPort === 'undefined') { 
     myPort = SetSerialPortConfig(data); 
     //prevents a write to the port with configuration data. 
     return false; 
    } 
    myPort.write(data); // send the data to the serial device 
}); 

Нам нужен веб-страницу, чтобы иметь возможность передавать в любой набор переменных конфигурации, так что мне нужно сделать метод работы функции. Если я делаю console.log(myPort); в любом случае, порты кажутся одинаковыми, поэтому я не понимаю, почему парсер не работает. Я могу визуально видеть, что данные передаются через светодиодный индикатор Tx & Rx на преобразователе RS-485, поэтому я знаю, что порт на устройстве отправляет и принимает данные, но синтаксический анализатор не видит символ EOL (я думаю,), так что это просто ждет.

ответ

0

Я столкнулся с подобным, и исправление для меня состояло в том, чтобы использовать parseInt() для всех вероятных целых типов, таких как baudrate и stopbits.

portConfig = { 
    baudrate : parseInt(portBundle[0].baudrate), 
    databits : parseInt(portBundle[0].databits), 
    parity : portBundle[0].parity, 
    stopBits : parseInt(portBundle[0].stopBits), 
    buffersize : parseInt(portBundle[0].buffersize),