Newsgroup: it.comp.lang.visual-basic
Titolo: MSComm VS COM2

Salve a tutti!
Problema:
ho un programma che dialoga con la COM2 tramite un oggetto MSComm; ora,
quando lo mando in esecuzione (F5) non mi ritorna nessuna "stringa di
risposta"; mentre, se lo eseguo passo-passo (F8) "velocemente" mi ritorna
solo parte della "stringa"; viceversa, se faccio l'esecuzione passo-passo
lentamente, non incontro problemi...
Da specificare che dall'altra parte della COM c'è una scheda che comunica
con lo standard 458, ma è stato montato un apposito convertitore allo
standard RS232...
Quale sarà l'avversa ragione che guida l'oscuro comportamento del programma
e/o della porta?
Ringrazio tutti coloro che si "scervelleranno" con me per questo problema,
Salvatore Perrotta
ICQ UIN:32461236

e/o della porta?
Che verzione di VB usi?
Prova ad impostare:
     MSComm1.RThreshold = 1
Se ancora non va, prova a fare ste cose:
nell'evento _OnComm(), fai cosi':
Private Sub MSComm1_OnComm()
    Dim Rx$
    Rx$ = MSComm1.Input ' Leggo il contenuto del buffer di ricezione (e
svuoto .Input)
    If Len(Rx$) Then ' Se ho ricevuto qualcosa lo scrivo nella TextBox
        ' .. . . il tuo codice
        ' Text1.Text = Text1.Text & Rx$
    End If
End Sub
Poi aggiungi un Timer da 100 msec, e nel timer aggiungi questo codice:
Private Sub Timer1_Timer()
    If MSComm1.PortOpen Then call MSComm1_OnComm
End Sub
Se ancora non va... . .   prova a postare il tuo codice. ( e la
configurazione di MSCOMM )
Ciao
By -MES-   Maronese Ettore
http://www.maronese.com/mes
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://www.murialdo.it/it_lang_vb




     MSComm1.RThreshold = 1
Aggiungendo questa istruzione l'output č cambiato in questo modo:
Down001 ---> Mem=001 Data=123456789012345678901234567890
Down002 ---> Mem=002 Data=123456789012345678901234567890
Down003 ---> Mem=003 Data=123456789012345678901234567890
Down004 ---> Mem=004 Data=123456789012345678901
Down001 ---> 234567890
Down002 ---> Mem=005 Data=123456789012345678901234567890 ecc.
E' un problema di ritardi????
-----------------------------------------------------
Roberto Bergonzini -MO- 
robb...@tin.it
Microsoft Certified System Engineer
Microsoft Certified Professional Specialist Internet
-----------------------------------------------------

Down002 ---> Mem=002 Data=123456789012345678901234567890
Temo di aver capito il tuo problema.. . ;-P
Allora, devi sapere che la seriale manda un carattere alla volta, e che sta
a te rimetterli insieme per ricomporre il messaggio originario.
Per far questo hai bisono di avere dei punti di riferimento, tipo un
carattere di start del messaggio ed un carattere di stop, oppure una
carattere di start e poi, conoscendo la quantita' di bytes che dovrai
ricevere saprai anche quando hai ricevuto tutto il pacchetto.
Un'altro modo, se non sai quanto e' lungo il pacchetto, e' quello di
abilitare un timer (un Time Out) di mezzo secondo, tale che se per mezzo
secondo non ricevi nulla, significa che il messaggio e' terminato.
Succo succo, tu devi riassemblarti il messaggio che ti arriva a pezzi, in un
modo tipo questo:
dim BufAssemblaggio$
sub MSCOMM1_OnComm()
    dim Rx$
    dim Messaggio$
    dim Posiz integer
    Rx$=MSCOMM1.Input
    if lem(Rx$) then
        ' Riassemblo il messaggio.
        BufAssemblaggio$=BufAssemblaggio$ & Rx$
        ' Supponendo che tutti i messaggi terminano con un invio
( chr$(13) )
        ' vedo se questo messaggio e' terminato
        Posiz =instr(BufAssemblaggio,chr$(13) )
        if Posiz  then
             ' isolo il messaggio arrivato
             Messaggio$ = left$(BufAssemblaggio$,Posiz)
             BufAssemblaggio$=mid$(BufAssemblaggio$,Posiz+1)
             ' Richiamo la funzione che elabora il messaggio ricevuto
             call MessaggioArrivato(Messaggio$)
        endif
    endif
exit sub


(con OCX per stampare i recordset)
Un grazie di cuore per il consiglio; provo immediatamente!


Vi ringrazio tutti! Siete stati preziosi...
