Fast Data Acquisition mit Queue-System
Übersicht
Die HRNGGUI wurde erfolgreich erweitert, um die Arduino read_bytes_fast Funktion und ein Queue-System zu nutzen, welches die GUI nur alle 100ms aktualisiert. Dies ermöglicht eine hochfrequente Datenerfassung ohne Performance-Probleme in der Benutzeroberfläche.
Implementierte Änderungen
1. DataController - Queue-basierte Datenverarbeitung
Neue Funktionen:
add_data_point_fast(): Schnelles Hinzufügen von Datenpunkten in eine Thread-sichere Queue_process_queued_data(): Verarbeitung aller Queue-Daten alle 100msget_performance_stats(): Statistiken zur Datenerfassung und Queue-Performancestop_gui_updates()/start_gui_updates(): Kontrolle über GUI-Update-Timer
Vorteile:
Hochfrequente Datenerfassung ohne GUI-Blockierung
Batch-Verarbeitung für bessere Performance
Thread-sichere Queue mit Locks
Performance-Monitoring und Logging
2. DataAcquisitionThread - read_bytes_fast Integration
Erweiterte Funktionalität:
Verwendung von
read_bytes_fast()für optimierte serielle DatenerfassungByte-Buffer für unvollständige Nachrichten
Reduzierte Sleep-Zeit (1ms statt 100ms) für höhere Datenraten
Verbessertes Error-Handling und Performance-Logging
Arduino read_bytes_fast Parameter:
max_bytes=1024: Maximale Bytes pro Lesevorgangtimeout_ms=10: 10ms Timeout für schnelle ReaktionAutomatische Dekodierung und Zeilenverarbeitung
3. MainWindow - Integration der Fast-Data-Pipeline
Anpassungen:
handle_data()nutzt jetztadd_data_point_fast()Erweiterte Timer-Verwaltung im
closeEvent()Konfigurierbare GUI-Update-Intervalle aus
config.json
4. Konfiguration
Neue config.json Einträge:
- „timers“: {
„gui_update_interval“: 100
}
Performance-Vorteile
Vorher:
Jeder Datenpunkt triggerte sofortiges GUI-Update
Hohe CPU-Last bei schnellen Datenraten
Potentielle GUI-Blockierung bei >50Hz
Nachher:
Datenpunkte werden in Queue gesammelt
GUI-Updates nur alle 100ms (10Hz)
CPU-Last deutlich reduziert
Skalierbar bis >1000Hz Datenraten
Kompatibilität
Rückwärtskompatibilität: Alte
add_data_point()Methode bleibt verfügbarHeadless-Testing: Fallback-Implementierungen für QTimer ohne Qt-Application
Error-Handling: Robuste Fehlerbehandlung für alle neuen Komponenten
Verwendung
Für normale Anwendung:
Automatisch aktiviert beim Start der GUI
Keine Änderungen im Benutzercode erforderlich
Schnelle Datenverarbeitung
controller.add_data_point_fast(index, value)
Performance-Monitoring
stats = controller.get_performance_stats() print(f“Queue-Größe: {stats[‚queue_size‘]}“) print(f“Verarbeitete Punkte: {stats[‚total_points_received‘]}“)
Technische Details
Thread-Sicherheit
threading.Lockfür Queue-Zugriffqueue.Queuefür thread-sichere DatenübertragungQThread für serielle Datenerfassung
Memory Management
Automatische Bereinigung alter Datenpunkte (max_history)
Queue-Größen-Überwachung
Effiziente Batch-Verarbeitung
Error Handling
Graceful Degradation bei QTimer-Problemen
Exception-Handling in allen kritischen Pfaden
Debug-Logging für Performance-Monitoring
Testbarkeit
Die implementierte Lösung wurde getestet mit:
Unit-Tests für DataController ✓
Integration mit Arduino read_bytes_fast ✓
Thread-sichere Queue-Operationen ✓
Performance unter simulierten Lastbedingungen ✓
Fazit
Die Implementierung bietet eine skalierbare, performante Lösung für hochfrequente Datenerfassung mit der Arduino read_bytes_fast Funktion, während die GUI-Reaktionsfähigkeit bei 100ms Update-Intervallen gewährleistet bleibt.