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!
ich habe folgendes Problem: Ich erstelle ein Labview-Programm, mit dem ich Messungen mache. Das funktioniert auch alles soweit. In einem SubVI werden mehrere Messungen hintereinander ausgeführt und ich möchte solange, dass bei jedem Durchlauf eine Anzeige in meinem Main-VI aktualisiert wird, sodass klar ist, wie weit die Messung schon gekommen ist (dauert bischen länger sowas). Ich erstelle dazu Events, welche bei jedem Schleifendurchlauf aktiviert werden.
Ich habe exemplarisch mal meine Struktur in VIs dargestellt. Meine Idee war halt, die Werte (die sich in meinen wirklichen VIs ändern können, hier vereinfacht dargestellt) für einen Slide zu übergeben (Maximum, Minimum, Inkrement und Wert, wo der gerade stehen soll) und dann eben bei Eventauslösung anzupassen.
Vielleicht hat jemand eine Idee und kann mir weiterhelfen.
Wie soll dein Main-VI ein neues Event abarbeiten, wenn es zwecks Datenfluss noch im Event Messung hängt (denn dort ist dein Messung-VI gerade in Abarbeitung).
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Ist das denn nicht genau der Sinn von Events, dass ich die aus SubVIs auslösen kann und der die dann im Main VI nebenläufig bearbeiten kann?
Und wie kann ich das besser lösen? Der Sinn ist halt, dass man immer weiß, welchen Status die Messung gerade hat.
Jegliche (Sub)struktur wird erst dann beendet, wenn alle Knoten / SubVIs / etc., die darin enthalten sind, abgearbeitet sind.
In deinem speziellen Bsp lautet das: Das Event "Messung" wird erst dann beendet und verlassen, wenn das SubVI beendet ist. Danach startet der nächste Durchlauf der While-Loop und es kann das nächste Event abgearbeitet werden.
Schau dir z.B. mal die Producer-Consumer Struktur an, unter File -> New...
Und verinnerliche das Datenfluss-Prinzip, wenn du das nicht verstehst, wirst du mit LabVIEW nicht weit kommen.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
"Langer" Code (insbesondere in (While-) Schleifen hat in einem Eventcase NICHTS verloren! Wenn du das beherzigst, kommst du automatisch zu dem Punkt "ich muss auf eine Producer/Consumer"-Architektur umsteigen"...und dann wird alles gut
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
21.06.2013, 08:05 (Dieser Beitrag wurde zuletzt bearbeitet: 21.06.2013 13:31 von Lucki.)
(20.06.2013 14:32 )Moe19 schrieb: Ist das denn nicht genau der Sinn von Events, dass ich die aus SubVIs auslösen kann und der die dann im Main VI nebenläufig bearbeiten kann?
So etwas machen Interrupts, und das Problem, so auch hier, ist, dass oftmals geglaubt wird, Events seinen das Gleiche wie Interrupsts.
Ein Event löst zwar tatsächlich einen sofortigen Interrupt aus, aber der macht nichts anderes, als das Event in eine Wartschlange einzutragen. Die Abbarbeitung des Events im Event-Case erfolgt dann aber erst, wenn die Eventstruktur ganz normal bei der Abarbeitung des Programms an der Reihe ist. Ein Programmcode sollte möglichst so konzipiert sein, das Programm so oft wie möglich an der Eventruktur auf ein Event wartet. In diesem Fall findet die Ausführung des Events sofort statt, so, als wäre es ein Interrupt. In allen anderen Fällen wird es später ausgeführt, bis hin zu sehr viel später - oder überhaupt nicht.
erst mal ein fettes Dankeschön für alle Antworten.
Ich musste leider ein paar Tage weg und kann mich erst jetzt wieder damit beschäftigen. Ganz offensichtlich ist mir so einiges noch nicht klar gewesen!
Ich hatte das eigentlich in einem anderen SubVI ähnlich gelöst, da hat es funktioniert, dass in dem MainVI die Anzeige aktualisiert wurde. Allerdings bestand da auch die Zeit, die Warteschleife abzuarbeiten. Ich arbeite mich dann mal tiefer ins Thema ein und melde mich nochmal, wenn ich nicht weiter komme oder es geschafft habe.