LabVIEWForum.de - Programmabbruch in Ereignisstruktur

LabVIEWForum.de

Normale Version: Programmabbruch in Ereignisstruktur
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe folgendes Problem: Ich möchte (m)ein Programm in jeder Situation abbrechen können ("Not-Aus") und habe mir daher gedacht, dass sich hier die (mir noch nicht ganz erschlossene) Ereignisstruktur anbieten müsste. Jedoch ist mir das noch nicht gelungen. Was muss ich beachten, damit eine Sequenz oder Schleife tatsächlich von überall aus abgebrochen werden kann?

Leider ergibt mein Handbuch, etc. auch keine weiteren Aufschlüsse darüber. Meines Erachtens nach werden die Ereignisse nur dürftig erklärt.

Vielen Dank und schöne Grüße,
Stefan
SGeisler schrieb:Was muss ich beachten, damit eine Sequenz oder Schleife tatsächlich von überall aus abgebrochen werden kann?

Wenn du das ganze programm abbrechne möchtest (oder subvi) verwendest ganz
einfach das STOP vi unter den Application Controls, willst du eine sequenz, schleife
vorgang sofort abbrechen muss du den programmfluß so programmieren dass das eben
möglich ist und das ist spezifisch sprich wie werden
schleifen sequenze cases verschachtelt machmal is es ein wenig tricky aber prinzipiell möglich
sowas wie GOTO (was sowieso pervers ist) gibts ned.
post evtl mal ein vi wo du das problem hast.

greez
Vielen Dank.

stop.vi kommt dem schon sehr nahe. Wie schaffe ich das denn, dass ich von überall darauf zugreifen kann. Ich möchte, dass das Programm sofort abbricht, und nicht erst nach einem Schleifenablauf, oder am Ende einer Sequenz.
Ermöglicht mir die Ereignisstruktur nicht ein Handeln bei gleichzeitiger Ausführung eines (Sub-)VIs? Heißt: Kann ich nicht, während irgendwo eine Schleife läuft einen Stop-Knopf drücken, der das Programm sofort abbricht? Ich habe das Gefühl, dass immer erst ein Programmteil komplett verarbeitet wird, bevor es wieder zu dem -ich sage mal- Ereignis-Status zurückkehrt und weitere Eingaben gemacht werden können.

Besten Dank nochmals und schonmal,
Stefan

P.S.: Antwort aus der Zukunft (17:02)? Wir haben doch erst halb fünf. ;-)
es geht, indem du das ausfuehrende VI ueber den VI server terminierst!
sprich, entweder arbeitest du alle ereignisse in einem sub-vi ab und terminierst das sub-vi oder du laesst eine eigene while schleife oder auch 2. ereignisstruktur laufen, die sich dann selbst terminiert :-)
SGeisler schrieb:Vielen Dank.
Wie schaffe ich das denn, dass ich von überall darauf zugreifen kann. Ich möchte, dass das Programm sofort abbricht, und nicht erst nach einem Schleifenablauf, oder am Ende einer Sequenz.

Ich frag jetzt mal ganz praktikabel.

1.Wenn du das komplette Programm einfach stopen
möchtest was spricht gegen den ABORT Knopf ?

2.Wenn du eine art Not Aus benötigst geh ich mal
davon aus das auch etwas gesteuert wird sonst fehlt mir
der sinn eines Not Aus schalters.

3. Wenn etwas gesteuert wird hat das erfahrungs gemäs einen
Sequenzellen ablauf und das bedeutet das der NOT AUS
ein wesentlicher Teil des ablaufes ist.


[quote=SGeisler]Ermöglicht mir die Ereignisstruktur nicht ein Handeln bei gleichzeitiger
Hallo,

im aktuellen Projekt erfasse ich mit einer Ereignisstruktur in der Producer Loop (PL) Bedieneingaben, die dann in der Consumer Loop (CL) abgearbeitet werden. Vor der CL wird unter anderem eine DC-Prüfversorgung initialisiert. Bei Spannungen von bis zu 600V und Strömen von bis zu 400A muss ich dafür sorgen, dass bei Auslösen des Bedienelements Notaus die CL sofort stoppt (auch bei einer - im beigefügten Notaus.vi - aktuell laufenden Start-Sequnz beendet wird) und im Anschluss an die CL die vorher initialisierten Periferie-Geräte in einen sicheren Zustand gefahren werden. Daher kann ich das LabVIEW eigene STOP.vi nicht mittels Notaus ansteuern.
Das beigefügte Notaus.vi habe ich in LabVIEW 8.5 erstellt; bitte stellt Eure eventuellen Lösungsvorschläge auch in LabVIEW 8.5 zur Verfügung. da ich aktuell mit LabVIEW 8.5 arbeite.
Danke für Eure Hilfe.
Schöne Grüße,

BeFu
Ein Brutalo-Stop sollte immer das allerletzte Mittel sein. Was einen sofortigen Stop gewöhnlich verhindert, sind eingebaute Waits an irgendwelchen Stellen des Programms, die nicht unterbrechbar sind.
Timeouts hingegen sind unterbrechbar. Man muß also nur die Wait-Funktionen durch Timeouts ersetzen. Also z.B. man mißbraucht den Timeout-Case einer Ereignisstruktur als Wait-Funktion - und schon ist der sofortige Stop machbar. (andere Möglicheit z.B: Warten auf Occurrence bis zum Timeout)
Habe mal das Programm Notaus vereinacht und entsprechend gändert.
[attachment=32906]
Lv10[attachment=32907]
(23.03.2011 17:32 )Lucki schrieb: [ -> ]Ein Brutalo-Stop sollte immer das allerletzte Mittel sein. Was einen sofortigen Stop gewöhnlich verhindert, sind eingebaute Waits an irgendwelchen Stellen des Programms, die nicht unterbrechbar sind.
Timeouts hingegen sind unterbrechbar. Man muß also nur die Wait-Funktionen durch Timeouts ersetzen. Also z.B. man mißbraucht den Timeout-Case einer Ereignisstruktur als Wait-Funktion - und schon ist der sofortige Stop machbar. (andere Möglicheit z.B: Warten auf Occurrence bis zum Timeout)
Habe mal das Programm Notaus vereinacht und entsprechend gändert.

Lv10

Danke vielmals Lucki
für Deine Erklärung und Lösung meines Problems. Speziell. dass Du 'nen Screenshot Deiner Lösung beigefügt hat.
Du hast Recht, mein Denkfehler lag in der Wait-Funktion. So lange diese aktiv ist, steht die CPU anderen Threads zur Verfügung.
Schöne Grüße,

BeFu
Referenz-URLs