Newsgroup: it.comp.lang.visual-basic
Titolo: Questione di tempo? (Porta seriale)

Ciao ragazzi. ora, dopo MILLE peripezie, il mio lettore di codice a barre
legge, ma solo se do la lunghezza di caratteri esatta alla proprietą
THRESHOLD. Cioč se devo leggere 10car. imposto THRESHOLD a 10 e, quando
ricevo il 10mo carattere, lui genera l'evento OnComm riuscendo a leggere
tutto.
Dato che non so quanto č lungo quel che ricevo, perchč potrebbe essere di
lunghezza variabile, come faccio a fare prendere tutto in qualsiasi caso?
che proprietą devo impostare?
Al momento ho provato a mettere InputLen=0, in modo che alla lettura del
buffer legga tutto il contenuto. ThresHold=1, in modo che genera l'evento
oncomm appena riceve qualcosa. Ma che succede? che quando leggo, riesco a
leggere solo i primi caratteri del codice a barre, mentre gli altri vanno
persi...
consigli e suggerimenti?
--------------------------------
Inviato via 
http://usenet.libero.it

 consigli e suggerimenti?
Leggere i vecchi post.
Comunque, se ciò che leggi, anzichè interpretarlo direttamente, lo 'appendi'
in coda ad una stringa, e valuti quella dopo aver tolto i caratteri spurii,
grossomodo...
Nel thread di qualche giorno fa, che se non ricordo male avevi inziato
proprio tu, si era appunto parlato di questo.
Alberto
-- 
Rigore è quando arbitro fischia

...i messaggi indietro li ho letti e stra letti, ma visto che sono alle
prime armi con porte seriali e MsComm, non riesco a comprendere quel che
vuoi farmi notare.
Il mio programma funziona benissimo se metto un punto di debug prima della
lettura del buffer!
eseguendo l'istruzione successiva con F8, mi carica nella mia variabile
stringa l'esatto valore.
Se invece provo a posizionare un punto di debug appena dopo l'assegnazione,
ecco che nella mia stringa mi ritrovo solo alcuni valori!!
RsThresHold l'ho impostato ad 1, ma non funge comunque! fa sempre lo stesso
casino!
Se lo imposto a 10, visto che mi aspetta un po' di caratteri, allora mi
prende i primi 10, ma poi dopo non funge con gli altri...
Quel che mi servirebbe è come fare per attendere che tutti i caratteri siano
nel buffer per poi fare eseguire l'operazione, tenendo sempre conto che non
so quanti caratteri mi vengono spediti... (dovrebbero essere al massimo 22
però), il che mi sembra un po' un controsenso: se non so quanti me ne
trasmettono, come faccio a sapere se mi sono arrivati tutti??
Cmq, un'altra alternativa sarebbe assicurarmi che si verifichi di nuovo
l'evento oncomm quando ci sono ancora valori nel buffer... come si fa?


 si fa?
Se metti RTreshold a 1 l'evento viene generato ad ogni carattere. Quindi se
accodi tutti i caratteri ricevuti in una stringa che poi controlli per
vedere se va bene il tutto funziona!


 persi...
Se perdi caratteri è probabile (se il lettore è appena appena serio fa così)
che tu debba settarti l'handshake hardware in modo che la seriale sia
sincronizzata con il dispositivo e lui evita di buttarti caratteri che tu
non faresti in tempo a leggere.
Se non ricordo male con l'MSComm questo si setta mettendo il DTS (cerca tra
le proprietà a design) o comunque prova le tre/quattro possibilità che ti
offre VB per questa proprietà.
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 che proprietà devo impostare?
Supponiamo che ci sia un carattere (alla fine dell'invio) tramite il quale
tu riconosca la fine del codice, ad esempio VbCrlf
Potresti, a questo punto, scrivere:
------------------------------------------
Dim str as string
Dim strTemp as string
Dim TimerTemp as long
str=""
TimerTemp=Timer
do 
        strTemp=mscomm1.input
        if strTemp<>"" then str=str & strtemp
loop while (instr(strTemp,vbCrLf)=0) and (Timer<TimerTemp+10)
-------------------------------------------
TimerTemp serve come timeout temporale (in questo caso 10 secondi),
eventualmente non ricevesse il carattere aspettato per uscire dal ciclo.
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>

 loop while (instr(strTemp,vbCrLf)=0) and (Timer<TimerTemp+10)
Poi un giorno avvenne un timeout a mezzanotte...


 ha scritto nel messaggio
news:pp36mb...@192.168.1.1...


 dato.
Puoi esplicitare il concetto?
Ciao


 Alberto
Il limite del timer č proprio questo.
Avrei potuto utilizzare anche un datediff per fare la differenza in secondi,
ma poi mi sono detto:
1) Spero che a mezzanotte gli utilizzatori del codice a barre abbiano
qualcos'altro da fare :-)
2) Il timeout č di 10 secondi: si puň ridurre ulteriormente per ridurre il
tempo a "rischio"
3) Deve comunque fallire l'operazione
4) Deve compiere la lettura proprio nelle vicinanze della mezzanotte.
Vabbe' che Murphy č in agguato, ma dev'essere proprio bastardo dentro! :-)


 Il limite del timer è proprio questo.
Non è un limite.
E' una caratteristica.
Basta mettere un Or nelle condizioni del loop e funziona anche a mezzanotte.
Non vedo il problema.


 Non vedo il problema.
Non c'e' nessun problema. Semplicemente il fatto che bisogna ricordarsi che
dopo la mezzanotte c'e' l'azzeramento.
Penso che per chi lo usa la prima volta non sia cosi' scontato.
