2016-09-15 1 views
0

Ich habe einen Server, der mit einem seriellen Gerät spricht. Wenn ich den seriellen Anschluss direkt im Code inline konfiguriere, funktioniert es wie erwartet. Wenn ich jedoch die Konfiguration über eine Funktion übergebe, um ein neues Serialport-Objekt zu erstellen, funktioniert der Parser nicht.Serialport-Parser funktioniert nicht, wenn in Funktion konfiguriert

-Code, das funktioniert:

// 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); 

Code, der nicht funktioniert:

bestanden in die Funktion

Und das Datenobjekt (dies schwer jetzt ist codiert mit Parametern wir wissen, Arbeit) :

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

Die Port myPort konfiguriert ist, von einer Taste auf einer Webseite unter Verwendung der Eingabe , Die über die Socket gelesen wird:

// 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 
}); 

Wir brauchen die Web-Seite in jedem Satz von Konfigurationsvariablen zu übergeben zu können, also muss ich die Funktion Methode funktioniert. Wenn ich einen console.log(myPort); in jedem Fall tue, scheinen die Häfen identisch zu sein, also kann ich nicht sehen, warum der Parser nicht arbeitet. Ich kann visuell sehen, dass Daten über die LED Tx & Rx Lichter auf dem RS-485 Konverter übertragen werden, so weiß ich, dass der Port auf dem Gerät Daten sendet und empfängt, aber der Parser sieht nicht das EOL-Zeichen (denke ich), so wartet es nur.

Antwort

0

Ich stieß auf ähnliche, und die Lösung für mich war, parseInt() für alle möglichen Integer-Typen, wie baudrate und stopbits zu verwenden.

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), 
Verwandte Themen