2011-01-26 30 views
5

Hola quiero enviar algún comando a mi dispositivo que está conectado a través del puerto serie. ¿Cómo enviarlo?Enviando la tecla "ENTER" a través del puerto serie

Por ejemplo He encontrado esto en la búsqueda de google, pero para mí es inútil.

control + E es un atajo de teclado para el 5, por lo que:

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

Necesitamos más información sobre el protocolo que el dispositivo usa para comunicarse con su computadora y viceversa. – Merijn

+0

serial.WriteLine (""); –

Respuesta

6

La versión de Microsoft de la nueva línea es \r\n que es 0x0d 0x0a en hexadecimal.

  • \r es el retorno de carro

    En una cáscara o una impresora esto pondría el cursor hacia atrás hasta el principio de la línea.

  • \n es el avance de línea

    pone el cursor debajo de una línea, en algunas conchas esto también pone el cursor al comienzo de la siguiente línea. una impresora simplemente desplazaría el papel un poco.

Esto en cuanto a la clase de historia. Los sistemas de Windows actuales todavía usan estos caracteres para indicar un final de línea. Dos generó este código al presionar ingrese.

El código de la llave es un poco diferente. Comenzando con la tecla ESC ser el 1. Introduzca es 28.

Fuente: linux hlkeycodes from www.comptechdoc.org

+0

Gracias tengo mi respuesta Matthias. –

4

Para enviar la tecla enter, usted tendría que usar

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

Asumiendo que su sintaxis para El control + E es correcto. La tecla Intro se interpreta y generalmente se guarda en un archivo como CR-LF. Sin embargo, dependiendo de su dispositivo, es posible que solo requiera CR=13 o LF=10. Debe probar las 3 combinaciones con su dispositivo para ver lo que espera.

Si está buscando la actual scan code de la tecla Intro, es "43" en un teclado de PC 102/104. Dependiendo de la computadora que está usando, puede ser diferente. Por ejemplo, en un Commodore 64, el código de escaneo para Devuelve clave es "1", que tiene el uso equivalente de Ingrese en el teclado de una PC.

+0

Una pequeña corrección, sospecho que el tercer argumento en el método de escritura podría ser el número de bytes que se escribirán. Si mi suposición es correcta, debería cambiarla de 1 a 2. – kaoD

+0

Probablemente sea cierto, cambiaré eso. No conozco la API en este caso, pero esa es una buena suposición. – Kibbee

0

Depende de lo que es ENTER para su dispositivo. En Windows es CRLF (13 y luego 10), Linux es LF (solo 10). Es solo cuestión de lo que espera el dispositivo, porque no puede ver ENTER, solo "byte 10, byte 13, byte". . "

1

Lo que las respuestas anteriores que han dicho es cómo enviar un carácter de nueva línea - esto no es lo mismo como "la tecla Intro".Si lo que quiere hacer es indicarle a la máquina remota que se ha presionado la tecla "enter" en el teclado, eso es completamente diferente, y puede que no sea posible, dependiendo de su sistema operativo y hardware.

2

Gracias chicos.

Esto funciona:

serial.Write("\r\n") 

Nota: si desea enviar un comando a través del puerto serie, yo uso la línea de abajo funciona para mí.

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

Debe enviar los comandos CR (Retorno de carro) y LF (Avance de línea, o nueva línea).

Para esto es sólo para enviar el comando más la del CR y LF como esto:

string command = "myCommand"; 

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

\ r \ n = CR + LF -> Se utiliza como un carácter de nueva línea en Windows

0

Agregué "\ r \ n" en cadena y llamé al método Write() y me funciona. Por ejemplo,

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

0

Para enviar la tecla enter, usted tendría que usar SerialPort.NewLine Propiedad - Un valor que representa el final de una línea

_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 

Para un ejemplo completo de trabajar con puerto serial, vea here.