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 eine zeitgesteuerte Profilsteuerung aufbauen. Dabei wird eine csv Datei eingelesen, in der 1. Spalte steht immer die Zeit, wie lange die Werte in den restlichen Spalten gehalten werden sollen.
Ich realisiere das mit einer Verzögerung der while Schleife. Beispielsweise wenn die Werte der restlichen Spalten 2...i 10 Sekunden gehalten werden soll, ist die Verzögerung 10000ms.
Mein Problem ist, während diesen 10000ms kann ich die Schleife nicht abbrechen, was aber unbedingt funktionieren soll. Ich kenne auch keine andere Möglichkeit der Zeitmessung, habt ihr eine Idee? Die Stop anweisung
kann ich nicht verwenden, da die Profilsteuerung ein SubVI ist und das HauptVi trotzdem weiterlaufen soll.
Anhang: Das Vi in LabView 8.6
Vielen Dank für euere Hilfe,
viele Grüße
Maurice
PS: Die Datei profst.csv muss nach C:profst.csv damit die Pfade stimmen.
EDIT: csv Dateien darf ich nicht hochladen, also hab ich sie in txt geändert. Bitte umbenennen.
Anzeige
06.01.2011, 17:14 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2011 17:17 von Mike###.)
Nachtrag: Mitterlweile bin ich sogar am Zweifeln ob eine zeigesteuerte Profilsteuerung wie ich sie vor habe überhaupt ohne das Verzögerungs-Symbol auskommt, sprich ein Abbruch ist immer erst zur nächsten Zeitsteuerung möglich. Wenn ich zum Bsp folgende Zeiten fahren will:
10 sek lang die Werte halten dann
12 sek lang die Werte halten dann
2 sek die Werte halten.
Das heißt man müsste beim Abbruch nach 4 sek bspw. 6 Sekunden warten.
10 s sind 100 mal 100 ms. Wenn Du das "Wait" in eine Reihe von "Wait until next multiple ms" zerlegts, dann kannst Du die Schleife alle 100 ms abbrechen, was eine verschmerzliche Wartezeit ist.
Vielleicht geht es auch mit einer Ereignisstruktur, bei der das Timeout entsprechend der gewünschten Wartezeit gesetzt wird. Zusätzlicht kann die Eventstruktur Ereignisse eines Stopbuttons auswerten.
Man könnte auch die Systemzeit pollen und prüfen, ob die gewüschte Wartezeit vorbei ist.
' schrieb:10 s sind 100 mal 100 ms. Wenn Du das "Wait" in eine Reihe von "Wait until next multiple ms" zerlegts, dann kannst Du die Schleife alle 100 ms abbrechen, was eine verschmerzliche Wartezeit ist.
Vielleicht geht es auch mit einer Ereignisstruktur, bei der das Timeout entsprechend der gewünschten Wartezeit gesetzt wird. Zusätzlicht kann die Eventstruktur Ereignisse eines Stopbuttons auswerten.
Man könnte auch die Systemzeit pollen und prüfen, ob die gewüschte Wartezeit vorbei ist.
Ich Danke Dir für deinen Hilfreichen Beitrag!
Viele Grüße
Maurice
Anzeige
07.01.2011, 00:35 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2011 00:36 von Lucki.)
Es braucht noch eine klitzekleines angebundenes TRUE im dem Timeout-Fall der Ereignisstruktur in Luckis Beispiel, damit die Schleife auch nach der gewünschten Zeit zu Ende ist. Damit ist dann das Beispielprogramm auch insgesamt zu Ende. D. h. man braucht noch eine Schleife drum herum im Hauptprogramm, die dann aber keine weitere Ereignisstruktur haben dürfte. Folglich packt man das abbrechbare Warten in ein SubVI, damit es alles LabVIEW regelkonform ist.
' schrieb:Es braucht noch eine klitzekleines angebundenes TRUE im dem Timeout-Fall der Ereignisstruktur in Luckis Beispiel, damit die Schleife auch nach der gewünschten Zeit zu Ende ist.
Das verstehe ich nicht: Im TimeOut-Fall soll die Schleife doch nicht abbrechen, sondern weitermachen. Nur wenn die Taste "Abbrechen" gedrückt wird, soll ohne weitere Wartezeit sofort gestoppt werden.
Allerdings sollte sich das VI auch ihne Stopp-Befehl von selbst beenden: Wenn nämlich alle Aufgaben erfüllt sind. In Vorbereitung dazu hat Maurice schon einen Vergleicher "=" installiert:
- der allerdings noch nicht angeschlossen ist. Da das nicht das Thema der Anfrage war, habe ich das so stehen gelassen. (- und wenn nicht, würde ich hier nicht vergleichen, sondern eine For-Schleife mit Bedingungsanschluß verwenden)
Ich dachte Maurice wollte in erster Linie eine gewisse Zeit (10 s) warten und ggf. die Wartezeit durch Drücken eines Knopfes vorzeitig beenden. Das Timeout der Ereignisstruktur hätte ich nun zum Warten genutzt. Optional kann die Ereignisstruktur (im Gegensatz zum einfachen Wait) auf andere Ereignisse wie den Abbrechenknopf reagieren. Danach wäre das Programm, so weit ich es interpretiert hatte, in einem anderen Zustand. Es würde nicht mehr Warten und nicht mehr auf Knöpfe reagieren, sondern steuern, messen oder rechnen.
Vielleicht liegt es auch daran, dass ich mit dem Begriff Profilsteuerung nur bedingt etwas anfangen kann.
Wenn Maurice eine Abbruchbedingung außer der Zeit hat, braucht er eigentlich nicht zu warten (außer einem obligatorischen Wait in einer Schleife, damit der Prozessor sich nicht "tot" macht), sondern kann gleich entweder die Bedingung oder den Abbruchknopf auswerten. Das kann man auch mit der Ereignisstruktur machen. Das Timeout würde ich dann auf etwa 1/10 der typischen Dauer einstellen, bis die Abbruchbedingung erreicht, so dass die Abbruchbedingung hinreichend oft geprüft wird.