Newsgroup: it.comp.lang.visual-basic
Titolo: errore in scrittura file

ciao a tutti!
sto realizzando un'applicazione che si interfaccia con una scheda esterna
dotata di microcontrollore via seriale.
come primo step nello sviluppo ho fatto un semplicissimo programmino che
invia al micro un file (byte a byte) il quale rispedisce senza alcuna
modifica ogni byte ricevuto. infine, i byte ritornati al PC vengono scritti
in un nuovo file. in altre parole creo un'immagine identica del file
inviato. tutto bene, tranne il fatto che non tutti i byte vengono duplicati
in modo corretto.
posto anzitutto le poche righe di codice incriminate:
Open sourceFile For Binary Access Read As #1  'file sorgente
Open destFile For Binary Access Write As #2     ' file destinazione
    msComm.InBufferCount = 0
    Do While pos < LOF(1)
        tx_ch = AscB(Input(1, 1))                        ' leggo byte dal
file sorgente
        pos = Loc(1)
        msComm.Output = Chr$(tx_ch)            'invio il byte al micro
        Do While msComm.InBufferCount = 0: Loop
        rx_ch = AscB(msComm.Input)                    'ricevo il byte dal
micro
        Put #2, , Chr$(rx_ch)                                'scrivo il byte
nel file destinazione
        If Not tx_ch = rx_ch Then MsgBox "Errore!"
        DoEvents
    Loop
Close #1
Close #2
la seriale č configurata in modo che i buffer siano lunghi un solo byte cosě
da poter gestire la comunicazione byte a byte.
la comunicazione sembra avvenire correttamente , infatti non ottengo mai la
generazione dell'errore (vedi riga prima del doevents) quindi il problema
credo stia nella conversione/scrittura nel file destinazione.
ho notato che principlamente i byte errati sono:
80 che viene scritto come AC
87   "    "   "     "   "   "    "  21
8E   "    "   "     "   "   "    "  7D
92   "    "   "     "   "   "    "  19
96   "    "   "     "   "   "    "  13
86   "    "   "     "   "   "    "  20
9F   "    "   "     "   "   "    "  78
e qualche altro. la cosa strana č che qualsiasi file usi (tranne i file di
testo, che non presentano problemi) sono quasi sempre questi byte a essere
sbagliati, con due caratteristiche: sono sbagliati in tutto il file ad ogni
occorrenza degli stessi.
chi mi da una mano a risolvere il problema o almeno a capire dove ricercare
la causa ?
grazie infinite e scusate la lunghezza!
Marco

 Close #2
prova cosě e fammi sapere se ancora non passa dal messaggio di errore
ciaociao

 prova così e fammi sapere se ancora non passa dal messaggio di errore
provato in tutti e due i modi, ma nulla... non intercetta eppure gli errori
rimangono. per sicurezza ho fatto un giro in debug passo-passo e ho visto
che effettivamente il byte incriminato (0x80) viene letto, inviato e
ricevuto correttamente. la put ha come parametro proprio 0x80, ma leggendo
il file generato ci trovo dentro al loro posto degli 0xAC.... uffi! non
capisco come mai solo alcuni valori diano fastidio, del resto lavorando con
file aperti in modalità binary non dovrebbero esserci interpreti di mezzo,
no ? boh ?!?
ho provato anche a togliere e mettere i # alle istruzioni input e put, ma il
risultato non cambia!
ciao e grazie,
Marco

 Marco

 Molto strano, appena ho tempo faccio delle prove e ti faccio sapere
ti ringrazio molto!
Marco

TROVATO!
l'errore stava in questa riga:
tx_ch = AscB(Input(1, 1))
            ^^^^^
era la funziona AscB a ritornare valori errati in *lettura*. mi aveva tratto
in inganno la guida dicendo che faceva riferimento ai byte presenti nella
stringa. in buona sostanza che fa questa AscB ?
sostituendola con Asc funziona tutto correttamente!!!!!!
ciao,
Marco

 Marco
ciaociao