LabVIEWForum.de - Zeitgesteuerte Schleife konstant halten

LabVIEWForum.de

Normale Version: Zeitgesteuerte Schleife konstant halten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Ausgangssituation: Bei meinem Programm nehme ich ein Laserprofil mit einer Kamera auf. Im Prinzip wird eine Schleife durchlaufen, wobei pro Durchlauf 1 Bild aufgenommen wird. Anschließend werden die Koordinaten des Schwerpunktes des Bildes berechnet.
Damit die Framerate (25fps = 40ms pro Iteration) möglichst konstant ist, habe ich mich für eine zeitgesteuerte Schleife entschieden. Ich habe bereits hier im Forum gelesen, dass die Iterationszeit abhängig von der CPU-Auslastung ist. Nachdem ich die Priorität der Schleife und des VIs auf den höchsten Wert gesetzt habe, bleibt die Framerate (vorerst) auch einigermaßen konstant. Nicht perfekt, aber es ist OK.

Das eigentliche Problem: Ich führe Langzeitmessungen durch, weswegen die Arrays - in die ich die Daten (Schwerpunktskoordinaten) über Schieberegister schreibe - schnell sehr groß werden. Das führt dazu, dass die Framerate bei einer sehr großen Anzahl an Messwerten einbricht.

Die Lösung: Anstelle der Schieberegister möchte ich die Daten bei jedem Schleifendurchlauf direkt in eine Datei auf der Festplatte zu schreiben. Es werden immer nur die aktuellen Messwerte an die Datei angehängt. Das funktioniert soweit ganz gut, es kommt zu keinem Einbruch in der Framerate - egal wieviele Messwerte.

Das neue Problem: Auch wenn die Framerate auf Dauer nicht mehr einbricht, schwankt sie doch deutlich stärker als zuvor. Ich nehme an, dass das Schreiben auf die Festplatte die CPU zusätzlich belastet, wodurch es zu unregelmäßigkeiten in der Iterationsdauer kommt.

Weiß jemand Rat? Wie bekomme ich eine möglichst konstante Framerate? Kann man die zeitgesteuerte Schleife irgendwie unabhängig von der CPU-Last machen? Vielleicht mit dem Real-Time-Modul? Gibt es eine bessere Alternative eine große Anzahl an Messwerten zu verwalten, als das direkte Speichern auf der Festplatte?

Ich weiß, dass sind viele Fragen und viel Text. Aber umso dankbarer bin ich für eure Hilfe.
Übergib deine Daten per Queue in ein weiteres parallel laufendes VI/Schleife. Hier machst du das Schreiben auf die HDD, nicht in der kritischen Timed-Loop.
Und natürlich möglichen Overhead wie dauerndes Öffnen und Schließen einer Datei vermeiden.

Gruß, Jens
Super, vielen Dank!

Muss zugeben, dass ich bisher noch nichts mit den Queues gemacht habe. Was ich bis jetzt allerdings gelesen habe, stimmt mich zuversichtlich. Werd mich gleich morgen dran setzen.

Und du hasst natürlich Recht, die Sache mit dem dauernden Öffnen/Schließen der Datei kann auch nicht gut sein für die Framerate.
Referenz-URLs