Newsgroup: it.comp.lang.visual-basic
Titolo: Buffer di ricezione e MSComm

Sto scrivendo un programma in Visual Basic che utilizzando i comandi
AT deve gestire le funzionalità di un apparato cellulare
(sto usando un modem GSM collegato alla seriale del PC per simulare un 
telefono cellulare)
Attraverso il ciclo DO-LOOP vado a leggere nel buffer di ricezione la
risposta dal modem (per poter poi verificare la presenza della stringa 
OK oppure ERROR) ma il buffer risulta sempre vuoto.
Dove sbaglio?
Riporto di seguito il listato del programma in Visual Basic.
Private Sub Form_Load()
 Dim RispostaDalModem$, Control$
 
   ' Impostazioni della porta per le comunicazioni.
    ' Si presume che un mouse sia connesso a COM1. CommPort viene 
quindi impostata su 1
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
 
    MSComm1.InputLen = 0
 
    ' Apre la porta per le comunicazioni.
    On Error Resume Next
 
    MSComm1.PortOpen = True
 
    If Err Then
       MsgBox "COM1 non disponibile. La proprietà CommPort verrà 
impostata su un'altra porta.", , "Telefono MSComm"
       Exit Sub
    End If
 
 
    MSComm1.RThreshold = 1
 
    Control$ = "AT+CLIP=1" + vbCr
      MSComm1.Output = Control$
 
 
    Do
      DoEvents
      ' Se ci sono dati nel buffer allora leggiamoli.
      If MSComm1.InBufferCount Then
        RispostaDalModem$ = RispostaDalModem$ & MSComm1.Input
         ' Controlla se la risposta è "OK".
        If InStr(RispostaDalModem$, "OK") Then
            MsgBox "OK ", vbInformation
            Exit Do
         End If
     End If
   Loop
 
 
 
End Sub

Prova in questo modo:
Private Sub Form_Load()
    Dim RispostaDalModem as String, Control as String
    MSComm1.RThereshold = 0
    MSComm1.Inputlen = 0
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,8,n,1"
    On Error Resume Next
    MSComm1.Portopen = True
    If Err Then
        MsgBox "Com1 non disponibile. La proprietà CommPort verrà impostata
su un'altra porta.",,"Telefono MSComm"
        Exit Sub
    End If
    Control = "AT+CLIP=1" + VbCr
    MSComm1.Output = Control
    Do
        DoEvents
        RispostaDalModem = RispostaDalModem & MSComm1.input
    Loop Until Instr(RispostaDalModem, "OK")
End Sub
Così dovrebbe funzionare, in ogni modo la gestione più corretta della
seriale è quella ad eventi, specialmente se già conosci le risposte che devi
avere. Come hai fatto tu, e ti parlo per esperienza personale, il programma
( soprattutto se è abbastanza complesso ) si potrebbe bloccare.
Quel DoEvents, che dovrebbe permettere al SO di svolgere le altre
operazioni, a volte cede completamente il controllo al sistema facendo
fermare quel ciclo ..... non ti dico se poi di questi cicli ne hai più di
uno.
Ciao, Claudio.

...

Grazie mille per aver risposto, ora provo a vedere se funziona!
Ciao
     Alessandro

Sto scrivendo un programma in Visual Basic che utilizzando i comandi
AT deve gestire le funzionalità di un apparato cellulare
(sto usando un modem GSM collegato alla seriale del PC per simulare un 
telefono cellulare)
Attraverso il ciclo DO-LOOP vado a leggere nel buffer di ricezione la
risposta dal modem (per poter poi verificare la presenza della stringa 
OK oppure ERROR) ma il buffer risulta sempre vuoto.
Dove sbaglio?
Riporto di seguito il listato del programma in Visual Basic.
Private Sub Form_Load()
 Dim RispostaDalModem$, Control$
 
   ' Impostazioni della porta per le comunicazioni.
    ' Si presume che un mouse sia connesso a COM1. CommPort viene 
quindi impostata su 1
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
 
    MSComm1.InputLen = 0
 
    ' Apre la porta per le comunicazioni.
    On Error Resume Next
 
    MSComm1.PortOpen = True
 
    If Err Then
       MsgBox "COM1 non disponibile. La proprietà CommPort verrà 
impostata su un'altra porta.", , "Telefono MSComm"
       Exit Sub
    End If
 


Dove sbaglio?
INFO: Receiving Data Using the MSComm Control's OnComm Event 
Q194922
support.microsoft.com/support/kb/articles/Q194/9/22.asp
-- 
hth, hal