Come rappresentare graficamente i dati di streaming in C #
-
06-07-2019 - |
Domanda
Devo rappresentare graficamente i dati di streaming (9600 baud), che arrivano in pacchetti da 2-4 byte da una porta seriale. I pacchetti devono essere elaborati prima della rappresentazione grafica. Attualmente, sto organizzando un evento su ciascun pacchetto completo, che sta causando problemi di reattività nel modulo grafico.
Qual è la migliore soluzione a questo problema:
- Buffer e aumenta i dati bufferizzati in caso di eventi a intervalli di tempo (ad es. 500 millisecondi)
- Crea buffer e lascia istanze polling oggetto per dati bufferizzati / buffer vuoto quando polling
- Altro (?)
Soluzione
Sicuramente limiterei la velocità di aggiornamento. Per tali applicazioni, di solito è sufficiente uno ogni 300 ms.
In base a ciò, una buona implementazione sarebbe un thread di lavoro che legge la porta seriale e la aggiunge a un buffer. Il thread dell'interfaccia utente può utilizzare un timer per eseguire query sui dati e aggiornare il display.
Utilizzando thread separati, il thread di lavoro può essere eseguito con priorità più alta, in modo che i picchi di carico possano ritardare gli aggiornamenti di visualizzazione, ma nessun dato viene perso.
Un altro trucco è non usare un timer fisso, ma riavviare il timer dopo aver completato l'aggiornamento. Pertanto, se l'aggiornamento richiede tempo significativo, ad es. a causa dell'elevato carico del sistema, gli aggiornamenti rallentano, riducendo efficacemente il carico.