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!
Moin,
mei Problem: ich kann mein Programm nur mit der Stop-Taste oben links beenden. Eigentlich gibt es schon einen Button um das Programm nach dem momentanen Durchlauf zu beenden. Allerdings startet das Programm trotz gedrücktem Button lustig den nächsten Schleifendurchlauf :-(
Aufgrund des Beendens durch die Stoptaste wird das Programm nur bei jedem zweiten Aufruf ordnungsgemäß gestartet, bei den restlichen kommt es zu einem Fehler beim Loggen in die Datei...
Ich danke schonmal im Voraus für jede kleine neue Idee, die mir weiterhilft!!! Ich hoffe mein Blockdiagramm ist nicht zu verwirrend
Das Problem das du hast sind sogenannte "race conditions".
LabVIEW ist datenflussabhaenging. Wenn du mit lokalen Variablen arbeitest werden die "zufällig" (in Ermangelung besseren Wissens nenn ich das mal so) abgerufen. Es ist nicht definiert wann genau eine innerhalb einer Schleife/Frame abgerufen wird. Und da du so viele Schleifen parallel am Laufen hast, passiert das schnell mal....Dh deine Hauptschleife ist schon fertig und sendet "Alles aus", deine parallelen arbeiten jedoch gerade noch und fangen einen neuen Durchlauf, kurz bevor "Alles aus" auf TRUE gesetzt wurde, an. Somit erhälst du einen neuen durchlauf der paralellen Schleife.
Ein neuer Ansatz wäre ein Consumer/Producer-Pattern...
Schaue mal in der Hilfe nach..
Ich denke da musst du noch etwas Energie reinstecken, um das Problem in den Griff zu bekommen....
Gruss,
Christian
In theory, there is no difference between theory and practice; In practice, there is.
<!--quoteo(post=51131:date=23.05.2008 , 14:47:22:name=<<oenk>>)--><div class='quotetop'>ZITAT(<<oenk>> @ 23.05.2008 , 14:47:22) [url=index.php?act=findpost&pid=51131][/url]</div><div class='quotemain'><!--quotec-->Ein neuer Ansatz wäre ein Consumer/Producer-Pattern...[/quote]... was natürlich zu bevorzugen wäre ...
Du kannst aber vorerst mal mit einer ganz ordinären Sequenzierung arbeiten. Das IF-Statement ganz recht neben der Haupt-While-Schleife ist längst abgearbeitet, noch bevor die While-Schleife überhaupt richtig gestartet ist. Daher wird "alles aus" niemals gesetzt, wenn diese Haupt-While-Schleife beendet wird. In Folge laufen natürlich alle anderen While-Schleifen weiter.
Mach mal alles, was nicht mittels Datenfluß sequenziert ist, in eine Sequenz-Struktur hinein.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
23.05.2008, 18:53 (Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2008 18:54 von Lucki.)
Habs mal notdürftig abgeändert (Mußte die SubVis und was Fehlermeldungen macht löschen). Der Stop funktioniert aber auch jetzt nur, wenn das Proogramm nicht in einer Schleife innerhalb der Haupschleife oder bei einem Sub_VI hängen bleibt. Das kann ich jetzt nicht beurteilen.
Bemerkung:
Den Anfänger erkennt man regelmäßig auch an der exzessiven Verwendung von Sequenzen, so wie hier bei Dir. Es geht nicht immer ohne, aber bei Anfängern stellt es meistens den Versuch dar, die natürliche Datenflußsteuerung von LV außer Kraft zu setzen, zugunsten eine sequentiellen Abarbeitung, wie man sie von den textorientierten Sprachen her kennt. (Und dann kommen hier die Anfragen, wie man es machen kann, in einer solchen solchen Multi-Sequenz auch mal rückwärts zu gehen)
Ja ok, Danke für die Mühe, aber es bleibt trotzdem immer in der Schleife hängen :-(
Ich würde ja auch gerne die Sequenz umgehen, aber die Steuerung soll halt wirklich Schritt für Schritt ablaufen, weil ich ja später mal einen Reaktor dranhängen habe, bei dem biologisch was läuft...sprich nach dem Wachstum in der Zykluszeit muss wirklich erst der Inhalt halbiert werden und dann frisches Medium reingepumpt werden!
Da kann ich mir das mit reinem Datenfluß schlecht vorstellen?!
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
geeignete Stopfunktion gesucht
Dann probier' mal eine State-Machine, die läuft auch sequentiell ab.......
Ein Reaktor?? :oDann probier' ja schön genau, damit uns das Ding nicht um die Ohren fliegt.
Gruß Markus
' schrieb:Ja ok, Danke für die Mühe, aber es bleibt trotzdem immer in der Schleife hängen :-(
Ich würde ja auch gerne die Sequenz umgehen, aber die Steuerung soll halt wirklich Schritt für Schritt ablaufen, weil ich ja später mal einen Reaktor dranhängen habe, bei dem biologisch was läuft...sprich nach dem Wachstum in der Zykluszeit muss wirklich erst der Inhalt halbiert werden und dann frisches Medium reingepumpt werden!
Da kann ich mir das mit reinem Datenfluß schlecht vorstellen?!
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Es gibt neben den Sequenzen einige Möglichkeiten den Datenfluß zu steuern.
Eine Funktion kann ja z.B. nur arbeiten, wenn alle Eingangsgrößen anliegen. Alleine dadurch erhältst du schon viele Bedingungen für den Ablauf.
Was ich mir bei deiner Aufgabenstellung sehr hilfreich vorstelle ist eine StateMaschine. Wurde schon oft hier im Forum beschrieben. Such mal danach und schaue, ob dir das hilft.
Eine andere beliebte Methode sequentielle Abarbeitung sicherzustellen ist das Durchverbinden eines Fehlerclusters (schematisch siehe Screenshot). Dadurch stellst du neben der geordneten Abarbeitung auch noch eine Fehlerabfrage sicher.
Grüße
A few weeks of developement and testing can save a WHOLE afternoon in the library!
27.05.2008, 12:40 (Dieser Beitrag wurde zuletzt bearbeitet: 27.05.2008 15:30 von Lucki.)
' schrieb:Ja ok, Danke für die Mühe, aber es bleibt trotzdem immer in der Schleife hängen :-(
Da kann ich mir das mit reinem Datenfluß schlecht vorstellen?!
Wenn es innerhalb der großen Sequenz noch Schleifen mit Hängern gibt, dann mußt Du die entsprechenden boolschen Anschlüsse für die Schleifenstops alle noch mit den lokalen Veraiablen des endgültigen Stops verodern.
Hier mal ein Beispiel wie man es besser macht, wenn eine bestimmte Reihenfolge einzuhalten ist. Du kannst hier jederzeit abstoppen, ohne alle Sequenzen durchlaufen zu müssen, und kannst gegebenenfalls entscheiden, welcher Case als nächster drankommt. Das muß nlcht unbedingt der nächste sein. (Zusätzlicher Vorteil: Dein Blockbild passt auf den Schirm!)
' schrieb:Wenn es innerhalb der großen Sequenz noch Schleifen mit Hängern gibt, dann mußt Du die entsprechenden boolschen Anschlüsse für die Schleifenstops alle noch mit den lokalen Veraiablen des endgültigen Stops verodern.
Hier mal ein Beispiel wie man es besser macht, wenn eine bestimmte Reihenfolge einzuhalten ist. Du kannst hier jederzeit abstoppen, ohne alle Sequenzen durchlaufen zu müssen, und kannst gegebenenfalls entscheiden, welcher Case als nächster drankommt. Das muß nlcht unbedingt der nächste sein. (Zusätzlicher Vorteil: Dein Blockbild passt auf den Schirm!)
[attachment=39951:Sequenz.vi]
Das würd ich gern mal anguggen, is aber ne höhere Version als meine (8.2) :-(