Newsgroup: it.comp.lang.visual-basic
Titolo: Leggere dati dal buffer di ricezione

Sto scrivendo un programma in Visual Basic che utilizzando i comandi
AT deve verificare se un determinato numero telefonico è presente
all'interno della rubrica di una SIM card (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.
Qualcuno può aiutarmi?
Riporto di seguito il listato del programma in Visual Basic.
Private Sub Form_Load()
 Dim Rx$, SendId$, DialString$, SettingModem$, MessageString$,
RispostaDalModem$, Control$, Control1$, Control2$, Control3$, check
 
 Dim Instring As String
 
   ' 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"
 
    ' 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.InputLen = 0
 
    Number$ = "SM"
 
    Number1$ = "
+39349311254
"
 
    Control$ = "AT+CPBS=""" + Number$ + """" + vbCr
    Control1$ = "AT+CPBP=""" + Number1$ + """" + vbCr
      MSComm1.Output = Control$
 
      MSComm1.Output = Control1$
 
    Do
      DoEvents
      ' Se ci sono dati nel buffer allora leggiamoli.
      If MSComm1.InBufferCount Then
         RispostaDalModem$ = RispostaDalModem$ + MSComm1.Input
 
        Debug.Print MSComm1.CommEvent, RispostaDalModem$
 
         ' Controlla se la risposta è "OK".
         If InStr(RispostaDalModem$, "OK") Then
 
            MsgBox "NUMERO PRESENTE", vbInformation
            Exit Do
         End If
      End If
   Loop
 
End Sub


 [...]
La prima cosa da fare è inviare su com1 gli stessi comandi con
hyperterminal. Se tutto funziona allora ti puoi preoccupare di mscomm,
altrimenti devi capire perchè il modem non ti risponde.
Ciao
Alfonso

...

I comandi su hyperterminal li avevo già inviati e il modem risponde
correttamente ma quando mando gli stessi comandi usando mscomm ho
problemi:i comandi il modem li riceve ed esegue correttamente ma il
buffer di ricezione è sempre vuoto...
Ciao
Alessandro


così su due piedi non saprei, però ti riporto un po' di parametri di mscomm
da verificare:
    Comm.Handshaking = comRTS o comNone
    Comm.DTREnable = True
    Comm.EOFEnable = False
    Comm.RThreshold = 0
    Comm.SThreshold = 0
un'ipotesi che faccio è che ci sia EofEnable a True. Poichè hai messo
Inputlen = 0 mscomm aspetta un carattere di eof per restituirti i caratteri
letti. Ma poichè il carattere di eof non arriverà mai...
hth
Alfonso

...

Grazie per il suggerimento, anche se purtroppo non ha risolto il
problema...il buffer di ricezione è sempre vuoto e continuo a non
capire il perchè...sto impazzendo!
Alessandro

Sto scrivendo un programma in Visual Basic che utilizzando i comandi
AT deve verificare se un determinato numero telefonico è presente
all'interno della rubrica di una SIM card (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

Qualcuno può aiutarmi?

Private Sub Form_Load()




Post a follow-up to this message
--------------------------------------------------------------------------------
 
©2002 Google