Statemachine zur Erfassung von Messdaten nach ein paar tausend Messwerten sehr langsa
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Statemachine zur Erfassung von Messdaten nach ein paar tausend Messwerten sehr langsa
Hallo,
Zur Prüfung von Messmodulen (Strom, Spannung) verwende ich eine State Machine, die die Messwerte in Arrays speichert. Die Arrays (Messwertarray (double), Ausgabearray (string)) werden von Schieberegistern immer wieder zum Anfang der State Machine gegeben und im Verlauf aktualisiert bzw. erweitert.
In einem State "Auswertung", den alle Messvorgänge durchlaufen, wird die Nutzeroberfläche mit den Messdaten versorgt (per Referenzen und Eigenschaftsknoten).
Ich habe nun das Problem, daß ein einfacher Durchlauf einer Messung (Ausgabe durch Messgerät --> Messen mit Modul --> Auswerten) am Anfang ca. 60ms dauert. Im Verlauf einer ganzen Messreihe (bis zu 100k Messungen) wird das ganze unerträglich langsam.
Ich vermute, daß es mit dem Schieben, Erweitern und Anzeigen der Arrays zusammenhängt. Allerdings sollen die Messdaten während der Messung in der Tabelle sichtbar sein und auch im Verlauf der Messung im dem Graph angezeigt werden. Sonst könnte man die Auswertung ganz am Schluss machen und sich einen Haufen Aufwand sparen.
Über Tipps, Hinweise oder Beispiele würde ich mich freuen.
Leider darf ich wegen Geheimhaltung das VI nicht posten :-(
... ein paar Bilder sind aber erlaubt.
RE: Statemachine zur Erfassung von Messdaten nach ein paar tausend Messwerten sehr langsa
Du hast mehrere Probleme:
1) Ja, dauerndes Vergrößern von Arrays ist ungünstig, da dauernd neuer Speicher alloziert werden muss.
2) Aber einer gewissen Menge von Datenpunkten braucht ein Graph immer länger zum Darstellen der Daten. Das Ganze muss ja gerendert werden. Wie oft macht du diese Updates? Je häufiger, desto schlechter für die Performance.
3) Ganz schlimm ist, dass du alle Werte per PropertyNode setzt. Das Schreiben von PropertyNodes erfolgt nämlich im UI-Thread, und jedes Schreiben löst auch zwingend ein Update des FP aus.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Statemachine zur Erfassung von Messdaten nach ein paar tausend Messwerten sehr langsa
>>1) Ja, dauerndes Vergrößern von Arrays ist ungünstig, da dauernd neuer Speicher alloziert >>werden muss.
werde ich ändern, so daß gleich das komplette Array initialisiert wird und die entsprechende Stelle wird später nur ersetzt.
>>2) Aber einer gewissen Menge von Datenpunkten braucht ein Graph immer länger zum >>Darstellen der Daten. Das Ganze muss ja gerendert werden. Wie oft macht du diese Updates? >>Je häufiger, desto schlechter für die Performance.
Die Updates werden nach jedem Messdurchgang ausgeführt. D.h. typischerweise 30k-65k in einer Messreihe. Es ist sozusagen günstiger nur die letzten ~ 5000k Messwerte anzuzeigen (mehr als 10k geht sowieso nicht)
>>3) Ganz schlimm ist, dass du alle Werte per PropertyNode setzt. Das Schreiben von >>PropertyNodes erfolgt nämlich im UI-Thread, und jedes Schreiben löst auch zwingend ein >>Update des FP aus.
Wie würdest du die Messwerte für das Userinterface aktualisieren / anzeigen (Link, Beispiel, Bild wenn möglich)?
RE: Statemachine zur Erfassung von Messdaten nach ein paar tausend Messwerten sehr langsa
Hi,
ich hab sowas mal mit ner Producer-Consumer-Struktur gemacht: Producer liest die Daten ein, Consumer speichert die Daten aus der Queue. Die Bildschirmanzeige wird dann nach dem Speichern in festgelegten Intervallen gemacht - 5 Hz reichen da z.B. vollkommen. Dazu lese ich die Daten aus der gespeicherten Datei ein. Wenn man das ganze über die Pfadzuordnung verbindet, hat man auch einen eindeutigen zeitlichen Ablauf. Die Anzeige wird dann nur alle paar Speicherungen getriggert.
Über die Speicherausnutzung kann man streiten, gibt es sicher noch die eine oder andere Optimierungsmöglichkeit. Funzt aber so, auch für längere Messungen und mehrere 100000 Werte... Snippet anbei, Größe ist der Autoaufräumen-Funktion zu verdanken...