Enviar datos en hex por el puerto serie.

A la pregunta:

è Necesitaría información de cómo enviar datos en hex por el puerto serie, porque por defecto lo hace en ASCII.

Realmente la información no se envía en ASCII por defecto, si no en función al ‘Encoding’ utilizado. En realidad estamos serializando un Byte…

        Dim MiPuerto = My.Computer.Ports.OpenSerialPort("COM1")

        MiPuerto.Write(&HFF)    'Enviar valor hex FF

        Dim Valor As Byte = 255

        MiPuerto.Write(Valor)   'Enviar byte 255


En ambos casos enviaremos ocho bits ‘1111 1111’ si utilizamos una longitud de 8, por lo que el DTE recibirá el valor binario 255.

En determinadas situaciones, el micro controlador espera que le mandemos los ‘nibbles’ encapsulados en ASCII, o sea para enviarle el valor de 8 bits, necesitaremos su representación hexadecimal en forma de dos Bytes ASCII, por ejemplo los caracteres ‘7’ y ‘F’ para el valor 127, por lo tanto estaremos mandando 16bits de datos para representar un valor hexadecimal de 8bits.

En tal caso simplemente especificaremos

        Valor = 127

        MiPuerto.Write(Hex(Valor))

 

En este supuesto el micro controlador recibirá ‘7F’, correspondiente al valor binario 127.

No dudéis en continuar esta conversación si la explicación no resulta lo suficientemente clara.
Pep Lluis,

Published Mon, Mar 9 2009 18:08 by peplluis
Filed under:

Comments

# re: Enviar datos en hex por el puerto serie.

Tuesday, August 25, 2009 7:50 PM by Edwin

Hola Luis me gustaria si me podrias dar una mano en como seria el ejemplo en codigo c# y que librerias usas, te lo agradeceria de antemano si lees este comentario.

 

# re: Enviar datos en hex por el puerto serie.

Wednesday, August 26, 2009 10:40 AM by peplluis

Ok Edwin,

Tienes la respuesta en tu correo, si necesitas alguna aclaracion, puedes contactar de nuevo.

Espero que la respuesta te sea util,

Pep Lluis,

# re: Enviar datos en hex por el puerto serie.

Wednesday, September 09, 2009 7:38 PM by Armando

hola qusiera saber como poder enviar datos en hexadecimal por el puerto serie pero en C#.

De antemano GRACIAS.

# re: Enviar datos en hex por el puerto serie.

Monday, September 14, 2009 4:51 AM by peplluis

Hola Armando,

Las expresiones en C# para valores hex son...

// Enviar valores hex (En realidad bytes)

byte[] miBuffer = new byte[81];

miBuffer[0] = 0x01;

miBuffer[1] = 0x20;

miBuffer[2] = 0x21;

miBuffer[3] = 0x22;

miBuffer[4] = 0x23;

miBuffer[5] = 0x24;

miBufferDevil = 0x25;

// Bla... Bla

miBuffer[80] = 0x3f;

this.serialPort1.Write(miBuffer, 0, miBuffer.Length);

# consulta

Tuesday, October 13, 2009 3:43 PM by migue

hola puedes enviarme tu correo , tengo una duda y creo que me puedes orientar.

saludos

miguel

elbuenar@hotmail.com

# re: Enviar datos en hex por el puerto serie.

Wednesday, October 14, 2009 4:03 AM by peplluis

Hola elbuenar,

Puedes conmigo a traves de la opcion [Contact] en el menu superior al margen derecho de esta pagina.

Saludos,

Pep Lluis,

# re: Enviar datos en hex por el puerto serie.

Thursday, October 29, 2009 11:14 AM by Juan Rojas

Hola

Tu blog esta muy bien.

Te pido ayuda espero me puedas orientar.

Estoy haciendo un proyecto en C# para un lector Mifare y la unica información que tengo es que le tarjetas Mifare 4K y es USB to UART bridge. Y cuando me entregaron el lector solo tenia los drivers de CP2102 para el puerto USB y no tenia documentación. Y soy un principiante en C#. Y documentandome hice la primera parte para de los Mifare COMMAND SET en C#. Y este es el siguiente codigo:

Para el primer paso es abrir el puerto

private bool Send_Data(byte[] cmd, int Lenght)
       {
       //Envia datos
           int index = 0;
           try
           {
               if (this.PuertoCOM.IsOpen)
               {
                   this.PuertoCOM.ReadTimeout = 0x7d0;
                   cmd[cmd.Length - 2] = this.CheckSum(cmd);
                   this.PuertoCOM.Write(cmd, 0, cmd.Length);
                   while (index < this.datos.Length)
                   {
                       this.datos[index] = 0;
                       index++;
                   }
//recibe datos
                   string s = this.PuertoCOM.ReadExisting();
                   for (index = 0; index < Lenght; index++)
                   {
                       this.datos[index] = (byte)this.PuertoCOM.ReadByte();
                   }
                   this.fnShowInWnd(this.datos); // Muestra datos en TextBox
               }
               return true;
           }
           catch (TimeoutException exception)
           {
               MessageBox.Show(exception.Message);
               return false;
           }

El problema es en el tercer mejor dicho dos problemas.

Cuando lee varias veces la misma tarjeta el ID es diferente.

El otro problema es cuando lee varias tarjetas primero la Tarjeta 1 despues tarjeta 2 y Tarjeta 3, al leer la ultima tarjeta (3) el buffer se queda con la tarjeta (2).

No se que este haciendo mal.

Existe alguna otra forma de leer una tarjeta?.

Espero me puedas ayudas. Hasta pronto.

# re: Enviar datos en hex por el puerto serie.

Monday, November 02, 2009 2:06 AM by peplluis

Hola,

En este caso creo que estas asociando la recepcion de datos del dispositivo a la transmision de los tuyos desde el equipo.

Deberias desvincular envio/recepcion... te aconsejo utilices las tecnicas descritas en alguno de los ejmplos del Blog... utilizando el 'DataReceived' para poder obtener tramas completas.

Suerte... y ya nos tendras al corriente!

Pep Lluis,

# re: Enviar datos en hex por el puerto serie.

Monday, November 23, 2009 5:37 AM by REbe

Hola pepLLuis, e estado mirando el blog y veo que pilotas mucho en tema de dispositivos, a ver si puedo ver la luz que seguro que para ti es sencillo.

El tema es que estoy trabajando con una balanza y el método de transmisión es el modelo TISA, es decir tengo que mandar una trama al puerto COM para que me mande la información el formato de la trama es 98PPPPPCrLf

Donde:

98: 0x38h y 0x39h

PPPPP: 5 dígitos para el precio.

C: Checksum, suma lógica (XOR) de todos los caracteres

anteriores.

CR: 0x0Dh LF: 0x0Ah

La cosa es que no se como enviarlo o lo envío mal porque se queda sin respuesta en serialPort1_DataReceived y si ago un ReadLine se queda bloqueado. La configuración del puerto la tengo correcta creo que fallo a la hora de mandar el dato o es un tema de demora.

Me puedes dar algunas pautas por favor, estoy usando Framework 3.5 y C# la cosa es que estoy bloqueado.

Muchas gracias pepLLuis.

# re: Enviar datos en hex por el puerto serie.

Friday, November 27, 2009 9:43 AM by peplluis

Hola Rebe.. has probado usar este ejemplo :

msmvps.com/.../componer-las-tramas-recibidas-en-el-puerto-serie-c.aspx

En el se explica como enviar/componer las tramas recibidas. Debes descargarte el archivo adjunto : TramasPuertoSerie.zip, creo que es justo lo que andas buscando.

Si no responde no dudes en contactar conmigo a traves de la opcion [Contact] en la parte superior derecha de esta pagina.

Saludos,

Pep Lluis,

Leave a Comment

(required) 
(required) 
(optional)
(required)