LabVIEWForum.de - Ereignisse in Cluster in Array erfassen

LabVIEWForum.de

Normale Version: Ereignisse in Cluster in Array erfassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich möchte gerne die Ereignisse die in meinem Cluster, welches sich in einem Array befindet, erfassen und verarbeiten. Z.B. soll es möglich sein, dass der User über einen Schalter die Lampe in der jeweiligen Zeile ein- und ausschaltet oder auch über einen Button die Zeile entfernt.
Ich habe hierzu ein VI erstellt, dass im Anhang zu finden ist. In meiner realen Anwendung ist dieses Array mit den Clustern wesentlich umfangreicher. Dort hängt sich das VI leider auf. Deshalb meine Fragen:
1. Ist die von mir gewählte Variante die Richtige hinsichtlich Effizienz? Ich überwache hier nämlich das ganze über das Ereignis "Wertänderung". Dabei muss ja das VI also "alles" überwachen. Kann es sein dass dies der Grund ist, warum mein richtiges VI sich aufhängt?
2. Warum funktioniert in meinem Beispiel der Stop-Button nicht, um die While-Schleife zu beenden?
3. Gibt es eine Möglichkeit die Eigenschaften der einzelnen Clusterelemente im Array zu bearbeiten. Beispiel: Wenn der Schalter vorne betätigt wird, dann wird die LED daneben "deaktiviert und ausgegraut".

Besten Dank im Voraus.
Hallo mez,

1. Dein VI könnte "effizient" sein, wenn du weniger lokale Variablen verwendest und die RubeGoldbergs entfernst. (Wieso muss man einen boolschen Wert auf Gleichheit mit TRUE überprüfen? Wall)
Zitat:Kann es sein dass dies der Grund ist, warum mein richtiges VI sich aufhängt?
Glaube ich nicht.
Was bedeutet "aufhängen"? BSOD?

2. Weil du weder einen Timeout noch ein ValueChange-Event für den STOP-Button programmiert hast…

3. Nein: In einem Array haben alle Elemente die gleichen Eigenschaften!
Mögliche Lösung: auf dem FP kein Array, sondern einen Cluster verwenden…
Okay, danke schon mal für die Hinweise. Ich programiere leider nicht Vollzeit, deshalb sind wahrscheinlich mehr solche "RubeGoldbergs" enthalten. Ich habe mal die überarbeitete Version angehängt.

Mit "VI aufhängen" meine ich, dass keine Eingaben mehr möglich sind, und dass sich das VI nur durch "Ausführung abbrechen" beenden lässt.

Wie schaut denn so ein Cluster aus, welches du in Punkt 3 vorschlägst? Ich habe lange überlegt wie ich meine Anwendung realisiere. Hierbei schien mir die Vorgehensweise mit dem Cluster welches sich in einem Array befindet am sinnvollsten. Das Programm dass ich schreibe soll Daten eines Temperatur-Schreibers erfassen. Hierzu konfiguriert der Benutzer zu Beginn die Anzahl und die Eigenschaften der verwendeten Kanäle. Ich wüsste nicht wie ich das mit einem Cluster realisieren könnte, da die Anzahl der Kanäle jedesmal variiert.
Hallo mez,

du verwendest immer noch eine lokale Variable zum Lesen des Arrayinhaltes, obwohl das "Array"-Terminal (Anschlußfeld deines Arrays im BD) unbenutzt herumliegt. Selbst wenn du das Terminal nicht benutzen wolltest: die Eventstruktur liefert dir auch den aktuellen Array-Inhalt!

Zitat:Ich habe lange überlegt wie ich meine Anwendung realisiere. Hierbei schien mir die Vorgehensweise mit dem Cluster welches sich in einem Array befindet am sinnvollsten.
Das Array of Cluster ist sinnvoll, solange es um die Verwaltung/Speicherung der Daten geht.
Wenn es aber um die Darstellung auf dem UI geht, bekommst du Einschränkungen: Wie du schon gemerkt hast, sind die Eigenschaften aller Arrayelemente gleich…

Deshalb kann man die Datenverwaltung im BD von der Darstellung im FP (programmatisch) trennen: Man nutzt dann einen Cluster (of Cluster) und muss dann eben mehr Overhead für die Verwaltung der Anzeige programmieren

Zitat:Hierzu konfiguriert der Benutzer zu Beginn die Anzahl und die Eigenschaften der verwendeten Kanäle.
Ich nutze für solche Dinge gern eine Tabelle oder MultiColumnListbox. Die Listbox zeigt alle vorhandenen Einträge an.
Wenn der User auf einen Eintrag klickt (ihn damit auswählt), kann er in einem Cluster daneben genau diesen einen Eintrag bearbeiten…
Das Wait ist sinnlos, das Warten (wenn es sein muß, unendlich lange) besorgt die Eventstruktur.

Ansonsten ist des Prog zwar nicht gänzlich abwegig, es ist aber jenseits meiner Vorstellungkraft, daß das für irgendetwas gut sein könnte. (etwas Aufklärung wäre nicht schlecht. Wenn z.B. 4 (0..3) Elemente aktiv sind, und man löscht Element 1 heraus, dann rutschen die Array-Elemente 2 und 3 in tiefere Positionen. Ich bezeifle, dass das dem übergeordnetem Programm, welches auf die Elemente zugreift, gut bekommt).

Die vorgeschlagene Clustertruktur statt Array könnte daran scheitern, dass die Anzahl der Clusterelement dann konstant sein müßte. Man könnte es aber dann so machen, dass immer die maximale Elementezahl im Cluster drin ist, dass aber die nicht benutzten Elemente z.B. ausgegraut werden.

Den Schalter könnte man durch einen anderen Schalter ersetzten, der seinen Zustand selbst anzeigt. Dann bräuchte man keine LED. Man könnte auch die LED selbst als es Control benutzen und brauchte dann keinen weiteren Schalter.
Also bei dieser Anwendung geht es darum die Kanäle eines Erwärmungsschreibers zu konfigurieren. Dabei gibt es richtige Messkanäle, aber auch Mathematikkanäle. Mit den Messkanälen kann Temperatur, Strom oder Luftfeuchte gewählt werden. Um Fehler bei der Erstellung der Konfigurationskanäle zu vermeiden, würde ich dem Benutzer bei der Auswahl der Optionen nur die logischen Auswahlmöglichkeiten zur Verfügung stellen wollen, d.h. wenn er als Sensor "Thermoelement TYP J" auswählt, dann soll als Einheit nur noch "°C" oder "K" zur Verfügung stehen. Oder wenn der Strom gemessen wird, dann soll als Einheit nur noch "A" (Ampere) zur Verfügung stehen. Wenn er auswählt dass es sich bei einem Kanal um einen Mathematikkanal handelt, dann sollen bestimmte Auswahlfelder ausgegraut werden, wie z.B. der Sensortyp.

Das Löschen einzelner Kanäle ist kein Probrlem, da die Kanäle nach dem Konfigurieren an das nächst höhere VI übergeben werden, und danach die Messung erst gestartet wird.

Danke für den Tipp mit dem "Wait"
Offtopic2
Wie ja schon Gerd in Beitrag #2 geschrieben hat, mit einem Array of Cluster wirst du auf Dauer nicht glücklich werden, da du nur die Eigenschaften aller Array-Elemente gleichzeitig ändern kannst.

Eine interessante Alternative für deine Aufgabe ist das hier: https://lavag.org/files/file/31-type-sensitive-popup/

Gruß, Jens
Ich danke euch für die Unterstützung. Ich werde aus Zeitdruck diese Comfort-Funktionen noch weglassen. Erstmal ist die Funktion wichtiger. Besten Dank.
Referenz-URLs