2011-01-26 4 views
5

Ciao Voglio inviare un comando al mio dispositivo che è collegato tramite porta seriale. Come inviarlo?Invio tasto "INVIO" tramite porta seriale

Per esempio ho trovato questo su google search ma per me è inutile.

controllo + E è una scorciatoia da tastiera per il 5, quindi:

serial.Write(new byte[]{ 5 }, 0, 1); 
+0

Abbiamo bisogno di ulteriori informazioni sul protocollo utilizzato dal dispositivo per comunicare con il computer e viceversa. – Merijn

+0

serial.WriteLine (""); –

risposta

6

La versione microsoft di invio o nuova riga è \r\n che è 0x0d 0x0a in esadecimale.

  • \r è il ritorno del carrello

    In un guscio o una stampante ciò posizionare il cursore indietro all'inizio della linea.

  • \n è la linea di alimentazione

    Mette il cursore di una riga sotto, in alcune conchiglie questo mette anche il cursore all'inizio della riga successiva. una stampante farebbe semplicemente scorrere un po 'la carta.

Così tanto per la lezione di storia. Gli attuali sistemi Windows usano ancora questi caratteri per indicare la fine di una linea. Dos ha generato questo codice quando si preme immettere.

Il codice chiave è leggermente diverso. A cominciare dal chiave ESC essere il 1. Inserire è 28.

Fonte: linux hlkeycodes from www.comptechdoc.org

+0

Grazie, ho ricevuto la mia risposta, Mattia. –

4

Per inviare il tasto Invio, si dovrà utilizzare

serial.Write(new byte[]{13,10}, 0, 2); 

Assumendo che il sintassi per Control + E è corretto. Il tasto Invio viene interpretato e in genere salvato in un file come CR-LF. Tuttavia, a seconda del dispositivo, potrebbe richiedere solo CR=13 o LF=10. Dovresti provare tutte e 3 le combinazioni con il tuo dispositivo per vedere cosa si aspetta.

Se si sta cercando l'attuale scan code della chiave di invio, è "43" sulla tastiera di un PC 102/104. A seconda del computer effettivamente utilizzato, potrebbe essere diverso. Ad esempio su un Commodore 64 il codice di scansione per restituisce chiave è "1", che ha l'uso equivalente di Immettere sulla tastiera di un PC.

+0

Una piccola correzione, ho il sospetto che il terzo argomento nel metodo Write potrebbe essere il numero di byte da scrivere. Se la mia ipotesi è giusta, dovresti cambiarla da 1 a 2. – kaoD

+0

Probabilmente è giusto, lo cambierò. Non conosco l'API in questo caso, ma questa è una buona ipotesi. – Kibbee

0

Dipende da cosa è ENTER per il dispositivo. In Windows è CRLF (13 e 10), Linux è LF (solo 10). È solo una questione di ciò che il tuo dispositivo si aspetta, perché non può vedere ENTER, solo "byte 10, byte 13, byte qualunque .. . "

1

Quali le risposte precedenti hanno detto è come inviare un carattere di nuova riga - questo non è lo stesso come "il tasto Invio".Se ciò che si vuole fare è effettivamente indicare al dispositivo remoto che è stato premuto il tasto "Invio" sulla tastiera, che è completamente diverso e potrebbe non essere possibile, a seconda del sistema operativo e dell'hardware.

2

Grazie ragazzi.

Questo funziona:

serial.Write("\r\n") 

Nota: se si desidera inviare un comando attraverso la porta seriale, io uso la linea di seguito funziona per me.

serial.Write("your_command\r\n"); 
0

È necessario inviare i comandi CR (ritorno a capo) e LF (avanzamento riga o nuova riga).

Per questo è solo per inviare il comando di più il CR e LF come questo:

string command = "myCommand"; 

port.write(string.format("{0}\r\n", command)); 

\ r \ n = CR + LF -> Usato come un carattere di nuova riga in Windows

0

Ho aggiunto "\ r \ n" nella stringa e chiama il metodo Write() e funziona per me. Per esempio,

serial.Write("abcd\r\n");

0

Per inviare il tasto Invio, si dovrà utilizzare SerialPort.NewLine Proprietà - Un valore che rappresenta la fine di una linea

_serialPort = new SerialPort(); 
// ... this COM port parameters 
_serialPort.NewLine = "\r"; // "\r" - CR (0x0D); "\r\n" - CRLF (0x0D 0x0A) 
try 
{ 
    _serialPort.Open(); 
} 
catch (Exception ex) 
{ 
    Console.Write(ex.Message); 
    return; 
} 
_serialPort.WriteLine("Send string"); // Writes `Send string` string and the `NewLine` value to serial port 
// or 
_serialPort.WriteLine((char)2 + "VWD:040" + (char)3); // Writes `<HEX 0x02>VWD:040<HEX 0x03>` string and the `NewLine` value to serial port 

Per un esempio completo di lavorare con porta seriale, vedere here.