Vai al contenuto
PLC Forum


Lettura Codici Tramite Rs232 - Lettura di codici a barre


Messaggi consigliati

Inserito:

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 FAVORE

Questa è 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


Inserita:

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

  • 4 months later...
Inserita:

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 Long

Counter = 0

for 1 to 4000000

Counter=Counter + 1

next

DatidaSeriale= MsComm1.input

E' un semplice ritardo sulla lettura del buffer.Probabilmente lo vai a leggere ancora prima che finisca di riempirsi.Ciao!

Inserita:

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.

Ciao

BR1

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...