LabVIEWForum.de - Verbesserungen/Anregungen zum Kameragrab

LabVIEWForum.de

Normale Version: Verbesserungen/Anregungen zum Kameragrab
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen und willkommen zu meinem ersten Beitrag,

ich beschäftige mich jetzt seit gut einem Monat mit LabVIEW und habe ein Kameraprogramm geschrieben, in dem die Belichtungszeit und der ROI während der Aufnahme durch eine Eventstruktur angepasst werden kann. Nebenbei wird eine Textdatei mit Messdaten zum Zeitpunkt der Bildaufnahme erstellt. Das Programm funktioniert zu meiner eigenen Überraschung gut Smile

Innerhalb eines Monats mit 0 Vorkenntnissen und keiner weiteren Unterstützung als Google (auch euer Forum hier) und den LabVIEW Beispielen, bin ich eigentlich stolz darauf.

Zum einen möchte ich das Programm hier gerne teilen und zum anderen habe ich eine Frage zur Struktur des Programms:

Ich arbeite mit einer Eventstruktur in der ich Booleans auf TRUE/FALSE setze, um den Producer Loop zu stoppen und in den nächsten Fall meiner Eventstruktur zu kommen. Innerhalb der Fälle ändere ich Einstellungsparameter an der Kamera und setze den Boolean dann wieder zurück, sodass der Producer Loop unter "Wait for event" wieder starten kann. Die Idee funktioniert zwar, aber ich finde den Grundgedanken seltsam, da ich ja quasi ein Element habe, das einfach nur grün leuchtet und wieder nicht mehr. Gibt es einen schöneren/erfahreneren Ansatz dafür?

Ist zwar keine "wichtige" Frage, aber ohne Umfeld zur Bewertung meines kleinen Programms, würde ich mich sehr über eine Rückmeldung von ein paar erfahrenen Nutzern freuen.
Und wenn ich irgendwas betreffend der Forumsrichtlinien falsch gemacht habe, würde ich mich auch über einen freundlichen Hinweis freuen!

VG
Abongile
Hallo Abongile,

ich habe zwar kein IMAQ installiert, kann aber zum Rest einen (oder mehrere) Kommentar(e) geben:
- du verwendest manche Rube-Goldberg-Konstrukte, z.B: warum muss man mehrere OR-Funktionen kaskadieren, wenn es eine CompoundArithmetik gibt?
- du verwendest für meinen Geschmack deutlich zu viele lokale Variablen (und da zähle ich die ganzen "Value"-Proeprtynodes dazu!)
- wozu dieser Aufwand, um einen Cluster an ein subVI weiterzureichen? Da werden die Einzelwerte aus dem Cluster per Propertynode gelesen, neu zu einem Cluster zusammengesetzt, um diesen dann wiederum per Propertynode in das FP-Control zuschreiben!? Warum nicht einfach direkt mit dem Cluster arbeiten???
- warum muss man diesen Cluster dann per Referenz an ein subVI weiterreichen? Warum nicht direkt???
- der Kamera-Einstellungs-Cluster sollte typdefiniert sein…
- bei der Bild-Speicher-Schleife: hier kann man durch Einsatz der FormatIntoString-Funktion das VI deutlich verschlanken…
- bei der Bild-Speicher-Schleife der nächste Rube-Goldberg: schließe doch das Stop-Terminal direkt an den Fehlerausgang der Dequeue-Funktion an - dann brauchst du aus der Case-Struktur heraus nicht noch extra einen boolschen Wert ausgeben lassen…
- generell ist das BD zu groß: doppelt so groß wie ein FullHD-Bildschirm (oder arbeitest du mit einem 4k-Bildschirm?)
- eine Eventstruktur sollte nicht in einem Case versteckt werden, das führt früher oder später zu Problemen
- ich könnte mir hier eine saubere QMH-Struktur vorstellen (Queued Message Handler)
- musst du deine User-Event wirklich ständig erneut registrieren und abmelden?
Hallo GerdW,

vielen Dank, dass du dir mein VI angeschaut hast! Ich werde mir die Kritik zu Herzen nehmen, das ganze überarbeiten und mich mit einer Überarbeitung wieder melden!

Kurze Kommentare zu deinen Anmerkungen:
- Compound Arithmetik -> wird gegoogelt! Habe noch keine Ahnung was das ist Smile
- Zu viele Variablen Undecided Wo sind sie denn überflüssig? Wie ändere ich die "Eingaben" denn sonst?
- Das mit dem Cluster auseinandernehmen, war irgendwie der erste Ansatz, der funktioniert hat... Wie verwendet man denn ein Cluster richtig?
- Die Referenz hat Labview automatisch gemacht, als ich den Teil des SubVIs über Bearbeiten zum SubVI gemacht habe. Ist das schlecht? Ich hatte daraus geschlossen, dass das die "schöne Lösung" wäre und es weiter angewandt.
- Was bringt mir die Typdefiniton des Clusters? Smile
- FormatIntoString --> Beispiel wird angeschaut und umgesetzt!
- 2. Rube-Goldberg: Prima, wäre ich nie drauf gekommen!
- Big Grin Nein mache ich nicht und das scrollen ärgert mich selbst...
- QMH ist etwas, dass ich gerade versuche zu verstehen. Wie gesagt, arbeite erst seit einem Monat mit LabVIEW und habe keinerlei andere Programmiervorkenntnisse.
- User-Event: Das wurde in einem Beispiel so gemacht. Ich hab noch nicht ausprobiert, ob ich das auch sein lassen kann. Was bedeutet denn, dass ich es abmelde und wieder registriere bzw. wenn ich es nur registriere? Meinem Gefühl nach, heißt das, ich kann es entweder einmal (ohne Abmeldung) machen und ansonsten wiederholen (mit Abmeldung).

Nochmal wirklich Danke! Smile Hab jetzt schon was gelernt!

VG
Abongile
Hallo Abongile,

CompoundArithmetic

Zitat:Wie ändere ich die "Eingaben" denn sonst?
Indem man sie vor dem Case abfragt - und alles in einer möglichst "sauberen" Statemachine und/oder QMH verpackt!

Zitat:Wie verwendet man denn ein Cluster richtig?
Einfach per Draht ans subVI weiterreichen.
An die Elemente kommt man per (Un)BundleByName…

Zitat:Ist das schlecht?
Jein. Es sit die langsame und unübersichtliche Lösung.

Zitat:Ich hatte daraus geschlossen, dass das die "schöne Lösung" wäre und es weiter angewandt.
LabVIEW kann nur das umsetzen, was du vorgibst. Und wenn du eben mit Propertynodes arbeiten WILLST, dann muss LabVIEW eben Referenzen verwenden…

Zitat:Was bringt mir die Typdefiniton des Clusters?
Eine Typdefinition verwenden man, um einen Datentyp zu definieren - nicht nur in LabVIEW, sondern auch in nahezu allen anderen Programmiersprachen. In LabVIEW kommt noch hinzu, dass man zusätzlich auch das Aussehen auf dem FP darüber defnieren kann (aber rnicht muss)…
Vorteil: man hat nur eine Definition. Alle Instanzen, die diese Definition verwenden, passen sich automatisch an Änderungen der Definition an…

QMH

Zitat:Was bedeutet denn, dass ich es abmelde und wieder registriere
Ich bezog mich darauf, dass du die Funktionen RegisterEvent und UnregisterEvent jedesmal aufrufst. Sowas macht man üblicherweise nur genau einmal vor und nach einer Schleife…
Analogie: Wenn du ein Buch lesen willst, klappst du es ja auch nicht jedesmal auf und zu, wenn du ein einzelnes Wort lesen willst!
Hallo GerdW,

nochmals danke!
Ich bin dran und habe mir jetzt mit mehreren Tutorials und den Templates eine Grundstruktur für einen QMH gebaut.

Bin gespannt, was der neue Code für eine Kritik erhalten wird Smile Wird aber ca. noch eine Woche dauern bis ich mich damit zurückmelde.

VG
Abongile
Referenz-URLs