LabVIEWForum.de - Schleife Timing Samplerate manuell

LabVIEWForum.de

Normale Version: Schleife Timing Samplerate manuell
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich lese über einen DLL-Aufruf (call shared library) eine Kamera aus. Die Zeit, die der Aufruf benötigt, ist nicht immer gleich und die Kamera hat ein Buffer. Nun kann ich der DLL keine Samplerate oder ähnliches angeben und bin somit für das Timing selbst verantwortlich. Ich möchte kein Bild doppelt auslesen und auch kein Bild verpassen.

Wie erreiche ich, dass ich Bilder mit den versprochenen 80Hz auslesen kann?


[attachment=60253]

Ich hab gerade mal ein kleines Test VI zusammen gebastelt, welches nicht deterministisch zwischen 0 und 10ms wartet und damit den DLL-Aufurf simuliert. Um die verbleibende Wartezeit (Timoutanschluss der While-Schleife) zu ermitteln, wird die Differenz des Tick Counts vor dem DLL-Aufuruf und danach ermittelt. Der Rest ist nur zur Anzeige und Überprüfung

Gibt es dafür auch schlauere Herangehensweise? Vermutlich eine sehr grundlegende Frage. Es tut mir leid wenn die schon tausendmald beantwortet wurde - ich hab auf die Schnelle nichts gefunden...

Schönen Gruß,
seuk
Hallo seuk,

letztendlich bist du hier immer vom Windows-eigenen Timing (bzw. dessen Störungen) abhängig…

Aber du könntest auch:
- Eine normale While-Loop nehmen und ein WaitUntilNextMultiple verwenden
- eine TimedWhileLoop verwenden: hier bekommst du auch mitgeteilt, ob eine Iteration zu spät dran war… (außerdem könntest du an der Prio herumdrehen)

In der Schleife dann möglichst keine weiteren Operationen, sondern das neue Bild gleich per Queue an einen Consumer weiterreichen.
Referenz-URLs