![]() |
Verbesserungen/Anregungen zum Kameragrab - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Module (/Forum-LabVIEW-Module) +---- Forum: LabVIEW Vision (/Forum-LabVIEW-Vision) +---- Thema: Verbesserungen/Anregungen zum Kameragrab (/Thread-Verbesserungen-Anregungen-zum-Kameragrab) |
Verbesserungen/Anregungen zum Kameragrab - Abongile - 04.05.2017 13:50 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 ![]() 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 RE: Verbesserungen/Anregungen zum Kameragrab - GerdW - 05.05.2017 07:43 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? RE: Verbesserungen/Anregungen zum Kameragrab - Abongile - 07.05.2017 19:29 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 ![]() - Zu viele Variablen ![]() - 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? ![]() - FormatIntoString --> Beispiel wird angeschaut und umgesetzt! - 2. Rube-Goldberg: Prima, wäre ich nie drauf gekommen! - ![]() - 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! ![]() VG Abongile RE: Verbesserungen/Anregungen zum Kameragrab - GerdW - 08.05.2017 07:17 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 registriereIch 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! RE: Verbesserungen/Anregungen zum Kameragrab - Abongile - 10.05.2017 09:16 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 ![]() VG Abongile |