Newsgroup: it.comp.lang.visual-basic
Titolo: MsComm1 e buffer uscita

Non cavo un ragno dal buco. Non riesco ad azzerare il buffer di uscita 
di Mscomm1.
Allora vediamo di riassumere: un ciclo do loop manda una serie di sms, 
il primo regolarmente, il secondo accodando la stringa da spedire ai 
comandi AT dati precedentemente all' Output("AT+CMGF=1" "AT+CMGS="), il 
terzo regolarmente, e poi ancora il quarto con accodamento, il quinto 
regolarmente e cosï¿œ via.
Ho provato ad inserire dei tempi di attesa, ma niente, ho provato a 
porre com1.Output=0 prima dell'invio della stringa, ma niente
non riesco a vedere dove possa essere il problema di questo 
comportamento a singhiozzo della porta.
Avrei risolto aprendo e chiudendo la porta ad ogni sms, ma non mi sembra 
corretto come procedura... e poi si allungano i tempi.
Avete qualche suggerimento?
-- 
Gulpï¿œ

Avete qualche suggerimento?
Prova con:
  MsComm1.OutBufferCount = 0
--
ciao
  Stefano

  MsComm1.OutBufferCount = 0
Scusami mi sono distratto e ho scritto male:
quello che ho scritto come com1.Output=0     � gi� in realt�, e anche
purtroppo, visto che non funziona:   MsComm1.OutBufferCount = 0
Ma anche cos� non riesco ad azzerare il buffer di uscita. E' alquanto
strana, penso tu sia d'accordo, l'alternanza del fenomeno di accodamento,
quasi come se per mettere "le sue  cosine a posto" Mscomm1 avesse bisogno di
"una pausa ogni tanto"....
-- 
Gulp�

  MsComm1.OutBufferCount = 0
Scusami mi sono distratto e ho scritto male:


Gulpï¿œ ci ha detto :

Ipotizzando che il problema sia nel buffer di uscita e non nella tua 
gestione delle variabili che utilizzi (cosa, a mio parere, decisamente 
piï¿œ probabile), ti consiglierei di verificare:
- che il cavo sia coerente con l'handshaking che utilizzi. Se usi un 
handshaking diverso da None, ad esempio, il cavo deve portare i segnali 
richiesti.
- che il device remoto gestisca questi segnali, se appunto usi un 
handshaking e il cavo ï¿œ giusto.
- che il SThreashold sia adeguato alle tue necessitï¿œ (anche 0, nel 
dubbio).
Alberto

 dubbio).
Mi sembra gi� settato a 0, ma qui a memoria potrei non ricordare 
bene.Controller�
Intanto grazie
Gulp� 

 bene.Controllerï¿œ
Resta quasi solo questo, se vogliamo insistere sulla seriale.
Alberto


Private Sub ComConfig()
'configura la porta COM di BlueTooth per la comunicazione col cellulare
On Error GoTo Cferror
COM1.CommPort = PortaBT
COM1.Settings = "28800,n,8,1"
COM1.InputLen = 0
COM1.RThreshold = 1
COM1.EOFEnable = True
COM1.Handshaking = comRTS
COM1.RTSEnable = True
COM1.PortOpen = True
End sub
Configurazione (una sola volta) prima del ciclo sul database:
ComConfig
Il codice dentro al ciclo :
For Index = inizio To 18
...
phonenum = datClientiRS.Recordset.Fields("CELLULARE")
If Len(phonenum) < 4 Then GoTo assente
   SMSend
...
assente:
Next Index
Private Sub SMSend()
Dim t As Integer
On Error GoTo errore
COM1.Output = "AT" & Chr$(13) '& Chr(10)
Wait 3
COM1.Output = "AT+CMGF=1" & Chr$(13)
Wait 3
COM1.Output = "AT+CMGS=" & Chr(34) & phonenum & Chr(34) & Chr$(13)
t = 0
Do
     Wait 1
     t = t + 1
     If t = 45 Then Exit Do
Loop Until InStr(ComRisposta, ">") > 0
COM1.Output = "Prova" & Chr(26)
t = 0
Do
     Wait 1
     t = t + 1
     If t = 45 Then Exit Do
Loop Until InStr(ComRisposta, "OK" & vbCrLf) > 0
Wait 4
End Sub
Ora qui, come ti dicevo non vi sono variabili strane, ma il risultato 
non cambia.
-- 
Gulpï¿œ

 Resta quasi solo questo, se vogliamo insistere sulla seriale.
COM1.RThreshold = 1 , ma se provo a settarlo a 0
COM1.Output = "AT" & Chr$(13)
non  mi da l' "OK" e quindi COM1.Output = "AT+CMGF=1" mi da subito dopo 
errore 8018 (Operazione valida solo quando la porta ï¿œ aperta)
-- 
Gulpï¿œ

Gulpï¿œ ha spiegato il 14/10/2011 :

Soprattutto se consideriamo che io parlavo di SThreshold.
Alberto

> Soprattutto se consideriamo che io parlavo di SThreshold.
Oopss!
Poi dicono che "programmare" aumenti e mantenga l'attenzione...ma forse sono 
le 55 primavere!
Quando torno a casa prover� il settaggio che mi hai suggerito... speremo!
Ciao
Egidio
Gulp� 

 Soprattutto se consideriamo che io parlavo di SThreshold.
 
Ho provato i due settaggi 0 e 1, non si risolve nulla.
 
Ho provato a verificare il buffer di uscita ponendo
 
Do
COM1.OutBufferCount = 0
COM1.InBufferCount = 0
Loop Until COM1.OutBufferCount = 0
 
subito dopo la risposta col prompt: >
 
e prima di effettuare l'invio
COM1.Output = "Prova" & Chr(26)
 
Sorpresa! Il buffer effettivamente è vuoto ed infatti c'è l'uscita dal 
loop e la spewdizione dell' sms, ma dove cavolo le conserva allora 
quelle due stringhe in Output da accodare?
 
Dove vengono parcheggiate e da dove riprese?
-- 
Gulp®

Il 14/10/11 15.09, Albe V° ha scritto:
Dal momento che posso considerarli dati di "configurazione" da passare 
una sola volta e a porta aperta, ho provato a porre
 
COM1.Output = "AT" & Chr$(13)
Wait 3
COM1.Output = "AT+CMGF=1" & Chr$(13)
 
dentro a ComConfig dopo l'apertura della porta e cioè in definitiva al 
di fuori del ciclo, ebbene ora la stringa accodata è diventata solo 
questa:COM1.Output = "AT+CMGS=" & Chr(34) & phonenum & Chr(34) & Chr$(13)
 
si potrebbe pensare allora, ma so che è assurdo, che sia il ciclo il 
vero responsabile, ma questo è smentito dal fatto che al terzo sms tutto 
torna normale!!
 
-- 
Gulp®

Il 15/10/11 9.43, Gulp® ha scritto:
 
Ho provato a leggere ComRisposta e ho scoperto che una volta su due al 
comando AT+CMGF=1 la risposta anziché essere "OK" è ">" e quindi a quel 
prompt segue il comando AT+CMGS="66641876" e, guarda caso, questo 
corrisponde ad sms con accodamento.
 
AT
OK
AT+CMGF=1
OK
AT+CMGS="66641876"
 >   Come è bello il mondo 
+CMGS: 15
OK
 
AT
OK
AT+CMGF=1
 >  AT+CMGS="66641876"
 >   Come è bello il mondo 
+CMGS: 16
OK
 
AT
OK
AT+CMGF=1
OK
AT+CMGS="66641876"
 >   Come è bello il mondo 
+CMGS: 17
OK
 
AT
OK
AT+CMGF=1
 >  AT+CMGS="66641876"
 >   Come è bello il mondo 
+CMGS: 18
OK
 
-- 
Gulp®


 
Ciao,
solo una domanda: hai provato ad inviare questi comandi AT con un 
emulatore di terminale? In questo modo dovresti riuscire a separare i 
problemi di handshake hardware da quelli software e da quelli di 
protocollo per il quale mi è capitato spesso di trovare incongruenze tra 
ciò che è scritto sui manuali e ciò che accade effettivamente sulla 
linea seriale.