LabVIEWForum.de
Timer in Sequenz unterbrechen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Timer in Sequenz unterbrechen (/Thread-Timer-in-Sequenz-unterbrechen)

Seiten: 1 2


Timer in Sequenz unterbrechen - Labor - 21.12.2012 08:48

Hallo,

ich möchte in einer Sequenz einen Timer unterbrechen. Den Timer brauche ich, um zu warten, bis das gewünschte Signal erzeugt wird.

Beim Druck auf Stop/Abbrechen, soll das Programm den Timer auf null setzen und das Prgramm abbrechen. Ich hab mir da was zusammengebastelt. Leider funktioniert es nicht, wie gewünscht.

Hat jemand eine Idee/einen guten Hinweis?


RE: Timer in Sequenz unterbrechen - Y-P - 21.12.2012 09:29

Das geht so nicht, weil das Wait auf jeden Fall so lange ausgeführt wird, wie Du es vorne angeschlossen hast.
Bau Dir eine Schleife mit kurzen Wartezeiten und wiederhole die entsprechend, bei 60 s z.B. 600 mal eine Wartezeit von 100 ms. Wenn Du dann auf den Stop-Button klickst, bricht die Schleife spätestens nach den 100 ms ab.

Gruß Markus


RE: Timer in Sequenz unterbrechen - Lucki - 21.12.2012 09:44

Mir fallen da außer dem Vorschlag von Markus noch mindesten 3 andere Möglichkeiten in. Z.B das hier statt Wait verwenden:
[attachment=42786]
oder das:
[attachment=42787]


RE: Timer in Sequenz unterbrechen - Labor - 21.12.2012 10:50

Hallo,

vielen Dank für die Antworten.

Y-Ps Vorschlag funktioniert leider nicht. Ich habe in die Sequenz eine For-Schleife gelegt und darein den Timer mit 10ms, Wiederholung N=6000. Stop ist mit der Stop-Taste der While-Shleife verbunden. Leider bewirkt das gar nichts. Es dauert trotzdem gut eine Minute, bis das Programm anhält. Bild ist angehängt. Warum geht das nicht?

Lucki, dein zweiter Vorschlag bricht das Programm ab, wenn die Zeit rum ist. Ich meinte eher, dass nach Ablauf der Zeit, der nächste Rahmen der Sequenz beginnt. Bei deinem ersten Vorschlag sind so viele unbekannte Elemente drin, dass ich das nicht nachbauen könnte bisher. Welches Strukturelement hast du da benutzt?


RE: Timer in Sequenz unterbrechen - jg - 21.12.2012 10:54

Was ist in den beiden anderen Sequenzschritten?
Irgendwas mit TCP/IP-Open - mit Time-out 60s vielleicht?
Schon mal Fehlersuche im Highlight-Modus betrieben?

Gruß, Jens


RE: Timer in Sequenz unterbrechen - Labor - 21.12.2012 11:08

Die Sequenz davor erzeugt mir einen Zeitstempel, aus dem ich den Sende-String generiere, der an das Gerät im Ethernet geschickt werden soll.

Die Sequenz danach öffnet eine TCP-Verbindung, schickt den String, empfängt die Antwort und schließt die TCP-Verbindung.

Ich will immer nur den letzten Messwert haben, darum warte ich zwischen Erzeugung des Zeitstempels bis zum Abschicken 1 Minute - um sicher zu gehen, dass für diesen Stempel auch wirklich ein Messwert vorhanden ist. Die Messwerte werde ich dann weiterverarbeiten, aber soweit bin ich noch nicht.

Jedenfalls haben die anderen Sequenzen nichts mit 60s zu tun.

Fehlersuche mit Highlight ergab folgendes:
Der Abschnitt mit dem Timer wird anstatt nach 60s, nach den nächsten 10ms unterbrochen und am Abbruch-Terminal in der while-Schleife liegt ein True an, dann läuft der Rahmen danach. Dann beginnt alles von vorn Rahmen 0, Rahmen 1 mit Timer 10ms, Rahmen 2. Dann ist die Sequenz beendet und in der while-Schleife wird das True am Abbruch-Terminal wirksam.

Ich muss also irgendwie einbauen, dass die Sequenz verlassen wird und nicht einfach der nächste Rahmen beginnen. DAs ist komplizierter als ich dachte. Warum beginnt die Sequenz eigentlich nochmal? Liegt es daran, dass die while-Schleife ihre Parameter am Ende prüft und das False irgendwie zu spät übernommen wurde?


RE: Timer in Sequenz unterbrechen - Morpheus - 21.12.2012 11:42

(21.12.2012 11:08 )Labor schrieb:  Warum beginnt die Sequenz eigentlich nochmal? Liegt es daran, dass die while-Schleife ihre Parameter am Ende prüft und das False irgendwie zu spät übernommen wurde?

LabVIEW funktioniert nach dem Datenfluss-Prinzip.
Die Information des Stop-Buttons ist bei der Ausführung für die While-Schleife bereits vorhanden (false) und wird so "gespeichert".
Den Wert des Stop-Buttons änderst Du zwar innerhalb der Sequenz, dies hat dann aber keinen Einfluss mehr auf die akutelle Ausführung der While-Schleife, sondern erst auf die nächste Ausführung.
Deshalb der von dir beschriebene Effekt.

Abhlife: Führ die Abbruchbedingung der For-Schleife (aus der Sequenz) auf den "Stop if True" der While-Schleife

Ich persönlich würde die Sequenz ersetzen und eine State-Machine programmieren.

Gruss
Chris


RE: Timer in Sequenz unterbrechen - Labor - 21.12.2012 11:46

(21.12.2012 11:42 )Morpheus schrieb:  Abhlife: Führ die Abbruchbedingung der For-Schleife (aus der Sequenz) auf den "Stop if True" der While-Schleife

Das habe ich schon gemacht. Es führt zum beschriebenen Verhalten.

Wie eine State-Machine das besser macht seh ich gerade nicht, aber ich werd's mir angucken. Danke schonmal.


RE: Timer in Sequenz unterbrechen - jg - 21.12.2012 11:50

Naja, bei einer State-Machine kannst du bei "Abbruch" gleich zum "Ende"-State springen. In der Sequenz wird alles so wie es ist abgearbeitet.

Gruß, Jens


RE: Timer in Sequenz unterbrechen - Lucki - 21.12.2012 13:31

(21.12.2012 10:50 )Labor schrieb:  Lucki, dein zweiter Vorschlag bricht das Programm ab, wenn die Zeit rum ist. Ich meinte eher, dass nach Ablauf der Zeit, der nächste Rahmen der Sequenz beginnt.
Dann bist Du offenbar ein Buchstaben-Gläubiger, der davon ausgeht, dass, wenn auf einem Knopf "Stop" draufsteht, das ganze Programm abgebrochen wird. Entschuldige, dass ich nicht daran gedacht hatte, das Dich diese Beschriftung völlig durcheinander bringen könnte. Big Grin. Als persönliche Buße habe ich die beiden Knöpfe umbenannt und die Beispiele in eine Sequenz hineingesetzt, so, wie Du es anwenden willst.