Diseño interfaz con VB 6

#1
Hola:

Estoy haciendo una Interfaz con VB 6 para Windwos 7 de 64 bits.
re.png

Como puedes o pueden ver, se inicia el puerto serie nada más ejecutar la aplicación o interfaz. Hay gente que lo quiere activar y desactivar el puerto con un botón.

¿Qué prefiere la mayoría de ustedes?

Por ahora, estoy terminando lo de recibir mensajes de texto por parte de los PIC y Arduino.

Saludos.
 
#2
Como puedes o pueden ver, se inicia el puerto serie nada más ejecutar la aplicación o interfaz.
Hay gente que lo quiere activar y desactivar el puerto con un botón.

¿Qué prefiere la mayoría de ustedes?
Existen muchas aplicaciones que inician abriendo el puerto serie, pero se debe tener en cuenta algo muy importante.
No todas las computadoras actuales tienen puerto serial, y si lo tienen, puede ocurrir que se encuentre ocupado.
Por lo tanto es conveniente que la aplicación tenga una rutina de comprobación al iniciar.
Si no existen puertos se debe dar un aviso al usuario, y si existen puertos, se deben enumerar y descartar los que se encuentren ocupados.

Cuando no existen puertos serie y la aplicación intenta abrir alguno, se producirá un error que si no es depurado provocará el cierre de la misma. (En VB6)

Los puertos disponibles son los que se deben mostrar, y por ese motivo es más conveniente que el usuario sea quien tome la decisión de seleccionar el puerto.

Otro motivo de no iniciar el puerto serie cuando se ejecute la aplicación, es la selección de parámetros COM.
Si éstos ya han sido preestablecidos no hay problema, pero siempre puede haber cambios por mejoras y se tendría que reprogramar la aplicación.

Así que la decisión de abrir un puerto al iniciar la aplicación, depende de los criterios del programador.
 
#3
.



Opinión personal después de un año de haber actualizado (Marzo 2014) mi PC del Taller.


Cuesta un triunfo (muchos $$$) conseguir una PC con puertos COM !!!. Como que hay que empezar a realizar las cosas pensando en USB (aclare mi opinión personal).


Tanto es así que estoy tratando de conseguir una motherboard aunque sea algo antigua (Celeron 2.66) que posea puertos COM y ponerle un XP SP3.



Saludos, JuanKa.-
 
#4
.



Opinión personal después de un año de haber actualizado (Marzo 2014) mi PC del Taller.


Cuesta un triunfo (muchos $$$) conseguir una PC con puertos COM !!!. Como que hay que empezar a realizar las cosas pensando en USB (aclare mi opinión personal).


Tanto es así que estoy tratando de conseguir una motherboard aunque sea algo antigua (Celeron 2.66) que posea puertos COM y ponerle un XP SP3.



Saludos, JuanKa.-
pero si hay tarjetas pci y pci express seriales solo necesitas una placa madre con los slot

por que incluso ya estan saliendo sin slot

y para el mensaje original del post
configurable con un archivo de configuracion


en caso de que no exista el archivo de configuracion
que la aplicacion lo cree con los parametros basicos o por defecto
 
Última edición:
#5
Hay muchas placas no tan viejas que si bien no trae el conector en la placa estan los pines para poner el conector con cable, y como conectaror existen placas PCI, para agregarlo y funcionan muy bien
 
#6
Hola:

Hay tarjetas PCI de puerto serie y paralelo, precisamente no son caras.


En caso de que no tenga estar tarjetas ni en la propia placa base el puerto serie. Arduino crea uno virtual, he puesto Arduino UNO y Arduino Micro. Lo detecta como puerto serie.

Las ideas que me dan está bien presentada. Lo intentaré hacer como dicen. En Visual C#, más adelante lo haré con VB .net

Ejemplo: Detecta el puerto serie y lo añade al componente comboBox de Visual C# automáticamente.
Código:
protected override void WndProc(ref Message m)         
     {             
              if (m.Msg == 0x219)             
     {                
           combopuertos.DataSource = SerialPort.GetPortNames();            
     }     
            base.WndProc(ref m);        
      } // Detecta si hay cambios en el usb y si los hay los refleja
Gracias por las informaciones.

Pondré ejemplos por aquí cuando termine y me dirán sugerencias para hacerlo lo mejor posible.
 
#7
Hola:

He encontrado 6 cmd.exe en Windows 7 de 64 bits.



Ver zoom.

Lo ejecuto como administrador.



Ejecuto comando como indica abajo.



Me sale este mensaje.



Contento y emocionado, intento agregar el componente.



Le doy aplicar o aceptar y me aparece este mensaje.



Me pregunto. ¿Qué es lo que falla realmente?

Saludos.
 
#8
Eso sucede cuando el componente ActiveX no es compatible con el sistema operativo.

El llamado a la función "DllRegisterServer" hace el correspondiente registro, pero por incompatibilidades con el sistema, el IDE no puede tener acceso al mismo.

Eso me ha pasado al actualizar la versión de Windows.
Pudiera no ser tu caso, pero te recomiendo que actualices el ActiveX por uno que sea compatible con tu sistema.
 
#10
Existen otros componentes alternativos al control ActiveX RichEdit32.dll.
Necesitas buscar por la red. Una buena página de ejemplos y componentes gratuitos, es vbAccelerator
Ahí puedes encontrar el componente (VBRichEdit.ctl)
Ese componente tal vez funcione en tu sistema por ser creado en el mismo entorno.
 
#12
Las ideas que me dan está bien presentada. Lo intentaré hacer como dicen. En Visual C#, más adelante lo haré con VB .net
c# y visualnet es practicamnete lo mismo
no existen mayores diferencias que el EGO
del programador

para vb.net el codigo seria

Código:
Me.comboBox1.DataSource=Me.serialPort1.GetPortNames

y del error en vb basic 6 quizas debas ejecutarlo como administrador tambien
 
#13
Lo he hecho como administrador y nada de nada. Qui´zas tenga que poner el objeto en el Widnows/System32 y no donde está para 64 bits.
 
#15
c# y visualnet es practicamnete lo mismo
no existen mayores diferencias que el EGO
del programador

para vb.net el codigo seria

Código:
Me.comboBox1.DataSource=Me.serialPort1.GetPortNames
y del error en vb basic 6 quizas debas ejecutarlo como administrador tambien
Alguasn cosas son lo mismo otras no tanto. No se el motivo que Microsoft quiere que pasemos a C# y nos olvidemos de VB. En clases nos enseñaron VB .net, (no me gusta mucho este lenguaje) y que el mercado, al menos en España, estamos con C#, esos i, por encima el rey del mundo al menos en el empresarial es Java. Aunque muchos crean que no.


Me acabas de dejar las cosas muy claras, cosa que no sabía. Por lo que veo, aunque haga de todo, usaré solo el Text y en modo Multilinea. Ahora me toca aprender como se hace entradas de datos desde el puerto serie.

Saludos.
 
#16
Hola:

Siguiendo con el tema. Haber si diseño un poco mejor.

re.png

Consiste en tener un botón CONECTAR puerto o abrirlo. Si lo abres el puerto se abre y en el mismo botón dirá DESCONECTAR. Su código es este.

Código:
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub
Aquí abajo tengo un código completo del programa pero que tiene muchos errores. El combobox detecta cuando hay puerto serie sea físico y virtual cuando ejecuta este programa. Así que debería funcionar eligiendo cualquier pueto que elijas del comobox.

Código:
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

    Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF"
    End Sub
     
    Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON"
    End Sub
     
    Private Sub Form_Load()
    MSComm1.PortOpen = True ' Habilitar el puerto serie.
       Form1.ComboBoxCOM.Clear ' Limpiar comboBox.
          MSComm1.CommPort = ComboBoxCOM.ListIndex = 0
    Timer1.Interval = 1       ' Correr el timer a 1 mls.
       Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity") 'Win32_SerialPort")
       For Each wmiobject In WMIObjectSet
           If InStr(wmiobject.Name, "COM") Then   '
             Form1.ComboBoxCOM.AddItem wmiobject.Name
           End If
            Next
       Set WMIObjectSet = Nothing
    End Sub
Cuando logre este objetivo, continuo la parte de recibir datos por el puerto serie.

Saludos.

PD: La verdad que no se parece nada al VB .net.
 
#19
Así no está bien. Combo1.ListIndex = 0, tiene el valor 0 y el puerto 0 no existe.
Podría ser: MSComm1.ComPort = ComboBoxCOM.ListIndex + 1

Acá ya está una interfaz completa y funcionando donde puedes ver cómo se hace.
Interfaz RS232 PIC PC (Proyecto Completo VB6)

Te recomiendo que mires la versión 2 que tiene algunas mejoras.

Ahora uso otro método para cargar los puertos disponibles al ComboBox:
Código:
    ' Buscar del COM1 al COM16 (El MSCOMM de VB6 sólo admite hasta 16 puertos)
    cmbPort.Clear
    ' Método sin API
    ' Este método reconoce todos los virtuales, pero si hay más de 16 virtuales
    ' el método falla agregando puertos falsos si el For es mayor a 16
    For i = 1 To 16
        frmMain.RS232.CommPort = i
        On Error Resume Next
        frmMain.RS232.PortOpen = True
        If Err = 0 Then
            frmMain.RS232.PortOpen = False
            cmbPort.AddItem "COM" & i
        End If
    Next i

    cmbPort.ListIndex = 0 ' Aquí yo establezco el indice desde un valor del registro.
Y para establecer el número del puerto al MSCOMM, lo hago de ésta forma:
Código:
    ' Obtener sólo el número del puerto seleccionado
    ComPort = CStr(Mid(cmbPort.Text, 4)) ' Al hacer ésto, se elimina "COM"
    MSCOMM1.CommPort = ComPort
 

Temas similares

Arriba