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? pues para eso tenemos el .input de MScomm. con el adquirimos los datos del cual luego iremos desgranando dato por dato.


La rutina, dentro de un timer es esta:

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


El Text1 corresponde a la lectura de toda la trama.
El Text2 corresponde a la lectura de los caracteres de confirmación.
El Text3 corresponde a la lectura de la Variable2
El Text4 corresponde a la lectura de la Variable3
El 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.
También encontrareis información muy util en este otro foro sobre microcontroladores.

De hecho mi ejemplo es una adaptación de el código de las 2 páginas.

Ejemplo en Visual Basic para comunicación serial entre PIC y PC 

By PeYuTrOn

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