У меня есть сервер, который разговаривает с последовательным устройством. Если я напрямую настрою последовательный порт в коде, он будет работать, как и ожидалось. Однако, если я передам конфигурацию через функцию для создания нового объекта последовательного порта, синтаксический анализатор не сработает.
Код, который работает:
// 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 SetSerialPortConfig(data) {
var portBundle = JSON.parse(data);
var serialport = require('serialport'), // include the serialport library
SerialPort = serialport.SerialPort,
portName = portBundle[1].portName,
portConfig = {
baudrate : portBundle[0].baudrate,
databits : portBundle[0].databits,
parity : portBundle[0].parity,
stopBits : portBundle[0].stopBits,
buffersize : portBundle[0].buffersize,
parser : serialport.parsers.readline('\n')
};
return new SerialPort(portName, portConfig);
}
И объект данных, переданный в функцию (пока это жестко закодировано с параметрами, которые, как мы знаем, работают):
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 (я думаю ), так что остается только ждать.