Autor Tema: AYUDA CON VISUAL BASIC para control de cargas por PC  (Leído 6804 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
AYUDA CON VISUAL BASIC para control de cargas por PC
« en: 14 de Diciembre de 2007, 19:47:22 »
 PROBLEMAS CON MSCOMM DE VISUAL BASIC:

Hola amigos de TODOPIC, les envio este mensaje con el propósito de pedirles su ayuda con un problema que tengo en este momento con la elaboracion de un proyecto, que hace uso de una interfaz grafica implementada en Visual Basic 6.0 para transmitir ordenes por el puerto RS-232. Esta interfaz sera capaz de controlar el apagado o encendido de 8 cargas, con ayuda de un PIC 16F84A, los integrados MAX232 y el ULN2803. Este ultimo amplificara la corriente que el PIC proporciona para activar unos reles.

 Mi principal problema en este momento radica en que no se como hay que acondicionar la orden a transmitir para que sea procesada adecuadamente por el pic, por ejemplo: si quiero encender la primera y las dos ultimas cargas , y apagar el resto tendría que enviar por el puerto RS232 el siguiente dato (10000011), es decir como hay que declarar mi variable?,
Como puedo hacer para activar o desactivar una o mas cargas sin alterar el estado de las que no quiero alterar?, ya que con el programa en Visual Basic que tengo en este momento solo puedo apagar o encender una carga a la vez, es decir solo puedo tener una de las ocho carga encendida.

PARA LA INTERFAZ GRAFICA ESTOY UTILIZANDO EL MSCOMM Y OCHO BOTONES QUE SIMULAN LOS INTERRUPTORES DE LAS OCHO CARGAS.

Espero, que puedan ayudarme o aconsejarme sobre este problema, les estare muy agradecido.
MUCHAS GRACIAS!!!!

ATTE:  COCIBOLCA        :)

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #1 en: 18 de Diciembre de 2007, 05:36:59 »
Cada vez que pulses un determinado botón se mandará un grupo de 8 bits con la única modificación del bit que desees cambiar. ¿Como tienes el programa?

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #2 en: 18 de Diciembre de 2007, 20:25:05 »
Hola a todos amigos de TODOPIC, mi código fuente en visual basic para la simulación de interruptores de las cargas es el siguiente. Si notan algún error en la programación por favor haganmelo saber se los agradeceré, aunque al momento de depurarlo no obtuve errores. Adjunto también el programa ejecutable en Visual Basic 6.0           :)  :?

Private Sub Carga1_Click()
If MSComm1.PortOpen = True Then
Dim a(1) As Byte
    a(1) = 128
MSComm.Output = a
End If
End Sub

Private Sub Carga2_Click()
If MSComm1.PortOpen = True Then
Dim b(1) As Byte
    b(1) = 64
MSComm.Output = b
End If
End Sub

Private Sub Carga3_Click()
If MSComm1.PortOpen = True Then
Dim c(1) As Byte
    c(1) = 32
MSComm.Output = c
End If
End Sub

Private Sub Carga4_Click()
If MSComm1.PortOpen = True Then
Dim d(1) As Byte
    d(1) = 16
MSComm.Output = d
End If
End Sub

Private Sub Carga5_Click()
If MSComm1.PortOpen = True Then
Dim e(1) As Byte
    e(1) = 8
MSComm.Output = e
End If
End Sub

Private Sub Carga6_Click()
If MSComm1.PortOpen = True Then
Dim f(1) As Byte
    f(1) = 4
MSComm.Output = f
End If
End Sub

Private Sub Carga7_Click()
If MSComm1.PortOpen = True Then
Dim g(1) As Byte
    g(1) = 2
MSComm.Output = g
End If
End Sub

Private Sub Carga8_Click()
If MSComm1.PortOpen = True Then
Dim h(1) As Byte
    h(1) = 1
MSComm.Output = h
End If
End Sub

Private Sub Check1_Click()

End Sub

Private Sub Conectar_Click()
    'comprueva que el puerto este cerrado para poder abrirlo
    If MSComm1.PortOpen = False Then
               'determina el puerto que  seleccionado
                    MSComm1.CommPort = 1
                    MSComm1.PortOpen = True
        Else
            MSComm1.CommPort = 2
        End If
        'determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad,
        '8-Cantidad de bits de envio y recepcion por paquete,
        '1-Determina los bits de parada
        MSComm1.Settings = "9600,N,8,1"
        'lee todo el buffer de entrada para que quede vacio
        MSComm1.InputLen = 0
        'Abre el puerto seleccionado
        MSComm1.PortOpen = True
        Me.Caption = "Conectado por el puerto " & MSComm1.CommPort
    End Sub

Private Sub Desconectar_Click()
    If MSComm1.PortOpen Then
        'cierra el puerto
        MSComm1.PortOpen = False
        Me.Caption = "Desconectado"
    End If
End Sub

Private Sub parogeneral_Click()
If MSComm1.PortOpen = True Then
Dim enviar(1) As Byte
enviar(1) = 0
MSComm.Output = enviar
End If
End Sub

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #3 en: 19 de Diciembre de 2007, 01:33:33 »
Perdona cuando dije bits, quería decir bytes.
Si quieres poner a 1 las salidas 0 y 7 podrías enviar la cadena "1******1". Si ahora quieres poner a 0 la salida 7, "0*******". El PIC receptor hará caso únicamente de aquellas posiciones que sean 0 ó 1.

Un saludo

Desconectado Rodricity

  • PIC10
  • *
  • Mensajes: 43
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #4 en: 19 de Diciembre de 2007, 15:00:02 »
es mas facil asi mira:

 pones uno de estos cuadros (ya me acorde, se llaman frames) y pones 8 casillas de activacion (de esas cuadradas ( checkbox ))

 y luego un boton que diga "actualizar"

 Al apretar el boton actualizar revisas cada una de las casillas

 quedaria algo asi

 ---- boton actualizar fue presionado -----

if checkbox1.value = true then
caracter_salida =  1

else

caracter_salida = 0

end if

if checkbox2.value = true then
caracter_salida = caracter_salida + 2
end if


if checkbox3.value = true then
caracter_salida = caracter_salida + 4
end if


if checkbox4.value = true then
caracter_salida = caracter_salida + 8
end if


if checkbox5.value = true then
caracter_salida = caracter_salida + 16
end if


if checkbox6.value = true then
caracter_salida = caracter_salida + 32
end if


if checkbox7.value = true then
caracter_salida = caracter_salida + 64
end if

if checkbox8.value = true then
caracter_salida = caracter_salida + 128
end if

Mscomm1.output = caracter

 y listo.

 no se si s entiende...
« Última modificación: 19 de Diciembre de 2007, 15:04:09 por Rodricity »

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #5 en: 20 de Diciembre de 2007, 23:53:38 »
Gracias RODRICITY, tu idea me parece genial, empezare a programar tomando en cuenta tu util sugerencia, mas luego adjuntare en este sitio el ejecutable en visual basic haciendo uso del frame y los checkboxs. Aunque hay algo que no tengo claro con respecto a la variable caracter_salida, es decir ¿Esta variable actua como un acumulador?, ademas, al momento de que se sumen los valores en el caso de que el estado de dos o mas CHECKBOXS sean verdaderos, ¿ No enviara un valor distinto al deseado? . Espero me aclares estas dudas, de nuevo gracias por tu ayuda.
         
SALUDOS!!!    :)         :-/

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #6 en: 21 de Diciembre de 2007, 00:11:49 »
Para los interesados, les adjunto el lenguaje ensamblador que tendra el PIC para recibir la orden del puerto serial RS-232

Cualquier sugerencia, sera bienvenida.


SALUDOS!!!        :D


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #7 en: 21 de Diciembre de 2007, 02:11:06 »
Hola. Te adjunto cómo haría yo para procesar lo que necesitás.

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #8 en: 22 de Diciembre de 2007, 00:05:13 »
Gracias BrunoF, por molestarte y por haber dedicado una parte de tu valioso tiempo en realizar la programacion que adjuntastes, ya descargue tus utiles sugerencias y en este momento estoy realizando la simulacion con el MPLAB, de nuevo GRACIAS!!!

Luego, publicare mis resultados y los posibles problemas que surgieron en el proceso.  :)

SALUDOS!!!      :-/

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #9 en: 23 de Diciembre de 2007, 00:06:23 »
Hola a todos amigos de TODOPIC, gracias a la colaboración de ustedes he avanzado mucho en la elaboracion de mi proyecto, sin sus utiles sugerencias y aclaraciones en este momento estaría perdido. En especial quiero agradecer a RODRICITY y a BrunoF, por haberse molestado en responder a mis dudas. Les adjunto el programa en Visual Basic que fue proporcionado por BrunoF, pero con unas pequeñas modificaciones, ya que este contiene el comando MSComm.

Luego les informare sobre el desarrollo final del proyecto.

SALUDOS!!!      :)

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #10 en: 19 de Enero de 2008, 00:24:34 »
Hola a todos, como novedad para el proyecto, es que he tenido problemas a la hora de querer enviar el dato por el puerto RS232, me manda un error, diciendo que la variable no ha sido declarada. A continuacion les muestro el codigo fuente.


Option Explicit

Dim Salida As Byte

Private Sub CmdGo_Click()

Dim i As Integer

Salida = 0

For i = Chk.LBound To Chk.UBound
    Salida = Salida + Chk(i).Value * 2 ^ i
Next

'Salida contiene el valor a enviar

MsgBox Salida
End Sub

Private Sub ENVIAR_Click()
 MSComm1.Settings = "9600,N,8,1"
 MSComm1.CommPort = 1
   MSComm1.PortOpen = True
   Dim Salida As Byte
   MSComm1.Output = Salida
End Sub

Private Sub conectar_Click()
  'comprueva que el puerto este cerrado para poder abrirlo
    If MSComm1.PortOpen = False Then
               'determina el puerto que  seleccionado
                    MSComm1.CommPort = 1
                    MSComm1.PortOpen = True
        Else
            MSComm1.CommPort = 2
        End If
        'determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad,
        '8-Cantidad de bits de envio y recepcion por paquete,
        '1-Determina los bits de parada
        MSComm1.Settings = "9600,N,8,1"
        'lee todo el buffer de entrada para que quede vacio
                'Abre el puerto seleccionado
                Me.Caption = "Conectado por el puerto " & MSComm1.CommPort
    End Sub

Private Sub Desconectar_Click()
If MSComm1.PortOpen = True Then
        'cierra el puerto
        MSComm1.PortOpen = False
        Me.Caption = "Desconectado"
    End If
End Sub

Private Sub Form_Load()

Dim i As Integer

'Insertar números a los pulsadores

For i = Chk.LBound To Chk.UBound
    Chk(i).Caption = i
Next

End Sub

Private Sub MSComm1_OnComm()
MSComm1.Settings = "9600,N,8,1"
Select Case MSComm1.CommEvent
' Controlar cada evento o error escribiendo
   ' código en cada instrucción Case

   ' Errores
      Case comBreak   ' Se ha recibido una interrupción.
      Case comEventFrame   ' Error de trama
      Case comEventOverrun   ' Datos perdidos.
      Case comEventRxOver   ' Desbordamiento del búfer
                           ' de recepción.
      Case comEventRxParity   ' Error de paridad.
      Case comEventTxFull   ' Búfer de transmisión lleno.
      Case comEventDCB   ' Error inesperado al recuperar DCB.

   ' Eventos
      Case comEvCD   ' Cambio en la línea CD.
      Case comEvCTS   ' Cambio en la línea CTS.
      Case comEvDSR   ' Cambio en la línea DSR.
      Case comEvRing   ' Cambio en el indicador de
                     ' llamadas.
      Case comEvReceive   ' Recibido nº SThreshold de
                        ' caracteres.
      Case comEvSend   ' Hay un SThreshold
                     ' caracteres en el búfer
                     ' de transmisión.
      Case comEvEOF   ' Se ha encontrado un carácter
                     ' EOF en la entrada.
   End Select

End Sub

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #11 en: 20 de Enero de 2008, 23:14:34 »
Setear tantas veces la configuración y apertura del puerto no es lo óptimo. Te puede fallar....

En este sub:

Private Sub ENVIAR_Click()
 MSComm1.Settings = "9600,N,8,1"
 MSComm1.CommPort = 1
   MSComm1.PortOpen = True
   Dim Salida As Byte
   MSComm1.Output = Salida
End Sub

Salida está declarada como variable global, por lo que exíste dentro de todo el Formulario. Entonces, eliminá la línea    "Dim Salida As Byte"

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado cocibolca

  • PIC10
  • *
  • Mensajes: 15
Re: AYUDA CON VISUAL BASIC para control de cargas por PC
« Respuesta #12 en: 21 de Enero de 2008, 15:44:15 »
Tenias toda la razon BrunoF, al momento de depurar el programa no hubo errores, dado que la variable Salida, ya estaba declarada previamente. Debo aclarar que al momento de enviar la variable Salida con el comando MScomm.Output, me enviaba un error, ya que, como averigue posteriormente, el MScomm, solo reconoce y envia variables del tipo Chr, por lo tanto realice una pequeñan correccion antes de enviar el dato:


Private Sub ENVIAR_Click()
         MSComm1.Output = Chr(Salida)
End Sub

De esta forma el Mscomm.Output, asocia el valor en Byte de Salida con su equivalente en ASII, y listo, no hubo problemas. Gracias a la valiosa colaboracion de ustedes, he resuelto uno los principales problemas que imponia mi proyecto.

En este momentto estoy trabajando con la recepcion del PIC16F84A, hasta el momento no he tenido resultados pero sigo en el intento.
Gracias!!!
saludos.