Zeitgesteuerte Schleife konstant halten
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.
|