2012-04-02 5 views
1

Ich benutze die Vision-Routinen, um Frames ("Grab") von einer 300fps GigE-Kamera zu erfassen. Die Kamera kann Frames etwas schneller liefern, als die HD sie schreiben kann, also nehme ich sie in einer Schleife auf und lege sie in eine Warteschlange, die in einer zweiten (benachbarten/parallelen) Schleife ausgelesen wird. Alles läuft gut, bis die erste Schleife beendet ist (soweit ich das beurteilen kann), was bedeutet, dass die Daten alle erfasst wurden, die meisten geschrieben wurden und der Rest einfach ausgeschrieben werden muss. Leider enden alle Bilder, die in der Warteschlange stehen, rückwirkend alle mit den gleichen Daten, so dass der letzte Teil des Datensatzes Hunderte von statischen Rahmen enthält.LabView überschreibt erfasste Bilder in einer Warteschlange

Wie vermeide ich dieses Verhalten? Ich nehme an, dass es gibt einige Ressource, die ich an halten muss, so dass Bildpufferspeicher nicht zurückgefordert wird, aber es ist offensichtlich nicht die Bilder selbst. (Ich mache keine explizite Kamera Bereinigung Sachen gibt.)

Hier ist eine ASCII-Kunst Darstellung von dem, was ich tue (zumindest hoffe ich das der relevante Teil ist):

  +===============+ +==========+ 
[email protected]@[email protected][email protected] queue 
     | # GrabImg-^  # # |  # 
     | #    # # Y->Stop # 
     | # i-(>n?)->Stop # +==========+ 
     | +===============+ 
     | 
     | +==============+ 
     \[email protected]?--Y # 
      # |  | # 
      # N->Get | # 
      #  | v # 
      # Write Stop# 
      +==============+ 

I‘ m Verwenden der Warteschlangenlöschung, um das Ende der Schleife zu signalisieren. Es ist ein bisschen schlampig, gewährt, also konnte ich einen off durch einen Fehler verstehen, aber nicht einen Off-by-2200 Fehler, der der schlechteste ist, den ich gesehen habe. (Und wieder schreibt alle Bilder, sie sind am Ende alle gleich.)

+0

wo und wann sind die Bilder in Ihrem Verbraucher-Puffer, und wann ist letzterer aufgeräumt? – CharlesB

+0

@CharlesB - Bietet diese Bearbeitung genügend Informationen? –

+0

Fehler, ich bin nicht daran gewöhnt, wie Sie es tun. kopiert grabimg das Bild auf ein neues Bild? löschst du das Bild nach dem Schreiben? Auch im Bearbeitungsmenü können Sie einen Png ausgewählter Objekte Ihres Diagramms erstellen und das Bild hier posten. Ergebnis PNG enthält auch den LV-Code, es ist also eine gute Möglichkeit, LV-Code hier zu teilen. – CharlesB

Antwort

1

In einer Producer-Consumer-Schleife muss der Produzent das Bild kopieren, damit es beim nächsten nicht überschrieben wird Iteration, wenn der Verbraucher sie nicht verarbeitet hat. GrabImg führt diesen Schritt nicht aus, daher müssen Sie vor jedem Zugriff einen neuen erstellen und den Benutzer veranlassen, jeden Puffer, den er verarbeitet hat, freizugeben.

Vorsicht vor Speicherproblemen!