Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49

    [VB6] Selezionare automaticamente la prima porta seriale esistente e disponibile

    Ciao,
    ho realizzato un programma che permette ad un pc ed un dispositivo di colloquiare tra loro utilizzando una comunicazione seriale che utilizza lo standard RS-232.
    Vorrei fare in modo che all'avvio del programma realizzato (e quindi in form_load() ) venga controllata sia l'esistenza che la disponiblità delle porte seriali a partire dalla COM 1 e venga selezionata la prima (tramite riga di comando MSComm1.CommPort = n ) che risulti essere sia esistente che disponibile, in modo tale da poterla utilizzare per far comunicare pc e dispositivo.
    Qualcuno ha idea di come fare?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa la On Error quando esegui la

    MSComm1.CommPort = n

    in un ciclo
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    Ho provato in diversi modi senza successo. Se potessi aggiungere un esempio funzionante e completo te ne sarei grato.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da 08arco80
    Ho provato in diversi modi ...
    Ad esempio, come ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    Per testare esistenza e disponiblilità di una particolare porta, pensavo di impostare il numero della porta da testare (MSComm1.CommPort = n ) e di testarla tentando l'apertura della porta stessa (MSComm1.PortOpen = True ). In questo modo dovrebbe venir restituito un errore nel caso la porta non sia esistente o non sia disponiblie.
    Supponiamo che l'unica porta esistente e disponiblie sia la COM 7.
    La routine da realizzare dovrebbe quindi testare le porte una per una partendo dalla COM 1, scartare le porte che generano un errore (in questo caso quelle comprese tra la 1 e la 6) e selezionare per la comunicazione la prima porta che non genera un errore (in questo caso la COM 7).

    Durante uno dei tentativi che ho effettuato, ho utilizzato On Error ed etichette di riga per realizzare una sorta di loop, come di seguito:


    codice:
    private sub form_load()
    
        index = 1
        
        GoTo comportsearch
    
    comportsearch:
        On Error GoTo errs
        MSComm1.commport = index
        MSComm1.PortOpen = True
        Exit Sub
    
    errs:
        index = index + 1
        Err.Clear
        GoTo comportsearch
    
    end sub
    In questo caso viene generato un errore (cod. 8002) alla riga MSComm1.PortOpen = True nonostante sia presente l'istruzione On Error GoTo errs .

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    Proprio nessuna idea?!?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da 08arco80
    Per testare esistenza e disponiblilità di una particolare porta, pensavo di impostare il numero della porta da testare (MSComm1.CommPort = n ) e di testarla tentando l'apertura della porta stessa (MSComm1.PortOpen = True ). In questo modo dovrebbe venir restituito un errore nel caso la porta non sia esistente o non sia disponiblie.
    Mi sembra corretto ... l'unica cosa che ti consiglio e' di provare per un numero limitato di porte (che so ... dalla 1 alla 10 ) e non con un ciclo, potenzialmente, infinito ...
    Nel caso in cui non ci fosse nessuna COM disponibile, il programma andrebbe avanti senza fermarsi ...

    E poi devi usare la Resume e non la Goto ...

    codice:
    Private sub Form_load()
        Dim ix As Long
    
        On Error Resume Next
    
        For ix = 1 To 10
            MSComm1.commport = ix
            MSComm1.PortOpen = True
            
            If Err = 8002 Then
                Resume Next
            Else
                MsgBox "Aperta la porta " & ix
                Exit Sub
            End If
        Next ix
    
        MsgBox "Nessuna porta aperta"
    End Sub
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.