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!
Hallo,
ich müsste im Timeout meiner Sequenzstruktur so ca. in der Mitte prüfen, ob irgendein in der Evenstruktur definiertes Event stattgefunden hat.
Rein theoretisch könnte man einfach die gleiche Sequenzstruktur nehmen und im Timeout nochmal einfügen, jedoch wurde
schon öfters erwähnt, dass man das vermeiden sollte. Gibts irgendwelche Alternativen?
Gruß Simon
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Event registrieren
Ich blicke das nicht so ganz......
Ich würde, so wie ich es verstanden habe, sagen: "Lass doch das Timeout ganz weg und warte einfach auf das Event."
Ich weiß aber nicht, was Du genau meinst.
Kannst Du bitte mal Dein VI hochladen.
Gruß Markus
' schrieb:Hallo,
ich müsste im Timeout meiner Sequenzstruktur so ca. in der Mitte prüfen, ob irgendein in der Evenstruktur definiertes Event stattgefunden hat.
Rein theoretisch könnte man einfach die gleiche Sequenzstruktur nehmen und im Timeout nochmal einfügen, jedoch wurde
schon öfters erwähnt, dass man das vermeiden sollte. Gibts irgendwelche Alternativen?
Gruß Simon
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
18.10.2007, 14:33 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2007 12:41 von jg.)
Ich frage im Timeout einen Status eines Geräts ab. Schalter, die ein eigenes Event haben (wenn sie gedrückt werden)
werden über die Statusinfo auch upgedated. Da diese Abfrage relativ lange dauert (100 ms), kommt es vor, dass der Schalter bei
Betätigung kurz zurückspringt. (Beispiel: Programm ist bei der Statusabfrage --> Schalter wird gedrückt und springt auf ON --> Schalterstatus wird
abgefragt und sagt dass der Schalter OFF ist (da der Event zwar ausgelöst hat, aber das Kommando noch nicht Richtung Gerät abgeschickt wurde)
-->Statusinfo wird auf die lokale Variable gegeben und der Schalter springt auf OFF zurück--> Kommando wird jetzt gesetzt --> Schalterstatus wird abgefragt
--> Schalter jetzt endgültig auf ON)
Um diese Verhalten zu verhindern, müsste ich kurz vor dem Update des Schalters über die Variable abfragen, ob ein Event bis jetzt stattgefunden hat.
Dann darf der Schalterwert nicht aktualisiert werden...
Hoffe es war einigermaßen verständlich,
Gruß Simon
Hallo, habe das Problem gelöst...
Anfangs hatte ich zwei Eventstrukturen (Bild1), jedoch war das VI dann während der Laufzeit sehr langsam.
Habe es dann einfach mit lokalen Variablen gelöst. Wenn während der Statusabfrage ein Schalter betätigt wird, wird er in diesem Umlauf
nicht upgedated. Er springt erst in das Event, setzt das Kommando und aktualiert ihn im nächsten Timeoutdurchlauf.
Somit wird das springen des Schalters verhindert...
Danke für eure Antworten, Gruß Simon
25.09.2008, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2008 18:53 von jg.)
ich habe folgendes Problem bzw mir fehlen die richtigen Ideen zur Realisierung mit LabVIEW.
Folgendes Problem, schaut euch den 2. Screenshot vom vorigen Beitrag an, dort sieht man eine Sequenzstruktur die 3 Abläufe hat.
1. "alte" variablen --> 2. neue variablen einlesen --> 3. vergleichen der beiden
das ganze ist natürlich in einer while Schleife damit es immer wieder erneuert wird.
Hab jetzt folgendes Problem. In der Mitte seht ihr doch ein haufen Booleanschalter (diese stellen die zustände von LEDs dar).
Jetzt möchte ich das mir ein Popup signalisiert wenn sich eine LED geändert hat (NUR wenn sie auf TURE gegangen ist).
Am Anfang hab ich des so realisiert das ich jede LED einzeln verdrahtet habe, aber da wird der Code viel zu unübersichtlich.
Habt ihr irgendeine Idee?
Jetzt versuch ich grad zwei Cluster miteinander zu vergleichen (angehängtes SubVI V8.5) und daraus den geänderten Wert herauszufinden und dann ein Popup auszugeben.
Des funktioniert auch so halbwegs, aber mir kommt des alles ein wenig spanisch vor, ich arbeite erst seit ca. 2 Wochen mit LabVIEW und deshalb nehme ich gerne viele Tipps/Kritik/Anregungen an!
Der Screenshot zeigt, das ich jetzt versuche den GANZEN Cluster zu nehmen, und ihn nicht erst aufteile.
warum kann ich meine eigenen Beitrag nicht löschen bzw editieren?!
Ich würd jetzt gern ein neues Thema aufmachen weil ich eine neue Frage hab, aber ich will auch nicht das Forum zuspammen, deshalb schreib ich einfach mal hier rein...
Hab jetzt mein Problem auf die Message Popups reduziert, hab nämlich grad herausgefunden das ich mit ganzen Clusters auch vergleichen und negieren kann.
Bin jetzt auf dem Stand, das sich bei mir der Wert der geänderten LED auf TRUE ändert, und jetzt möchte ich nur noch das mir ein MessagePoPup anzeiget was sich geändert hab.
Mein Problem besteht darin das ich nicht weiß ob ich jetzt für jeden Fall einzeln ein Case aufmachen soll und dann irgendwie den String zusammenfügen, oder man irgendwie direkt den Text aus dem Cluster ziehen kann und in ein Popup einbinden.
Ich möchte nicht einzelne Popups, sondern EIN großes mit allen Änderungen anzeigen lassen.
Hab mal mein SubVi hochgeladen (V 8.5), soweit so gut, jedoch weiß ich keine einfache lösung mit den Popup!
Hoffe ihr könnt mir helfen, ihr könnt auch direkt mein VI bearbeiten wenn ihr wollt, oder zumindest denkansätze geben...
Danke vielmals!
Anzeige
25.09.2008, 13:19 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2008 13:41 von Lucki.)
' schrieb:Um diese Verhalten zu verhindern, müsste ich kurz vor dem Update des Schalters über die Variable abfragen, ob ein Event bis jetzt stattgefunden hat.
Das funktioniert alles nicht. Ein Event kann während derTimeout-Abarbeitung zwar eintreffen, aber verarbeitet werden kann es erst mit dem nächsten Schleifendurchlauf.
(Diese falschen Vorstellungen über die Funktionsweise der Eventruktur enstehen, wenn man denkt, es handelt ich bei der Eventbehandlung um eine Art Interrupt. Falsch: Bei einem Interrupt wird in der Regel das laufende Programm an beliebiger Stelle für die Interruptbehandlung unterbrochen. Beim Eintreifen eines Events wird das jedoch nur dann sofort abgearbeitet, wenn das Programm gerade auf den Timout der Eventstruktur wartet. Ansonsten erst, wenn der Code im timeout und außerhalb der Eventstruktur abgearbeitet ist und das nächste Warten auf einen Event beginnt.)
So würde es funktionieren: Im Timeout befndet sich eine Casestruktur mit den Cases 0 und 1. Bei jedem Schleifendurchlauf wird alternativ case 0,1,0,1.. abgearbeitet. Das d.h für die Abarbeitung des ursprünglichen Codes im Timeout werden jetzt 2 Schleifendurchläufe gebraucht. Damit hast Du genau das was Du wuillt: Mitten im ursprünglichen Code findet zusätzliche eine Ereignisbehandluing statt.
BTW: Der Begriff "Event registrieren" ist von LabVIEW ganz anderes belegt. Mach Dich da mal schlau. So wie Du das hier meinst ist das irreführend.
' schrieb:Das funktioniert alles nicht. Ein Event kann während derTimeout-Abarbeitung zwar eintreffen, aber verarbeitet werden kann es erst mit dem nächsten Schleifendurchlauf.
Des hat sich alles schon erledigt. Du hast ja vollkommen recht mit dem was du sagst, aber des ist alles nicht so zeitkritisch, deshalb kann es auch erst im nächsten Schleifendurchlauf verarbeitet werden.
Und zwei schleifen ineinander sind auch ein wenig irreführend
Es geht einfach darum das bei jedem Schleifendurchlauf, die LEDs von einem Sender überprüft werden, und wenn dann halt mal eine angeht soll ein PopUp dies melden.
Am liebsten wäre mir ein Event bei value change (NUR von 0 auf 1) einer LED, aber des funktioniert leider nicht...
Hab es inzwischen auch schon anders gelöst.
Mir ist aufgefallen, sobald ich hier einen Beitrag schreibe hab ich ca. ne std später die Lösung selber gefunden, obwohl ich davor schon eine ewigkeit dran gehockt bin. Faszinierendes Phänomen!
Ich hab übrigens die Arbeit von simsdibims übernommen, deshalb kann es sein, das ihr das ein oder andere VI schonmal gesehn habt