Newsgroup: it.comp.lang.visual-basic
Titolo: badge seriale e codice impossibile

Ciao a tutto il ng; qualche giorno fa mi è ricapitato di riprendere in mano 
un programma che avevo dato qualche tempo fa ad un cliente e di doverlo 
reinstallare; il programma non faceva altro che leggere un codice di 5 cifre 
sulla prima traccia di alcune schede (00001, 00002 etc) e di passarlo ad un 
database che ne estrae il nominativo.
Nessun problema, dico io: ho parlato troppo presto.
Reinstallando il programma dava degli strani errori sul pc del cliente, così 
ho ripreso il lettore di badge, e l'ho riportato in laboratorio; dopo vari 
test ho concluso che per qualche motivo il programmafa questo: ad un primo 
passaggio di una carta al posto di leggere 00001 legge 0000 e il programma 
logicamente risponde che non ci sono nominativi; quando passo la seconda 
scheda, il codice passato è 10000    !!!!!!! sembra impossibile ma vero; ho 
controllato i parametri della porta e del lettore di badge... niente. io 
credo che l'errore sia nel buffer della seriale, perchè anche quando 
"accendo" la seriale il lettore di badge dovrebbe rispondere con un codice 
del tipo "258565646c09" e invece mi risponde con due codici spezzati a metà 
"258565" e "646c09".
Qualcuno mi sa dare una mano?
Grazie ancora per la pazienza

 "258565" e "646c09".
Prova impostando il buffer ad 1 byte e ad ogni on_comm sommi la 
stringa precedente con il nuovo carattere. Al contempo resetti un 
timer che dopo un paio di secondi prende la stringa totale come 
buona...
-- 
:-) :-> ;-) :)  "Smilies everyone, Smilies"  Mr.Rourke
News 2002 [v 2.07] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

Ok questo è un sistema... ma quello che vorrei capire è perché si comporta 
in questa maniera... non dovrebbe leggere l'intero codice che arriva dalla 
seriale? Per fare un esempio, il codice iniziale che arriva all'accensione 
del badge, perché viene letto in due tranches?
Grazie a tutti ancora un volta
"Due di Picche" <mega...@TOGLISPAMaruba.it> ha scritto nel messaggio 
news:ee9tge$bcl$1...@area.cu.mi.it...


 seriale? 
Dipende dallo stato e dalla capienza del buffer.
-- 
Foolproof operation:  All parameters are hard coded.
News 2000 [v 2.06] - 
http://www.akapulce.net/socket2000

 del badge, perché viene letto in due tranches?
La seriale è asincrona.
A te viene fatto scattare l'evento OnComm quando nel buffer ci sono n 
caratteri (che puoi impostare tu, ma normalmente si mette a 1). Poi tu 
inizi a leggere il buffer e ottieni i caratteri che nel frattempo sono 
arrivati. Ad esempio 5. Al che ti stupisci, poi nel frattempo arriva 
l'OnComm del 6° carattere, tu fai ripartire la lettura del buffer e 
ottieni altri 5 caratteri. E non ci capisci più niente.
In realtà la seriale va letta accodando sempre il buffer ad una stringa 
che contenga il buffer precedente, ripulendone la parte sinistra 
significativa quando si riceve un terminatore o il numero prefissato di 
caratteri.
Sai perchè prima funzionava e adesso no?
Ridi ridi...
Perchè il vecchio pc era lento, e prima che arrivasse a leggere il 
buffer questo era già stato riempito completamente dalla device 
mittente.
Adesso il pc è più veloce, e arriva prima lui della device...
Ciao
Alberto
-- 
Karl Marx: Le circostanze fanno l'uomo non meno di quanto l'uomo faccia 
le circostanze.