2016-06-29 12 views
0

Ich habe erfolgreich die Anweisungen zum Erstellen einer Webseite mit den seriellen Schnittstellen gefunden here zu folgen. Und hier ist die GitHub repository for his project. Ich habe es leicht geändert, um Windows COM-Ports zu verwenden und die Arduino-Daten zu fälschen. Jetzt versuche ich, es weiter zu modifizieren, um mit einem der Testboards meiner Firma zu sprechen. Ich habe eine bidirektionale Kommunikation eingerichtet, sodass ich weiß, dass ich über die serielle Schnittstelle in beide Richtungen sprechen kann.Senden CR LF in JavaScript-Zeichenfolge zu node.js Serialport-Server

Senden id?CRLF über serielle auf der Platine wird eine Antwort von etwas wie id=91 erhalten. Ich kann dies in PuTTY tun, indem Sie einfach id? & drücken die Enter-Taste oder in DockLight durch Erstellen einer Sendefolge id?rn, die beide wie erwartet funktionieren, bekomme ich die id=91 Antwort.

Allerdings versucht im Client client.js zu versuchen, senden:in der Konsole nicht, aber ich sehe es mit einer zusätzlichen Zeile in der Serverantwort angezeigt. So sehe ich etwas wie folgt aus:

Message received 
id? 
                    <=blank line 

Also habe ich versucht, indem Sie die ASCII-Äquivalente zu senden:

var id = String.fromCharCode(10,13); 
socket.send("id?" + id); 

Was auch nicht funktioniert, obwohl zwei zusätzliche Zeilen in dem Server angezeigt.

Message received 
id? 
                    <=blank line 
                    <=another blank line 

EDIT: Ich habe auch versucht: socket.send('id?\u000d\u000a'); gleiche Ergebnisse wie die erste Nachricht Klappentext oben erhalten.

ich den gesendeten Befehl sehen ankommen auf dem Server (ich es ein wenig geändert haben von dem Client eine console.log beim Empfang einer Nachricht zu tun):

function openSocket(socket){ 
console.log('new user address: ' + socket.handshake.address); 
// send something to the web client with the data: 
socket.emit('message', 'Hello, ' + socket.handshake.address); 

// this function runs if there's input from the client: 
socket.on('message', function(data) { 
    console.log("Message received"); 
    console.log(data); 
    //here's where the CRLF should get sent along with the id? command 
    myPort.write(data);// send the data to the serial device 
}); 

// this function runs if there's input from the serialport: 
myPort.on('data', function(data) { 
    //here's where I'm hoping to see the response from the board 
    console.log('message', data); 
    socket.emit('message', data);  // send the data to the client 
}); 
} 

Ich bin nicht positiv, dass die CRLF das Problem ist, aber ich bin mir ziemlich sicher, dass es ist. Möglicherweise wird es vom Server verschluckt?

Wie kann ich es in eine Zeichenfolge einbetten, die an den Server gesendet wird, damit es richtig interpretiert und an die serielle Schnittstelle gesendet wird?

Andere SO Seiten, die ich gelesen habe:

How can I insert new line/carriage returns into an element.textContent?

JavaScript string newline character?

Antwort

0

Nun, es stellt sich heraus, dass das Problem, wie ich nicht genau das CRLF war, dachte, es war, wie der String-Terminator wurde behandelt. Alle unsere Geräte verwenden, was wir können eine "S-Eingabeaufforderung" (s>) für, wenn ein Befehl verarbeitet wurde. Wenn es fertig ist, gibt das Board eine S-Eingabeaufforderung zurück, also habe ich den ursprünglichen Server-Parser-Code modifiziert, um danach zu suchen. Dies ist jedoch ein Response-Terminator, kein Request-Terminator. Sobald ich es zurück zu parser: serialport.parsers.readline('\n') änderte, fing es an zu arbeiten.

// 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, 
    // call myPort.on('data') when a newline is received: 
    parser: serialport.parsers.readline('\n') 
    //changed from '\n' to 's>' and works. 
    //parser: serialport.parsers.readline('s>') 
}; 
Verwandte Themen