Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
momentan habe ich folgendes Problem:
Ich bekomme von einer Kamera bei 30fps Positionsdaten. Ziel ist es , sobald die Positionsdaten einen bestimmten Wert überschreiten (hier: y > 1000) den letzten gültigen Wert abzuspeichern.
Mein Versuch war bisher, eine While-Schleife zu bauen die solange läuft wie gültige Werte ankommen und den vorherigen Wert per Schieberegister mitzunehmen.
Sobald der Abbruchwert erreicht wird sollte der Case die Daten in die Felder schreiben und per geschobenem Vergleich die Schleife erst im nächsten Durchgang beenden.
In der Praxis tut sich in den Feldern allerdings garnichts, kann mir da jemand weiterhelfen?
du kannst das Shiftregister an der linken Seite der Schleife aufziehen und erhältst somit Zugriff auf den letzten, vorletzten usw. Durchlauf. Als Abbruchbedingung wählst du dann den aktuellen Wert.
Falls du es genauso gemacht hast, es aber nicht funktioniert - einfach mal VI hochladen <= LV2011
Habe das mal ausprobiert, es tut sich aber dann auch nichts.
Im Anhang ist die VI, die startet aber nicht solange die Kamera nicht verbunden ist.
Der Y-Midpoint ist für gewöhnlich zwischen 0 und 720, wenn kein Punkt zu finden ist werden X und Y auf 1023 gesetzt, daher die Abbruchbedingung Y > 1000.
zwei Sachen, erstens wenn die Schleife abbrechen werden soll wenn Y größer als 1000 ist, musst du die Anschlüsse tauschen.
Weil im Moment bricht sie ab wenn Y < 1000. Und die zweite Sache, warum läuft die Abbruchbedigung durch das Shiftregister? Und wenn das umbedingt so sein muss, dann solltest du eine False Konstante an das Register hängen. Ausserdem würde ich die False True Cases wechseln.
(28.02.2013 16:02 )swatski schrieb: zwei Sachen, erstens wenn die Schleife abbrechen werden soll wenn Y größer als 1000 ist, musst du die Anschlüsse tauschen.
Weil im Moment bricht sie ab wenn Y < 1000. Und die zweite Sache, warum läuft die Abbruchbedigung durch das Shiftregister? Und wenn das umbedingt so sein muss, dann solltest du eine False Konstante an das Register hängen. Ausserdem würde ich die False True Cases wechseln.
Habe das gerade mal ausprobiert, so funktioniert das auch nicht. Der 1000-Anschluss muss oben sein, sonst läuft die Schleife (und der Rest des Programms) garnicht (habe das mit T/F-Konstanten nachgetestet).
Die Abbruchbedingung läuft durch das Shiftregister damit die Schleife während des ersten ungültigen Wertes noch weiterläuft, denn in diesem Durchgang sollen die gültigen Werte des letzten Durchgangs gespeichert werden.
Dadurch dass der Vergleich beim ungültigen Eingabewert False liefert ergibt es in meinen Augen mehr Sinn den Case auf False zu lassen, sonst wäre die Bedingung immer erfüllt bis zu dem Moment wo es eigentlich gespeichert werden sollte.
Da ich auf Labview immernoch nicht wirklich klarkomme kann ich mich natürlich irren...
(06.03.2013 16:43 )Rauth schrieb: Die Abbruchbedingung läuft durch das Shiftregister damit die Schleife während des ersten ungültigen Wertes noch weiterläuft, denn in diesem Durchgang sollen die gültigen Werte des l
Kurze Anmerkung dazu: Du brauchst ein Shiftregister nur, wenn du Werte von einem Schleifendurchlauf an den nächsten weiterreichen willst. Für die Abbruchbedingung gilt: Wenn die Abbruchbedingung erfüllt ist, wird alles in der Schleife komplett abgearbeitet und danach wird die Schleife beendet.
(06.03.2013 16:43 )Rauth schrieb: Dadurch dass der Vergleich beim ungültigen Eingabewert False liefert ergibt es in meinen Augen mehr Sinn den Case auf False zu lassen, sonst wäre die Bedingung immer erfüllt bis zu dem Moment wo es eigentlich gespeichert werden sollte.
Du könntest einfach mal dein Programm mit Sonden, Breakpoints und dem 'Lämpchen' debuggen. Dann könntest du dir genau ansehen, was im Fall 'Wert >1000' in deinem VI vorsichgeht.
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
Okay, jetzt weiss ich woran es liegt...das Modul das die Werte liefern soll ist fehlerhaft.
Habe es jetzt anders gelöst, die Werte werden direkt in die Anzeige geschrieben solange erlaubte Werte eingehen, und das wird gestoppt wenn der Wert ungültig ist.
So ist der letzte Wert korrekt und die Sache ist erledigt.