Hallo Fantinel,
ein Gesundes Neues Jahr und herzlich willkommen im Forum!
Zitat:Die grundlegende Funktion ist gegeben, jedoch kommt das ganze nach etwa 10 min ins stocken und die Erfassung wird immer langsamer, d.h. dass die Werte nur noch alle paar Sekunden aktualisiert bzw. gespeichert werden. Hat jemand Tipps, wie ich das Problem gelöst bekomme?
Oh mein Gott…
So viele lokale Variablen.
So ein riesiger Cluster.
Dieser Cluster wird alle Sekunde nach den Namen der enthaltenen Elemente durchsucht: ändern die sich irgendwann mal, wenn das VI läuft? Reicht da nicht einmal aus?
Dieser Cluster wird in ein Array gewandelt, dieses dann nach DDT.
Jedem Wert in diesem DDT wird ein Signalname zugeordnet. In jeder Iteration erneut…
Jede Sekunde wird eine Excel-Datei geöffnet, etwas reingeschrieben und wieder geschlossen. Sekündlich muss Excel eine komprimierte XLSX öffnen und dekomprimieren, ein paar Werte hinzufügen, alles wieder komprimieren und abspeichern. Sekündlich!
Jede Sekunde werden diese Daten auch noch in einen Chart geschrieben. Mit einer Historienlänge von 86400 Einträgen. Wieviel Speicher macht das? Wieviele Daten müssen da sekündlich durch das RAM geschoben werden?
Ähm: das VI wird nach ~10min "etwas" langsamer?
Warum wohl???
Vorschlag:
- Schreibe in eine CSV-Datei: wesentlich einfacher und schneller.
- Diese Datei nur einmal vor der Schleife öffnen und hinterher schließen!
- Du musst den Header mit den Signalnamen nur genau einmal erzeugen und in die Datei schreiben.
- Du benötigst keinerlei ExpressVIs und DDT-Drähte…
Außerdem:
- Reduziere die Anzahl der lokalen Variablen, z.B. durch Einsatz von Arrays, die ähnliche Werte zusammenfassen.
- Ersetze lokale Variablen, z.B. durch Notifier…
- Ab und zu mal AutoCleanup benutzen…
- Wenn du viele Messkanäle anhand ihres Messstellennamens verwalten willst, empfehle ich eine FGV mit einem Variant, in dessen Attributen du die Messdaten mit ihrem Namen ablegst.
Schau mal hier… (Der VIPM bietet dafür auch fertige Implementierungen an!)