Encontrar error de código.

Iniciado por Meta, 27 Marzo 2015, 12:40 PM

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

Meta

Hola:

Al programar con VB 6 bajo Winwdows 7 de 64 bits, he hecho esto.


Quiero seleccionar el puerto serie que me detecta automáticamente el comboBox. Algo no tengo bien qu em e da error y al pulsar depurar me indica este error.

Código (vb,11) [Seleccionar]
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()
    Form1.ComboBoxCOM.Clear
       MSComm1.CommPort = ComboBoxCOM
MSComm1.PortOpen = True   ' Habilitar el puerto serie.
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


El error dice:
No coincide los tipos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

HdM

Hola.

Código (vb) [Seleccionar]

Form1.ComboBoxCOM.Clear 'estas vaciando el cb
MSComm1.CommPort = ComboBoxCOM 'estas asignando a una prop. numerica entera, un valor vacio, por tanto, no coinciden los tipos.


Saludos.

- Nice to see you again -

Meta

Buenas:

Cuando detecte algún puerto serie físico o virtual, que se ponga en el comboBox directamente, no dejarlo en blanco como puse. No logro hacerlo.

En cuanto a
Código (vb) [Seleccionar]
MSComm1.CommPort = ComboBoxCOM

¿Qué hay que hacer aquí?

Lo que quiero es que cuando no encuentre ningún puerto serie sea físico o virtual, en el combobox se muestre en blanco o diga que no encuentra puertos o lo que sea.
En cuanto a que detecte puertos serie, añada una lista en el comboBox y el primero queda seleccionado.

Luego elijo el puerto que quiera usar del comobox, por lo que veo, parece que falta un botón que diga CONECTAR/DESCONECTAR puerto seleccionado en el comboBox.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

HdM

Lo que tienes que asignar es el nº de puerto, no el nombre del puerto. Si tienes el "COM4", entonces al commport le tendrás que asignar 4. Si no se encuentran puertos serie, entonces no asignes nada, no trates de abrir ningún com, puedes mostrar un aviso y salir del sub.

- Nice to see you again -

Meta

Hola:

Intenté con esto:
Código (vb) [Seleccionar]
MSComm1.CommPort = ComboBoxCOM.Index = 1

Cuando cargue una lista en el comboBox, hay que escoger el índice o item o como se llame con el primer puerto que detecte. Luego tengo la posibilidad de elegir el que quiera.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

HdM

Hola.

1º En el load del form cargas el cb con todos los com disponibles con un sub, o directamente. Tras finalizar si hay puertos disponibles, entonces haces la asignación cb.listindex=0 (lanzará el click del cb), para que deje seleccionado el 1er item (com encontrado).

2º En el click del cb, codea para que al msc.commport, se le asigne el puerto del com seleccionado en el cb. Ej: Si se ha seleccionado el "COM4", de esa string, tendrás que extraer el "4" y asignarlo al commport.

Básicamente es eso, aunque se podría optimizar un poco.

Saludos.

- Nice to see you again -

Meta

Buenas:

Todavía me sale error por aquí.
Código (vb) [Seleccionar]
MSComm1.CommPort = ComboBoxCOM.ListIndex = 0

Si se puede optimizar un poco depende del programador. No se me da optimizar.

En cuanto el string del que me hablas, estoy en ello para conseguir el 4.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

Puse un botón nuevo que este es su código.

Código (vb) [Seleccionar]
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


El código completo es este:
Código (vb) [Seleccionar]
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"
    End Sub
     
    Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON"
    End Sub
     
    Private Sub Form_Load()
       '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


Todavía me da problemas aquí.
Código (vb) [Seleccionar]
MSComm1.CommPort = ComboBoxCOM.ListIndex = 0
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

seba123neo

Hola, la propiedad CommPort acepta solo puertos validos.

Si queres conectarte al puerto que esta seleccionado en el combobox, simplemente toma solo la parte que dice "COM4" la otra parte del texto es invalida, no se te va a conectar nunca.

la propiedad solo toma puertos "COM1", "COM2"..etc...si vos le pones "Arduino (COM4)" no te va a funcionar.

El problema aca es que vos estas mostrando en el combobox la descripcion del puerto, pero el mscomm necesita solo el numero del puerto, no la descripcion.

entonces tenes 2 opciones:

1 - extraes del texto la parte que dice "COM4", sacando el texto que esta entre parentesis (no lo recomiendo ya que puede venir algun texto que haga que esto no funcione).

2 - cuando llenas el combo usar un array para almacenar solo el nombre del puerto, sin la descripcion.

aca te dejo un simple ejemplo de como llenar un combobox con texto  el nombre del puerto y luego al hacer clic en algun item, te muestra solo el nombre del puerto, sin la descripcion, que es lo que necesitas para conectarte al mscomm.

Código (vb) [Seleccionar]
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
        Combo1.AddItem "Arduino (COM" & i & ")" ' cargo el combo con descripcion y el numero del puerto
       
        ReDim Preserve vPuertos(Combo1.ListCount - 1)
        vPuertos(Combo1.ListCount - 1) = "COM" & i
    Next
End Sub

Private Sub Combo1_Click()
    MsgBox vPuertos(Combo1.ListIndex) '  te muestra solo el nombre real del puerto, sin la descripcion
End Sub


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

HdM

A la propiedad commport, se le asigna el nº de puerto, no el nombre del puerto. Asignarle por ejemplo "COM4", no sería válido. Por otro lado, en el sistema los COM puede que no vengan numerados desde el 1 (ej. podría tener un único com, que fuese el COM4).

- Nice to see you again -