Gambas-it

Gambas3 => Programmazione => Topic aperto da: kicco - 23 Maggio 2017, 13:40:17

Titolo: [Risolto] Problemi di ricezione da seriale
Inserito da: kicco - 23 Maggio 2017, 13:40:17
 :ciao:
Dopo tanto tempo sto ristudiando un "mio" vecchio problema.
Quando ricevo dati dalla seriale, la cattura di un pacchetto di dati a 16byte risulta spezzata.
Sono giorni che sto cercando una soluzione e, anche se ho provato tutti gli esempi sulla piazza, il problema persiste.
Secondo me la chiave sta nel fatto che usando questa stringa per la lettura:
 
Codice: [Seleziona]
Read #SerialPort1, Rx, Lof(SerialPort1)
il valore Lof è sempre NULL. Durante la compilazione nel terminale appare infatti
Codice: [Seleziona]
(SerialPort:6907): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion 'g_utf8_validate (text, len, NULL)' failed
Dalla definizione di LoF:
"Se lo stream non è un file, ad esempio è un processo (Process) o una connessione (Socket), allora sarà restituito il numero di bytes che possono essere letti alla volta."
Mi immagino che sia il numero di byte memorizzati nel buffer (nel mio caso 16), quindi mi aspetterei un numero sicuramente diverso da 0.

Che cavolo sto sbagliando?
... e soprattutto che cosa vuol dire quel messaggio Gtk-CRITICAL... :rolleyes:
 :ciao: :ciao: :ciao:
Titolo: Re:Problemi di ricezione da seriale
Inserito da: kicco - 23 Maggio 2017, 14:37:42
MI rispondo da solo:
L'errore Gtk-CRITICAL è dovuto a una scrittura errata in una textarea. Non c'entra niente la seriale.
 :mad:
 :ciao:
Titolo: Re:Problemi di ricezione da seriale
Inserito da: vuott - 23 Maggio 2017, 15:40:01
.. e se invece usi questa riga:
 
Codice: [Seleziona]
Read #SerialPort1, Rx, -256
cosa succede ?



Oltre a ciò, ricordi anche queste discussioni ?
http://www.gambas-it.org/smf/index.php?topic=2293
http://www.gambas-it.org/smf/index.php?topic=2311
Titolo: Re:Problemi di ricezione da seriale
Inserito da: kicco - 23 Maggio 2017, 16:38:00
ciao Vuott
poi faccio la prova, ma credo d'aver capito il problema.
Ho risolto semplicemente aggiungendo uno
Codice: [Seleziona]
sleep 0.05
prima di leggere lo stream.
Probabilmente tra l'evento che scatena la subroutine di lettura della seriale
Codice: [Seleziona]
Public Sub Sport_Read()
(nel mio caso)
e il riempimento del buffer, passa troppo poco tempo e la lettura avviene, in alcuni casi a buffer incompleto.
Aggiungendo lo SLEEP si  da il tempo al buffer di riempirsi.
È un'idea che ho visto in un esempio prodotto congiuntamente da Minisini e da un componente del forum tedesco.
Adesso sto facendo letture reiterate per vedere se funziona...
Siamo a 8000!
Aspetto a gioire perchè già l'altro giorno pensavo d'aver risolto e invece... :'(
Poi provo comunque col tuo suggerimento..

Le discussioni le ricordo bene, le ho rilette tutte ed infatti applicavo un tuo suggerimento che però ogni tanto mi faceva perdere dei pacchetti di dati.

 :ciao: :ciao:
Titolo: Re:[Risolto] Problemi di ricezione da seriale
Inserito da: kicco - 23 Maggio 2017, 21:06:11
Aggiungo che i migliori risultati li ho ottenuti con:
Codice: [Seleziona]
Sleep 0.020
:ciao:
Titolo: Re:[Risolto] Problemi di ricezione da seriale
Inserito da: kicco - 24 Maggio 2017, 21:14:36
Citazione
.. e se invece usi questa riga:

Codice: [Seleziona]
Read #SerialPort1, Rx, -256
cosa succede ?
:(
Titolo: Re:[Risolto] Problemi di ricezione da seriale
Inserito da: vuott - 24 Maggio 2017, 23:24:09
...ossia ?   ???
Titolo: Re:[Risolto] Problemi di ricezione da seriale
Inserito da: kicco - 25 Maggio 2017, 09:10:50
 :ciao:
sì scusa sono stato troppo sintetico. Non funziona, non riesce a leggere correttamente il pacchetto di dati e poi si blocca, nel senso che non legge più alcun pacchetto di dati successivo. :-*
 :ciao: