Marco Trapanese ha spiegato il 09/05/2013 :
> Il 09/05/2013 11:31, Stefano ha scritto:
>
>
> Ipotizziamo 3 possibili cause:
>
> a) il device invia le informazioni in ritardo
La device invia informazioni in continuo, la frame risulta valorizzata
e questo si evince dalla serializzazione in db. E' però difficile
recuperare i dati stante alla tempistica. Ho provato con realterm ma mi
mancava il mezzo di sincronizzazione con il timestamp (per esempio un
tasto come da te indicato, lo implementerò)
> b) il software le riceve/elabora/visualizza con un certo delay
Vi è una procedura di parsing per l'estrazione del messaggio coerente e
compreso tra STX ed ETX. Però se così fosse dovrei notarlo anche
nell'applicazione di test che utilizza un timer in luogo della seriale.
> c) il gauge implementa un filtro per cui introduce lui stesso il ritardo
Ho scritto a tale proposito alla casa madre (produttrice del gauge) ed
hanno realizzato la medesima applicazione che ho sviluppato io (con
timer) senza rilevare nulla, non hanno filtri che possano cagionare il
problema. Pensavo potesse essere un problema di thread e di
assegnazione del tempo di carico ma non sono pervenuto ad una soluzione
- replicando il problema - nonostante le numerose prove effettuate.
>
> Io verificherei prima di tutto la b e la c. In maniera molto semplice
> visualizzando i dati ricevuti tramite terminale seriale (hyperterminal o
> meglio realterm) se il dispositivo supporta la modalità freerun.
>
> Io inserire uno stopwatch subito dopo la read dalla seriale stampando sulla
> finestra di debug la stringa ricevuta e aggiungendo il timestamp.
> Cercherei poi di sincronizzare il movimento del dispositivo con un evento sul
> software (es. la pressione di un pulsante) così da verificare se i valori di
> accelerazione vengono ricevuti immediatamente o davvero dopo un secondo.
>
Purtroppo non ho sempre a disposizione lo strumento, volevo realizzare
una semplice applicazione con Arduino che inviasse la stessa frame su
seriale con le medesime tempistiche. Eventualmente potrei associarvi
anche un tasto hardware in modo da poter avere un'idea del tempo di
reazione.
>
>> Non vi sono perdite di frame in quanto il movimento è fluido e la
>> registrazione dello stesso su db è senza soluzione di continuità;
>
>
> Ottimo, verifica allora la coerenza con l'evento fisico.
>
>
>> Quindi peggiorativo rispetto alle mie considerazioni...
>> Parliamo di una RS232 virtuale su porta USB, configurata in 9600,N,8,1
>> nessun controllo di flusso hw o sw.
>> Ho trovato questo documento che pare avvalorare la mia ipotesi di
>> buffering:
http://goo.gl/K1mXc
>
>
> Certo, ma come ti dicevo lo puoi azzerare tramite pannello di controllo o
> come suggerito dal documento.
>
Proverò, non disponendo della device se non per brevi periodi mi sono
limitato a disconnettere e riconnettere la seriale, cambiare porta usb
e riavviare l'applicazione. In nessuno di questi casi si è notato alcun
miglioramento ma il ritardo persisteva. L'unico modo di risolvere pare
essere il completo riavvio della macchina, il che mi ha fatto pensare
al buffer. Non è un evento che capita sempre ma occasionalmente e
questo complica il debug. La prossima volta proverò ad azzerare il
buffer o configurarlo come descritto nel documento.
> Marco
Grazie, ciao. Stefano.