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!
nachdem ihr mir schon so super geholfen habt, möchte ich euch wieder mit meinem problemchen nerven
Ich habe so eine Art Zeitablauf eines Programms. Dort stehen die Wartezeiten in Sekunden drin. Nun habe ich mir überlegt, dass die genaueste Art diese Zeit einzuhalten über das Wait geht. Nun möchte der Benutzer allerdings vielleicht während des Wartens den Zeitablauf stoppen und drückt auf die Stop-Taste.
Dieses Stop Event, nimmt er leider erst nach dem Warten an. Wie kann ich das so realisieren, dass er auf das Stop reagiert?
Weitere kleine Frage:
Wenn ich jetzt einen Zeitbalken von 0-5 habe und ich möchte in 0,1er Schritten inkrementieren, warum geht das nicht? Kennt der nur ganzzahlige Schritte?
' schrieb:Wenn ich jetzt einen Zeitbalken von 0-5 habe und ich möchte in 0,1er Schritten inkrementieren, warum geht das nicht? Kennt der nur ganzzahlige Schritte?
Was hast Du denn als Zeitbalken verwendet? Der Datentyp der Verlaufsanzeige z.B. ist U8..da gehen keine Kommastellen. Anders bei Tank, Thermometer und Schiebereglern (die kann man ja auch in ein Anzeigeelement umwandeln. Da gehen DBL und somit auch Deine Nachkommastellen.
' schrieb:Ich habe so eine Art Zeitablauf eines Programms. Dort stehen die Wartezeiten in Sekunden drin. Nun habe ich mir überlegt, dass die genaueste Art diese Zeit einzuhalten über das Wait geht. Nun möchte der Benutzer allerdings vielleicht während des Wartens den Zeitablauf stoppen und drückt auf die Stop-Taste.
Dieses Stop Event, nimmt er leider erst nach dem Warten an. Wie kann ich das so realisieren, dass er auf das Stop reagiert?
Da gäbe es spontan die Möglichkeit, den aktuellen Zeitwert auszulesen, anstelle der Wait Funktion, mit einem vorangegangenen vergleichen - wenn Differenzsoll erreicht, dann weiter im Programm - wenn nicht, ist somit das Event frei zum Stopptastendruck.
Wenn Du bei Wait bleiben möchtest, könntest Du via notifyer in eine parallelen Schleife die Zeit starten - bei Rückmeldung der Zeit weiter im Programm - da das quasiparallel stattfindet, ist Dein Main VI nicht in "Wartezeitstelleung" sondern die Eventstruktur oder whatever kann den Stoppbutton abfragen.
Da gibts aber bestimmt sogar noch was elegenateres...
Gruß!
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
' schrieb:Was hast Du denn als Zeitbalken verwendet? Der Datentyp der Verlaufsanzeige z.B. ist U8..da gehen keine Kommastellen. Anders bei Tank, Thermometer und Schiebereglern (die kann man ja auch in ein Anzeigeelement umwandeln. Da gehen DBL und somit auch Deine Nachkommastellen.
Das stimmt. Einfach den Datentyp zu Double ändern.
' schrieb:Da gäbe es spontan die Möglichkeit, den aktuellen Zeitwert auszulesen, anstelle der Wait Funktion, mit einem vorangegangenen vergleichen - wenn Differenzsoll erreicht, dann weiter im Programm - wenn nicht, ist somit das Event frei zum Stopptastendruck.
Wenn Du bei Wait bleiben möchtest, könntest Du via notifyer in eine parallelen Schleife die Zeit starten - bei Rückmeldung der Zeit weiter im Programm - da das quasiparallel stattfindet, ist Dein Main VI nicht in "Wartezeitstelleung" sondern die Eventstruktur oder whatever kann den Stoppbutton abfragen.
Hier würde ich eine While-Schleife vorschlagen die z.B. statt 10 Sekunden 10 Schritte mit je 1 Sekunde macht und jede Sekunde unterbrochen werden kann. Ist mein Vorschlag nachvolziehbar?
nachdem ihr mir schon so super geholfen habt, möchte ich euch wieder mit meinem problemchen nerven
Ich habe so eine Art Zeitablauf eines Programms. Dort stehen die Wartezeiten in Sekunden drin. Nun habe ich mir überlegt, dass die genaueste Art diese Zeit einzuhalten über das Wait geht. Nun möchte der Benutzer allerdings vielleicht während des Wartens den Zeitablauf stoppen und drückt auf die Stop-Taste.
Dieses Stop Event, nimmt er leider erst nach dem Warten an. Wie kann ich das so realisieren, dass er auf das Stop reagiert?
Weitere kleine Frage:
Wenn ich jetzt einen Zeitbalken von 0-5 habe und ich möchte in 0,1er Schritten inkrementieren, warum geht das nicht? Kennt der nur ganzzahlige Schritte?
Das ist doch ganz einfach. Du mußt statt eines 5sec Waits eine While-Schleife (innerhalb der Haupt-While-Schleife) mit 100 Duchläufen erstellen, in der ein 50ms Wait steht. Die while-Schleife kannst Du vorzeitig stoppen. Bei Stop muß Du zwar immer noch warten, aber eben nur max. 50ms statt maximal 5s. Die while-Schleife kann gleichzeitig dazu dienen, während der Wartezeit einen Zeitbalken in 1% Schritten zu aktualisieren.
Tipp: Für genaue Zeitmessung den Metronom anstelle der Uhr verwenden.
Edit: Entschuldige, Eugen, Du hast das ja schon vor mir gesagt
' schrieb:Das stimmt. Einfach den Datentyp zu Double ändern.
Hier würde ich eine While-Schleife vorschlagen die z.B. statt 10 Sekunden 10 Schritte mit je 1 Sekunde macht und jede Sekunde unterbrochen werden kann. Ist mein Vorschlag nachvolziehbar?
eg
Liebe Community!
Ich habe es genauso gemacht. Ich habe die GesamtwarteZeit in einzelne "Häppchen" aufgeteilt und dann kann ich noch auf events bzw. dem Wert eine Stop Buttons reagieren...Ich habe einfach noch eine Case-Schleife um meine Warte-Zeit gemacht und es hat geklappt.
Das mit dem Wert auf Double stellen: Argh, man merkt, dass ich erst seit ein paar Wochen LabVIEW programmiere
sorry, wenn ich hier alte kamellen aufwärmen muss, nur ist mir was komisches aufgefallen...
und zwar klappt das mit dem Stop-Button prima. Das Ablauf des Wartens wird unterbrochen. Doch sobald ich mit dem Mauszeiger ausserhalb des Programms gehe, oder mit dem Mauszeiger auf ein anderes Objekt klicke (zum Beispiel die Scrollbar meiner Liste) reagiert der Stop-Button und überhaupt das ganze Programm auf gar nix mehr...es läuft seelenruhig das Wait entlang...
erst nachdem das Warten fertig ist, wird der Klick angenommen. Wie kann das sein? Bekommt das Wait eine Präferenz gegenüber allem anderen? Verstehe das nicht...
Weitere Infos zu meinem VI:
- Das Wait wird über einen User-Event aufgerufen
- Das VI mit der Wait-Funktion soll ebenfalls auf Events von anderen VI's reagieren.
Was mir aufgefallen ist, dass wenn ich "manuell" bei den globalen Variablen die Stop-Variable betätige der Ablauf des Waits unterbrochen wird, obwohl ich es mit der Maus nicht mehr stoppen kann.
Ist meine While Schleife falsch? muss ich irgendwas am timeout-Event verändern?
Vielen Dank für eure Hilfe!
Anbei ein Bild meines Wait-Konstrukts...
Viele Grüße
Martin
14.06.2007, 07:54 (Dieser Beitrag wurde zuletzt bearbeitet: 14.06.2007 07:56 von Lucki.)
' schrieb:sorry, wenn ich hier alte kamellen aufwärmen muss, nur ist mir was komisches aufgefallen...
Martin
Da Bild ist hier wenig hilfreich, da ist nichts Besonderes erkennbar. Man kann nur raten. Warum ist denn die Wait-Schleife in einem Case untergebracht? Klar ist z.B, wenn die Wait-Schleife läuft, daß die anderen Cases nicht gleichzeitig aktiv sein können. Ist etwas die Ereignisbehandlung in einem solchen Case????
Schaltverhalten Stop-Button: "Beim Drücken Schalten", Stop-Ereignis = "Wertänderung" (statt irgendwelche Mäusebewegungen). Bei Initalisierung des Programms den Stopp-Button mit lokaler Variablen auf false setzten nicht vergessen, denn das macht er bei Beenden das Programms nicht von alleine.
Keiner Tip: Wenn ich wissen will, ob ein Ereignis stattfindet oder nicht, dann füge ich mal schnell die Funktion Audio und Graphik/Signalton in den betreffenden Rahmen ein
' schrieb:Da Bild ist hier wenig hilfreich, da ist nichts Besonderes erkennbar. Man kann nur raten. Warum ist denn die Wait-Schleife in einem Case untergebracht? Klar ist z.B, wenn die Wait-Schleife läuft, daß die anderen Cases nicht gleichzeitig aktiv sein können. Ist etwas die Ereignisbehandlung in einem solchen Case????
Schaltverhalten Stop-Button: "Beim Drücken Schalten", Stop-Ereignis = "Wertänderung" (statt irgendwelche Mäusebewegungen). Bei Initalisierung des Programms den Stopp-Button mit lokaler Variablen auf false setzten nicht vergessen, denn das macht er bei Beenden das Programms nicht von alleine.
Keiner Tip: Wenn ich wissen will, ob ein Ereignis stattfindet oder nicht, dann füge ich mal schnell die Funktion Audio und Graphik/Signalton in den betreffenden Rahmen ein
vielen Dank für deine antwort lucki! leider bin ich immer noch nicht schlauer
also es verhält sich folgendermaßen. Mein programm geht eine Liste von oben nach unten durch und verarbeitet die Befehle sequentiell...wenn jetzt ein wait gefunden wird, dann wird ein user-event generiert, was dann in einer case abfrage endet...richtig ist, dass der stop-button ebenfalls ein user-event generiert. Dieses event sollter allerdings nichts mit der while schleife zu tun haben, sondern die while schleife nur unterbrechen, oder? wie gesagt, das ganze prorgramm reagiert überhaupt nicht mehr...erst nachdem die wait bedingung abgebrochen ist...
der code sieht leider nicht mehr so ordentlich aus, da ich viel rumprobiert habe...
ich hoffe das bild kann dir / und / oder den anderen helfen...
' schrieb:vielen Dank für deine antwort lucki! leider bin ich immer noch nicht schlauer
Hier sieht man schon etwas mehr. Es scheint so, daß sich das ganze Programm inklusive der Wait-Schleife in in einem Ereignisrahmen befindet. Die Ereignisssruktur selbst ist hingegen ganz außen und befindet sich in gar keiner While-Schleife. Das funktioniert so nicht, denn solange der hier sichtbare Erebniscase abgearbeitet wird, kann kein anderes Ereignis abgearbeitet werden, und wenn das beendet ist, wird auch kein neues Ereignis abgearbeitet, weil mangels While-Schleife die Ereignsistruktur gar nicht wiederholt aufgerufen wird, sondern dann das Programm beendet wird.
Ich überlasse jetzt mal anderen die Hilfe, ich habe jetzt keinen Lust mehr, mich mit diesen jeweils gezeigten (flächenmäßig zwar großen) Häppchen herumzuschlagen. Da der Gesamtüberblick fehlt, ist vielleicht auch alles falsch was ich sage.