• Keine Ergebnisse gefunden

Dynamische Ereignisregistrierung

Im Dokument Benutzerhandbuch LabVIEW (Seite 177-180)

Bei der dynamischen Registrierung von Ereignissen haben Sie die vollstän-dige Kontrolle darüber, welche Ereignisse wann erzeugt werden. Die dynamische Registrierung von Ereignissen empfiehlt sich dann, wenn nur ein Teil einer Applikation ereignisgesteuert sein soll oder während der Ausführung andere VIs oder Bedienelemente für Ereignisse konfiguriert werden sollen. Bei der dynamischen Registrierung können Ereignisse auch in SubVIs verarbeitet werden und nicht nur in dem VI, in dem sie auftreten.

Zur Verarbeitung dynamisch registrierter Ereignisse sind die folgenden vier Schritte erforderlich:

1. Ermitteln der VI-Server-Referenzen für die Objekte, die auf Ereignisse konfiguriert werden sollen.

2. Registrieren der Objekte, durch Verbinden der VI-Server-Referenzen mit dem Knoten zur Registrierung von Ereignissen.

3. Platzieren der Ereignisstruktur in eine While-Schleife, damit alle Ereignisse an den Objekten verarbeitet werden, bis die Bedingung zur Beendigung der Schleife erfüllt ist.

4. Mit der Funktion “Registrierung für Ereignisse aufheben” wird die Ereignissteuerung beendet.

Für die dynamische Registrierung eines Ereignisses ist zunächst eine VI-Server-Referenz notwendig. Dazu sollten die Funktionen “Applikati-onsreferenz öffnen” und “VI-Referenz öffnen” verwendet werden. Um eine Referenz zu einem Bedienelement zu erhalten, wählen Sie einen Eigen-schaftsknoten zur Ermittlung aller Bedienelemente eines VIs oder klicken Sie das Element mit der rechten Maustaste an und wählen Sie zur Erstel-lung einer entsprechenden Konstante aus dem Kontextmenü die Option Erstelle»Referenz. Nähere Einzelheiten zu VI-Server-Referenzen befin-den sich im Abschnitt Applikations- und VI-Referenzen des Kapitels 17, Programmatische Steuerung von VIs.

Um Elemente dynamisch für Ereignisse zu konfigurieren, wählen Sie die Funktion “Für Ereignisse registrieren”. Dieser Knoten zeigt standardmäßig ein Ereignis an, kann aber um weitere Ereignisse erweitert werden. Jeder Eingang “Ereignis-Quelle” kann nun mit einer Applikations-, VI- oder Bedienelement-Referenz verbunden werden. Klicken Sie dann jeden Ein-gang mit der rechten Maustaste an und wählen Sie aus dem Kontextmenü über die Option Ereignisse aus, für welches Ereignis das jeweilige Objekt konfiguriert werden soll. Die zur Auswahl verfügbaren Ereignisse hängen vom Typ der VI-Server-Referenz ab, die mit dem Eingang

“Refe-renz-Quelle” verbunden wurde. Die im Kontextmenü angezeigten Ereignisse sind dieselben wie die, die bei der statischen Registrierung im Dialogfeld Ereignisse bearbeiten angezeigt werden. Bei Ausführung des Knotens werden die Objekte, die an den Eingängen “Ereignis-Quelle”

anliegen, für die angegebenen Ereignisse registriert. Sobald ein Objekt registriert ist, werden alle entsprechenden Ereignisse in einer Queue gespeichert, um dann von einer Ereignisstruktur abgearbeitet zu werden.

Alle vor der Ausführung des Knotens auftretenden Ereignisse sind davon ausgenommen; es sei denn, ein anderes Objekt ist vorher darauf registriert gewesen.

Hinweis Anders als bei Eigenschaftsknoten muss bei Registrierungsknoten der obere linke Eingang nicht verbunden werden. Dieser Eingang ist nur notwendig, wenn eine vor-handene Registrierung geändert werden soll. Weitere Hinweise zur Umregistrierung von Objekten auf andere Ereignisse befinden sich im Abschnitt Dynamische Umregistrierung dieses Kapitels.

Wenn Sie eine Ereignisstruktur mit der rechten Maustaste anklicken und die Option Anschlüsse für dynamische Ereignisse anzeigen auswählen, werden die Anschlüsse für dynamische Ereignisse sichtbar. Diese verhalten sich ähnlich wie Schieberegister. Am linken Anschluss kann entweder eine einzelne RefNum zur Ereignisregistrierung oder ein entsprechender RefNum-Cluster anliegen. Wenn an der linken Seite des rechten Anschlus-ses keine Verbindung vorliegt, enthält er dieselben Werte wie der linke

Anschluss. Um die Konfiguration auf ein Ereignis dynamisch zu verän-dern, kann die RefNum zur Ereignisregistrierung oder der entsprechende Cluster über einen Knoten zur Ereignisregistrierung mit der Innenseite des rechten Anschlusses verbunden werden. Weitere Informationen zu den Anschlüssen für dynamische Ereignisse befinden sich in Abschnitt Dyna-mische Umregistrierung dieses Kapitels.

Bei dem Ausgang eines Knotens zur Ereignisregistrierung handelt es sich um eine RefNum zur Registrierung für Ereignisse. Dieser strikte Datentyp wird in LabVIEW für die Daten verwendet, die an eine Ereignisstruktur übergeben werden. Wenn Sie den Cursor über die RefNum bewegen, werden die registrierten Ereignisse in der Kontext-Hilfe angezeigt. Nach-dem ein Knoten zur Registrierung für Ereignisse konfiguriert worden ist, verbinden Sie den Ausgang Ereignis-Registrierung (RefNum) mit dem linken Anschluss für dynamische Ereignisse der Struktur und legen fest, wie die Ereignisse verarbeitet werden sollen. Eine von einer

Ereignis-RefNum ausgehende Verbindung sollte niemals abgezweigt wer-den, da sonst möglicherweise eine Queue von mehreren Strukturen ausgelesen wird und somit eine Race Condition eintritt (das heißt, die Strukturen konkurrierend auf dieselbe Ressource zugreifen), was zu einem unvorhersehbaren Verhalten der Applikation führen kann.

Zur Konfiguration einer Ereignisstruktur zur dynamischen Verarbeitung von Ereignissen verwenden Sie das Dialogfeld Ereignisse bearbeiten. Die dynamisch registrierten Ereignisquellen sind im Bereich Ereignis-Quellen unter dynamisch aufgeführt. Die Namen der Ereignisquellen stimmen immer mit den Referenzen überein, die mit dem Knoten zur Registrierung für Ereignisse verbunden worden sind und sind auch in derselben Reihen-folge aufgelistet. Hier kann nun die gewünschte Ereignisquelle ausgewählt werden. Ereignisse, die bereits über den Knoten zur Ereignisregistrierung konfiguriert wurden, werden im Bereich Ereignisse hervorgehoben. Bear-beiten Sie nach der Auswahl des Ereignisses den Case, mit dem das Ereignis verarbeitet werden soll, und zwar dem Anwendungszweck Ihres VIs entsprechend.

Um die Ereignissteuerung zu beenden, verbinden Sie den

Ereig-nis-Anschluss an der rechten Seite der Ereignisstruktur mit dem Eingang Ereignisregistrierung (RefNum) mit einer außerhalb der While-Schleife befindlichen Funktion des Typs “Ereignisregistrierung aufheben”. Bei Ausführung dieser Funktion werden alle von der RefNum angegebenen Ereignisse aufgehoben, und die entsprechende Queue wird zusammen mit allen darin befindlichen Ereignissen entfernt. Wenn Sie die Ereignissteue-rung nicht aufheben und der Anwender nach Beendigung der

While-Schleife Aktionen ausführt, die Ereignisse auslösen, speichert

LabVIEW diese weiterhin kontinuierlich in die Queue. Wenn das Frontpa-nel bei Ereignissen gesperrt wird, reagiert das VI dann unter Umständen nicht mehr. In diesem Fall wird die Queue erst aufgehoben, wenn das VI im Ruhezustand ist.

Alle konfigurierten Ereignisse werden auch dann aufgehoben, wenn die Ausführung des Haupt-VIs beendet wird. Es wird jedoch insbesondere bei Applikationen mit langen Ausführungszeiten empfohlen, die Registrierung manuell aufzuheben, da so weniger Speicherplatz benötigt wird.

Im Dokument Benutzerhandbuch LabVIEW (Seite 177-180)