jueves, 18 de julio de 2013

Comunicación Serial, transmitiendo datos PIC a Visual Basic 6

Después de actualizar a la versión 1.1 el CDLA, ahora le toca el turno al programa en Visual Basic 6 para controlar las locomotoras desde el PC.

Este programa ya transmitía datos desde el PC al pic, ahora lo que quiero que haga es que lea el control manual y muestre en la pantalla los datos.
Para esto he utilizado el objeto MSCOMM1 que ya trae Visual Basic 6 con la instrucción "MScomm1.input".

Intentare explicarlo un poco y espero que sea comprensible:

Lo que mando desde el pic:

SEROUT portb.1 ,N9600,[#variable1,#variable2,#variable3,"AK"]

La variable 1 es una variable tipo BYTE que va desde 0 a 255
La variable 2 es una variable tipo BYTE que va desde 1 a 8
La variable 3 es una variable tipo BIT   que va desde 0 a 1

Con serialComunicator de mecanique saldría algo así:


010AK010AK010AK.... (Variable1 = 0, Variable2 =1, Variable3 =0, AK)

12831AK12831AK12831AK... (Variable1 = 128, Variable2 =,3 Variable3 =1, AK)

Esta seria la trama de datos.

¿Ahora como extraemos de esa maraña de datos los que nos interesan? Para obtener los datos tenemos la función .Input de MScomm. con el adquirimos los datos del cual luego iremos desgranando dato por dato.

La rutina que vamos a utilizar esta dentro de un timer como podemos ver en el siguiente ejemplo:


Private Sub Timer1_Timer()

dataIn = MSComm1.Input
If dataIn <> "" Then ' Si no es un texto vacio entonces...
  tdataIn = Len(dataIn)
  If tdataIn = 7 And Right(dataIn, 2) = "AK" Then
    
    Text2.Text = (Right(dataIn, 2))
    Text1.Text = dataIn
    
    Vel = Mid$(dataIn, 1, 3)
    total = ""
    For X = 1 To Len(Vel)
      If InStr("0123456789", Mid$(Vel, X, 1)) Then
        total = total & Mid(Vel, X, 1)
        N = total
        End If
    Next X
    
    dataIn = (Right(dataIn, 4))
    C = Left(dataIn, 1)
    
    dataIn = Right(dataIn, 3)
    T = Left(dataIn, 1)
    
    Text3.Text = C
    Text4.Text = T
    Text5.Text = N
    
  End If
End If
End Sub

Text1 corresponde a la lectura de toda la trama.

Text2 corresponde a la lectura de los caracteres de confirmación (AK).

Text3 corresponde a la lectura de la Variable2

Text4 corresponde a la lectura de la Variable3

Text5 corresponde a la lectura de la Variable1




El tema de como sacar el los números  de una cadena, viene muy bien explicado y con varios ejemplos en este foro de Visual Basic.




1 comentario :

  1. Hola amigo esta súper tu explicación y me a orientado mucho, te cuento que yo intento separar 3 variables que mando desde el PIC estas son de 8 Bits 0-255 pero cuando cambian su valor y dejan de ser 3 digitos todo se revuelve en los textBox me podrías orientar un poco sobre que puedo hacer ?

    ResponderEliminar