TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: loverman24 en 04 de Abril de 2006, 11:38:00
-
Hola a todos, os comento mi duda:
Tengo un soft hecho en vb q recibe datos provenientes de un pic, el pic me los envia gracias al printf, tal como sigue:
printf ("%c%c%1.0f ", modo, canal, v_ohmicom);
resulta que esto envia, como maximo AA11000, es decir, 7 caracteres.
Bien, en la recepcion de datos en visual tengo hecho:
Private Sub Form_Load()
MSComm1.CommPort = 4
MSComm1.Settings = "9600,N,8,1
MSComm1.PortOpen = True
MSComm1.RThreshold = 6
End Sub
Private Sub MSComm1_OnComm() "Se genera el evento
MSComm1.Settings = "9600,N,8,1"
If MSComm1.InputLen > 5 Then
MSComm1.PortOpen = False
MSComm1.PortOpen = True
Exit Sub
End If
Buffer = MSComm1.Input
If Buffer = " " Then Exit Sub
canal = Left$(Buffer, 2)
lectura = Mid$(Buffer, 3, 5)
como veis, el evento oncomm salta cuando se recibe el 6º caracter, y luego, ya en el evento, descarto el ultimo, el 6º, y me quedo con los 5 primeros, siendo canal los dos primeros y lectura los restantes. Mi pregunta es:
¿por que me funciona?
como pueden salirme bien hasta AA11000? si tiene 7 caracteres?? pq me sale todo? esa es mi duda, no lo entiendo.
si alguien pudiera ayduarme
gracias, un saludo
-
el evento oncomm se produce cuando se recibe un numero de caracteres igual o mayor que el indicado en la propiedad RThreshold, por lo que como el pic envia 7 caracteres de una vez, cuando se produce el evento y lees el buffer de recepcion vas a estar leyendo los 7 caracteres, para leer solamente 6 caracteres cuando configures el MSComm1 debes poner la propiedad MSComm1.InputLen = 6, asi el MSComm leera del bufer de recepcion solo 6 caracteres, como no la has puesto en este momento MSComm1.InputLen es igual a 0, es decir leera todo lo que halla en el buffer de recepcion
saludos
.
-
Bueno. ahi karen te paso la respuesta al problema. Podes probar hacer asi, sin tener que tocar la propiedad InputLen:
Private Sub MSComm1_OnComm() 'Se genera el evento
MSComm1.Settings = "9600,N,8,1" 'a esta linea sacala de aca y ponela en el evento Form_Load
Buffer = MSComm1.Input
If len(Buffer) > 5 Then
MSComm1.PortOpen = False
MSComm1.PortOpen = True
Exit Sub
End If
If Buffer = " " Then Exit Sub
canal = Left$(Buffer, 2)
lectura = Mid$(Buffer, 3, 5)
End Sub
Exitos...