INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Programmstop



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!

13.02.2018, 11:38
Beitrag #1

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



Programmstop
Hallo,
Ich habe ein Programm mit mehreren vers. Schleifen. Um das Programm nicht immer wieder nach einem Durchlauf neu starten zu müssen, habe ich eine While-Loop um das Ganze gezogen. Somit läuft das Programm beliebig oft durch - wie erwünscht. Jetzt zu meiner Frage: wenn ich jetzt auf den Stopp-schalter der äußeren While-Loop klicke, läuft das Programm noch einmal durch und stoppt erst dann. Ich möchte aber, dass das Programm sofort, ohne weiteren Durchlauf stoppt. Was muss ich einfügen damit die While-loop sofort stoppt?
Ich hab im Forum irgendwas von einer "State Machine" gelesen, es allerdings nicht wirklich verstanden und auch in LabView selbst nicht wirklich gefunden.

Danke schonmal
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.02.2018, 12:38
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Programmstop
Hallo Martin,

Zitat:wenn ich jetzt auf den Stopp-schalter der äußeren While-Loop klicke, läuft das Programm noch einmal durch und stoppt erst dann.
THINK DATAFLOW!

Dein Stoppbutton wird sehr wahrscheinlich wesentlich früher abgefragt als du dir denkst, weil der Inhalt der Schleife einige Zeit zur Ausführung benötigt.
Deshalb wird den Buttonklick eben erst mit der nächsten Iteration bemerkt…

Lösung: Den Stoppbutton wirklich erst zum Schluß der aktuellen Iteration abfragen: eben per DATAFLOW sicherstellen, dass erst alles andere in der Schleife abgearbeitet wird, bevor du den Button liest! (Im simpelsten Fall per Sequenzrahmen.)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2018, 14:15
Beitrag #3

Freddy Offline
Oldtimer
****


Beiträge: 729
Registriert seit: Aug 2008

2019, 2020, 2021
1996
DE

76275
Deutschland
RE: Programmstop
Hallo Martin
ich habe Dir mal zwei Möglichkeiten aufgebaut, die bei einem While Stop sofort unterbrechen.
Die Sequenz und auch die Stapelverarbeitung werden durch die IF Anweisung gestoppt.

Ich habe den Stop Schalter von Latch auf "Beim Drücken schalten" gesetzt.

Vielleicht hilft es bei Deinen Überlegungen etwas weiter.

Gruß
Freddy


Angehängte Datei(en) Thumbnail(s)
   

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2018, 14:25
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Programmstop
Obacht: auch Freddys Beispiel wird (sehr wahrscheinlich) eine weitere Iteration durchführen…
THINK DATAFLOW!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2018, 14:37
Beitrag #5

Freddy Offline
Oldtimer
****


Beiträge: 729
Registriert seit: Aug 2008

2019, 2020, 2021
1996
DE

76275
Deutschland
RE: Programmstop
Zitat:Obacht: auch Freddys Beispiel wird (sehr wahrscheinlich) eine weitere Iteration durchführen…
Das ausgewählte Array oder dieTeilsequenz wird abgearbeitet, wenn sie innerhalb ihrer IF Anweisung sind.
Alle anderen nicht.

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2018, 15:14
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Programmstop
Hallo,

so verhindert man mittels DATAFLOW, dass eine weitere (ungewünschte) Iteration erfolgt:
   
Den Button erst dann lesen, wenn der restliche Code in der Schleife abgearbeitet ist…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2018, 15:49 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2018 08:25 von Lucki.)
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Programmstop
Theoretisch es bei Codeteilen, die nicht durch Datenfluß voneiander abhängig sind, nicht vorhersehbar, in welcher Reihenfolge die Abarbeituung erfolgt. Praktisch ist es aber zu 99.999999%, wenn nicht sogar zu 100%, so, daß erst einfache Elemente gelesen oder beschrieben werden, bevor das Programm in irgendwelche Strukturen oder SubVIs eintritt. Aus diesem Grunde wird, wenn man nichts dagegen unternimmt, unerwünschterweise praktisch immer zuerst der Stop-Knopf gelesen, bevor das Programm in der Schleife etwas anderes macht. Beim Betätigen desselben ist der längst gelesen; die Wertänderung wird erst beim nächsten Schleifendurchhlauf zur Kenntnis genommen.
Um das zu vermeiden, man muß also dafür sorgen, dass der Stop-Knopf erst gelesen wird, wenn alles andere in der Schleife abgearbeitet ist.
Freddys Programm leistet das nicht. Es funktioniert lediglich so, daß (- unter Zuhilfenahme etlicher lokalen Variablen und etlicher zusätzlicher Cases -) der zusätzliche Schleifendurchlauf nach Stop keinen Schaden mehr anrichtet, weil praktisch kein echter Code mehr ausgefüht wird. Kann man so machen, aber es ist nicht die Antwort auf die sinnvolle Frage, wie man die zusätzllche Iteration verhindert.
So verhindert man die zusätzliche Iteration in Freddys Beispiel echt:
(Der Stop-Knopf sollte wieder auf Latch gestellt werden, da keine lokalen Variablen benutzt werden).
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2018, 10:14 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2018 10:20 von MartinNewBee.)
Beitrag #8

MartinNewBee Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: Jan 2018

2016
2016
EN



RE: Programmstop
Danke euch. Ich habe das jetzt so wie in meinem Bild gelöst, weil ich mich zwischen weiteren Durchlauf und Programm beenden entscheiden wollte.
Wenn ihr dazu noch Anregungen habt, bin ich offen für jede Kritik.

Besten Dank!
Ah was mir jetzt heute auffällt ist, dass ich zwar mein Programm wie gewünscht durchlaufen und beenden kann, wenn es aber jetzt bei der Ausführung einer Schleife ist und ich dann währenddessen "beenden" klicke, bricht es nicht einfach ab sondern führt die schleife zu Ende, was ja auch logisch ist. Jetzt zu meiner frage, wie programmiere ich einen quasi "Notaus" (ich weiß so was sollte nicht programmiert sondern gebaut werden).

Danke schon mal und beste Grüße

Martin


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2018, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2018 10:37 von GerdW.)
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Programmstop
Hallo Martin,

Zitat:wie programmiere ich einen quasi "Notaus" (ich weiß so was sollte nicht programmiert sondern gebaut werden).
Wenn du deine Schleifen vorzeitig beenden willst, musst kannst du Freddys Vorschlag mit den lokalen Variablen umsetzen.
(Es gibt schönere Lösungen, aber das ist die schnellste.)

Zitat:Ich habe das jetzt so wie in meinem Bild gelöst
Das sieht maximal kompliziert aus - ohne erkennbaren Mehrwert!
Wozu die Event-Struktur? Die verhindert im Standardfall, dass dein UI bedienbar bleibt, nachdem du den "Programm beenden"-Button gedrückt hast…
Wozu die Case-Struktur im Eventcase? "IF true THEN true"???

Einfach den "Programm beenden"-Button im letzten Frame abfragen - und fertig…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2018, 14:11 (Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2018 08:56 von Lucki.)
Beitrag #10

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Programmstop
Wie programiere ich ein schnelles Aus?
Ich kann dazu jetzt kein Beispiel machen, nur so viel:
Die Wait-Funktion (von mehreren Sekunden) sollte man vermeiden, und statt dessen die Funktion "verstrichene Zeit" abfragen, was aber eine etwas anderes Programmstruktur erfordert, mit einem einfachen Austausch ist es nicht getan. Nur in der Hauptschleife hat man dann noch ein kurzes Wait, z.B mit 50ms. Der Stop-Knopf wird dann alle 50 ms abgefragt.
Ich habe vor ca. 100 Jahren hier mal das Beispiel "Ampel" gepostet. Es ist ein Prüfungsbeispiel von NI, und NI will, dass das Programm gegebenenfalls sofort beendet wird, und nicht erst nach Beenden eines vollständigen Ampelzyklus. Vielleicht ist das noch aufzufinden.

Und: Ich habe gesehen, dass von NI in irgendwelchen Beispielen durchaus die Not-Aus Funktion verwendet wird.
Wenn Du sowieso keinen besonderen Code für den Exit-Fall abzuarbeiten hast, dann passiert eigentlich nichts Schlimmes. Hier im Forum wurde aber von einem Experten das Not-Aus mit der Beendigung einer Autofahrt durch Fahren gegen einen Baum gleichgesetzt. Das ist zwar Quatsch, aber auf jeden Fall wäre es für Dich aus Sicherheitsgründen besser, die eventuelle Verwendung dieser Funktion hier im Forum nicht an die große Glocke zu hängen. Blink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: