LabVIEWForum.de - Speichern von Messdaten und Bildern mit ungleicher Frequenz

LabVIEWForum.de

Normale Version: Speichern von Messdaten und Bildern mit ungleicher Frequenz
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

mit einiger Hilfe habe ich eine QMH Struktur zur Erfassung von 3 Messkanälen aufgebaut in die ich nun eine Bildaufnahme via Kamera integriert habe.

Folgendes Problem tritt auf:
Beim Speichern der Messdaten/Bilder werden mehr Bilder erzeugt als aufgenommen werden. Komplett unregelmäßig wird ein Bilder doppelt bis 10fach abgespeichert. Zwischendrin läuft das Programm wieder "gut", dann kommt wieder ein Bild mehrfach.

Zum Aufbau des Programms:
QMH mit 2 Acquire Loops und 1 Logging Loop
Acquire: -> 1 Datenerfassung DAQ -> 1 Bilderfassung --> Die Loops habe ich wegen der unterschiedlicher Frequenz getrennt
Logging: 2 Queues werden befüllt durch die Acquire Loops -> beide werden in einer Schleife geleert

Zur Verdeutlichung ein paar Bilder:
Zunächst ein Ausschnitt aus dem Hauptprogramms mit den drei Loops von oben nach unten: Kamera, Acquire (grüner Loop), Logging (oragner Loop) [attachment=58139]

Jetzt der Kamera Acquire Loop: [attachment=58140]
Die Wartezeit regelt die Frames per Second der Kamera, da die Kamera keine Einstellmöglichkeit bezüglich der Aufnahmefrequenz hat.

Zur Detailierung der Kamera noch die Befüllung von Notifier und Queue [attachment=58141] und der eigentlich Bilder "Grab" [attachment=58142]

Die Queues werden zum Speichern der Daten gelesen. Außerdem soll eine Textdatei erstellt werden, die notiert welche Messdaten zu welchem Bild gehören, da zeitlich gesehen schneller Messdaten als Bilder erzeugt werden. Das passiert im Logging Loop folgendermaßen: [attachment=58144]

Mit dieser Konstellation tritt das oben benannte Problem ein und ich kann nicht nachvollziehen, woran es liegt. Warum hat er Bilder doppelt? Wenn es einmal dequeued wurde, müsste es doch weg sein? Wo bleibt es bestehen? Kann ich die Daten überhaupt so speichern, wenn die Data Queue schneller befüllt wird als die Kamera Queue?

Vielen Dank für eure Hilfe!

VG
Abongile
Hallo Abongile,

du scheinst mit IMAQ/Vision zu arbeiten…

Zitat:Komplett unregelmäßig wird ein Bilder doppelt bis 10fach abgespeichert. Zwischendrin läuft das Programm wieder "gut", dann kommt wieder ein Bild mehrfach.
Bei IMAQ werden Bilder per Reference und NICHT "by value" weitergereicht. Wenn du immer wieder die selbe Referenz verwendest, kann es vorkommen, dass deine Loop zum Einlesen der Bilder unter eben dieser Referenz schon ein neues Bild "abgelegt" hat, deine Speicherloop aber "denkt", sie würde jetzt noch ältere Bilder unter dieser Referenz vorfinden…

Da ich nicht mit IMAQ arbeite, kann ich nur "hörensagen" anbieten: Es gibt da eine Funktion bei IMAQ, die ein Bild in eine neue Referenz kopiert. Das müsstest du mit jedem Bild machen, welches du in die Queue stopfst. (Außerdem solltest du diese Referenzen auch wieder freigeben, sonst geht dir vielleicht schnell der Speicher aus…)
Hallo Gerd,

Smile erstmal: schön mal wieder von dir zu lesen Wink
Ich hatte mir schon gedacht, dass ich mit einem Thema zu IMAQ/Vision (du hast recht, das wird verwendet) bei Datenerfassung DAQ nicht ganz richtig bin, weiß aber nicht, wo ich das Thema im Forum besser platzieren hätte können

Zitat:Bei IMAQ werden Bilder per Reference und NICHT "by value" weitergereicht. Wenn du immer wieder die selbe Referenz verwendest, kann es vorkommen, dass deine Loop zum Einlesen der Bilder unter eben dieser Referenz schon ein neues Bild "abgelegt" hat, deine Speicherloop aber "denkt", sie würde jetzt noch ältere Bilder unter dieser Referenz vorfinden…

Da ich nicht mit IMAQ arbeite, kann ich nur "hörensagen" anbieten: Es gibt da eine Funktion bei IMAQ, die ein Bild in eine neue Referenz kopiert. Das müsstest du mit jedem Bild machen, welches du in die Queue stopfst. (Außerdem solltest du diese Referenzen auch wieder freigeben, sonst geht dir vielleicht schnell der Speicher aus…)

Dem werde ich mal nachgehen, danke dir!
VG
Abongile

PS: Gerade habe ich gefunden, wo es hinsollte... ->> LabView Module - Vision; Kannst du das Thema verschieben?
Noch eine Frage bezogen auf
Zitat:Bei IMAQ werden Bilder per Reference und NICHT "by value" weitergereicht.

Kann ich dann nicht einfach mit dem Notifier arbeiten? Der ist doch quasi eine einzelne Referenz, oder? Brauche ich die Queue dann garnicht, selbst wenn ich nicht nur das Bild, sondern ein Cluster mit Bild übergebe (s. Post 1 Bild 4)?

VG
Abongile
Hallo Abongile,

du überträgst per Notifier die selben Daten wie mit der Queue bisher: was soll das also am Problem selbst ändern?
Hm, weil wenn das Programm läuft, zeigt der Notifier fortlaufend die richtige Bilderfolge an, die Queue speichert aber was anderes ab...

Wenn ich Sonden bei der Befüllung des Notifiers und der Queue setze und bei dem Lesen beider, stimmen die beiden Sonden beim Notifier überein, was aber aus der Queue gelesen wird stimmt nicht mit dem überein, was reingeht. O.o das verwirrt mich total.

Aber ich hab ein Beispiel gefunden bei dem mit dem Event "Frame done" gearbeitet wird. Das versuche ich gerade in mein Projekt zu übertragen:
Siehe Hier

Vielleicht geht das dann besser, in ersten Tests ist das Beispielprogramm aber deutlich langsamer als meins.
Was bedeutet es denn, wenn der event overrun button leuchtet?

Ich vermute nichts gutes, aber ich finde gerade keine negativen Auswirkungen...
Hallo Abongile,

Zitat:Was bedeutet es denn, wenn der event overrun button leuchtet?
Was ist ein "event overrrun button"?
Wo findet man den?

Wenn du Probleme mit DEINEM VI hast, dann solltest du DEIN VI auch mal hier anhängen.
Die bisherigen Bilder lassen sich mit LabVIEW nur schwer debuggen…
Zitat:Wenn du Probleme mit DEINEM VI hast, dann solltest du DEIN VI auch mal hier anhängen.
Die bisherigen Bilder lassen sich mit LabVIEW nur schwer debuggen…

Sorry, das war auf das LabVIEW Beispielprogramm im Post drüber bezogen:
Zitat:Aber ich hab ein Beispiel gefunden bei dem mit dem Event "Frame done" gearbeitet wird. Das versuche ich gerade in mein Projekt zu übertragen:
Siehe Hier

Darin ist eine Event Struktur, welche auf das Event "Frame done" reagiert und dann zwei Bufferwerte miteinander vergleicht. Wenn die Buffer ungleich sind, geht ein Signal "Event Overrun" auf grün. Was bedeutet das? Gehen dann Bilder verloren?
Hallo Abongile,

Zitat:geht ein Signal "Event Overrun" auf grün. Was bedeutet das? Gehen dann Bilder verloren?
Ich würde das so deuten, dass die Eventstruktur nicht schnell genug abgearbeitet wurde und deshalb Bilder verloren gehen…

- Wenn dein VI mit Notifiern funktioniert (wirklich immer?), dann bleibe dabei
- Wenn du mit einer Queue arbeiten willst, sorge dafür, dass du wirklich neue IMAQ-Bilder (aka Referenzen) in die Queue schreibst!
Seiten: 1 2
Referenz-URLs