INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Frage zu Arrays



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.02.2010, 16:27
Beitrag #1

eliot Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Feb 2010

2009
-
de

38118
Deutschland
Frage zu Arrays
Hallo,

seit ein paar Tagen muss ich mich mit LabVIEW beschäftigen.
Eigentlich komme ich aus der Java/c/C++ Welt und habe so meine
Verständnis Probleme mit den Arrays von LabVIEW.

Ich gehe davon, dass LabVIEW dynamischeArrays nutzt (leider gibt es hier zu keinerlei
Angaben).

Beim Anlegen eine neuen 1 dimensionalen Arrays hat das Array die Größe q mit dem
Wert 0 (ich nutze uint32).
Mit "In Array Einfügen" lassen sich anscheinend weitere Elemente in ein Array einfügen
(nicht ersetzen). Gibt man kein Index an, wird das Element an das Ende desArrays
angehängt. In unserem Fall wäre die Länge des Arrays dann 2.

Nun zu meinem Problem: Ich habe, um Arrays und Objektorientierung in LabVIEW
zu verstehen, eine Klasse Vector 3D entworfen. Sie Beinhaltet ein
(Kontruktor überschreiben gibt es nicht?!) 1 dimensionales dynamisches Array (statische
Arrays gibt es nicht?!). Das erste Element (Index 0) sollte demnach 0 sein.

Zum Initialisieren (setzen) des Vectors habe ich das Vi "Set" implementiert
(siehe angehängtes Bild).

Den Vector setze ich mit Set und lasse mir die Länge des Vectors ausgeben
(siehe use.png)?
Nach meiner Interpretation von Arrays sollte das Array im Objekt immer größer
werden (+3 bei jeder Schleife), da in set die Integer an das Array angehängt werden.

Was natürlich nicht gewünscht ist.
Allerdings wird das Arrays nicht größer, sondern enthält immer nur die
drei gesetzetn Integer Werte!?

Irgendwie verstehe ich das nicht?

regards
eliot


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 16:57
Beitrag #2

eliot Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Feb 2010

2009
-
de

38118
Deutschland
Frage zu Arrays
Ups, ich antworte mir mal selbstWink
Da die Klasse innerhalb der While-Schleife ist,
wird sie immer neu Initialisiert und damit natürlich auch das Array.

Dann wandele ich die Frage mal ab: Wie kann ich ein vorhandenes
Array löschen (clear)?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 17:09
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Frage zu Arrays
' schrieb:Wie kann ich ein vorhandenes Array löschen (clear)?
Nichts, also ein leeres Array, zuweisen.

Und mach dir mal keine Sorgen, weil es keine statischen Arrays gibt. Auch statische Arrays würden gemäß des Datenflußprinzips ständig kopiert werden. Ob ein statisches oder ein dynamisches verarbeitet wird, das kommt aufs selbe raus.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 18:37
Beitrag #4

eliot Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Feb 2010

2009
-
de

38118
Deutschland
Frage zu Arrays
' schrieb:Nichts, also ein leeres Array, zuweisen.

Und mach dir mal keine Sorgen, weil es keine statischen Arrays gibt. Auch statische Arrays würden gemäß des Datenflußprinzips ständig kopiert werden. Ob ein statisches oder ein dynamisches verarbeitet wird, das kommt aufs selbe raus.


BTW ist das oben gezeigte Diagramm sonst ok?
Also werden die Arrays tatsächlich immer kopiert,
so dass ich sie immer wieder neu zuweisen muss?

Ist es "good code" wenn man möglichst viel Klassen erledigt?
Bin das einfach so gewohnt von Java/C++.

Oder sind unter LabVIEW andere Methoden/Programmierstile sinnvoller?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 18:51
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Frage zu Arrays
Hallo eliot,

das kommt ganz darauf an, was du machen willst... Also: was willst du mit deinem Array machen? Nach dem, was du bisher gezeigt hast, würde ich dir eine FGV aka LV2-style global aka ActionEngine empfehlenCool

Also ich komme bisher ganz ohne LVOOP/Klassen aus - und das auch bei recht großen Programmpaketen. (Habe allerdings auch so meine Probleme mit OOP/Klassen/Methoden, da mir einfach mal der C++/Java/sonstwas-Hintergrund fehlt.)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 19:30
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Frage zu Arrays
' schrieb:BTW ist das oben gezeigte Diagramm sonst ok?
Naja, eigentlich nein.
Da sind lauter Wires mit unnützen Ecken und Überschneidungen. Das geht so nicht. Hehe
Außerdem würde ich zum Anhängen das Element "Erstelle Array" verwenden anstelle von "In Array einfügen".

Ansonsten ist es wohl richtig: Wenn du das Feld "Array" (der Name ist auch schlecht gewählt) erweitern willst, muss du es so entbundeln, erweitern und wieder bundeln.

Zitat:Also werden die Arrays tatsächlich immer kopiert, so dass ich sie immer wieder neu zuweisen muss?
Du musst sie nicht neu zuweisen. Das geht ja alles automatisch.
Durch das Entbundeln entsteht eine Datenkopie ("Array"). Mit dieser Kopie wird gearbeitet. Beim Bundeln wird die eben erweiterte Kopie wieder in die Klasse kopiert. Es ist also nicht so, dass über einen Pointer in den Speicher geschrieben wird, der physikalisch immer in der Klasse liegt.
Hinweis:
Ein statisches Array kann man ganz leicht simulieren: Einfach ein dynamisches Array vorbesetzen mit der maximalen Anzahl von Elementen und dann immer "In Array ersetzen" verwenden.

Zitat:Ist es "good code" wenn man möglichst viel Klassen erledigt?
Sag ich mal so:
Guter LV-Code ist dann, wenn das Datenflußprinzip eingehalten ist. Und wenn alles wie es sich gehört sequenziert ist. Am besten noch mit Error-Cluster. Und wenn der Styleguide eingehalten wird.

Zitat:Oder sind unter LabVIEW andere Methoden/Programmierstile sinnvoller?
Da gehts mir wie dem GerdW: Ich hab für Klassen keine Verwendung. Es geht sehr gut ohne.
"Funktionale Globale Variablen" (FGV) sind ein ideales Mittel, um Daten gekapselt zu halten: Kapselung, Properties, private Methoden/Felder etc. - alles ohne OOP mit FGVs möglich. Multithreading geht sowieso automatisch in LV, ohne dass es der Programmierer merkt. Und zum Datenaustausch zwischen unabhängigen Programmteilen gibt es Queues und Melder.

Der OOP-Hintergrund fehlt mir als altem (?) Delphi-Programmierer zwar nicht, Klassen im Lehrbuchstil mach ich aber trotzdem weder in Delphi noch in LV.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2010, 20:15 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2010 20:16 von Y-P.)
Beitrag #7

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Frage zu Arrays
Gut oder schlecht kann man nicht sagen. Es ist halt anders.
Aber selbst der Dozent von "LabVIEW Advanced I" hatte damals gesagt, dass er (und seine Kollegen) die Klassen nicht verwendet, obwohl er sich damit auskennt und uns einen kleinen Überblick verschafft hat.
Manche verwenden das einfach um es mal zu probieren, aber brauchen tut man es definitiv nicht.
Ich habe auch schon Großprojekte gemacht, bin aber bisher (Gott sei Dank) ohne Klassen ausgekommen. Ich hatte zwar "Klassen" früher an der Hochschule mal im Rahmen der Informatik-Vorlesung, bin aber nie wirklich durchgestiegen und deshalb auch froh, dass man in LabVIEW ziemlich gut ohne Klassen leben kann.
Wenn Du aber Interesse hast, kann Dir Eugen (eg) bestimmt weiterhelfen. Der verwendet das glaub' öfters mal. Wink

Gruß Markus

' schrieb:Ist es "good code" wenn man möglichst viel Klassen erledigt?
Bin das einfach so gewohnt von Java/C++.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2010, 09:18
Beitrag #8

eliot Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Feb 2010

2009
-
de

38118
Deutschland
Frage zu Arrays
Hallo,

vieln Dank für die vielen Antworten!

Anbei zwei Bilder der funktionierenden Lösung (Neue set Methode und der Use Fall).

Änderungen in Set:

1. Wenn das Array noch nicht initialisiert ist, wird es mit {0,0,0} vorbelegt
(ist nur beim ersten Aufruf von Set nötig).
2. Danach Erfolgt ein Ersetzen, statt anfügen.

Änderungen in Use:
Vector3D wird außerhalb der While-Schleife initialisiert.

Anmerkung: Wenn ich das Array in der Set Methode nicht neu zuweise, funktioniert set
nicht. Es wird also immer eine Kopie des Arrays erzeugt (was nicht gerade performant ist).

Bleibt die Frage nach Kontruktoren: Ist es in LabVIEW möglich Konstruktoren zu implementieren?

regards
eliot


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2010, 09:59
Beitrag #9

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Frage zu Arrays
Hi,

drei Elemente an unterschiedlichen Indizes eines Array einzufügen macht man übrigens so:
   

Man kann das VI nach unten aufziehen. Verbindet man den ersten Index-Eingang und lässt die anderen frei, wird es als fortlaufend nummeriert betrachtet.


Gruß SeBa


PS:
Keine Ahnung ob das einen Performanceunterschied macht.

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2010, 10:06
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Frage zu Arrays
' schrieb:Anbei zwei Bilder der funktionierenden Lösung (Neue set Methode und der Use Fall).
Hier gebe ich noch folgende Denkanstöße.
Ein Vektor ist ja ein abgeschlossenes Konstrukt im Sinne eines Datensatzes, der immer 3 Werte hat. So gesehen ist es sinnvoll, die drei Werte als Cluster zu handlen. Der Cluster, wie ein Struct in C, repräsentiert dann den Vektor. Mit Cluster würde nur eine Ersetz-Operation nötig sein (in einem Array of Cluster).
Man kann auch innerhalb eines Arrays auch einen ganzen Arrayteil ersetzen. Einfang am Dateneingang ein Array anschließen.

Zitat:Anmerkung: Wenn ich das Array in der Set Methode nicht neu zuweise, funktioniert set nicht. Es wird also immer eine Kopie des Arrays erzeugt (was nicht gerade performant ist).
Das mit dem Bundeln ist vom Datenfluß-Prinzip her nötig.
Hinweis:
Es gibt ein Inplacement-Konstrukt. Das hat die Aufgabe, Speicherallozierungen zu vermeiden. Mit diesem Konstrukt ist es dann tatsächlich möglich in einen bestehenden Speicher zu schreiben.

Zitat:Bleibt die Frage nach Kontruktoren: Ist es in LabVIEW möglich Konstruktoren zu implementieren?
Ein Konstruktor im Sinne, dass man zur Laufzeit ein neues Objekt createn kann (so komplett mit Speicherallozieren etc.), gibt es in LV nicht (mal von einem Verzweigungsknoten abgesehen). Und den Rest, der im Konstruktor steht, wie z.B. das Vorbesetzen von Feldern, das kann man ja mit einem entsprechenden SubVI machen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Auswahl eines Arrays anhand des Wertes eines zweiten Arrays treffen alan 2 4.592 19.02.2015 16:12
Letzter Beitrag: alan
Bug Arrays... immer wieder Arrays nurso 6 7.511 15.08.2014 10:39
Letzter Beitrag: Lucki
  Performance-Frage: Große Arrays in Cluster-Schieberegister Matze 20 20.723 14.12.2010 13:37
Letzter Beitrag: rasta
  Frage zu Arrays und lokalen Variabeln bluesaturn 11 11.113 08.03.2010 16:07
Letzter Beitrag: unicorn
  Array of Cluster(Arrays) nach Cluster(Concatenate Arrays) rasta 7 9.776 18.12.2008 12:33
Letzter Beitrag: rasta
  Frage zur subtraktion von Arrays Benjamin84 4 5.701 09.07.2008 18:16
Letzter Beitrag: Benjamin84

Gehe zu: