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!
16.08.2010, 20:17 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2010 20:18 von jfkn2001.)
ich sitze vor einem Problem seit einigen Tage und finde keine Lösung. Habe auch schon vieles aus den Foren ausprobiert ohne Erfolg.
Zu meinem Problem:
Ich habe 3 While-Schleifen, die parallel laufen müssen.
1. Die erste ist die Main-Schleife mit den Ereignissen (Event-Structure)
2. Die zweite läuft direkt nach dem Start des Programms
3. Die dritte soll erst nach dem Drucken einer Starten-Taste durchlaufen und wieder nach dem Drucker der Stop-Taste stoppen.
4. Eine letzte Stop All - Taste soll alle Abläufe stoppen.
Ich würde mich auf jede Idee, wie man das Problem lösen konnte, freuen.
Ich habe ein Beispiel hochgeladen, benutze Labview2009
da ich dein Beispiel gerade nicht öffnen kann habe ich schnell was zusammen geklickt.
Sauberer geht die Kommunikation der Schleifen untereinander z.B. über Queues (Ereignisstruktur-Schleife ist der Erzeuger, was "Stop All" betrifft und die anderen beiden Schleifen sind Verbraucher.
Ungebremste Schleifen sind auch nichts, aber um grob zu zeigen, wie so etwas lösbar wäre, reicht das Beispiel vermutlich aus. Ich habe es jedoch nicht getestet.
Grüße
16.08.2010, 20:53 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2010 21:06 von Falk.)
Es gibt einige Möglichkeiten dies zu realisieren. Dabei kommt es beispielsweise darauf an, wie den globaler Stop aussehen soll. Zum einen kannst du eine "Occurence" dazu verwenden.
Eine aus meiner Sicht gute Alternative dazu ist die Verwendung einen einfachen globalen Variable, die nur dem Zwecke dient einen boolschen Wert (true/ false) zu speichern. Siehe Anhang. Beachten solltest du dabei aber, diese am Programmstart entsprechend mit false zu initialisieren. Vorteil ist aus meiner Sicht, dass du diese Variable auch in SubVIs zur Beendigung von Code heranziehen kannst ohne dabei groß Verdrahtungen in tiefere Programmebenen sicherstellen zu müssen.
Danke für die 3 Vorschläge. Es ist schön zu wissen, dass es mehere Wege gibt dieses Problem zu lösen. Habe die drei ausprobiert und habe mich sehr auf das Ergebnis gefreuet.
Allerdings soll manchmal beim dem Beispiel von "Mechatronik-Ingenieur" mehrmals auf die Stop-Taste gedruckt werden damit es hält. Sonst funktioniert das mehrfache Starten einwandfrei.
' schrieb:Allerdings soll manchmal beim dem Beispiel von "Mechatronik-Ingenieur" mehrmals auf die Stop-Taste gedruckt werden damit es hält. Sonst funktioniert das mehrfache Starten einwandfrei.
Hm, also "Stopp Alle" müsste beim ersten Klick alle Schleifen verlassen und somit das Programm beenden.
"Stop" müsste beim 1. Klick die innere Schleife verlassen, sofern Start nicht "true" ist. Ist das Schaltverhalten des Start-Buttons auf "Latch" eingestellt, würde ich sagen, dass es funktioniert.
Aber es kann gut sein, dass ich irgendwo einen kleinen Denkfehler habe (kömmt öfters vor).
Ich habe ein ähnliches Problem. Allerdings geht es bei mir um das Stoppen zweier Schleifen.
Die 1. Schleife wird alle 2s ausgeführt. Die 2. Schleife alle 20ms. Das gleichzeitige stoppen (mit einem Stop-Button) mit globalen und lokalen Variablen funktioniert nicht. Bei gleicher Taktzeit ist dies kein Problem aber wenn die Schleifen mit so unterschiedlichen taktzeiten laufen wird nur eine Schleife beendet.
Ansonsten muss man halt den Datenfluss abwarten, bis irgendwann die globale/lokale Variable das nächste Mal ausgelesen wird. Bei einer 2 Sekunden Schleife kann das dann bis zu 4 Sekunden dauern, da ja alles quasi parallel abgearbeitet wird.
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!