Mostrando entradas con la etiqueta VB6. Mostrar todas las entradas
Mostrando entradas con la etiqueta VB6. Mostrar todas las entradas

jueves, 18 de julio de 2013

Enviar datos desde PIC a Visual Basic 6 a través del puerto serie

Muy Buenas a todos y todas!!!

Después de actualizar a la versión 1.1 del programa 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 del ordenador los datos que envía el microcontrolador.

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:

Enviando datos desde PIC a VB6

Los datos que se mandan desde el microcontrolador PIC son transmitidos a una velocidad de 9600 bauds y cada variable va separada por ",":


include "modedefs.bas"   'Activa el modo de comunicación

Masterout var portc.6

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 nos mostrará en pantalla los datos en el siguiente formato:

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

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

Esta es la trama de datos que se envían desde el microcontrolador PIC y que tendremos que decodificar en VB6.


Obtención de datos en VB6

Ahora, ¿como extraemos de esa maraña de caracteres los datos 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:


Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim dataIn, tdataIn, Vel, total As String
Dim C, T, N, X As Integer   'cantidad, tipo, numero, valor

Private Sub Command1_Click()
  Timer1.Enabled = True
  MSComm1.PortOpen = True
  Command1.Enabled = False
  Command2.Enabled = True
End Sub

Private Sub Command2_Click()
  Command1.Enabled = True
  Command2.Enabled = False
  Timer1.Enabled = False
  MSComm1.PortOpen = False
End Sub

Private Sub Form_Load()
  Timer1.Enabled = False
  Command1.Enabled = True
  Command2.Enabled = False
End Sub

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: Lectura de toda la trama de datos enviados por el PIC.
  • Text2: Lectura de los caracteres de confirmación (AK).
  • Text3: Lectura de la Variable2
  • Text4: Lectura de la Variable3
  • Text5: 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 magnifico foro de Visual Basic.


Espero que les sea de ayuda para entender como comunicar un microcontrolador PIC 16F628 o 16F876A con un sistema Visual Basic 6

Saludos a todos y todas!!!

miércoles, 21 de marzo de 2012

Control de tren en Visual Basic

Bien ya tengo terminado mi primer boceto del programa para el control de trenes de mi maqueta con Visual Basic y Pic Basic Pro.

primero hice el programa que voy a utilizar para mi maqueta particular, pero primero para no agobiarme he decidido hacer pequeños programas para luego solo tener que montarlos en el principal.

Bien este es el control para una sola locomotora:


Control de locomotoras Visual Basic

Es bastante básico, pero tiene todas las funciones marcha, paro e inversión de la dirección.

La velocidad cuenta con 255 pasos (desde 0 has 254)

Puerto COM hasta desde 300 hasta 9600 Baudios

Botones de Avance, Retroceso y Stop

Y bueno todo esto lo podéis aplicar directamente y os puede servir de ejemplo para algo más elaborado, ya que en el archivo también se incluye el código fuente lopodéis encontrar en la sección de Descargas O bájate directamente elarchivo control del trenes en visual basic

Espero que os guste este pequeño aporte al mundo del modelismo ferroviario.

Y proximamente intentare hacer el programa en PBP para el 16F876A o 16F628A


By PeYuTrOn

lunes, 20 de febrero de 2012

Maqueta tren a escala control con VB6

Buenas a todos y todas!!!

Esta es la interfaz que estoy diseñando para el control de la maqueta mediante el ordenador con Visual Basic 6.

Por el momento no publico el código porque solo esta empezado y falta bastantes partes que no están terminadas.

Con el teclado se controlan los desvíos, numerados desde el 1 al 7 y "/" y "\" para los cruces de vías.



Los controles son 3 uno para el circuito exterior, otro para el interior y el tercero para realizar maniobras.

Y bueno esto sera a grandes rasgos la pantalla de control.

Espero hacerle también una especie de base de datos de los sensores para poder hacer paradas programadas y saber en que parte de la maqueta se encuentran los trenes.



Después de un tiempo y algunos problemas con el PC he conseguido comunicar el micro 16f876A con el programa que he estado realizando para la maqueta.

Como se puede ver en la imagen los cambios no son muchos, pero suficientes para que quedara todo mucho más claro.

Las lineas representan la posición de los desvíos. Azul para abierto y Negro para la posición de cerrado.

A día de hoy funciona perfectamente la velocidad y espero tener pronto los botones para las direcciones y los botones de Stop.

Los botones de Stop pararan la maqueta en su totalidad sea cual sea el botón que se pulse.

También tengo que resolver como mandar los datos de una manera más ordenada.

He visto algo pero no he tenido mucho tiempo. Otra función que me tengo pendiente es para hacer itinerarios y paradas programadas.

Aquí esta para descargar lo ultimo que hice de este programa: Visual Maqueta VB6

Próximamente más avances!!

Un saludo!!!

jueves, 8 de diciembre de 2011

BrutusShutdown 1.2

Ya esta disponible la nueva versión para BrutusShutdown. BrutusShutdown 1.2 añade las opciones de reiniciar y suspender.

La opción "Suspender" es muy útil sobre todo en portátiles.


Descargar BrutusShutdown 1.2

By PeYuTrOn

sábado, 2 de julio de 2011

Coche RC VB6

Muy buenas a todos y todas!!!

Aprovechando software que ya tenia por ahí y haciendo unas pocas modificaciones, a salido este programa para controlar un coche RC vía puerto COM con Visual Basic 6. Algo que, sin duda, junta lo mejor de ambos mundos, programación y RC.

Me ha llevado un par de días ya que aun sigo aprendiendo pero ya esta terminado y funcionando 100%.


Coche RC Visual Basic 6

Fácil de configurar también utiliza el DTR - RTS por si necesitamos alimentar algo con los 5V que salen del puerto COM teniendo cuidado de no meter mucha carga como ya explique en otro post llamado Activar DTR RTS Visual Basic


En la configuración se puede cambiar el puerto de comunicaciones COM que queramos y cambiar el modo de transmisión.

La configuración del joystick es también sencilla, podemos buscar el joystick y definir la velocidad del mismo.

Es un programa sencillo y fácil de entender para quien quiera aprender un poco de programación y electrónica.



Otros artículos sobre Visual Basic 6.0 que te pueden interesar:

Saludos a todos!!!

sábado, 5 de marzo de 2011

Veotutoriales

Después de darme cuenta de que muchos amigos consultan tutoriales online, normalmente de Youtube, me he decidido a crear veotutoriales.blogspot.com.

Principalmente estoy subiendo videos relacionados con programas informáticos y electrónica, pero ahora mismo estoy empezando y no descarto ampliar los temas, así que estoy abierto a sugerencias.

Los más completos son:

By PeYuTrOn

jueves, 9 de diciembre de 2010

Activar líneas DTR y RTS del puerto serie en Visual Basic 6

Muy buenas a todos y todas!!!

Si has intentado hacer funcionar el convertidor de RS232 a RF te habrás dado cuenta que ya no basta solo con enchufarlo, sino que hay que configurarlas en el mismo programa que estés utilizando.

Creo que se pueden activar mediante algún software para control del puerto, pero aquí voy a poner un ejemplo de como activarlo en Visual Basic 6.

En concreto los apartados DTREnable y RTSEnable del control MScomm1.

Además de como utilizar el CTSHolding y DSRHolding para que nos indique si esta activado o no.


Aquí os dejo un ejemplo en Visual Basic 6 para activar DTR y RST:


activar DTR y RST Visual Basic 6



VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1 
   Caption         =   "Activa DTR y RTS"
   ClientHeight    =   3165
   ClientLeft      =   60
   ClientTop       =   405
   ClientWidth     =   7065
   LinkTopic       =   "Form1"
   ScaleHeight     =   3165
   ScaleWidth      =   7065
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command8 
      Caption         =   "Cerrar Puerto COM"
      Height          =   375
      Left            =   480
      TabIndex        =   8
      Top             =   840
      Width           =   1575
   End
   Begin VB.CommandButton Command7 
      Caption         =   "Apagar RTS"
      Height          =   375
      Left            =   5160
      TabIndex        =   7
      Top             =   840
      Width           =   1335
   End
   Begin VB.CommandButton Command6 
      Caption         =   "Apagar DTR"
      Height          =   375
      Left            =   5160
      TabIndex        =   6
      Top             =   240
      Width           =   1335
   End
   Begin MSCommLib.MSComm MSComm1 
      Left            =   2160
      Top             =   480
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
   End
   Begin VB.CommandButton Command5 
      Caption         =   "Limpiar"
      Height          =   375
      Left            =   1800
      TabIndex        =   5
      Top             =   2640
      Width           =   1095
   End
   Begin VB.CommandButton Command4 
      Caption         =   "Abrir Puerto COM"
      Height          =   375
      Left            =   480
      TabIndex        =   4
      Top             =   240
      Width           =   1575
   End
   Begin VB.CommandButton Command3 
      Caption         =   "Enviar"
      Height          =   375
      Left            =   480
      TabIndex        =   3
      Top             =   2640
      Width           =   1095
   End
   Begin VB.CommandButton Command2 
      Caption         =   "Activar RTS"
      Height          =   375
      Left            =   3120
      TabIndex        =   2
      Top             =   840
      Width           =   1335
   End
   Begin VB.CommandButton Command1 
      Caption         =   "Activar DTR"
      Height          =   375
      Left            =   3120
      TabIndex        =   1
      Top             =   240
      Width           =   1335
   End
   Begin VB.TextBox Text1 
      Height          =   975
      Left            =   480
      TabIndex        =   0
      Top             =   1560
      Width           =   6015
   End
   Begin VB.Shape Shape2 
      BackStyle       =   1  'Opaque
      Height          =   375
      Left            =   4560
      Shape           =   3  'Circle
      Top             =   840
      Width           =   495
   End
   Begin VB.Shape Shape1 
      BackStyle       =   1  'Opaque
      Height          =   375
      Left            =   4560
      Shape           =   3  'Circle
      Top             =   240
      Width           =   495
   End
End

Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub Command1_Click()
  If MSComm1.PortOpen = True Then
    MSComm1.DTREnable = True      'Activa la linea DTR
    Command6.Enabled = True
    Command1.Enabled = False
  End If
End Sub

Private Sub Command2_Click()
  If MSComm1.PortOpen = True Then
    MSComm1.RTSEnable = True      'Aactiva la linea RTS
    Command7.Enabled = True
    Command2.Enabled = False
  End If
End Sub

Private Sub Command3_Click()
  If MSComm1.PortOpen Then
    MSComm1.Output = Text1.Text + Chr$(13) + Chr$(10)
  Else
    MsgBox ("Se debe abrir el puerto")
  End If
  Text1.SetFocus
End Sub

Private Sub Command4_Click()
  On Error Resume Next
  MSComm1.PortOpen = True
  If MSComm1.PortOpen Then
    Command1.Enabled = True
    Command2.Enabled = True
    Command3.Enabled = True
    Command4.Enabled = False
    Command5.Enabled = True
    Command8.Enabled = True
  End If
End Sub

Private Sub Command5_Click()
  Text1.Text = ""
  Text1.SetFocus
End Sub

Private Sub Command6_Click()
  If MSComm1.PortOpen = True Then
    MSComm1.DTREnable = False         'Desactiva la linea DTR
    Command1.Enabled = True
    Command6.Enabled = False
  End If
End Sub

Private Sub Command7_Click()
  If MSComm1.PortOpen = True Then
    MSComm1.RTSEnable = False         'Desactiva la linea RTS
    Command2.Enabled = True
    Command7.Enabled = False
  End If
End Sub

Private Sub Command8_Click()
  MSComm1.PortOpen = False
  Command1.Enabled = False
  Command2.Enabled = False
  Command3.Enabled = False
  Command4.Enabled = True
  Command5.Enabled = False
  Command6.Enabled = False
  Command7.Enabled = False
  Command8.Enabled = False
End Sub

Private Sub Form_Load()
  Command1.Enabled = False             'Defino los botones, esto se puede hacer directamente
  Command2.Enabled = False             'Esto se puede hacer mucho más limpio, pero es que hice en
  Command3.Enabled = False             'En plan rápido
  Command5.Enabled = False
  Command6.Enabled = False
  Command7.Enabled = False
  Command8.Enabled = False
  Shape1.BackColor = &H8000000F
  Shape2.BackColor = &H8000000F


 'Definimos los parámetros del puerto COM
  MSComm1.CommPort = 1
  MSComm1.Settings = "2400,N,8,1"
  MSComm1.DTREnable = False 'Desactivamos el DTREnable
  MSComm1.RTSEnable = False 'Desactivamos el RTSEnable
End Sub

Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub

Private Sub MSComm1_OnComm()

  Select Case MSComm1.CommEvent

    Case comEvCTS
      If MSComm1.CTSHolding Then        'Esto muestra que la linea esta activa y corresponde
        Shape2.BackColor = vbRed             ' al pin 8 del db9 (CLEAR TO SEND)
      Else
        Shape2.BackColor = &H8000000F
     End If

    Case comEvDSR
      If MSComm1.DSRHolding Then      'Esto muestra que la linea esta activa y corresponde
        Shape1.BackColor = vbRed            'al pin 6 del db9 (DATA SET READY)
      Else
        Shape1.BackColor = &H8000000F
      End If

  End Select
End Sub


Fuente:

https://toyscaos.tripod.com/serial2.html Donde podéis encontrar otro ejemplo en Visual Basic 6 relacionado con DTR y RTS.


Otros artículos sobre Visual Basic 6.0 que te pueden interesar:


Saludos a todos y todas, nos vemos en la próxima entrada!!!