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:
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'))
{
while(con_tram < 5)
{
putcUSART('#');
while(BusyUSART());
putcUSART('#');
while(BusyUSART());
putrsUSART("897.008");
while(BusyUSART());
putrsUSART("-52.326");
while(BusyUSART());
putrsUSART("897.008");
while(BusyUSART());
putrsUSART("-52.326");
while(BusyUSART());
putrsUSART("897.008");
while(BusyUSART());
putrsUSART("-52.326");
while(BusyUSART());
putrsUSART("897.008");
while(BusyUSART());
putrsUSART("-52.326");
while(BusyUSART());
putcUSART('$');
while(BusyUSART());
putcUSART('$');
while(BusyUSART());
con_tram = con_tram + 1;
}
con_tram = 0;
}
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:
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
If log = False Then
If hexa = True Then
Texto.Text = Texto.Text & ascii2hex(MSComm1.Input) '+ vbCrLf
End If
If ascii = True Then
Texto.Text = Texto.Text & MSComm1.Input '+ vbCrLf
End If
If binario = True Then
Texto.Text = Texto.Text & ascii2bin(MSComm1.Input) '+ vbCrLf
End If
If decim = True Then
Texto.Text = Texto.Text & ascii2bin(MSComm1.Input) '+ vbCrLf
End If
Else
If hexa = True Then
Print #archivoLog, ascii2hex(MSComm1.Input) '+ vbCrLf
End If
If ascii = True Then
Print #archivoLog, MSComm1.Input '+ vbCrLf
End If
If binario = True Then
Print #archivoLog, ascii2bin(MSComm1.Input) '+ vbCrLf
End If
If decim = True Then
Print #archivoLog, ascii2bin(MSComm1.Input) '+ vbCrLf
End If
Seek (archivoLog), LOF(archivoLog) - 1 'hago que se imprima todo seguido en el archivo
End If
End If
Texto.SelStart = Len(Texto.Text)
TextoEnviar.SetFocus
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