![]() |
Programm mit Obtain Notifier beenden - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Programm mit Obtain Notifier beenden (/Thread-Programm-mit-Obtain-Notifier-beenden) |
Programm mit Obtain Notifier beenden - LVT_Hiwi - 31.08.2016 09:29 Hallo Zusammen, zuerst kurz allgemeine Fakten: - Labview 2016 (32 bit) ENG (Anhänge noch mal als V13 gespeichert. Hoffe das hat geklappt.) - WinX 64 bit Kurzbeschreibung Programm: Ich schreibe ein Prog in dem zwei Schleifen parallel arbeiten. 1. Schleife als StateMachine für den Start des Programms + Event Structur zum Abfragen von Ereignissen 2. Schleife wird via einem Obtain Notifier von der ersten informiert, was zu tun ist. Nimmt dann kontinuierlich Messdaten auf und verarbeitet diese. Problembeschreibung: Über den Obtain Notifier (ein Cluster als input) gebe ich auch ein Bit zum Beenden der 2. Schleife mit falls das Programm beendet wird (Event Structur) oder ein Fehler oben auftritt. Bzw. sollte dies so geschehen. In dem Cluster befinden sich noch 2 weitere Bits die ohne Probleme Funktionieren. Nur beim Beenden / Abbruch des Programms wird das Bit zum beenden der Schleife nicht empfangen (in der 1.Schleife aber gesetzt) Bereits gemacht: - Kleines Dummy-Programm (Programm_beenden_cluster.vi) geschrieben, was aus meiner Sicht funktioniert und ich glaube auch verstanden zu haben. ![]() Frage an euch / Verständnisproblem: So jetzt die Frage an euch: in meinem Dummy-Programm geht es; in meinem eigentlichen nicht. Nur finde ich da leider keinen wirklichen Unterschied ![]() Könnte von euch bitte jemand mal einen Blick drauf werfen? Ich hab die ganzen subVIs jetzt nicht mit dazugepackt. Sollte auch so gehen. Wäre für weitere Anmerkungen auch offen, da ich noch nicht lange mit LabView arbeite. Vielen Dank für euere Zeit und Unterstützung Viele Grüße christoph RE: Programm mit Obtain Notifier beenden - GerdW - 31.08.2016 09:47 Hallo Hiwi, Zitat:Kleines Dummy-Programm (Programm_beenden_cluster.vi) geschrieben, was aus meiner Sicht funktioniert und ich glaube auch verstanden zu haben.Wieso verwendest du "Get Notifier Status" anstatt des sinnvolleren "Wait on Notification"? Wieso soll deine Consumer-Loop ungebremst laufen? Wieso ist die Notifier-Referenz in der Producer-Loop nicht durchverdrahtet? Hast du dieses Mini-VI wirklich "verstanden"? Funktioniert das VI wirklich? Zitat:Könnte von euch bitte jemand mal einen Blick drauf werfen?Boah, ist das BD groß! Wo soll man denn da den Überblick behalten und irgendetwas finden? Auch hier halte ich es für problematisch, überall mit "Get Notifier Status" zu arbeiten. Und warum muss man den Status mehrfach in einer Schleife abfragen? Zitat:Wäre für weitere Anmerkungen auch offen, da ich noch nicht lange mit LabView arbeite.Erste Anmerkung: das schreibt man "LabVIEW"! ![]() Zweite Anmerkung: ![]() Ansonsten: zu viele lokale Variablen/"Value"-PropertyNodes für meinen Geschmack… RE: Programm mit Obtain Notifier beenden - Morpheus - 31.08.2016 10:03 Hallo Christoph Das BD ist wirklich sehr gross (wie von Gerd schon erwähnt) und daher schwierig zu interpretieren... Ich denke das Problem ist, dass die Notifier-Referenz nach dem Beenden des Producers (Event-Struktur) direkt geschlossen wird. Hat der Consumer eine Verzögerung implementiert, so versucht diese Schleife auf eine "ungültige" Notifier-Referenz zuzugreifen. Schliess den Notifier erst, wenn beide Schleifen beendet wurden. Gruss Chris RE: Programm mit Obtain Notifier beenden - LVT_Hiwi - 31.08.2016 12:56 Hallo Zusammen, schon mal Danke für eure Hilfe ![]() @Chris: Zitat:Ich denke das Problem ist, dass die Notifier-Referenz nach dem Beenden des Producers (Event-Struktur) direkt geschlossen wird. Das könnte schon mal einen Teil meiner Probleme behoben haben ![]() @Gerd Zitat:Kleines Dummy-Programm (Programm_beenden_cluster.vi) geschrieben, was aus meiner Sicht funktioniert und ich glaube auch verstanden zu haben. Wenn ich in meinem Dummy den "Get Notifier Status" gegen den "Wait on Notification" ersetzte, dann hält er meine Consumer-Schleife an und wartet bis sich der Status ändert. Da er in der Schleife kontinuierlich Messen soll, würde das so nicht passen. Das war der Grund für mich den "Get Notifier Status" zu verwenden. "... When the notifier receives a message, this function continues to execute. ..." Zitat:Wieso soll deine Consumer-Loop ungebremst laufen?Unachtsamkeit beim Dummyprojekt ![]() Zitat:Hast du dieses Mini-VI wirklich "verstanden"? Funktioniert das VI wirklich? Das ist jetzt eine Fangfrage von dir. ![]() Nach meinem Verständnis was ich testen konnte hat es soweit funktioniert. Der Einwand von Chris war gut. Da bin ich drübergestolpert, da die Schleife ungebremst gelaufen ist. Zitat:Könnte von euch bitte jemand mal einen Blick drauf werfen? Ich hab leider noch kein wirklich großes Projekt gesehen. Meistens waren das Tutorials bzw. Beispiele welche auch nicht groß waren. Ist es dann sinvoll mehr in subVIs zu packen? Auch dann wenn es quasi nur 1x Verwendung findet? Zitat:Auch hier halte ich es für problematisch, überall mit "Get Notifier Status" zu arbeiten. Wie oben angemerkt, weiß ich nicht recht wie ich den "Wait on Notification" einsetzen soll. Gibt es dann generell bessere Wege für meine Fragestellung als mit der Notification? Queue Operations hab ich gelesen, das die mehr dafür gedacht sind, wenn ich größere Daten zwischen Producer und Consumer austauschen möchte (wie z.B. Messdaten) und es nicht wichtig ist, das man sicher den letzten Wert erwischt. Zitat:Und warum muss man den Status mehrfach in einer Schleife abfragen? War für mich so einfacher ersichtlich wo das Signal herkommt ![]() Was mich wieder zu dem Problem des großen BD kommen lässst ![]() Ist jetzt auf eine Abfrage reduziert. Zitat:Wäre für weitere Anmerkungen auch offen, da ich noch nicht lange mit LabView arbeite. Werde ich beachten. Zitat:Zweite Anmerkung: Profil_ergaenzen Sollte jetzt passen ![]() Zitat:Ansonsten: zu viele lokale Variablen/"Value"-PropertyNodes für meinen Geschmack… Gibt es damit Probleme bzw. was wären da alternaiven? Danke für eure Unterstützung ![]() Viele Grüße aus Weihenstephan christoph RE: Programm mit Obtain Notifier beenden - GerdW - 31.08.2016 13:10 Hallo Christoph, Zitat:Wenn ich in meinem Dummy den "Get Notifier Status" gegen den "Wait on Notification" ersetzte, dann hält er meine Consumer-Schleife an und wartet bis sich der Status ändert. Da er in der Schleife kontinuierlich Messen soll, würde das so nicht passen. Das war der Grund für mich den "Get Notifier Status" zu verwenden.Dafür hat diese Funktion ja noch einen TimeOut-Eingang und -Ausgang… Was bedeutet "kontinuierlich"? Zitat:Ist es dann sinvoll mehr in subVIs zu packen?Definitiv JA. RE: Programm mit Obtain Notifier beenden - LVT_Hiwi - 01.09.2016 13:57 Hallo Zusammen, nochmal Danke an Gerd ![]() Ich glaube meine Unklarheiten lichten sich. Habe auch noch den Link gefunden: http://www.labviewforum.de/Thread-Problem-mit-Melder-setzt-sich-auf-anderen-Wert-zurueck?highlight=notification Aus allen Informationen hab ich mein Dummy modifiziert. Vor allem mit dem Satz: Zitat:Dafür hat diese Funktion ja noch einen TimeOut-Eingang und -Ausgang…und dem Link konnte ich was anfangen (so hoffe ich.) Meine Bitte an euch: Würdet ihr mal über mein Dummy schauen und sagen, ob es jetzt so OK wäre oder ob da noch ein böser Fehler drin ist? Und welche Consumer-Schleife aus euer Sicht die bessere Wahl wäre und warum. Aus meiner Sicht funktionieren beide gleich, und mir fehlt leider (noch) der Hintergrund um eine Aussage zu treffen welche besser ist. (Außer ich bin hier komplett auf dem Holzweg und beide sind für den virtuellen Papierkorb ![]() Zitat:Was bedeutet "kontinuierlich"? Wenn ein Freigabesignal anliegt, lese alle 500 ms von einer Zählkarte die Werte aus und verarbeite diese so lange, bis das Freigabesignal nicht mehr anliegt. Zitat: Danke. Ist in Arbeit. ![]() Vielen Dank euch nochmal ![]() Vielel Grüße christoph |