Sicherstellen, dass Ereignisstrukturen jederzeit zur Verarbeitung von Ereignissen in der Lage sind
- Aktualisiert2025-08-27
- 3 Minute(n) Lesezeit
In LabVIEW werden Ereignisse in eine Queue gespeichert, wenn das VI ausgeführt oder zur Ausführung reserviert wird. Die Ereignisse der Queue werden mit Hilfe einer Ereignisstruktur abgearbeitet, wenn der Datenfluss die Ausführung der Struktur ermöglicht. Ereignisse können daher in LabVIEW ausgelöst werden, bevor eine Ereignisstruktur zu ihrer Verarbeitung vorhanden ist.
Da LabVIEW Ereignisse für die gesamte Zeit der VI-Ausführung in eine Queue speichert, werden Ereignisse auch weiterhin gespeichert, wenn der Datenfluss die Ausführung einer Ereignisstruktur beendet hat. Die Schleife mit der Ereignisstruktur kann z. B. angehalten werden, während das VI weiterhin ausgeführt wird. Um sicherzustellen, dass alle Ereignisse in einer Queue behandelt werden können, konfigurieren Sie das VI zum Anhalten nachdem die Ausführung der Ereignisstruktur beendet ist.
Verwenden Sie eine While-Schleife, damit die Ereignisstruktur jedes Ereignis bearbeitet
Ordnen Sie die Ereignisstruktur in einer While-Schleife an, um abzubrechen, wenn keine Ereignisse mehr stattfinden können. Im nachstehenden Blockdiagramm ist die Ereignisstruktur außerhalb der While-Schleife angeordnet und die Frontpanel-Sperre ist für den Case "Wertänderung" aktiviert.
Eine Änderung des Werts des numerischen Bedienelements bedeutet ein Ereignis. Die Ereignisstruktur wird dann einmal ausgeführt, und bearbeitet das Ereignis. Wenn Sie den Wert des numerischen Bedienelements erneut ändern, wird ein weiteres Ereignis erzeugt und die Benutzeroberfläche ist deaktiviert aufgrund der Frontpanel-Sperre. Da die Ereignisstruktur bereits einmal ausgeführt wurde, kann sie nicht auf das zweite Ereignis reagieren. Wenn Sie auf Stopp klicken, kann das VI nicht anhalten, da das Anklicken der Stopp-Schaltfläche erst im Anschluss an das zweite, noch ausstehende Ereignis, verarbeitet werden kann. Um dieses Problem zu verhindern, sollten Sie Ereignisstrukturen immer in eine While-Schleife einfügen.
Nach Möglichkeit keine Case-Struktur verwenden, um zu bestimmen, wann eine Ereignisstruktur Ereignisse bearbeitet
Vermeiden Sie es, eine Ereignisstruktur in eine Case-Struktur einzusetzen. Im nachstehenden Blockdiagramm ist die Ereignisstruktur innerhalb der Case-Struktur angeordnet und die Frontpanel-Sperre ist für den Case "Wertänderung" aktiviert.
Wenn Sie das Element Wert lesen anklicken, wird das Frontpanel kontinuierlich gesperrt. Die Boolesche Konstante "FALSE" ist mit der Case-Struktur verbunden und hält dadurch die Ereignisstruktur davon ab, das Ereignis im TRUE-Case zu bearbeiten. Da die Frontpanel-Sperre für das Ereignis aktiviert ist, wartet das Frontpanel auf die Ereignisstruktur. Der Datenfluss hält die Ereignisstruktur jedoch von der Ausführung zur Bearbeitung des Ereignisses ab. Wenn Sie die Frontpanel-Sperre für diese Anwendung deaktivieren und auf Wert lesen klicken, reagiert das Frontpanel und beendet die Ausführung, wenn Sie auf die Schaltfläche Stopp klicken. Der numerische Wert inkrementiert jedoch nicht, da die Ereignisstruktur nach wie vor das Ereignis nicht bearbeiten kann.