LabVIEWForum.de
XControl - wie funktioniert das eigentlich - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: XControl - wie funktioniert das eigentlich (/Thread-XControl-wie-funktioniert-das-eigentlich)



XControl - wie funktioniert das eigentlich - Hasenfuss - 08.03.2013 18:56

Hallo!

Ich möchte ein XControl erstellen, habe auch schon versucht, diverse Beispiele zu verstehen und auch was in meinem Lehrbuch dazu steht, komme aber grad nicht weiter. Darum stelle ich meine Frage hier rein, in der Hoffnung, dass mir von Euch vielleicht jemand weiterhelfen kann.

Im Fassaden-VI habe ich ein Statusfenster erstellt, dass vier boolsche Elemente enthält (siehe Bild).

In einem anderen VI werden Zustände durch Melder gesetzt. Ob der jeweilige Zustandswert true/false ist, soll dieses Statusfenster anzeigen.

Ich muss also jetzt in dem Blockdiagramm Melder anfordern und auslesen. Nun muss ich im Ereigniscase von Fassade-VI irgendwie auf die Wertänderung des Melders reagieren - aber wie?

Geht das überhaupt, dass ich mein Problem durch ein XControl löse? Dieses Status-Fenster brauche ich für mehrere Anwendungen, also wollte ich es mittels XControl erstellen, weil ich so dann die Möglichkeit habe, dieses Fenster in das Anwendungs-VI einzufügen.

Über eine Antwort von Euch würde ich mich sehr freuen.


RE: XControl - wie funktioniert das eigentlich - GerdW - 09.03.2013 12:00

Hallo Hasenfuss,

Grundprinzip von XControls ist, dass sie spezielle Events verwenden und nur aktiv abgearbeitet werden, wenn man einen Wert ins Control schreibt (oder ausliest). Sie sind nicht geeignet, um ein subVI, das in einer eigenen Schleife auf irgendwelche Ereignisse wartet, zu ersetzen...

Eigentlich gibt es doch ein gutes Referenz-Beispiel von NI mit Kommentaren in jedem Blockdiagramm!?


RE: XControl - wie funktioniert das eigentlich - Hasenfuss - 10.03.2013 12:32

Hallo GerdW,

herzlichen Dank für Deine Antwort.

Deine Antwort bedeutet jetzt also - nur mal als Verständnisbeispiel - wenn ich mir eine Uhr als XControl erstelle, dann arbeitet diese Uhr nicht "eigenständig", sondern ich muss in dem übergeordnetem VI eine Eigenschaft von Uhr aufrufen - z.B. Zeit setzen - und die Zeit dann dort heraus jede Sekunde neu setzen, damit das XControl aktiv wird und sich verändert?

Ok, und für mich bedeutet das also, dass ich für meine Anzeige auch Eigenschaften erstellen muss - schalte Lampe 1 an/aus ..., die ich dann auch aus dem HauptVI heraus aktualisiere?

Ich hab nochmal eine kleine andere Frage - wenn ich mit Meldern arbeite und die Funktion "Auf Melder warten..." verwende, dann wartet die Funktion ja so lange, bis ein Wert anliegt (wenn ich kein timeout gesetzt habe). Dazu muss ja diese Funktion selbst auch stets abfragen, ob ein Wert da ist oder nicht. Macht diese Funktion das durch Polling (so dass "viel" Rechenleistung dafür verwendet wird) oder auf Basis von Interrupts (bzw. ereignisgesteuert)?


RE: XControl - wie funktioniert das eigentlich - GerdW - 10.03.2013 18:06

Hallo Hasenfuss,

Zitat:ich muss in dem übergeordnetem VI eine Eigenschaft von Uhr aufrufen - z.B. Zeit setzen - und die Zeit dann dort heraus jede Sekunde neu setzen, damit das XControl aktiv wird und sich verändert?
Ein XControl ist erstmal nichts weiter als ein Control/Indicator. Wenn du einen Wert in der Anzeige ändern willst, musst du ihn auch entsprechend im MainVI verdrahten - egal ob "normaler" Indicator oder XControl. Du musst dazu keine "Eigenschaft" deines XControls aufrufen, sondern einfach einen Wert hineinschreiben.

Zitat:für mich bedeutet das also, dass ich für meine Anzeige auch Eigenschaften erstellen muss - schalte Lampe 1 an/aus ..., die ich dann auch aus dem HauptVI heraus aktualisiere?
XControls erlauben auch das Definieren von eigenen Properties und Methods. Damit könntest du entsprechend Werte setzen/auslesen, z.B. den Status einer LED. Du kannst den Datentyp deines XControls aber auch als Cluster definieren, um dann alle möglichen Werte "in einem Rutsch" setzen zu können... Hängt alles von deinen Anforderungen ab!

Zitat:wenn ich mit Meldern arbeite und die Funktion "Auf Melder warten..." verwende, dann wartet die Funktion ja so lange, bis ein Wert anliegt (wenn ich kein timeout gesetzt habe). ... Macht diese Funktion das durch Polling (so dass "viel" Rechenleistung dafür verwendet wird) oder auf Basis von Interrupts (bzw. ereignisgesteuert)?

Notifier arbeiten intern mit Events (glaube ich): sie erzeugen jedenfalls kaum Prozessorlast, wenn sie auf eine Meldung warten.
Sowas solltest du aber nicht in einem XControl verwenden: diese arbeiten Event-basiert. Und dort lautet die Grundregel: Events immer so schnell wie möglich abarbeiten! (Du würdest dir sonst mit dem XControl möglicherweise dein komplettes UI blockieren...)