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 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.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: Timer in Sequenz unterbrechen
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
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
21.12.2012, 09:44 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2012 10:00 von Lucki.)
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?
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
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!
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?
(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.
(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. . 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.