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 versuche euch kurz ein Problem zu schildern und hoffe es gibt eine Lösung dafür.
Bevor ich u.U. missverständlich und ausschweifend über das reale, komplizierte Programm schreibe, habe ich ein äquivalentes Main und Sub - VI hochgeladen und beschreibe das Problem an diesen einfachen Zähler-Ersatzprogrammen.
Es geht um folgende Problematik: Ich möchte mit einem einzigen STOP-Button alle While-Schleifen und Sub-Vis herunterfahren. Im Bsp. ist nur ein Sub-VI zu sehen. Zusätzlich stoppt das Sub-VI, wenn ein Kriterium erreicht ist, gibt Wahr weiter und in Folge dessen stoppt auch das Main-VI - diese Funktion ist erwünscht.
Nun ist in die While-Schleife ein Zeitglied integriert. Z.B. 60sec. Das Verhalten ist folgendes, bei einem Abbruch mittels Stop-Taster reagiert die Ereignisstruktur erst bei erneutem Schleifenstart, also nach Ablauf der 60sec.
Ich möchte folgendes: Trotz des Wartens, verursacht durch das Zeitglied, soll die Ereignisstruktur anspringen und das VI beenden.
Gibt es dafür eine programmiertechnische Lösung?
Die hochgeladenen Programme sind Version 8.2. Zur Veranschaulichung könnt ihr im Sub-VI die Wartezeit runternehmen, da sonst 60sec erstmal nix passiert.
' schrieb:z.B. die folgende. Hauptgedanke ist, die Zeit scheibchenweise abzuarbeiten.
Vielen Dank IchSelbst.
Sieht auf den ersten Blick ungewohnt aus und ich bin auch noch nicht so ganz dahintergestiegen wie das funktioniert - aber es klappt.
Ich bin soeben bei meiner weiteren Recherche auf einen Begriff gestoßen - StateMachine. Da wollte einer eine 15min While-Schleife machen. Bei mir im realen Programm isses eine 5min While-Schleife. Ohne deinen Vorschlag könnte man da in dieser Zeit z.B. mit einem Abbruch-Kriterium nicht eingreifen, was ja im Grunde mein Problem war.
Ist die besagte StateMachine für meine Anwendung hilfreich? Wenn ja, erkundige ich mich mal, was es damit auf sich hat.
Jedenfalls nochmal vielen Dank für die schnelle Antwort.
' schrieb:In Prinzip ja. Auch das, was ich da gemacht habe, kann schon als Statemachine bezeichnet werden.
Statemachines sind in LV so wichtig wie Eventcases etc. Sich nicht zu erkundigen ist ein fataler Fehler.
Guten Tag IchSelbst oder andere Leser.
Ich habe deinen Vorschlag soeben versucht im realen Programm umzusetzen. Doch leider bin ich auf eine neue Hürde gestoßen. Die Sub-VIs sind While-Schleifen, in denen es einige Rückkopplungen gibt. Diese werde durch globale Variablen gespeist.
Nun habe ich das eine Sub-VI schon so umgebaut, dass es deinem (IchSelbst) Vorschlag ähnelt. Nur kann ich eben diese Rückkopplungen nicht nutzen, da der Kern des Sub-VIs in einem Case untergebracht ist.
Ich lade mal das Ursprungsprogramm (Nitrifikation) und meine versuchte Änderung (Nitrifikation-Stop) hoch. Vielleicht kannst du mal gucken, ob du es mit ein paar Handgriffen umgestalten kannst.
Wenn es nicht gehen sollte, ist es bei diesem Programm nicht so schlimm. Ich hätte es nur gerne als funktionierendes Beispiel um mich danach an das schwierigere Sub-VI heranzuwagen. Dieses lade ich auch noch hoch, dass ist das Programm Denitri.
--> Hier ist die Besonderheit, dass ich zwei While-Schleifen habe. Die eine richtet sich nach einer max. Zeit als Abbruchkriterium, die andere nach einem Kurvenverlauf. Die jeweils andere While-Schleife soll ebenfalls beendet werden, wenn die eine das Kriterium erfüllt hat.
Hier wäre es schön, wenn es eine Möglichkeit gibt, dass das OK bzw. das von außerhalb kommende Stop in der oberen Schleife nicht erst nach 5 min sondern sofort erkannt wird.
Viel Text, entschuldigt bitte. Hoffe aber es gibt ne Lösung.
' schrieb:Die Sub-VIs sind While-Schleifen, in denen es einige Rückkopplungen gibt. Diese werde durch globale Variablen gespeist.
Dann ersetzt du den Rückkopplungsknoten halt durch Schieberegister.
Zitat:Nur kann ich eben diese Rückkopplungen nicht nutzen, da der Kern des Sub-VIs in einem Case untergebracht ist.
Schieberegister? Müssen in allen anderen Cases halt nur durchgeschoben werden.
Ich hab dein Nitrifikation__Stop_.vi mal fertig (war doch schon fast fertig) gemacht und angehängt.
Außerdem:
Du solltest dir einen anständigen Programmierstil angewöhnen. Leitungen von links nach rechts und rechtwinkelig. Ein leserlicher Programmierstil erhöht die Changen auf eine Hilfestellung.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).