Eventstruktur der Laufzeitteufel - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Eventstruktur der Laufzeitteufel (/Thread-Eventstruktur-der-Laufzeitteufel) Seiten: 1 2 |
Eventstruktur der Laufzeitteufel - DuffiDuck - 23.11.2011 10:48 Hallo community, ich hätte mal eine Frage aber zuerst zu meinem Projekt. Ich steuere eine Testanlage über Labview und TwinCat und protokolliere und Verarbeite die Messergebnisse in LabView bzw. Excel. Die Kommunikation mit TwinCat funkt und habe auch gleich eine zweite Testanlage mit hineingenommen. Die Verarbeitung der Testanlagenergebnisse (Messwerte) erfolgt in zwei verschiedenen Schleifen. In einer dritten Schleife ist eine Eventstruktur erstellt worden die die Tasten abfragt und anschließend einen CASE ausführt. Hier werden dann sub.vi aufgerufen für die Ausgabe von Informationen bzw. Interaktion mit der Anlage. Kleines Bildchen unten. Zu meinem Problem: Es funktioniert alles einwandfrei bis auf einen kleinen aber doch erheblichen Fehler. Nach ca. zwei Tage hängt sich die Eventstruktur bzw. deren Schleife irgendwie auf? Normal: Button drücken > sub.vi geht auf Manchmal: Button drücken > Button wird als gedrückt angezeigt > nichts geht mehr zu drücken (frontpanel kann nicht scrollen, keine Tasten mehr drücken, usw.) Aber die anderen Schleifen laufen weiter und protokollieren da ich immer mit TwinCat auf eine Rückmeldung warte. Sprich nur diese eine Schleife mit der Eventstruktur ist irgendwie tot. Habe auch schon mit der Glühbirne (Highlight irgendwas?) nachgesehen bzw. eine Variblen Überwachung gesetzt. Hier kam heraus dass die Schleife erst beim Aufruf des sub.vi stehen bleibt und somit die anderen Event Strukturen blockiert (wahrscheinlich?). Meine Lösungsansätze jetzt: - in die Schleife ein wait einfügen > ist besser geworden hat aber nicht funktioniert (bin ich vom c so gewöhnt wenns nicth funkt) - Oben im Frontpanel zwei mal auf Pause (||) drücken und dann macht es wieder weiter und ruft das sub.vi wieder auf (weiß nicht warum) Es merkt sich auch welche Tasten gedrückt wurden und öffnet diese nach der reihe. Vielen Dank für eure Mithilfe. mfg Duffi RE: Eventstruktur der Laufzeitteufel - GerdW - 23.11.2011 13:11 Hallo Duffi, - Vielleicht zuviele Knicke in den Drähten? - Vielleicht zuviele verdeckte Drähte? Bei beiden Fällen fließen die Daten langsamer... (Ironie!) - Zuviele lokale Variablen? Dadurch zuviele Datenkopien? Zu großer Speicherbedarf, insbesondere nach längerer Laufzeit? - Vielleicht hängt ja irgendwas anderes, sodass die Eventstruktur nicht zum Zug kommt und dadurch das FP sperrt? RE: Eventstruktur der Laufzeitteufel - jg - 23.11.2011 13:18 Unnötige lokale Variablen, das hatten wir schon in deinem ersten Thread: http://www.labviewforum.de/Thread-Optimierung-der-Rechenleistung-eines-SubVi Nur auf Grund deines Screenshots kann ich dir leider nicht weiterhelfen, zu wenig Infos. Schon mal Speicherverbrauch beobachtet? Gerne die Ursache, wenn ein Programm nicht mehr reagiert. Gruß, Jens RE: Eventstruktur der Laufzeitteufel - BNT - 23.11.2011 13:40 Hi Vielleicht wird Dein geöffnetes SubVI von dem HautVI (mit Event-Struktur) durch unbeabsichtigten "Doppelklick" wieder verdeckt und wartet auf User-Input. Gruß Holger RE: Eventstruktur der Laufzeitteufel - DuffiDuck - 23.11.2011 14:05 Hallo, danke für die vielen Antworten. Zitat:Hi Hab ich mir auch schon gedacht und dadurch alle sub.vi so eingrichtet das diese immer im Vordergrund sind Zitat:- Vielleicht hängt ja irgendwas anderes, sodass die Eventstruktur nicht zum Zug kommt und dadurch das FP sperrt? Wie gesagt oben habe die Glühbirnfunktion ausgeführt und die ist bis zum sub.vi gegangen (grüner Pfeil) Zitat:- Zuviele lokale Variablen? Dadurch zuviele Datenkopien? Zu großer Speicherbedarf, insbesondere nach längerer Laufzeit? Ja ist mir klar aber wie kann ich sonst die Daten von einer Schleife in die andere Bringen? Wenn ich das mit den ganzen Variablen mit Drähte zusammenführe hab ich da 50 in diese Schleife reingehen! Das is ja auch schiach?? Aber wenns sein muss... (zu Topic: Da waren die globalen Variablen ja nur in einem kleinen sub.vi das war dann noch übersichtlich mit Drähte) Zitat:Schon mal Speicherverbrauch beobachtet? Gerne die Ursache, wenn ein Programm nicht mehr reagiert. Ja wär mein nächster Schritt gewesen kann immer nur am wochenende auf die Testanlage. Aber könnt ihr mir sagen was der Pause Button für eine Funktion darstellt also was er genau macht? Lädt der irgendetwas neu? Weil wie oben gesagt funktioniert es dann wieder? Bringt das wait eigendlich was? Oder wird die Schleife so und so nur einmal ausgeführt (unlogisch) und wartet dann auf ein Event? Danke für die Hilfe. mfg duffi RE: Eventstruktur der Laufzeitteufel - GerdW - 23.11.2011 14:13 Hallo Duffi, Zitat:Oder wird die Schleife so und so nur einmal ausgeführt (unlogisch) und wartet dann auf ein Event?Um das zu beantworten, müsste man eigentlich die Schleife überhaupt erstmal sehen... Aber deine Eventstruktur hat nichts am TimeOut-Eingang angeschlossen, sodass man davon ausgehen kann, dass sie auf ein Event wartet (und das in jeder Iteration!). Könntest du auch noch erläutern, welche Gedankengänge sich hinter dem "unlogisch" verstecken? Ich halte es für logisch, wenn eine Schleife mit Eventstruktur auf Events wartet... RE: Eventstruktur der Laufzeitteufel - DuffiDuck - 23.11.2011 14:32 Hallo, im Grundegenommen funktioniert es so wie in der unteren Abbildung. TimeOut für was ist der Occurs when the Event structure times out. Wire a value to the Timeout terminal at the top left of the Event structure to specify the number of milliseconds the Event structure should wait for an event to occur before generating a Timeout event. The time stamp is a millisecond counter you can use to compute the time elapsed between two events or to determine the order of occurrence. Wann kommt es zu diesem Zustand? Zwischen 2 Tastendrücken? Oder eigendlich immer wenn nichts passiert sprich es tut sich 1000ms nichts dann wird der Timeout case durchgeführt? Zitat:Zitat:Oder wird die Schleife so und so nur einmal ausgeführt (unlogisch) und wartet dann auf ein Event? Weil sich das irgendwie Wiedersprich! Für was muss ich eine Eventstruktur in eine Schleife packen wenn diese sowieso nur auf Events reagiert? Ich muss dann ja nicht in einer Tour abfragen: Bist du schon da?, Bist du schon da?, Bist du schon da?, Bist du schon da? sondern er sagt ICH BIN DA, MICH AUSFÜHREN? (is ja wie ein Interrupt? Oder muss ich das zwecks LabViews Multitaskingversuch machen? (jaja windows und so) mfg fritz RE: Eventstruktur der Laufzeitteufel - GerdW - 23.11.2011 14:40 Hallo duffi, Zitat:Für was muss ich eine Eventstruktur in eine Schleife packen wenn diese sowieso nur auf Events reagiert?Die Eventstruktur gehört in eine Schleife, weil du öfter als nur ein einziges Mal auf ein Event reagieren willst. Willst du doch, oder? Zitat:Ich muss dann ja nicht in einer Tour abfragen: Bist du schon da?Machst du doch auch nicht. THINK DATAFLOW! Die Iteration der Schleife wird erst beendet, wenn alle enthaltenen Funktionen/Strukturen abgearbeitet sind. Die Eventstruktur ist eine dieser Strukturen - und die wartet nunmal auf ein Event... Zitat:TimeOut für was ist der Occurs when the Event structure times out.Genau wie beschrieben: wenn innerhalb der vorgegebenen Zeit kein anderes Event auftritt, dann wird der TimeOut-Case angesprungen... (Genauso funktionieren auch die TimeOuts bei VISA-,DAQmx-,Queue-,Notifier-Funktionen...) RE: Eventstruktur der Laufzeitteufel - Achim - 23.11.2011 15:34 (23.11.2011 10:48 )DuffiDuck schrieb: Normal: Button drücken > sub.vi geht auf Hast du ein VI direkt in einem Event-Case platziert? RE: Eventstruktur der Laufzeitteufel - DuffiDuck - 24.11.2011 07:22 hallo, erstmal nochmal danke für eure Hilfe. Zitat:Die Eventstruktur gehört in eine Schleife, weil du öfter als nur ein einziges Mal auf ein Event reagieren willst. Willst du doch, oder? Ich habe mir gedacht die Schleife läuft kontinuierlich! Habe jetzt mein Besipiel umgebaut und habe gesehen das auf ein Event gewartet wird und anschließend der neue Schleifendurchlauf beginnt. Zitat:Genau wie beschrieben: wenn innerhalb der vorgegebenen Zeit kein anderes Event auftritt, dann wird der TimeOut-Case angesprungen... (Genauso funktionieren auch die TimeOuts bei VISA-,DAQmx-,Queue-,Notifier-Funktionen...) ok, danke ist jetzt klar. Heute in der früh wurde von Benutzer beobachtet das sich die Schleife gestern in der Nacht wieder aufgehängt hat. Er wollte es mir zeigen funktioniert aber wieder alles. Sprich es wird einfach irgendwann wenn es nicht mehr weitergeht einen Timeout erzeugen und die Schleife rücksetzen (Schätz ich jetzt einmal). Zitat:Hast du ein VI direkt in einem Event-Case platziert? Nein, habe ich nicht. Es ist nur ein Enum drinnen und 1- 2 mal ein Feld aufruf. Die sub.vi werden im nachgestellten CASE ausgeführt. Meine Lösungsvorschläge durch die anregende Disskussion sind jetzt folgende: 1) TimeOut Event- Case belangen und ausführen 2) Die ganze Eventstruktur inklusive anschließender CASE in eine Sequenz packen da vielleicht nach der Auswahl des Eventcases der nachfolgende CASE ausgeführt wird aber die Schleife wieder weiterzählt und dadurch sehr viele Schleifendurchgänge zusätzlich mach (Ist wahrscheinlich auch der Grund warum sich die Schleife nach aufhängen alle anderen Tastendrücke merkt) 3) Nach Möglichkeit reduzieren der lokalen Variablen (weiß noch nicht wie?) 4) Überprüfung der Auslastung des Speichers mfg duffi |