Trotz Wait auf Events reagieren? - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Trotz Wait auf Events reagieren? (/Thread-Trotz-Wait-auf-Events-reagieren) Seiten: 1 2 |
Trotz Wait auf Events reagieren? - Martin_München - 06.06.2007 08:00 Liebe Community, 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? Viele Grüße Martin Trotz Wait auf Events reagieren? - Mr.T - 06.06.2007 10:11 Hallo! ' 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. 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ß! Trotz Wait auf Events reagieren? - eg - 06.06.2007 10:26 ' 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. 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 Trotz Wait auf Events reagieren? - Lucki - 06.06.2007 12:55 ' schrieb:Liebe Community,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 Trotz Wait auf Events reagieren? - Martin_München - 06.06.2007 13:28 ' schrieb:Das stimmt. Einfach den Datentyp zu Double ändern. 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 Vielen Dank für eure Hilfe! Klasse Forum hier, hier wird einem geholfen Grüße Trotz Wait auf Events reagieren? - Martin_München - 13.06.2007 17:24 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 Trotz Wait auf Events reagieren? - Lucki - 14.06.2007 07:54 ' schrieb:sorry, wenn ich hier alte kamellen aufwärmen muss, nur ist mir was komisches aufgefallen...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 Trotz Wait auf Events reagieren? - Martin_München - 14.06.2007 08:35 ' 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???? 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... Viele grüße Martin Trotz Wait auf Events reagieren? - Martin_München - 14.06.2007 10:07 weiß denn keiner rat? :/ argh, dieses LabVIEW macht einfach nicht, was ich will!! Trotz Wait auf Events reagieren? - Lucki - 14.06.2007 10:09 ' schrieb:vielen Dank für deine antwort lucki! leider bin ich immer noch nicht schlauerHier 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. |