Newsgroup: it.comp.lang.visual-basic
Titolo: Che mi perdo? MSComm e Nokia

Ciao ragazzi,
mi vergogno un po' a postare questo messaggio, ma c'e' qualche cosa che mi 
sfugge, e non capisco cosa.
Devo "interagire" con un modem GSM per la gestione degli sms, e volevo 
quindi iniziare a giocare un po' con il protocollo AT+, e mentre aspetto che 
mi arrivi il modem, ho provato a collegare il mio Nokia 6680 per vedere cosa 
succede.
Allora.. prendo HyperTerminal, setto la porta com 4 (dove viene visto il mio 
telefonino, tramite cavo USB), setto i 9600,n,8,1 apro la connessione, mando 
la stringa AT+GMM e il telefono riposnde giustamente Nokia 6680
Bene, ora mi apro un form VB, ci metto su un bel controllo MSComm, (lo 
chiamo Seriale), gli imposto la porta, il settings, apro la porta e fin qui 
tutto ok.
In un pulsante su un form, scrivo queste righe...
Dim Stringa as String
Stringa = Seriale.Input ' cosi' svuoto il buffer, ci dovesse essere
Seriale.Output = "AT+GMM"
Stringa = Seriale.Input
Tenete presente che, per il momento, eseguo queste istruzioni in debug, una 
alla volta, per dare alla Seriale il tempo di fare tutto.
non ho impostato ne l'RThreshold ne altro, ho lasciato tutto come 
predefinito, tranne il numero di porta.
Ecco il problema.. eseguendo passo passo il codice, nella variabile Stringa, 
non ricevo mai nulla. La stringa e' sempre vuota. Se faccio la chiamata al 
metodo Input senza lasciare passare un bel po' di tempo (oltre i 10 secondi) 
da quando ho fatto l'output, mi viene fuori un errore di runtime 8020 Errore 
di lettura della periferica di comunicazione.
Cosa c'e' che tralascio?
Ciao e grazie... Maurizio

 Ciao e grazie... Maurizio
hth
bye
r

 forse un EOL (VbCrLf) ?
...
No, ho provato anche con quello :-(

Ciao e grazie... Maurizio
Hai provato con Handshaking a comNone?
Per svuotare il buffer metti InBufferCount = 0
--
ciao
  Stefano

Aggiungo una informazione:
Ho provato a vedere la proprieta' InBufferCount appena dopo aver spedito la 
stringa, ed ho i seguenti risultati
Nel caso la stringa sia "AT+GMM", la proprieta' InBufferCount =6 (come la 
lungheza della stringa che ho tirato fuori io.. mi sa che non e' partita)
Nel caso la stringa sia "AT+GMM" & VbCrLf, l'InBufferCount = 28
Caso "AT+GMM" & vbCr, InBufferCount = 27
boh 

 Hai provato con Handshaking a comNone?
...
Handshaking e' gia' a comNone, come da default.

Aggiungo...
fin tanto che la proprieta' InBufferCount <> 0, il metodo Seriale.Input 
restituisce sempre "Errore di lettura della periferica di comunicazione" 

 la lettura della seriale la fai nell'evento OnComm
....
provato anche cosi'.
Abilito l'RThreshold e lo imposto ad 1, intercetto l'evento OnComm, verifico 
che l'evento sia comEvReceive e nel caso provo a fare l'input.
Stesso discorso, pari pari. Se la proprieta' inBufferCount <> 0 (ad esempio 
28), il metodo Seriale.Input restituisce errore, dopo una decina di secondi 
(immagino sia un timeout dell'oggetto MSComm dopo del quale svuota il 
buffer), la proprieta' inBufferCount =0 e il metodo Input non va in errore 
ma, naturlalmente, non restituisce nulla.
Mi verrebbe piu' da pensare ad un formato strano dei dati di ritorno, ma la 
cosa strana e' che con l'Hyperterminal settato con le impostazioni standard 
(a parte la velocita', portata a 9600), funziona tutto; quindi niente 
controllo di flusso, niente alchimie strane. Boh


wrote:
Questa l'hai provata?
        MSComm1.Output = "AT+CGMM" & vbCr
        Do: DoEvents: Loop Until MSComm1.InBufferCount <> 0
        Stringa = Trim(CStr(MSComm1.Input))
Ciao


        Stringa = Trim(CStr(MSComm1.Input))
...
Si, l'ho provata, anche senza il Trim.
Il problema e' che, finche' la proprieta' inBufferCount <> 0, il metofo 
MSComm.Input restituisce un errore.
Come se (e quasi sicuramente sto dicendo una stupidata), il formato di dati 
restituito dal telefonino non sia "leggibile" dal MSComm. Viene riempito il 
buffer di lettura, ma non si riesce a sapere cosa ci sia scritto dentro.