Italian Parsing seriale

marco_ps

New Member
Ciao a tutti,
ho la necessità di fare il parsing carattere per carattere da quello che mi arriva dalla seriale per ovviare ad ud un problema di mal funzionamento del codice che utilizzo.
La stringa che mi arriva ha un terminatore Chr(13), fino a che tra ogni stringa passa almeno 1 secondo tutto ok, mentre se sono molto ravvicinate perdo la stringa.

Il codice che utilizzo è il seguente:

Sub Astreams_NewData (Buffer() As Byte)

Dim ready_fornext As Boolean
Dim rsp As String
rsp = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
all_string= all_string & rsp
ready_fornext = rsp.EndsWith(Chr(13))

If ready_fornext Then
If all_string.Length >= 24 Then
AnalizzaDato(all_string)
End If
all_string=""

End If

End sub

Attendo vostre dritte
Grazie
Marco
 

MarcoRome

Expert
Licensed User
Longtime User
Il codice da te incollato è pochino. Hai provato ad impostare un bit rate più basso ??
 

sirjo66

Well-Known Member
Licensed User
Longtime User
per ricevere i caratteri dalla seriale solo quando sei veramente pronto per riceverli devi impostare un handshake sulla comunicazione, comunque in ogni caso mi sembra che il sistema operativo dovrebbe avere un po' di buffer sulla porta seriale, strano che ti perdi i caratteri
 

udg

Expert
Licensed User
Longtime User
Ciao, non mi convince il test su #13 come utilizzato nel contesto (oppure non mi è chiaro come i dati arrivino al sw).
Mi spiego meglio.
Da quello che vedo NewData viene chiamato in modalità asincrona ogni volta che nel buffer di ingresso ci sono dei dati (uno o più caratteri).
Tutto ciò che trovi nel buffer viene aggiunto alla variabile all_string e poi testi se l'ultimo carattere di tale stringa (e quindi l'ultimo che era presente nel buffer in ingresso) sia un #13.
La domada è: come fai a sapere che NewData ti restituisce necessatiamente un carattere alla volta e non un gruppetto di caratteri dove quindi #13 potrebbe trovarsi in una posizione qualunque?

In pratica se tarsmetti. CIAO(#13) sei certo di attivare NewData 5 volte? Non potresti ricevere qualcosa come:
CIA
O(#13) o anche C - IAO(#13)-A(#13)TUT-TI(#13) ?
 
Top