none
Problema con puertos serie RRS feed

  • Pregunta

  • Buenos días Foro!
    estoy teniendo un problema con un programa que hice. yo en ese programa uso los puertos serie de una computadora (tiene 2 y uno mas con un adaptador USB-RS232) el tema es que de vez en cuando por alguna razón cuando quiero iniciar el programa no me deja por que dice que los puertos están abiertos. yo tengo una subrutina de cierre de puertos que la uso siempre que pongo "Stop" en el programa, es mas, lo ultimo que hice fue loguear cada cierre de puerto y si realmente esta cerrado, acá pongo el código.

    Sub mCerrar_Puertos()
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        On Error Resume Next
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        If gblEmular(2) = False Then
            Call gGrabo_log("Inicia la rutina de cierre de puertos serie")
        End If
            MSCommBalanza.PortOpen = False
                If MSCommBalanza.PortOpen = False Then
                    Call gGrabo_log("Se cerró puerto serie de la balanza")
                Else
                    Call gGrabo_log("Falló al cerrarse el puerto serie de la balanza")
                End If
        If gblEmular(3) = False Then
            MSCommImpresora.PortOpen = False
        End If
                If MSCommImpresora.PortOpen = False Then
                    Call gGrabo_log("Se cerró puerto serie de la impresora")
                Else
                    Call gGrabo_log("Falló al cerrarse el puerto serie de la impresora")
                End If
        If gblEmular(4) = False Then
            MSCommPLC.PortOpen = False
        End If
                If MSCommPLC.PortOpen = False Then
                    Call gGrabo_log("Se cerró puerto serie del PLC")
                Else
                    Call gGrabo_log("Falló al cerrarse el puerto serie del PLC")
                End If
        Err.Clear
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    End Sub

    El programa corre sobre Windows XP

    Espero que me puedan ayudar, muchas gracias!

    jueves, 7 de marzo de 2013 12:47

Todas las respuestas

  • ¿Estás comprobando que los puertos que usas están libres en el ordenador? Lo puedes hacer con Hyperterminal.

    ¿Como abres el puerto?


    Saludos, Javier J

    jueves, 7 de marzo de 2013 13:07
  • Muchas gracias por la respuesta. Nunca lo comprobé con el hyperterminal, como seria eso?

    En este caso las variables gsParam.sPuertoserie(Balanza, Aplicadora o PLC) valen 1, 2 y 7 respectivamente y la variable gsParam.sValoresPuerto(Aplicadora, Balanza o PLC) vale en los 3 casos lo mismo 9600,n,8,1

    Private Function msAbrir_Puerto_Serie(iPuerto As Integer) As String
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        On Error Resume Next
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim sError As String
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        If gblEmular(iPuerto + 1) Then
            msAbrir_Puerto_Serie = "OK"
        Else
            Err.Clear
            Select Case iPuerto
            Case 1 ' balanza
                MSCommBalanza.CommPort = Val(gsParam.sPuertoSerieBalanza)
                MSCommBalanza.Settings = gsParam.sValoresPuertoBalanza
                MSCommBalanza.PortOpen = True
            Case 2 ' impresora
                MSCommImpresora.CommPort = Val(gsParam.sPuertoSerieAplicadora)
                MSCommImpresora.Settings = gsParam.sValoresPuertoAplicadora
                MSCommImpresora.PortOpen = True
            Case 3 ' plc
                MSCommPLC.CommPort = Val(gsParam.sPuertoSeriePLC)
                MSCommPLC.Settings = gsParam.sValoresPuertoPLC
                MSCommPLC.PortOpen = True
            End Select
            If Err.Number <> 0 Then
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                sError = Trim$(Err.Number) & " - " & Err.Description
                msAbrir_Puerto_Serie = sError
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Else
                Select Case iPuerto
                Case 1 ' balanza
                    If MSCommBalanza.PortOpen Then
                        msAbrir_Puerto_Serie = "OK"
                    Else
                        msAbrir_Puerto_Serie = "Imposible abrir puerto"
                    End If
                Case 2 ' impresora
                    If MSCommImpresora.PortOpen Then
                        msAbrir_Puerto_Serie = "OK"
                    Else
                        msAbrir_Puerto_Serie = "Imposible abrir puerto"
                    End If
                Case 3 ' plc
                    If MSCommPLC.PortOpen Then
                        msAbrir_Puerto_Serie = "OK"
                    Else
                        msAbrir_Puerto_Serie = "Imposible abrir puerto"
                    End If
                End Select
            End If
        End If
        Err.Clear
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    End Function
    
    Saludos y Gracias 

    jueves, 7 de marzo de 2013 13:51
  • Aquí te dicen 

    http://www.puertosabiertos.com/es/escaner-de-puertos.htm


    Saludos, Javier J

    jueves, 7 de marzo de 2013 18:21