LabVIEWForum.de
einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen (/Thread-einzelnes-Element-eines-leer-initialisierten-4-dimensionalen-Arrays-aendern-einfuegen)



einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - Graf_Dracula - 04.07.2012 18:01

OK, die Überschrift hört sich hoffentlich schlimmer an, als es eigentlich ist ...

Ich möchte die Menüstruktur eines Reglers nachbilden, wobei eine komplette Anzeige-Ebene aus verschiedenen Variablen besteht. Eine Oberfläche/Anzeige ist daher ein Cluster aus verschiedenen Elementen. In jeder einzelnen Ebene/Oberfläche/Anzeige kann jedes einzelne Element wieder entweder auf eine weitere Ebene verweisen, oder ein bestimmter Wert sein ... insgesamt für mich also ein 4-dimensionales Array aus Clustern.

Hier mal ein hoffentlich halbwegs verständliches Bildchen:
[attachment=40553]

Aus einer entsprechenden *.csv-Datei parse ich die ganzen Werte heraus, die in das jeweilige Cluster eingetragen werden, was soweit auch schon perfekt klappt. In der csv-Datei steht unter anderem auch drin, in welche der jeweils 4 Dimensionen es eingetragen werden muss. Nur wie verklickere ich das Labview??? Mit dem Punkt "In Array einfügen" geht das nämlich gar nicht:

http://zone.ni.com/reference/de-XX/help/371361H-0113/glang/insert_into_array/ schrieb:Das Array, das mit n- oder n-1-dimens. Array verbunden wird, muss genauso viele Dimensionen haben wie das mit n-dimensionales Array verbundene Array oder eine Dimension weniger. So kann in ein 2D-Array beispielsweise kein einzelnes Element eingefügt werden oder in ein 3D-Array keine einzelne Reihe (ein 1D-Array). Dagegen kann jedoch ein 2D-Array mit einer einzelnen Reihe in ein 3D-Array eingefügt werden. Das resultierende Array wird dann automatisch aufgefüllt.

Wie folgt wäre mein Gedanke gewesen, wie es rein logisch funktionieren müsste/sollte ein Element an die Position 0:1:2:1 in diesem mehrdimensionalen Array zu schreiben, Labview warum auch immer aber nicht zuläßt.

[attachment=40554]

Wie also kann ich ein einzelnes Element (Hier ist ein Element eben ein Cluster) schreiben, ohne die Dimensionen nacheinander voneinander zu trennen und danach wieder zusammen zu basteln?


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - jg - 04.07.2012 19:32

1) IMHO ist so ein Aufbau eigentlich eine Baumstruktur und lässt sich auch so darstellen.

2) Wie die Beschreibung der Insert-Array-Funktion erklärt, es geht halt nicht, darüber in ein 4D-Array nur ein Element einzusetzen.

3) Du baust dir ein 5D-Array zusammen! (Start mit 1D-Array + 4x Build-Array)

4) Mögliche Lösung, wenn du unbedingt bei 4D-Array bleiben willst: Ermittle zu Beginn die maximale Größe pro Dimension, erstelle dir ein entsprechendes Array mit Initialize Array und arbeite dann mit Replace Array Subset.

Gruß, Jens


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - GerdW - 04.07.2012 20:19

Hallo,

abgesehen von der eigentlich zu verwendenden Baumstruktur:
Ist dir das Grundkonzept von verlinkten Listen/Feldern ein Begriff? (War sehr viel früher ein Grundkonzept bei der Datenverwaltung in PASCAL...)

- Du erweiterst deinen Cluster um einen Eintrag für einen Vorgänger und einen Nachfolger.
- Du kannst alle Cluster in einem 1D-Array verwalten.
- Um von einem Element zu einem nächsten zu kommen, hangelst du dich durch die "Verlinkungen"...

Weiterer Punkt:
Wie groß willst du dein 4D-Array machen? In LabVIEW ist ein Array immer "rechteckig", d.h. in alle Dimensionen immer gleich viele Elemente. Wenn dein "Baum" ungleichmäig lang ist, hast du (sehr) viele leere Elemente in deiner 4D-Struktur - die aber trotzdem Speicher belegen...

Weiterer Punkt:
Viele Einsteiger haben Probleme mit der korrekten Verwendung von Array-Funktionen...
Du willst eigentlich gar kein Element in ein 4D-Array "einfügen" (was das Verschieben anderer Elemente zur Folge hätte)!
Was du eigentlich willst, ist, in einem bestehenden Array ein Element an einer bestimmten Stelle einzutragen - was man mit ReplaceArraySubset erledigt. Nur muss man dafür vorher schon ein entsprechend großes Array angelegt haben - was man wiederum mit InitArray erledigt!
Andererseits hast du aber schon 7 Jahre (!) LabVIEW-Erfahrung und solltest dies eigentlich wissen...


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - Graf_Dracula - 04.07.2012 21:15

(04.07.2012 20:19 )GerdW schrieb:  Andererseits hast du aber schon 7 Jahre (!) LabVIEW-Erfahrung und solltest dies eigentlich wissen...

Vor 7 Jahren hab ich mit Labview Programmieren angefangen - richtig. Leider war das bei meinen Arbeitgebern in letzter Zeit eher nur Nebensache, wodurch ich mich keinesfalls als einen 7-jährigen Profi bezeichnen würde, sondern im Moment eher einfach nur als nicht mehr ganz blutigen Anfänger.


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - j.fischer - 10.07.2012 16:10

So ... ich muss jetzt nochmal nachfragen, wie genau ich das denn am besten realisieren kann ...

Punkt 1, ich möchte die komplette Menüstruktur in einer Excel-Liste bearbeiten können, da sich die Struktur relativ schnell und häufig ändert. Diese Excel-Daten in eine *.csv-Datei konvertiert einlesen klappt schon, allerdings eben mit der ungünstigen mehrdimensionalen Array-Lösung.

Punkt 2, je Menüeben können aktuell bis zu 24 Menüpunkte existieren (später vllt. auch mal noch mehr) und jeder dieser Menüpunkte kann entweder in eine ebenso große tiefere Ebene verzweigen oder ist ein änderbarer Menüpunkt

Wie ich das mittels einer Baumstruktur realisieren soll, entzieht sich mir völlig, da ich nicht wüßte, wie ich beim parsen aus der csv-Datei Zeiger auf die entsprechenden Unterebenen anlegen soll ...

Wenn jemand ne Erklärung hat, Bitte am besten irgendwie grafisch, damit ich das auch verstehe und mir vorstellen kann :-)


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - jg - 10.07.2012 16:30

Offtopic2
Herr Fischer = Graf Dracula? Ja oder Nein? Sehr verwirrend.

Falls ja, wieso ein zweiter Account?

Gruß, Jens


EDIT:
Andere Frage: Wie sieht eigentlich deine csv-Datei aus? Die ist wohl kaum 4-dimensional!


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - Graf_Dracula - 10.07.2012 20:13

(10.07.2012 16:30 )jg schrieb:  Herr Fischer = Graf Dracula? Ja oder Nein? Sehr verwirrend.

Falls ja, wieso ein zweiter Account?
Weil ich notorisch vergesslich bin, durch AG-Wechsel, RechnerCrashUndAlleLoginDatenWech, NochmalNeuAnmelden ... usw. jetzt einfach offensichtlich 2 Accs habe und auf einem der Rechner doch noch mein alter Login automatisch abgespeichert war ...

(10.07.2012 16:30 )jg schrieb:  Andere Frage: Wie sieht eigentlich deine csv-Datei aus? Die ist wohl kaum 4-dimensional!
Tss ... der hat ja gar keine Ahnung von Excel ... klar gehen da 4-dimensionale Daten. Nee - geht natürlich nicht, aber man kann die Daten dort so abspeichern oder demenstprechend danach einlesen, dass es was 4, 7, x-dimensionales ergibt. Das Eintragen iss halt nur bisschen tricky, iss hier aber auch egal, weil ich will ja weg davon, denn wie ich inzwischen gemerkt habe, mault Labview ab 7 Dimensionen auch rum, weil Ihm der Speicher ned mehr rechen würde, dabei sind doch in einer einzelnen Zelle (Cluster) nur 18 Strings und 6 Rings ... 7^7 = 823543 ... in den Strings vorinitialisiert standen glaub je 10 Zeichen drin ... ja OK, kommt schon bisserl was zusammen ... vor allem jede Menge leere nie benutzte Zellen.

Also .. wie könnte meine Excel-Tabelle aussehen, damit ich das Menü daraus variabel einlesen kann und wie setze ich eine Baumstruktur in Labview um --- gibts da nen Tutorial oder sowas, hab nämlich noch nix gefunden.


RE: einzelnes Element eines leer initialisierten 4-dimensionalen Arrays ändern/einfügen - jg - 10.07.2012 21:14

Noch nicht selber eingesetzt, aber hier gibt es eine Baum-API:
http://lavag.org/files/file/27-tree-control-api/
In so eine Baumstruktur muss man sich selber reinfuchsen, das ist aber immer dasselbe. Auch die .NET-API macht für ein Tree-Control nichts anderes als LabVIEW (Parent, Child, etc. pp.). Es gibt ein paar Beispiele im NI Example Finder, die sind IMHO ganz hilfreich.

Gruß, Jens

P.S.: Soweit ich bisher verstanden habe, ist deine Vorlage also 1 csv-Datei, entspricht also einem 2D-Array of Strings. Jetzt musst du "nur noch" die Logik deiner 2D-Darstellung entsprechend nachprogrammieren, und schon kannst du deine Menüstruktur auch als 2D-Array in LabVIEW speichern.