mykele80 Inserito: 9 febbraio 2006 Segnala Inserito: 9 febbraio 2006 Ragazzi, ho un grosso problema: ho uno scanner per codici a barre che legge il codice e lo trasferisce al pc tramite RS232. Per che diavolo ogni tanto il codice arriva alla seriale intero e viene letto parzialmete? Sto letteralmente impazzendo per trovare una soluzione.In pratica, accade talvolta, che facendo scorrere il programma passo-passo e posizionando il cursore su commID.Input ho il codice x intero; se poi lo posiziono sulla variabile di assegnazione, il codice è ridotto di un certo numero di caratteri mai fisso. . PER FAVOREQuesta è la seq.................................................................... Case comEvReceive ' Ricevuto il numero di caratteri RThreshold. If CommID.InBufferCount >= 39 Then IDStringMemo = IDStringMemo & CommID().Input If InStr(1, IDStringMemo, "cr") Then Call AnalizzaID(IDStringMemo) CommID.PortOpen = False Else CommID.PortOpen = False End If End if
lucios Inserita: 10 febbraio 2006 Segnala Inserita: 10 febbraio 2006 Non sono sicuro, ma non è che se chiudi la porta prima di aver ricevuto i 39 caratteri perdi il contenuto del buffer?Secondo me la tua routine funziona se casualmente ricevi tutti i 32 caratteri in un colpo solo, ma questo avviene raramente. E' più probabile che ti arrivino spezzettati in 2 o più tronconi. Ciao
sfinge Inserita: 30 giugno 2006 Segnala Inserita: 30 giugno 2006 E' successo anche a me l'altro giorno!Io ricevevo stringhe di caratteri da un dispositivo esterno (sistema di pesatura digitale).Ho risolto mettendo prima della lettura del buffer una istruzione che fa cosi:Dim Counter as LongCounter = 0for 1 to 4000000 Counter=Counter + 1nextDatidaSeriale= MsComm1.inputE' un semplice ritardo sulla lettura del buffer.Probabilmente lo vai a leggere ancora prima che finisca di riempirsi.Ciao!
Bruno Inserita: 30 giugno 2006 Segnala Inserita: 30 giugno 2006 Per sfinge:Non è proprio una soluzione elegante, tu hai inserito un ritardo ma non è costante a seconda della CPU, piuttosto usa l'istruzione sleep(msec) dove msec è un numero di millisecondi.Per tutti:Io vi consiglio di tenere sempre aperta la porta seriale e mettere i caratteri ricevuti in un buffer che ciclicamente andate a controllare/analizzare/svuotare.In questo modo le vostre procedure possono essere asincrone rispetto al dispositivo collegato in seriale.CiaoBR1
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora