Newsgroup: it.comp.lang.visual-basic
Titolo: Uso porta COM e dati binari

Ho un problema sulla gestione della porta com: dovrei ricevere una
serie di dati ascii completi (0-255) e convertirli poi in valori. Il
problema nasce dal fatto che il dato ASCII 00h viene considerato come
nullo e viene ignorato dalla funzione MSCOMM, mentre per il mio
programma è anch'esso un dato valido.  Vorrei assegnare il contenuto
del buffer ad una variabile variant, e non so se viene perso nella
lettura del buffer con MSCOMM.Input o durante l'assegnazione  
Rx = MSCOMM.Input      (con Rx definita come variabile variant).
Uso Visual Basic versione 5.
Grazie in anticipo!

 ha scritto nel messaggio
news:39fd3b92.403145@proxy...


 wrote in message 39fd3b92.403145@proxy...

Guarda nelle proprietà dei MSCOMM, c'e' ne una (che non mi ricordo come si
chiama, forse DiscardNull o booo) che è booleana e decide se considerare o
meno i bytes a 0 (zero).
Per quanto riguarda la variabile variant, non dovrebbe avere problemi; io
per sicurezza comunque userei una variabile stringa.
PS: Se ti puo' servire, sul Sito Comune di questo NG
 
http://www.murialdo.it/it_lang_vb
 ) c'e' un'articolo che spiega come usare
il controllo MSCOMM.
Ciao
Ettore Maronese  il -MES-
http://www.maronese.com/mes

 wrote in message
news:8tk0ge$4i7$1...@lacerta.tiscalinet.it...

Visto il casino che a volte fa il tipo String di VB, io preferireri un array
di byte, almeno vb lo lascia cosi' com' e'.
Ciao
Aldo


Uso ed ho sempre usato le stringhe di VB im modo Pesante. Ti assicuro che
NON ESISTONO CASINI fatti dalle stringhe!
Non confondere le stringhe con i controlli Label o Text che sono 2 cose
mooolto diverse.
Fidati al 100% delle stringhe ( X as String  oppure  X$ ) perchè reggono
_qualsiasi_ carattere, mentre stai attento ai controls
(Label/Text/List/Combo ecc..) che spesso usano le strinche (.caption) in
modo customizzato.
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

 wrote in message
news:8tkpvk$btl$1...@fe2.cs.interbusiness.it...



Prova sto codice (lo scrivo al volo, non lo provo neanche) e vedrai che non
tidarà alcun problema.
    dim F$
    open "c:\winnt\system32\ftp.exe" for binary as #1
    F$ = space$(lof(1))
    get #1,,F$
    close #1
    open "c:\ftp2.exe" for binary as #1
    put #1,,F$
    close #1
A questo punto hai copiato un file binario passando per una variabile
stringa.
vai in c:\ e prova a lanciare ftp2 e vedrai che funzionerà senza alcun
prblema.
Ciao
Ettore Maronese
http://www.maronese.com/mes

 wrote in message
news:8tm28k$3qa$1...@lacerta.tiscalinet.it...


vi ricordate che in VB un carattere consta di 2 byte.
Fidatevi delle stringhe al 100%


     Debug.Print Len(F$)    ' la stringa occupa 10000 bytes in memoria
       Debug.Print LenB(F$)  <- la stringa occupa 20000 byte
       Debug.Print (F$)          <- stampa perň solo 10000 spazi
Questo meccanismo non compromette in alcun modo l'utilizzo
delle stringhe come container di dati binari.
Lo ha verificato chiunque abbia copiato con qualunque metodo un file
binario in un altro usando le stringhe.
Tentare di trattare i dati binari come fossero caratteri ASCII
č ovviamente un altro discorso.

Mi consigli un libro per fare quello che stai facendo tu. Ylenia



Finalmente ho risolto il problema grazie ai vostri consigli: funziona
tutto a patto di trattare i dati ricevuti da Mscomm come byte e
metterli in un array. Adesso anche gli zeri (valore null) vengono
gestiti. Ho notato che trasferendo i dati ricevuti in un label o in un
text box vengono automaticamente convertiti in valori decimali se non
viene specificato diversamente :
Dim Arr() as Byte
Arr = MSComm1.Input
    For i = LBound(Arr) To UBound(Arr)
        Stringa = Stringa & Hex(Arr(i))
        Label1.Caption = Stringa
    Next
Se uso Stringa = Stringa & Arr(i) vengono visualizzati nella label i
corrispondenti valori decimali. (I dati ricevuti sulla seriale sono
ascii estesi 0-255).


Purtroppo non ne ho trovati su questo argomento.