Mostrando entradas con la etiqueta Visual Basic. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Basic. Mostrar todas las entradas

sábado, 14 de septiembre de 2013

Conectar Visual Basic 6 con base de datos Access usando ADODB

Muy Buenas a todos y todas!!!

Seguimos trabajando en Visual Basic 6.0 y ahora le toca el turno a las bases de datos.
Para ello he utilizado las bases de datos Access, el complemento ADODB, un DataGrid, un Common Dialog Control y un PictureBox; Todos ellos los están en el apartado "Complementos".

El ejemplo es sencillo con unos pocos campos para el nombre, Apellidos y el nombre de la imagen que aparerá en un PictureBox.

La imagen se puede seleccionar en cualquier carpeta y al guardar el registro se copiara automáticamente a la carpeta \picture del path principal en el que tenemos copiada la carpeta principal del programa.

Para que la opción de copiar funcione correctamente, hay que seleccionar en el apartado /Proyecto/Referencias la referencia a "Microsoft Scripting Runtime". Con eso funcionara perfectamente. (En el ejemplo para descargar la referencia ya esta activada)


Proyectos\Referencias

Referencia Microsoft Scripting Runtime

Espero que este ejemplo le sirva a alguien para algún proyecto además siempre se puede mejorar ;-)



VERSION 5.00

Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Base de datos Access con DataGrid "
   ClientHeight    =   5085
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   8490
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   5085
   ScaleWidth      =   8490
   StartUpPosition =   3  'Windows Default
   Begin MSComDlg.CommonDialog CDialog 
      Left            =   8400
      Top             =   2760
      _ExtentX        =   847
      _ExtentY        =   847
      _Version        =   393216
   End
   Begin MSAdodcLib.Adodc Adodc1 
      Height          =   495
      Left            =   8520
      Top             =   2520
      Width           =   1200
      _ExtentX        =   2117
      _ExtentY        =   873
      ConnectMode     =   0
      CursorLocation  =   3
      IsolationLevel  =   -1
      ConnectionTimeout=   15
      CommandTimeout  =   30
      CursorType      =   3
      LockType        =   3
      CommandType     =   8
      CursorOptions   =   0
      CacheSize       =   50
      MaxRecords      =   0
      BOFAction       =   0
      EOFAction       =   0
      ConnectStringType=   1
      Appearance      =   1
      BackColor       =   -2147483643
      ForeColor       =   -2147483640
      Orientation     =   0
      Enabled         =   -1
      Connect         =   ""
      OLEDBString     =   ""
      OLEDBFile       =   ""
      DataSourceName  =   ""
      OtherAttributes =   ""
      UserName        =   ""
      Password        =   ""
      RecordSource    =   ""
      Caption         =   "Adodc1"
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      _Version        =   393216
   End
   Begin VB.CommandButton cmdDelete 
      Caption         =   "&Eliminar"
      Height          =   300
      Left            =   2880
      TabIndex        =   12
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton cmdGuardar 
      Caption         =   "&Guardar"
      Height          =   300
      Left            =   1560
      TabIndex        =   11
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton cmdClose 
      Caption         =   "&Cerrar"
      Height          =   300
      Left            =   4200
      TabIndex        =   10
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton Cmdnuevo 
      Caption         =   "&Nuevo"
      Height          =   300
      Left            =   240
      TabIndex        =   9
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton Cmdcargar 
      Caption         =   "&Cargar imagen"
      Height          =   300
      Left            =   6240
      TabIndex        =   8
      Top             =   2880
      Width           =   1215
   End
   Begin VB.PictureBox Picture1 
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      ForeColor       =   &H80000008&
      Height          =   2535
      Left            =   5280
      ScaleHeight     =   2505
      ScaleWidth      =   2985
      TabIndex        =   7
      Top             =   240
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   2
      Left            =   2040
      TabIndex        =   6
      Top             =   2160
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   1
      Left            =   2040
      TabIndex        =   5
      Top             =   1320
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   0
      Left            =   2040
      TabIndex        =   4
      Top             =   360
      Width           =   3015
   End
   Begin MSDataGridLib.DataGrid DataGrid1 
      Height          =   1455
      Left            =   360
      TabIndex        =   0
      Top             =   3480
      Width           =   7935
      _ExtentX        =   13996
      _ExtentY        =   2566
      _Version        =   393216
      HeadLines       =   1
      RowHeight       =   15
      BeginProperty HeadFont {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ColumnCount     =   2
      BeginProperty Column00 
         DataField       =   ""
         Caption         =   ""
         BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED} 
            Type            =   0
            Format          =   ""
            HaveTrueFalseNull=   0
            FirstDayOfWeek  =   0
            FirstWeekOfYear =   0
            LCID            =   3082
            SubFormatType   =   0
         EndProperty
      EndProperty
      BeginProperty Column01 
         DataField       =   ""
         Caption         =   ""
         BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED} 
            Type            =   0
            Format          =   ""
            HaveTrueFalseNull=   0
            FirstDayOfWeek  =   0
            FirstWeekOfYear =   0
            LCID            =   3082
            SubFormatType   =   0
         EndProperty
      EndProperty
      SplitCount      =   1
      BeginProperty Split0 
         BeginProperty Column00 
         EndProperty
         BeginProperty Column01 
         EndProperty
      EndProperty
   End
   Begin VB.Label Label1 
      Caption         =   "Nombre Foto:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   2
      Left            =   240
      TabIndex        =   3
      Top             =   2160
      Width           =   1815
   End
   Begin VB.Label Label1 
      Caption         =   "Apellidos:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   1
      Left            =   720
      TabIndex        =   2
      Top             =   1320
      Width           =   1215
   End
   Begin VB.Label Label1 
      Caption         =   "Nombre:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   0
      Left            =   960
      TabIndex        =   1
      Top             =   360
      Width           =   1095
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim A As New Scripting.FileSystemObject
Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim X As String
Dim Cuenta As Integer

Private Sub cmdClose_Click()
End
End Sub

                                '----BOTON GUARDAR----
Private Sub cmdGuardar_Click()

If Text1(0).Text = "" Or Text1(1).Text = "" Or Text1(2).Text = "" Then
MsgBox "Por favor Rellene todos los campos"
Call clear
Else
Call Asignar_Datos
Rs.Update
Call Visualizar_Datos
Cmdnuevo.Enabled = True
cmdDelete.Enabled = True
End If
A.CopyFile CDialog.FileName, App.Path & "\picture\" & CDialog.FileTitle
Call Carga_Imagenes
End Sub
                                '----BOTON PARA CARGAR IMAGENES-----
Private Sub Cmdcargar_Click()

CDialog.ShowOpen
Picture1.Picture = LoadPicture(CDialog.FileName)
Text1(2).Text = CDialog.FileTitle
If Text1(2).Text = "" Then
    MsgBox "seleccione una imagen"
Else
    Text1(2).Text = CDialog.FileTitle
End If
End Sub

                                '-----BOTON ELIMINAR-----
Private Sub cmdDelete_Click()
On Error Resume Next
If Rs.RecordCount = 1 Then
MsgBox "No se puede eliminar el último registro, Por favor modifiquelo y pulse Guardar"
Else
 With DataGrid1
        If MsgBox("Se va a eliminar el registro : ¿Está seguro? ", _
                    vbExclamation + vbYesNo, "Eliminar") = vbYes Then
            
            
            Rs.Delete
                        
            ' Actualiza el recordset
            Rs.Update
            DataGrid1.Refresh
        End If
    End With
             ' muestra los datos en los textbox
    Call Visualizar_Datos
    Call Carga_Imagenes
   
        
        ' si elrecordset llegó al final se posiciona en el último
        If Rs.EOF Then
             Rs.MoveFirst
                Call Visualizar_Datos
                Call Carga_Imagenes
            'MsgBox "  Ultimo registro ", vbInformation
       End If
        
If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"
Call Carga_Imagenes
End If
End If
If Err Then
MsgBox "No se puede borrar registro"
End If
End Sub
                                '-----BOTON NUEVO-----
Private Sub Cmdnuevo_Click()
Call clear
Cmdnuevo.Enabled = False
cmdDelete.Enabled = False
Rs.AddNew
Text1(2).Text = "Nopicture.jpg"
Call Carga_Imagenes
Text1(0).SetFocus


End Sub

Private Sub Form_Load()

Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bd1.mdb" & ";Persist Security Info=False"

Rs.Source = "Agenda"
Rs.CursorType = adOpenKeyset
Rs.LockType = adLockOptimistic
Rs.CursorLocation = adUseClient
Rs.Open "select * from Agenda", Cn, 3, 3  ' adOpenDynamic, adLockOptimistic


Dim Rs2 As New ADODB.Recordset
Set Rs2 = New ADODB.Recordset
Call Visualizar_Datos

If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"
End If
Call Carga_Imagenes

Call Cargar_data(DataGrid1)
With DataGrid1
        .AllowUpdate = False
        .Width = 7800
        .Columns(0).Width = 2300
        .Columns(1).Width = 3600
        .Columns(2).Width = 1560
End With
End Sub
Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)
With Rs
If (.Sort = .Fields(ColIndex).[Name] & " Asc") Then
.Sort = .Fields(ColIndex).[Name] & " Desc"
Else
.Sort = .Fields(ColIndex).[Name] & " Asc"
End If
End With
End Sub

'Abre el formulario para Editar el registro seleccionado
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Editar()

    Dim i As Integer
    
    If DataGrid1.Row = -1 Then Exit Sub
    Call Visualizar_Datos
    Call Carga_Imagenes
        DataGrid1.Refresh
        
End Sub

Private Sub datagrid1_DblClick()
    Call Editar
End Sub
' Sub que carga los datos del recordset y los asigna a los textbox
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Visualizar_Datos()
 On Error Resume Next
  Text1(0).Text = Rs.Fields("Nombre")
  Text1(1).Text = Rs.Fields("Apellidos")
  If Text1(2).Text = "" Then Text1(2).Text = "nopicture.jpg"
  Text1(2).Text = Rs.Fields("imagen")
End Sub
' Sub que asigna los datos al recordset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Asignar_Datos()
If Rs.EOF Then
Rs.MoveLast
End If
  Rs.Fields("Nombre") = Text1(0).Text
  Rs.Fields("Apellidos") = Text1(1).Text
  Rs.Fields("imagen") = Text1(2).Text
End Sub

' Limpia las cajas de texto
Private Sub clear()
  Text1(0).Text = "Nombre"
  Text1(1).Text = "Apellidos"
  Text1(2).Text = "Nopicture.jpg"
End Sub
  
Private Sub Carga_Imagenes()
On Error Resume Next
X = App.Path
Picture1.Picture = LoadPicture(X & "\picture\" & Text1(2).Text)
If Err Then
MsgBox "Se ha producido un error al cargar la Imagen. Esta la imagen en la carpeta?"
If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"

End If
End If

End Sub

Private Sub Cargar_data(Dg As DataGrid)
  Dg.MarqueeStyle = dbgHighlightRow
    Set Dg.DataSource = Rs
    Dg.Refresh
End Sub


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

Nos vemos en el próximo artículo, saludos!!!

domingo, 1 de septiembre de 2013

Velocímetro analógico (Gaugemeter) en Visual Basic 6 sin OCX

Muy buenas a todos y todas!!!

Después de mucho buscar un velocímetro sencillo, he dado con un ejemplo el cual sirve perfectamente para la mejora que quiero hacer en el software de la maqueta.

Se trata de un sencillo programa donde dibujamos una linea (Line1) sobre una imagen (Picture1).

También dibuja unos puntos en arco en la imagen como un velocímetro.
Es lo más sencillo que he podido encontrar y modificar, sin necesidad de ningún OCX.



Espero que os sea de utilidad

Archivo: velocímetro.frm


VERSION 5.00

Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Form1"
   ClientHeight    =   2070
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   3555
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   2070
   ScaleWidth      =   3555
   StartUpPosition =   3  'Windows Default
   Begin VB.Timer Timer1 
      Left            =   720
      Top             =   3360
   End
   Begin VB.PictureBox Picture1 
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      ForeColor       =   &H80000008&
      Height          =   1095
      Left            =   600
      ScaleHeight     =   1065
      ScaleWidth      =   2265
      TabIndex        =   1
      Top             =   240
      Width           =   2295
      Begin VB.Line Line1 
         X1              =   600
         X2              =   1560
         Y1              =   480
         Y2              =   1200
      End
   End
   Begin MSComctlLib.Slider Slider1 
      Height          =   615
      Left            =   360
      TabIndex        =   0
      Top             =   1440
      Width           =   2895
      _ExtentX        =   5106
      _ExtentY        =   1085
      _Version        =   393216
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
   Dim ejeX As Integer, ejeY As Integer
   Dim D_Conv As Double
   Dim mI As Integer
   Dim blnStart As Boolean
   
Private Sub Form_Load()
 Dim I As Integer
      Form1.Caption = "Velocimetro Infotronikblog"
      D_Conv = (Atn(1) * 4) / 180         'Pi 3.141593....
      Slider1.Max = 180                   'valor máximo de
      Slider1.TickFrequency = 10
      Picture1.Width = 2340
      Picture1.Height = 1170              'Creamos un rectangulo
     
      
    ejeX = Picture1.ScaleWidth / 2        'Calculamos el centro del eje X
    ejeY = Picture1.ScaleHeight / 1 - 50  'Calculamos la parte inferior del eje Y, y lo subimos 50
    
    Line1.X1 = ejeX
    Line1.Y1 = ejeY                            'centramos la linea en los ejes X Y
    Line1.BorderWidth = 3                      'Ancho de la Linea
    Line1.BorderColor = vbBlack                'Pintamos el Line1 de color negro
    Line1.X2 = ejeX + Sin(-90 * D_Conv) * 800  'Establece el punto final de X en el Line1
    Line1.Y2 = ejeY - Cos(-90 * D_Conv) * 800  'Establece el punto final de Y en el Line1
    Picture1.AutoRedraw = True                 'Ponemos la propiedad autoredraw del picture1 en verdadero
   
    For I = -90 To 90 Step 4                           'El "FOR" dibuja los puntos, el tamaño y el color
        Picture1.DrawWidth = IIf(I Mod 5 = 0, 5, 2)    'Crea los puntos del velocimetro
        Picture1.ForeColor = IIf(I Mod 5 = 0, vbGreen, vbBlack) 'Cambia los colores de los puntos del velocimetro
        Picture1.PSet (ejeX + Sin(I * D_Conv) * 1000, ejeY - Cos(I * D_Conv) * 1000)  'Dibuja los puntos del velocimetro
    Next
   
End Sub

Private Sub Slider1_Click()
         
 If Slider1.Value > 0 Then  'Si el valor del slider es mayor de 0 enciende el timer1
     Timer1.Interval = 10
     Timer1.Enabled = True
 Else
    Timer1.Enabled = False  'Si es False, lo apaga.
 End If
 End Sub
 
Private Sub Timer1_Timer()
    mI = Slider1.Value - 90
         Line1.X2 = ejeX + Sin(mI * D_Conv) * 800  '800 es el largo del Line1 en el eje X
         Line1.Y2 = ejeY - Cos(mI * D_Conv) * 800  '800 es el largo del Line1 en el eje Y
End Sub


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


Un saludo!!!


jueves, 18 de julio de 2013

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

Microchip Logo

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 seriales que envía el microcontrolador.

Para esto he utilizado el objeto MSCOMM1 que ya esta incluido en 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 seriales que se mandan desde el microcontrolador PIC y son transmitidos a una velocidad de 9600 baudios y cada variable va separada por "," terminando el mensaje con los carácteres "AK":


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


Representación de los datos seriales en VB6

  • Text1: Lectura de toda la trama de datos seriales 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.

DescargarEjemplo en Visual Basic para comunicación serial entre PIC y PC desde GitHub.

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

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

Saludos a todos y todas!!!


domingo, 7 de julio de 2013

Activar la rueda del ratón en Visual Basic 6 en Windows 7 y XP

Muy buenas a todos y todas! Si estas empezando con Visual Basic 6.0 y te encuentras con
el problema de que la comodísima rueda del ratón no funciona, tranquilo, la solución es mucho más sencilla de los que piensas.

Debido a su antigüedad para que funcione la rueda del ratón en VB6 necesitas descargarte el DLL que activa esta función, el DLL en cuestión se llama VB6IDEMouseWheelAddin.dll.

También vamos a necesitar registrarla y activarla en el IDE de Visual Basic 6.0 y esto lo conseguiremos con estos sencillos pasos:

  1. Descarga desde Github el repositorio que contiene VB6IDEMouseWheelAddin.dll, también he incluido un archivo llamado mousefixvb6.bat para hacer registro de una manera más sencilla y cómoda.

  2. Para evitar errores lo mejor es ser el administrador de tu sistema, si no lo eres puedes usar el siguiente truco: Reinicia el sistema y pulsa F8 para entrar en modo seguro, Windows se cargara pero con el sistema básico pero el suficiente como para realizar las acciones necesarias para este tutorial.

  3. Ahora solo tienes que copiar los archivos VB6IDEMouseWheelAddin.dll y mousefixvb6.baten el directorio raíz C:\ y ejecutar cmd. Normalmente aparecerás en C:\WINDOWS , escribe cd.. y te aparecerá C:\ . una vez ahí escribimos: mousefixvb6.bat .

  4. Después de esto abrimos Visual Basic y vamos a las opciones de Complementos buscamos la propiedad MouseWheelFix y verificamos que en el apartado comportamiento de carga queden las dos primeras opciones como validas, esto hace que se cargue la rueda cada vez que se inicia VB6.

Con esto ya podemos utilizar la rueda del ratón en VB6. También podemos registrar manualmente el DLL. Para el registro manual solo tenemos que escribir en la consola CMD.exe:


regsvr32 C:\vb6IDEMousewheeladdin.dll

Pero tenemos que asegurarnos que el DLL está en el directorio raíz C:\

Un error muy común es que no os deje registrar la librería porque no sois el administrador. Esto pasa sobre todo en Windows 7 que es mucho más restrictivo que su antecesor XP.

Un Saludo!!!

martes, 16 de octubre de 2012

Control de locomotoras DC con Visual Basic 6 y PIC 16F876A

Muy buenas a todos y todas los amantes de la programación y los trenes a escala!!!

Ya tengo preparado el control para las locomotoras de los tres circuitos que componen mi maqueta.

Realizado en Visual Basic 6, controla 3 locomotoras o 3 circuitos independientes, con todas sus funciones, Avance, Retroceso y Parada.

Control de velocidad hasta 127 pasos. Subida y bajada progresiva de velocidad independiente y parada de emergencia.

El manejo de cada locomotora es totalmente independiente con una parada de emergencia común para todas.

Todas las funciones son configurables: Tiempos entre pasos en las detenciones y cambios de sentidos, tiempo entre pasos de la subida y bajada progresiva con su velocidad máxima independiente.

El programa también controla hasta 7 desvíos. Los desvíos están ordenados para mi maqueta, en mi caso 5 desvíos y 2 auxiliares, que pueden ser desvíos o luces o lo que se quiera.

Las comunicaciones corren por parte del puerto COM, y puedes configurar el puerto y la velocidad de transmisión del puerto serial.

El receptor de todos estos datos es un PIC 16f876A, bueno en este caso de dos, un master, que es el que recibe toda la información y la reenvía a otro 16f876A.

Esto es gracias a sus 2 salidas HPWM y un PWM aparte, controlan la velocidad de las tres locomotoras.

PIC Master 16f876A

  • Recibe los datos desde el PC a 9600 baudios y los reenvía al PIC secundario en modo PC.
  • Recibe los datos del secundario y los muestra en la pantalla en modo Manual.
  • Pantalla LCD 16x2 donde se muestra la velocidad y los desvíos.
  • Teclado para el control manual.
  • Salida para 7 desvíos

PIC secundario 16F876A

  • Recibe los datos del PIC principal en modo PC
  • Envía datos al PIC principal en modo manual
  • Controla los 3 relés para el cambio de dirección
  • Controlas las 3 salidas PWM (2 HPWM y 1 PWM)
  • Pequeño teclado de 2x3 para el control de dirección
  • 3 Potencíometros para el control manual

En los esquemas en proteus, la mayoría de motores y relés los he sustituido con LED´s y en el programa en PBP están comentadas las lineas que se refieren al HPWM y PWM porque al hacer la simulación hacían que mi portátil parezca una tostadora.

En la aplicación practica es el mismo que tengo montado en mi maqueta funciona muy bien.

Los desvíos son movidos por un integrado ULN2003.

El modulo de tracción corre a cargo de 3 transistores de tipo Darlington TIP110.

Esto da un resultado de paradas y arranques bastante suaves y se mantiene muy bien con las locomotoras a bajas velocidades.

Todo esto esta hecho en placas individuales:

Para poder incluir otro tipo de circuitos y en caso de rotura poder sustituir los componentes de una manera cómoda.


Les mantendré informados de las próximas novedades!!! Saludos!!!

viernes, 25 de mayo de 2012

Mis programas imprescindibles XP!!!

Muy buenas a todos y todas!!!

Esta entrada se me ha ocurrido porque he tenido que formatear y volver a instalarlo todo otra vez... Esta es una tarea algo tediosa y aburrida, de hecho la hago a ratos.

Primero lo mejor para no tener sustos es hacer un BACKUP de todo lo que sea importante para nosotros. En mi caso poco, ya que este ordenador solo lo uso para navegar y programar, para ver películas, guardar fotos y todo eso uso el de casa que es más potente.

Empecemos!!!

Un windows XP de modo desatendido. Es lo más rápido y fácil. Lo mejor (si dispones de otro pc) es simularlo con algún programa como Virtual Box. La mayoría viene con un montón de programas tipo VLC, Codec´s, CCleaner, y algún antivirus. Los podéis encontrar en CD y DVD, normalmente vienen en formato .ISO.

En mi caso prefiero los CD, hay menos posibilidad de malware. Bien una vez lo tengas comprobado pasas a copiarlo en su correspondiente formato con algún programa como Nero.


Con la instalación limpia y todos los Drivers de tarjetas y vídeo, lo primero es un antivirus, Avast! antivirus es el que utilizo y no me da problemas. Otro muy recomendable es NOD32. Tampoco estaría de más algo como Ad-Aware free y Spyboot Seach & Destroy.

Y aquí empieza la "chicha".El orden es lo de menos, así que empezaremos:

Microcode Studio de Mecanique

Es el editor de código para Pic Basic Pro, entre otras cosas resalta el código con ayuda contextual. También resalta todos los define, los alias, variables y modificadores. También permite el cortar, pegar, deshacer, búsqueda etc.
Al compilar también identificará y corregirá los errores y tiene soporte para MPASM.

Microcode Studio de Mecanique

Proteus 7 Profesional

Proteus es una de las herramienta más potentes para simular circuitos electrónicos, tanto digitales como analógicos.
Con proteus puedes crear proyectos sencillos como apagar y encender un LED o simular los programas que crees con Microcode Studio.

Para mi este tipo de software es imprescindible ya que con el se ahorra gran cantidad de tiempo, ya que con unos simples clics podremos simular casi cualquier circuito. Entre otras cosas Proteus incluye, Microcontroladores, pantallas LCD, osciloscopio, conexión con puerto COM, LPT.

Proteus 7 Profesional

Virtual Serial Port Driver de Eltima Software

Virtual serial Port, es una sencilla herramienta para simular pares de puertos COM.

Tiene compatibilidad completa con el control de HandFlow (hardware y Xon/off),

También tiene diferentes configuraciones como estandar, bucle o personalizado.

Los puertos una vez configurados se vuelven a crear al reiniciar el sistema.

Este programa es casi imprescindible si estas trabajando con Proteus y Visual Basic sobre todo si estas probando la comunicación con el puerto COM.

Descargar Virtual Serial Port de Eltima Software

Virtual Serial Port de Eltima Software

Visual Basic 6.0 (Visual Studio 6)

Visual Studio 6 es la ultima versión de basic que no trabaja sobre .NET y la ultima en correr en un windows 9x.

También es la ultima versión en incluir Visual Basic basado en component objet model y aunque las versiones posteriores incorporan una versión muy diferente del lenguaje con muchas mejoras (fruto de la plataforma .NET), para empezar y como lenguaje más bien simplón, podremos hacer casi cualquier programa que imaginemos.

Aunque si lo que quieres es aprender programación creo que seria mejor que empezaras con C++ o Phyton, en mi caso y al ser por hobby, con Visual Studio 6 obtengo muy buenos resultados.

Visual Basic 6.0 (Visual Studio 6)

Inkscape

Inkscape, es un editor de gráficos vectoriales de código abierto, con capacidades similares a Illustrator, freehand, CorelDraw, usando el estándar de la W3C.

El formato de este programa es SVG (Scalable Vector Grafic). Inkscape también soporta meta-datos Creative commons, edición de nodos, capas, operaciones complejas con trazos, vectorización de archivos gráficos, texto en trazos, alineación de textos, edición de XML directo y mucho más.

Puede importar formatos como Postscript, EPS, JPEG, PNG y TIFF y exporta PNG así como otros formatos basados en vectores.


Descargar Inkscape desde sourceforge.net

Inkscape - sourceforge.net

Lamentablemente y debido a como están las cosas, solo pongo los enlaces oficiales de los programas, ya que los demás son para uso personal podéis encontrarlos todos por las vías normales como torrent o e-mule e incluso en Taringa.

Espero que esta lista de programas os sean de ayuda, espero poder ampliarla con enlaces próximamente.


Un saludo!!!


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.

Puedes descargar programa Coche-RC-VB6-Infotronikblog desde GitHub.




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!!!

domingo, 24 de octubre de 2010

Peyutsubot 2.4 Beta

Saludos a todos!!

Este es el programa que llevo desarrollando y mejorando desde hace un tiempo.
Por el momento esta en construcción, pero espero tener algo un poco más serio dentro de poco.
Bueno echarle un vistazo y a ver que os parece!!


Este es el enlace con el instalador y el programa en PBP.

Saludos!!

By PeYuTrOn