Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

29/03/2015 #21

Avatar de Meta

D@rkbytes dijo: Ver Mensaje
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
Voy hacer pruebas y comento.

Por cierto, la versión 2 de tu interfaz es la leche. Buen trabajo.

analogico dijo: Ver Mensaje
se parece y mucho solo que el net es con objetos
y lo mejor que con el net es hasta mas facil

no tienen sentido hacer esto en vb6 a menos que lo vayas a usar en un pc antiguo
Exacto, es para usar en un PC antiguo. En el 2008, cuando hice tutoriales de Visual C# y sobre todo VB .net 2008, muchos usuarios de la época me pedían que lo hiciera con VB 6 y sin rechistar, precisamente por este foro y otros muchos. No lo he llegado hacer porque lo vi muy obsoleto y estaba el VB .net que es lo que se usa ahora.

Aunque no lo creas, hoy en día siguen con el santo VB 6 hasta en Sur y Centro de América, aunque soy de España, me lo han pedido en plan bestia. Así que haré con muchos lenguajes diferentes un tutorial que soporte todos los lenguajes de Visual Studio y Java. El que quiera una demo en PDF lo adjunto y así de paso me orientan como va y como quieren que sea. Más adelante me meteré con Raspberry 2 que lo he comprado y probado, una pasada. Ya sabes analogico .

Siguiendo con el tema principal.

¿Mi código qué tiene de malo con el tuyo en esta parte? Lo bueno que este te dice hasta el nombre de todo los puerto virtuales que tengas en uso.

Código:
       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
Se ven sus nombres de los puertos virtuales.

en el ComoBox.

Lo veo más chulo. Si al final no me funciona como quiero, lo hago de tu forma de siempre.

Saludos.
29/03/2015 #22
Moderador

Avatar de D@rkbytes

Meta dijo: Ver Mensaje
Siguiendo con el tema principal.

¿Mi código qué tiene de malo con el tuyo en esta parte? Lo bueno que este te dice hasta el nombre de todo los puerto virtuales que tengas en uso.

Lo veo más chulo. Si al final no me funciona como quiero, lo hago de tu forma de siempre.
De esa forma me parece muy bien.
Hace tiempo lo implementé de esa manera, pero me di cuenta que no se podía obtener el número de puerto seleccionado por indexado.
Como te darás cuenta, al obtener el nombre se obtiene una cadena que dentro lleva el número de puerto, pero no está indexada.

Y cuando se usan puertos virtuales se obtienen también los puertos pares. ComboBox con nombres de los puertos.jpg

Esto ofrece la ventaja de identificación, pero al no estar indexado resulta algo complejo obtener el número del puerto por medio de un ComboBox.

Sin embargo, con algunas separaciones de la cadena utilizando instrucciones comunes de VB, se puede separar y obtener el número correcto sin complicaciones.
Puerto COM7 seleccionado.jpg

29/03/2015 #23

Avatar de Meta

Hola:

Ok, probaré el tuyo que está mejor y no me complico la vida. Voy hacer pruebas y luego comento.

Saludos.

PD: Estoy hasta las narices del VB 6. Como me cuesta esto por Dios. JAja ajaajjja, me da por reír por no llorar.
01/04/2015 #24

Avatar de Meta

Hola:

Hice este, me funciona, pero al cambiar el puerto en el comoBox, siempre funciona como el COM4 y no se peude cambiar nada.

Código:
    Option Explicit
     
    Dim vPuertos() As String 'Para almacenar el verdadero nombre de los puertos, sin la descripocion.
     
    Private Sub Form_Load()
        Dim i As Integer
        For i = 1 To 10
            ComboBoxCOM.AddItem "Arduino (COM" & i & ")" ' cargo el combo con descripcion y el numero del puerto
           
            ReDim Preserve vPuertos(ComboBoxCOM.ListCount - 1)
            vPuertos(ComboBoxCOM.ListCount - 1) = "COM" & i
        Next
    End Sub
     
    Private Sub ComboBoxCOM_Click()
        MsgBox vPuertos(ComboBoxCOM.ListIndex) '  te muestra solo el nombre real del puerto, sin la descripcion
    End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
     
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
Saludos.
01/04/2015 #25


Demasiado complejo para algo tan simple, y nunca asignas el puerto seleccionado en el combobox.
02/04/2015 #26

Avatar de Meta

De eso se trata, conseguir algo simple y no dejarlo complejo como lo tengo ahora.

Por lo que se ve, parece mejor no usar un comobox, sino internamente dejarlo ya seleccionado. como es para un tutorial, no pasa nada.

Da igual el puerto que elija en el ComboBox, siempre me sale el 4, precisamente el que tengo seleecionado en las propiedades.



Código:
Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        .ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
     
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
Al final, lo mejor no usar comboBox, porque no me entero y estoy atrasando el tutorial, ejejj e jeje jej. Cuando acabe esto, me meto con los 74HC595 junto con el 74HC165 bien explicado a fondo. Eso si, antes que nada, también con la recepción de mensajes del puerto en el text.

Saludos.

Saludos.
02/04/2015 #27
Moderador

Avatar de D@rkbytes

Meta dijo: Ver Mensaje
Por lo que se ve, parece mejor no usar un comobox, sino internamente dejarlo ya seleccionado. Como es para un tutorial, no pasa nada.

Da igual el puerto que elija en el ComboBox, siempre me sale el 4, precisamente el que tengo seleccionado en las propiedades.
Si el ejemplo es para un tutorial es cuando más deberías esforzarte para quede prolijo.
La selección y verificación de actividad de los puertos es importante por lo que ya mencioné.
Si lo haces de la forma que pensaste inicialmente, todos los que lean tu tutorial creerán que así se debe hacer.

Y es cierto lo que menciona analogico. Estás creando un código muy complicado para algo que es verdaderamente muy sencillo.
Si el MSCOMM siempre abre el puerto 4, es porque no le vuelves a reasignar otro puerto.
03/04/2015 #28

Avatar de Meta

Cierto, pero no estoy al día con VB 6, si no con C#, jejejejejjeje.

Saludos.
03/04/2015 #29

Avatar de dinoelectro

Hola Meta

Visual Basic 6 y los puertos COM estan obsoletos; el lenguaje no funciona correctamente en sistemas operativos de 64 bits y los puertos COM son muy dificiles encontrar en computadores modernos.

Tu me diras que se puede emular la comunicacion atraves de USB creando un puerto virtual; Aun asi no es lo mas recomendable ya que no aprovechas al cien por cien las bondades que te ofrece USB. Mi recomendacion es que te actualices a VB.net y utilices la comunicacion HID o el metodo de transferencia masiva "BulK-transfer"

HID no require de driver para que el sistema operativo reconozca a tu hardware; la mayoria de dispositivos como mouse, teclados, microfonos, parlantes, flash memory, discos duros, telefonos celulares, joystics etc. utilizan este metodo de transferencia de datos; Ademas la comunicacion es muchos mas veloz y segura comparada con los puertos COM.

Con el metodo de transferencia masiva "Bulk-Transfer" alcanzaras la sorprendente velocidad de 12Mb/s

Saludos .
03/04/2015 #30

Avatar de Meta

Hola dinoelectro:

Lo que dices es cierto, el peurto virtual lo crea los propios driver que se instalan cuanto usas Arduino y funciona de maravilla. Lo del VB 6 lo he ignorado desde el 2008, aconsejaba .net como me has aconsejado.

Lo quiero solo porque me lo han pedido que lo incluya en el tutorial que estoy haciendo en pdf, se incluye VB6 y hay gente que lo usará para PC muy viejos con Windows XP.

Dejo este enlace temporal para que se hagan una idea. El VB .net lo tengo hecho desde el 2008 lo que estoy actualizando orientado a Arduino, en este caso.

Tutorial.
https://www.dropbox.com/s/ha07f67zie...duino.pdf?dl=0

Saludos.
04/04/2015 #31

Avatar de Meta

Hola de nuevo:

¡¡¡Por fiiiiiiiiiiiiiiiiiiin me funciona!!!

Casi me entra depresión. . Muchas gracias por ustedes. .

Les dejo el código, aún así no está terminado, ya que al pulsar el botón ON o OFF me sale error si no abro el puerto primero. Ahí también necesito ayuda, por ejemplo que si me detacta el puerto cerrado, que me diga un mensaje de algo. Puede ser, puerto cerrado, seleccione un puerto y pulse CONECTAR.

Dejo el código aquí.

Código:
Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm1.CommPort = .ItemData(.ListIndex)
        ' ...
    End With
End Sub

Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
    
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
Ahora me toca recibir mensajes desde Arduino o PIC o PC y que se muestre en el Text de VB 6.

Un cordial saludo.


Edito:
Bueno, mejor dejo deshabilitado los botones ON y OFF y se habilitan cuando se pulse conectar y habra el puerto.

Ahora me falta la parte de que si no hay puerto serie y pulsa botón, que me salga un mensaje de error que no ecuentra un puerto serie.

Dejo el código completo lo que tengo hecho hasta ahora.
Código:
Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm1.CommPort = .ItemData(.ListIndex)
        ' ...
    End With
End Sub

Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
    
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
Pueden analizarlo si hay mejoras. Luego me pongo con recibir datos.



Otra cosa, mirando en el proyecto, no encuentro el .exe. ¿Dónde está metido?

Saludos.
04/04/2015 #32


Meta dijo: Ver Mensaje

Otra cosa, mirando en el proyecto, no encuentro el .exe. ¿Dónde está metido?

Saludos.
en el Menu archivo -->Generar
05/04/2015 #33

Avatar de Meta



Les dejo un tutorial en pdf de VB 6 y puerto serie hasta donde he llegado para que lo analicen y me comente com está quedando este tutorial.

Por ahora me han contado que no todo el mundo por Internet hace tutoriales paso a paso en pdf como este. Xddddddddddd.

Ahora me toca la recepción de los datos desde el puerto serie.

Gracias con el apoyo de aquí se ha podido hacer el tutorial.
Archivos Adjuntos
Tipo de Archivo: pdf Tutorial VB6 puertoCOM.pdf (1,62 MB (Megabytes), 20 visitas)
05/04/2015 #34


pero si desde win2000 soporta .net para xp ideal es el visualstudio 2005 con el netframework 2


hacerlo en vb6 seria para un win98 o 95

y otra cosa no se puede copiar el codigo del pdf
05/04/2015 #35

Avatar de Meta

Pues mejor, para los que usan Win95/98 que los hay, ejjeeje jejeje.

Me he dado cuenta que hay que mejorar cosas de este pdf para pasarlo en el principal que todavía no haré hasta que esté completo la recpeción de datos.

Gracias por la info y comenté la parte del win95/98.

Sigo con el tutorial.


Edito:
Código mejorado.
Código:
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
06/04/2015 #36

Avatar de Meta

Hola:

Les dejo el código fuente del proyecto en VB 6 para que lo analicen mejor.

Saludos.
Archivos Adjuntos
Tipo de Archivo: rar InterDuinoVB6.rar (2,2 KB (Kilobytes), 21 visitas)
06/04/2015 #37
Moderador

Avatar de D@rkbytes

De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.

Al puerto 1 si lo seleccionas bien: COM1 OK.JPG

Pero del puerto COM2 en adelante, ya no es el número de puerto correcto: COM2 Mal.jpg

Estás conectando la interfaz por un puerto superior al seleccionado.

¿Cómo saber esto que menciono?
Usando el depurador de código de VB6 escribiendo esto:
Código:
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Y en la parte inferior del editor verás esto: VB6 Debug.jpg
En esas imágenes puse esto:
Código:
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Saca la rutina de obtención del número correcto del puerto con el código de aquí: Interfaz RS-232 Versión RC1
06/04/2015 #38


Meta dijo: Ver Mensaje
Hola:

Les dejo el código fuente del proyecto en VB 6 para que lo analicen mejor.


Saludos.
bueno da error si no tienes el puerto serie ya que los botones no se disable

sin msgbox

Código:
  If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM." 
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
             
            
            Exit Sub
        End If
bueno aca dejo otro codigo para linux

http://jsbsan.blogspot.com/2011/11/m...asarduino.html
07/04/2015 #39

Avatar de Meta

D@rkbytes dijo: Ver Mensaje
De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.

Al puerto 1 si lo seleccionas bien: Archivo Adjunto 127756

Pero del puerto COM2 en adelante, ya no es el número de puerto correcto: Archivo Adjunto 127757

Estás conectando la interfaz por un puerto superior al seleccionado.

¿Cómo saber esto que menciono?
Usando el depurador de código de VB6 escribiendo esto:
Código:
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Y en la parte inferior del editor verás esto: Archivo Adjunto 127758
En esas imágenes puse esto:
Código:
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Saca la rutina de obtención del número correcto del puerto con el código de aquí: Interfaz RS-232 Versión RC1
Hola:

Con esta línea '################################### sabes donde he puesto el trozo de código que hiciste en el mío aquí de abajo.

Pues si, si se selecciona el puerto porque lo elijo y hay problemas, incluido cuando tengo Arduino UNO y el otro Arduino Micro y el puerto físico COM1.

Código:
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    '###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
He comprobado con el código de VB .net que si funciona Arduino Micro seleccionando otro puerto. Pensé que mi código si funcionaba y veo que no. .

analogico dijo: Ver Mensaje
bueno da error si no tienes el puerto serie ya que los botones no se disable

sin msgbox

Código:
  If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM." 
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
             
            
            Exit Sub
        End If
bueno aca dejo otro codigo para linux

http://jsbsan.blogspot.com/2011/11/m...asarduino.html
¿Dónde pongo ese código exactamente?

Código completo.
Código:
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
     '###########################################################################
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If
     '###########################################################################

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    '###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
Gracias por el gambas, cuando acabe lo del VB 6 de las narices que tengo que empezar de nuevo hacer el tutorial para corregir fallos, y gracias a ustedes estoy avanzando. Me meto con Linux y Gambas, también con Java con PC de sobremesa, también usaré Raspbian con Raspberry Pi 2 que se peude hacer. Todo eso en otro tutorial a parte.

Saludos.
07/04/2015 #40
Moderador

Avatar de D@rkbytes

Usa esta función para obtener el número del puerto seleccionado en el ComboBox:
Código:
Private Function Get_CommPort(ComboPuertos As ComboBox) As Integer
    ' Obtener y retornar únicamente el número del puerto seleccionado.
    Dim StrPos%
    Dim Cadena$
    StrPos = InStr(1, ComboPuertos.Text, "(")
    
    If StrPos Then
        Cadena = CStr(Mid(ComboPuertos.Text, StrPos, 6))
        Get_CommPort = CStr(Val(Mid(Cadena, 5, 2)))
    Else
        Get_CommPort = 0
    End If
End Function
El valor de retorno es el número encontrado en la cadena del primer "COMX"

Y así llamas a la función:
Código:
    Variable = Get_CommPort(El_ComboBox)
Si retorna un número diferente a 0, todo bien y sigues, si retorna 0, algo va mal y das aviso.

Saludos.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.