LabVIEWForum.de - Aus einem Array festgelegte Werte zuweisen

LabVIEWForum.de

Normale Version: Aus einem Array festgelegte Werte zuweisen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend zusammen.

Ich bekomme aus einem Array mit numerischen Anzeigeelementen verschiedene hexadezimale Werte.
Kann mir jemand sagen wie ich zu diesen ausgegebenen hexadezimalen Werten eine Art Erklärung zuweisen kann?
Wie im Beispiel steht 1 für Birne, 2 für Apfel, 1C für Pflaume und 4 für Kürbis

Ich habe versucht über die ein Ringelement und Objekte bearbeiten Werte einzupflegen und diese über StringsUndWerte zu Verknüpfen. Allerdings stehe ich jetzt auf den Schlauch wie ich das Array mit den numerischen Elementen einbinden kann

Ich bekomme es leider nicht hin Confused
Vielleicht hat jemand einen Tipp? Dafür wäre ich sehr dankbar!
Hallo Kahlua,

Zitat:Kann mir jemand sagen wie ich zu diesen ausgegebenen hexadezimalen Werten eine Art Erklärung zuweisen kann?
Da gibt es mehrere Möglichkeiten:
- Bei einer kleineren, aber festen Auswahl an Zuordnungen könnte man eine Case-Struktur mit mehreren Case verwenden…
- Wenn deine "Hex-Werte" einen begrenzten Datentyp (wie U8, U16) verwenden, könnte man mit einer LUT (LookUpTable) arbeiten…
- Man könnte mit Datenbanken arbeiten…

Kannst du deine Aufgabe etwas genauer beschreiben? Warum willst du ein Ring-Control verwenden?
Wo kommen die Daten her und wo sollen sie verarbeitet/angezeigt werden?
Hallo Kahlua,
hab Dir mal ein Beispiel angehängt.

Gruß
Freddy
Hallo GerdW,

erstmal danke für den Input. Für eine Case Struktur sind es zu viele Werte. Sind ca 30 die meist als U16 ausgegeben werden. Bis jetzt hatte ich eine Lösung die auf eine Textdatei verweist, die aber jedes mal eingeladen werden musste. Ich hätte alles gerne im Programm hinterlegt.

Die Daten werden mir aus einer ECU ausgegeben. Diese hexadezimalen Werte varieren eben gerne von ECU zu ECU und ich hätte gerne, dass neben dem numerischen Ausgabe Array mit hexadezimalen Werten in einem zweiten Cluster sofort die Beschreibung als String ausgegeben wird. Ich dachte eben ich könnte über einen Ring die Objekte beschreiben und dann über einen Eigenschaftsknoten mit StringsUndWerte diese Werte mit dem ausgabe Array irgendwie verknüpfen, so das die Beschreibung zu dem hexadezimalen Wert erscheint. Es scheitert eher an der Umsetzung...


Hallo Freddy,

verstehe ich das richtig, das die eigentliche Zuweisung in der For-Schleife passiert und die Messwerte dann einfach aus einer konstanten rausgezogen bzw. gesucht werden? Dies Werte, die im blauen Rahmen bei dem Vorschlag stehen ändern sich bei mir ja je nach ECU... Ich werde das mal testen, ob das auch so geht.

Danke erstmal euch beiden!
Hallo Kahlua,

Zitat:Bis jetzt hatte ich eine Lösung die auf eine Textdatei verweist, die aber jedes mal eingeladen werden musste. Ich hätte alles gerne im Programm hinterlegt.
Eine externe Datei, die bei Programmstart einmalig eingelesen wird, ist doch prima!
Da kann man sehr einfach weitere ECU-Typen nachtragen, ohne gleich das Programm neu kompilieren zu müssen…

Zitat: Ich dachte eben ich könnte über einen Ring die Objekte beschreiben und dann über einen Eigenschaftsknoten mit StringsUndWerte diese Werte mit dem ausgabe Array irgendwie verknüpfen, so das die Beschreibung zu dem hexadezimalen Wert erscheint. Es scheitert eher an der Umsetzung...
Das ist in etwa das gleiche, was dir auch von Freddy gezeigt wurde: eine LUT!
Dein Ansatz hat nur den Nachteil, über die relativ langsamen PropertyNodes eines FP-Objektes deine Abfrage zu machen…

Für die LUT benötigst du:
- deine Textdatei, die die Zuordnung von Zahl zu Text festlegt: diese musst du einmalig einlesen und als zwei Arrays vorhalten (Freddy hat hier ein 2D-Array mit zwei Spalten verwendet, ich würde in 1D-Array mit den Werten und ein 1D-Array mit den Strings verwenden.)
- eine Funktion, die den ECU-Wert engegennimmt und in den zwei Arrays nach dem passenden Text sucht - wie von Freddy gezeigt! (Die Array-Konstante als Input soll nur deine "ECU" repräsentieren.)
Zitat:Eine externe Datei, die bei Programmstart einmalig eingelesen wird, ist doch prima!
Da kann man sehr einfach weitere ECU-Typen nachtragen, ohne gleich das Programm neu kompilieren zu müssen…

Das dachte ich mir auch zuerst, ist aber leider nicht gewünscht weil der User noch zusätzlich einen Schritt machen muss. Deswegen wird es jetzt geändert...


Zitat:Das ist in etwa das gleiche, was dir auch von Freddy gezeigt wurde: eine LUT!
Dein Ansatz hat nur den Nachteil, über die relativ langsamen PropertyNodes eines FP-Objektes deine Abfrage zu machen…
Ok ich gucke mal ob ich in der Hilfe etwas dazu finde.
Zitat:Für die LUT benötigst du:
- deine Textdatei,die die Zuordnung von Zahl zu Text festlegt: diese musst du einmalig einlesen und als zwei Arrays vorhalten (Freddy hat hier ein 2D-Array mit zwei Spalten verwendet, ich würde in 1D-Array mit den Werten und ein 1D-Array mit den Strings verwenden.)

Perfekt, die Textdatei existiert bereits. Ich gucke mal nach wie das funktioniert, habe bis dato noch nie eine Datei in ein Array gelesenBlush denke über die Funktion aus Tabelle lesen vermutlich...

Zitat:- eine Funktion, die den ECU-Wert engegennimmt und in den zwei Arrays nach dem passenden Text sucht - wie von Freddy gezeigt! (Die Array-Konstante als Input soll nur deine "ECU" repräsentieren.)
Kann ich dafür nicht das Array als lokale Variable verwenden für diese Funktion?

Sorry für die vielen Fragen.

Gruß
Hallo Kahlua,

Zitat:Das dachte ich mir auch zuerst, ist aber leider nicht gewünscht weil der User noch zusätzlich einen Schritt machen muss. Deswegen wird es jetzt geändert...
Wieso muss der "User einen zusätzlichen Schritt" machen, wenn dein Programm eine weitere ECU unterstützen soll?
Du als Programmierer stellst doch diese Textdatei bereit - und die ist dann wesentlich einfacher zu updaten als das komplette Programm… (Man könnte diese Datei z.B. auf einem gemeinsam genutzen Server ablegen…)
(Ich verstehe deine Beweggründe nicht…)

Zitat:habe bis dato noch nie eine Datei in ein Array gelesen denke über die Funktion aus Tabelle lesen vermutlich...
Dann lernst du ja heute gleich noch was! Big Grin

Zitat:Kann ich dafür nicht das Array als lokale Variable verwenden für diese Funktion?
- Wenn du diese "Funktion" als subVI erstellst (was man wegen Code-Kapselung und Übersichtlichkeit ja machen soll), dann hast du keine Zugriff über "lokale Variablen" in deinem aufrufenden MainVI.
- Wenn du diese Funktion nicht als subVI erstellst (warum auch immer), dann nimmst du einen Draht - um möglichen Raceconditions durch Nutzung dieser lokalen Variablen vorzubeugen!
Wozu also lokale Variablen nutzen?

Es gibt für lokale Variablen ganz klar definierte Einsatzbereiche (z.B. zum Schreiben von Werten in Controls) - aber möglichst nicht zur koordinierten Datenweitergabe…
Zitat:Du als Programmierer
Sorry. Ich bin so unerfahren, da sehe ich mich nicht als Programmieer Blush
Ich habe diese Tabelle mit Pfadeingabe eingebunden, weil ich es nicht besser wusste.


Zitat:Kann ich dafür nicht das Array als lokale Variable verwenden für diese Funktion?
- Wenn du diese "Funktion" als subVI erstellst (was man wegen Code-Kapselung und Übersichtlichkeit ja machen soll), dann hast du keine Zugriff über "lokale Variablen" in deinem aufrufenden MainVI.
- Wenn du diese Funktion nicht als subVI erstellst (warum auch immer), dann nimmst du einen Draht - um möglichen Raceconditions durch Nutzung dieser lokalen Variablen vorzubeugen!
Wozu also lokale Variablen nutzen?

Da hast du natürlich vollkommen recht....Angel

Ihr habt mir beide auf jedenfall sehr geholfen. Tausend Dank GerdW und Freddy für diesen Lösungsansatz!
Referenz-URLs