LabVIEWForum.de
Dynamisches Cluster/Button-Array mit Steuerung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Dynamisches Cluster/Button-Array mit Steuerung (/Thread-Dynamisches-Cluster-Button-Array-mit-Steuerung)

Seiten: 1 2 3


RE: Dynamisches Cluster/Button-Array mit Steuerung - Rene123 - 30.03.2016 14:35

Hallo,

Bei der Aufarbeitung des Problems, bin ich über ein weiteres Problem gestolpert.
Ich habe die Daten alle gekapselt und komme nur über die Accessors (READ/WRITE)
an die Daten, was eine Abfrage des Button schwierig macht.

Gibt es eine Möglichkeit mit der derzeitigen Struktur den Cluster darzustellen und den
Zustand des Buttons abzufragen?
Ich möchte ein weitere Array vermeiden, daher bin ich etwas ratlos.

Vielen Dank im voraus

Construction


RE: Dynamisches Cluster/Button-Array mit Steuerung - IchSelbst - 30.03.2016 20:00

(30.03.2016 14:35 )Rene123 schrieb:  Ich habe die Daten alle gekapselt und komme nur über die Accessors (READ/WRITE) an die Daten,
Nunja, da ist ja nichts gegen zu sagen. Allerdings: In dieser Art hätte ich das nicht gemacht. Jede Variable einzeln? Warum nicht gesammelt in einem Cluster? Blink

Zitat:was eine Abfrage des Button schwierig macht.
Die Abfrage welches Buttons? Des Buttons "Measurement"?
So wie dieser Button gerade abgefragt wird, ist es eigentlich richtig - nämlich als Event.

Zitat:Gibt es eine Möglichkeit mit der derzeitigen Struktur den Cluster darzustellen und den Zustand des Buttons abzufragen?
Von welchen Cluster redest du? Es gibt doch gar keinen Cluster? Oder? Blink


Oder meist du, alle Variablen in einen Cluster zusammenzufassen? Selbstverständlich geht das.

Und wie genau willst du den Button anders handhaben?


RE: Dynamisches Cluster/Button-Array mit Steuerung - Rene123 - 31.03.2016 13:28

Da befindet sich noch eine alte Struktur mit drinnen.
Grundsätzlich will ich das schon über ein Cluster machen.
Die nötige Korrektur habe ich noch nicht vorgenommen,
da ich eine Menge geändert habe.
Ich weiß halt nicht, wie man die Daten alle gleichzeitig
darstellt.
Mit Table Control geht das soweit ich weiß nicht?
Nur wenn ich das so mache, wie ich es so wie
in der andere Lösung (als Cluster Array) verwende.

Es geht um das Cluster mit dem Delete Button.
Das Drücken des Buttons soll eine Messung löschen.
Daher würde ich gerne wissen ob es geschickter ist,
dass das über ein Table Control oder Cluster Tabelle
zu implementieren bzw. wie das genau geht^^

Da ich hier eine State-Machine gebaut habe, tut der
Measurement Button genau das was er soll (die Messung
starten) und es ist in dieser Version für mich erst einmal
aktzeptabel.
Das Konzept habe ich von National Instruments einfach übernommen
und es erscheint mir bisher auch als sehr tauglich.

Vielen Dank im voraus.


RE: Dynamisches Cluster/Button-Array mit Steuerung - IchSelbst - 01.04.2016 07:47

(31.03.2016 13:28 )Rene123 schrieb:  Da befindet sich noch eine alte Struktur mit drinnen.
Ganz schlecht, das verwirrt nur.

Zitat:Grundsätzlich will ich das schon über ein Cluster machen
Zitat:Ich weiß halt nicht, wie man die Daten alle gleichzeitig darstellt.
Ganz einfach: Einfach alles das, was jetzt einzeln auf dem FP liegt (und in einen Cluster soll), in ein Cluster-Element ziehen. Dieses Element wird dann sinnvollerweise strict typisiert. Ab jetzt handhabst du diesen Cluster wie eine "einzelne Variable" - einfach mit einen Draht hin- und herziehen. Durch eine solche Drahtverbindung zu einem Anzeigeelement (oder einer zu schreibenden Variablen eines Bedienelementes) werden die Daten "alle gleichzeitig angezeigt".

Zitat:Mit Table Control geht das soweit ich weiß nicht?
Eine Tabelle würde ja lauter Zeilen mit gleichen Parametern bedeuten. Weit hergeholt also ein "Array of Cluster". Ob das in deinem Sinne (bzw. dem der Applikation ist) weis ich natürlich nicht.

Zitat:Nur wenn ich das so mache, wie ich es so wie in der andere Lösung (als Cluster Array) verwende.
Diesen Satz verstehe ich überhaupt nicht.

Zitat:Es geht um das Cluster mit dem Delete Button.
Bisher gibt es noch keinen Cluster, der einen Button enthält.
Falls du einen Button in Cluster machen willst: Der Button kann per Event abgefragt werden.

Zitat:Das Drücken des Buttons soll eine Messung löschen.
Besteht die Messung aus den Daten, von denen Du obern sprichst, die in einen Cluster sollen? Dann muss der Delete-Button nicht zwangsläufig mit in den Cluster. Ich würde das so machen:
* Messwerte in Cluster. Anordnung möglichst horizontal. Höhe also möglichst klein halten.
* Cluster in Array
* Anzeigen des Arrays: Array nach unten aufziehen, sodass mehrere Cluster (Array-Elemente) angezeigt werden.
* Das oben im Array angezeigte Element kann über das Property IndexWerte erreicht werden.
* Die Messwerte kommen durch bundeln in den Cluster.

Das Löschen eines Elementes geht so:
* Delete-Button, der nicht in einem Cluster liegen muss, drücken.
* Im Event das Property IndexWerte auslesen und mit diesen Wert einen Index im Array löschen
* Array wieder anzeigen.

Zitat:Da ich hier eine State-Machine gebaut habe, tut der Measurement Button genau das was er soll (die Messung starten) und es ist in dieser Version für mich erst einmal aktzeptabel.
Ja, so ist es richtig.

Zitat:Das Konzept habe ich von National Instruments einfach übernommen und es erscheint mir bisher auch als sehr tauglich.
Du kannst das aber auch so sehen: Das ist keinen "Konzept von NI", sondern ein "allgemeines Programmier-Prinzip": In jeder anderen Sprache würde man das genau so machen.


RE: Dynamisches Cluster/Button-Array mit Steuerung - Rene123 - 27.04.2016 08:05

@ IchSelbst

Ich habe mein Programm komplett umgebaut, da mir ihre Art der State Machine viel effizienter erscheint.
Leider bin ich hier über ein neues Problem gestolpert. Ich hoffe, dass das trotzdem noch zu diesem Thema
passt, da ich ja damit immer noch die Löschfuntkion der Buttons implementieren möchte.

In der nullten Sequenz der gestaplten Struktur (Datensatz), wurden Konstanten der Referenzen in ein Cluster
gepackt und in den "Variablen Datensatz" geschoben. Damit bekommt man scheinbar die Referenznummer in der SubVi.

Wenn ich das mache, dann bekomme ich die Daten im SubVi nicht mehr aus dem Variant raus. Hier kommt der
Fehler #91/1055. Ich habe bereits gelesen, dass das nur geht, wenn der Datentyp genau gleich ist.

Wie erhalte ich die Referenznummern aus dem Cluster in verschiedenen SubVis?

Vielen Dank im voraus für die professionelle Hilfe.


RE: Dynamisches Cluster/Button-Array mit Steuerung - IchSelbst - 27.04.2016 22:27

(27.04.2016 08:05 )Rene123 schrieb:  da ich ja damit immer noch die Löschfuntkion der Buttons implementieren möchte.
Das ist dein gutes Recht ...

Zitat:In der nullten Sequenz
[*cooldown*]: Es gibt keine "nullte Sequenz". Es gibt nur eine "erste Sequenz" oder eine "Sequenz mit Kennung Null". Das ist wie bei den Menschen: Es gab einen ersten Menschen, nicht aber einen nullten.

Zitat:In der nullten Sequenz der gestaplten Struktur (Datensatz), wurden Konstanten der Referenzen in ein Cluster gepackt und in den "Variablen Datensatz" geschoben. Damit bekommt man scheinbar die Referenznummer in der SubVi.
Im Allgemeinen gilt: Jawohl, so bekommt man Referenzen in ein SubVI.

Im Speziellen muss ich einige Aussagen berichtigen:
"Konstanten der Referenzen": Du packst keine "Konstanten der Referenzen" in eine Cluster, sondern "Referenzen auf ein Objekt" (Bedien- oder Anzeigeelement). Wenn du von der Referenz eine Konstante erstellt hast und hast diese Konstante in den Cluster gepackt, dann ist das unlogisch.
Ich gehe immer so vor:
* Im Frontpanel: Erstelle die Referenzen von den Objekten, deren Referenzen in einem Cluster zusammengefasst werden sollen.
* Im Blockdiagramm: Erstelle Anzeigeelemente von allen diesen Referenzen.
* Im Frontpanel: Platziere einen leeren Cluster auf das Frontpanel und ziehe alle erstellen Anzeigeelemente in das leere Cluster.
* Im Frontpanel: Wandle den Cluster in einen stricten Typ um ...
* Im Blockdiagramm: Platziere eine Konstante des eben erstellen Typs und verwende diese Konstante als Eingang eines Bundle-Elementes ...
* Im Blockdiagramm: Den Ausgang des Bundle gibt du auf den Variant-Eingang des SubVIs.
* Im SubVI: Eine Konstante des stricten Typs als Typkennung auf des Element "Variant" nach Daten" ...

Zitat:Wenn ich das mache, dann bekomme ich die Daten im SubVi nicht mehr aus dem Variant raus. Hier kommt der Fehler #91/1055. Ich habe bereits gelesen, dass das nur geht, wenn der Datentyp genau gleich ist.
Der Typ am Typeingang und der Typ der Daten im Dateneingang des Elementes "Variant nach Daten" müssen selbstverständlich gleich sein ...

Zitat:Wie erhalte ich die Referenznummern aus dem Cluster in verschiedenen SubVis?
Sinnvoll wäre, wenn du irgendwelche VIs posten würdest, aus denen der Fehler ersichtlich ist. Dann kann man viel leichter erklären, wo der Fehler liegt und wer er ist.


RE: Dynamisches Cluster/Button-Array mit Steuerung - Rene123 - 01.05.2016 19:54

Vielen Dank für die Anleitung.
Ich habe es so ähnlich gemacht, aber nicht ganz in der gleichen Reihenfolge^^

Meine Idee war, alle Daten im Variant-Shift-Register liegen zu lassen und bei
Bedarf aus dem Variant auszupacken. Leider bin ich da auf das Hindernis ge-
stoßen, dass man immer wieder den Datentyp zur Erkennung mit Variant-To-Data
verwenden muss und For-Schleifen für das Finden verwenden muss.
Da war auch für mich klar, warum im "Variablen Datensatz" so viele Shift-Register
existieren^^

Ich habe wie gesagt jetzt das Problem, dass ich die String/Numeric etc Daten nicht
in der SubVi verwenden kann, da ich keine Kenntnis darüber habe, wie man dies
aus dem Variant holt.

Für die super Hilfe im voraus besten Dank Smile


RE: Dynamisches Cluster/Button-Array mit Steuerung - IchSelbst - 02.05.2016 22:33

(01.05.2016 19:54 )Rene123 schrieb:  Ich habe es so ähnlich gemacht, aber nicht ganz in der gleichen Reihenfolge^^
Hab ich nicht was von strikten Typen geschrieben? Bei dir hab ich aber keine gefunden - zumindest nicht die, die notwendig sind.

Ohne strikte Typen kommst es ganz schnell zu größten Schwierigkeiten - irgendwann wird nämlich das Ändern dieser Typen ganz aufwändig. Und nur Elemente, also ohne jede Typisierung, würde ich sowieso nicht machen.

Was ich ja gar nicht verstehe:
Warum gibt es zwei Hauptprogramme: Eines namens GUI und eines Namens Main? Und warum gibt es manche Cluster zwei, drei Mal im Projektverzeichniss? Das ist total verwirrend.

Zitat:Meine Idee war, alle Daten im Variant-Shift-Register liegen zu lassen und bei Bedarf aus dem Variant auszupacken. Leider bin ich da auf das Hindernis ge-
stoßen, dass man immer wieder den Datentyp zur Erkennung mit Variant-To-Data verwenden muss und For-Schleifen für das Finden verwenden muss. Da war auch für mich klar, warum im "Variablen Datensatz" so viele Shift-Register existieren
Learning by doing ...

Zitat:Ich habe wie gesagt jetzt das Problem, dass ich die String/Numeric etc Daten nicht in der SubVi verwenden kann, da ich keine Kenntnis darüber habe, wie man dies
aus dem Variant holt.
Ohne stricte Typen geht da gar nichts ...

Wissen muss man aber folgendes:
Cluster mit Buttons, die Schaltverhalten "Latch" haben, funktionieren über Referenz-Zugriff (Property) nicht optimal: Von solchen Clustern kann man per Referenz nur Variant-Werte bekommen. Daher lieber den Button als "Schalter" definieren - dann kommt aus dem Propertynode auch ein "richtiger" Datenwert heraus.

Attached ein Muster mit stricten Typen und der Delete-Funktionalität.


RE: Dynamisches Cluster/Button-Array mit Steuerung - Rene123 - 09.05.2016 12:34

Vielen Dank für die Hilfe.

Habe jetzt sehr viel diesbezüglich durch die Hilfe gelernt Smile
Leider muss ich das Projekt noch von den überflüssigen
VI's bereinigen.

Ich habe leider doch noch ein paar Fragen zu der Geschichte:

1.) Das Cluster Array (Measurement Tab) soll sich selbstständig befüllen.
-> Ich hatte mir überlegt, dass ich den State "Start Measurement Button"
so lange aufrufe bis die Anzahl der Messungen mit der "Measurement No"
übereinstimmt.
--> Kann man das ohne Eingriff in die Loop Condition realisieren, weil die
Schleife nur einmal läuft?

2.) Könnten man dies auch mit Rekursion lösen? Gibt es da Probleme mit den
Referenzen?

Für die Hilfe im voraus besten Dank Smile


RE: Dynamisches Cluster/Button-Array mit Steuerung - IchSelbst - 09.05.2016 19:04

(09.05.2016 12:34 )Rene123 schrieb:  Leider muss ich das Projekt noch von den überflüssigen VI's bereinigen.
Finde ich auch. Weil: Mit dem, was du da als ZIP gepostet hast, kann niemand was anfangen ...

Zitat:1.) Das Cluster Array (Measurement Tab) soll sich selbstständig befüllen.
-> Ich hatte mir überlegt, dass ich den State "Start Measurement Button" so lange aufrufe bis die Anzahl der Messungen mit der "Measurement No" übereinstimmt.
-> Kann man das ohne Eingriff in die Loop Condition realisieren, weil die Schleife nur einmal läuft?
Geht alles. Ich sehe zur Zeit nichts, was dagegen spricht.
Verstehen tue ich allerdings nicht, was "weil die Schleife nur einmal läuft" mit den Änderungen zu tun hat. Wie und ob die Schleife läuft, dürfte für die Änderungen unerheblich sein.


Zitat:2.) Könnten man dies auch mit Rekursion lösen? Gibt es da Probleme mit den Referenzen?
Zuerst würde ich sagen, Rekursion im Allgemeinen ist hier fehl am Platz. Um eine genauere Aussage machen zu können, müsste ich wissen, welches SubVI rekursiv aufgerufen werden soll.

Bevor Rekursion zum Einsatz kommt, sollte über eine vertiefte Unterprogramm-Struktur nachgedacht werden.