Autor Tema: Mala visualización de datos ASCII  (Leído 4408 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado alejos

  • PIC10
  • *
  • Mensajes: 4
Mala visualización de datos ASCII
« en: 19 de Diciembre de 2009, 08:06:14 »
Hola a todos,

tengo un problema con el Visual Basic comunicando con un PIC y aunque hay problemas parecidos en el foro, ninguno ha conseguido darme una solución por eso os lo expongo a continuación.

Yo recibo en el PC desde el pic 18F4550 una trama según el siguiente código:

Código: C
  1. if ((buffer[0] == 't' & buffer[1] == 'r' & buffer[2]== 'a' & buffer[3] == '2') || ( buffer[0] == 'T' & buffer[1] == 'R' & buffer[2]== 'A' & buffer[3] == '2'))
  2.                 {
  3.                         while(con_tram < 5)
  4.                         {      
  5.                                                         putcUSART('#');
  6.                                         while(BusyUSART());
  7.                                                         putcUSART('#');
  8.                                         while(BusyUSART());
  9.                                                         putrsUSART("897.008");
  10.                                         while(BusyUSART());
  11.                                                         putrsUSART("-52.326");
  12.                                         while(BusyUSART());
  13.                                                         putrsUSART("897.008");
  14.                                         while(BusyUSART());
  15.                                                         putrsUSART("-52.326");
  16.                                         while(BusyUSART());
  17.                                                         putrsUSART("897.008");
  18.                                         while(BusyUSART());
  19.                                                         putrsUSART("-52.326");
  20.                                         while(BusyUSART());
  21.                                                         putrsUSART("897.008");
  22.                                         while(BusyUSART());
  23.                                                         putrsUSART("-52.326");
  24.                                         while(BusyUSART());
  25.                                                         putcUSART('$');
  26.                                         while(BusyUSART());
  27.                                                         putcUSART('$');
  28.                                         while(BusyUSART());
  29.                                 con_tram = con_tram + 1;
  30.                         }
  31.                         con_tram = 0;
  32.                 }

He programado en VB6 una consola simple para recibir los datos y poder visualizarlos en ASCII, decimal, hexadecimal y binario. El problema es cuando recibo los datos en ASCII que al representarlos en el cuadro de texto, me aparecen mal. Sin embargo si los represento en otras formas me aparecen perfectamente. Os he adjuntado una imagen con la consola y ahí podéis ver que los datos se reciben mal.

Otra cosa que me ocurre es que cuando, en vez de representar los datos en pantalla en un cuadro de texto, los guardo directamente a un archivo de log, entonces los datos los recibo perfectamente en cualquier formato. También os adjunto un ejemplo de log donde veis que las tramas se reciben perfectamente.

Y aquí os pongo el código que tengo para recibir las tramas:

Código: Visual Basic
  1. Private Sub MSComm1_OnComm()
  2.  
  3.     If MSComm1.CommEvent = comEvReceive Then
  4.         If log = False Then
  5.             If hexa = True Then
  6.                 Texto.Text = Texto.Text & ascii2hex(MSComm1.Input) '+ vbCrLf
  7.            End If
  8.             If ascii = True Then
  9.                 Texto.Text = Texto.Text & MSComm1.Input '+ vbCrLf
  10.            End If
  11.             If binario = True Then
  12.                  Texto.Text = Texto.Text & ascii2bin(MSComm1.Input)  '+ vbCrLf
  13.            End If
  14.             If decim = True Then
  15.                 Texto.Text = Texto.Text & ascii2bin(MSComm1.Input)  '+ vbCrLf
  16.            End If
  17.         Else
  18.             If hexa = True Then
  19.                 Print #archivoLog, ascii2hex(MSComm1.Input) '+ vbCrLf
  20.            End If
  21.             If ascii = True Then
  22.                Print #archivoLog, MSComm1.Input '+ vbCrLf
  23.            End If
  24.             If binario = True Then
  25.                Print #archivoLog, ascii2bin(MSComm1.Input)  '+ vbCrLf
  26.            End If
  27.             If decim = True Then
  28.                 Print #archivoLog, ascii2bin(MSComm1.Input)  '+ vbCrLf
  29.            End If
  30.            
  31.              Seek (archivoLog), LOF(archivoLog) - 1 'hago que se imprima todo seguido en el archivo
  32.            
  33.         End If
  34.        
  35.     End If
  36.    
  37.     Texto.SelStart = Len(Texto.Text)
  38.     TextoEnviar.SetFocus
  39.  
  40. End Sub

¿Qué puede estar pasando? Se supone que estoy recibiendo bien los datos...Esto me está volviendo loco. Por si os interesa para tener más información os diré que que para convertir los datos a decimal, hexadeciamal y binario, siempre parto del dato en ASCII que es tal y como los recibe el MSCOMM de VB6.

¿Se os ocurre alguna solución? Muchas gracias por vuestra ayuda.

Saludos
Alejos

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mala visualización de datos ASCII
« Respuesta #1 en: 19 de Diciembre de 2009, 11:52:57 »
Hola, ¿qué compilador de C usaste en el pic?

¿Qué hace la función putrsUSART? Podrías revisar que envía después de la cadena (nueva línea, carriage return, etc.).

Desconectado alejos

  • PIC10
  • *
  • Mensajes: 4
Re: Mala visualización de datos ASCII
« Respuesta #2 en: 19 de Diciembre de 2009, 12:32:41 »
Hola migsantiago,

utilizo el MPLAB con el compilador C18.

La función putrsUSART manda una cadena de caracteres carácter por carácter.  He comprobado el funcionamiento del programa del PIC con otro programa de comunicación serie comercial (el Docklight) y el PIC funciona perfectamente. Te adjunto una imagen con la captura del Docklight para que veas que la trama se recibe desde el PIC hacia el PC en ASCII perfectamente.

Yo creo que el problema está en mi aplicación de VB6, pero no entiendo por qué, si el MSComm recibe caracteres ASCII, no se pueden representar en un cuadro de texto. Y, por el contrario, cuando los represento en HEX o binario o decimal, funciona perfectamente, cuando para obtener el valor correspondiente a cada caracter parto del valor ASCII qeu llega por el MSComm.Input... Y lo peor de todo es que en un archivo de texto, todo funciona perfectamente...

A ver si me podéis ayudar.

Saludos
Alejos


Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mala visualización de datos ASCII
« Respuesta #3 en: 19 de Diciembre de 2009, 13:30:09 »
Hola, en la imagen no me convence el hecho de que llegue un caracter extraño, los marqué con flechas.

http://img707.imageshack.us/img707/466/ascii.png


¿Qué valor HEXA tiene ese cuadrito rojo? Se supone que el pic sólo debe mandar los caracteres 897.008 y un NULL al final, pero se está viendo un cuadrito extra.

Desconectado alejos

  • PIC10
  • *
  • Mensajes: 4
Re: Mala visualización de datos ASCII
« Respuesta #4 en: 19 de Diciembre de 2009, 13:43:29 »
Hola,

ese carácter representa el '\0' que se añade en c al final de un vector de caracteres. El que aparezca en la recepción es otro problema que tengo y que también le estoy buscando una solución.

He hecho un mejor ejemplo con un archivo de texto para que puedas ver que la recepción haciendo un log es perfecta a excepción de ese \0 que aparece en hexadecimal, decimal y binario como un simple 0. En ASCII se representa como un espacio.

Estoy intentando hacer que cuando llegue ese caracter lo interprete como un espacio cuando lo muestro por el cuadro de texto. Aunque sigo con el mismo problema de la recepción en ASCII.

Saludos
Alejos

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mala visualización de datos ASCII
« Respuesta #5 en: 19 de Diciembre de 2009, 14:43:20 »
Habría que ver cómo define C18 el funcionamiento de putrsUSART porque creo que nunca se manda el NULL char. Se mandan CR y LF pero el NULL char ya no.

Lo que dije antes está mal, creo que solo se mandan 897.008 y nadamás.