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!
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Frage zu Arrays
Ich habe das Gefühl, dass Du mit aller Gewalt die Denkweise von C++, Java,... auf LabVIEW übertragen möchtest.
Es ist besser wenn Du bei LabVIEW offen für was neues bist und Dir die "normale" LabVIEW-Programmierung aneignest. Die objektorientierte Programmierung mit LabVIEW macht die ganze Sache nur viel schwieriger, vor allem wenn Du auch hier im Forum mal Fragen zu irgendetwas hast.
Letzendlich bleibt das aber Deine Entscheidung.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
03.02.2010, 11:30 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 11:38 von eliot.)
Vielen Dank für eure wirklich guten Antworten und die Unterstützung.
Echt sehr nette Leute hier im Forum.
Das Beispiel hier war eher zu Lehrzwecken meinerseits gedacht,
nicht als funktionales Beispiel (ich wollte Klassen und Arrays ausprobieren).
Ich habe hier ebenfalls ein Buch zu LabVIEW:
Einführung in LabVIEW von Wolfgang Georgi
Das Buch läßt leider viele Fragen offen (wie das Handbuch von LabVIEW auch).
Mir scheint die Literatur zum Thema LabVIEW scheint sich nicht gerade an Informatiker
zu richten, vielleicht habe ich auch einfach die falsche Sichtweise auf die Dinge.
Viele Dinge sind nicht eindeutig und hinreichend Dokumentiert, oder ich
mache mir einfach zu viele Gedanken.
Eine Frage zu Clustern (Structs im weiteren Sinne): Kann ich diese
irgendwie so definieren, dass sie in mehreren Vis zur Verfügung stehen?
Denn aufteilen in Funktionen (SubVis) würde ich gerne weiterhin,
auch ohne Klassen (das macht die Sache einfach übersichtlicher).
Wie würde das obere Beispiel (Cluster: Vector3D, SubVi Set und Get)
als mit Cluster aussehen?
EDIT: Wenn ich den Debug Modus Aktiviere (gelbe Lampe) kann ich die
den Datenfluss verfolgen. Aber leider sehe dann nicht, was in den SubVis geschieht.
Gibt es da eine Möglichkeit?
BTW Ich glaube ich sollte das Thema dieses Threads in "Noob Fragen" ändern
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Frage zu Arrays
Dafür könntest Du z.B. eine FGV (Funktionale globale Variable) nehmen.
Gruß Markus
' schrieb:Eine Frage zu Clustern (Structs im weiteren Sinne): Kann ich diese
irgendwie so definieren, dass sie in mehreren Vis zur Verfügung stehen?
Denn aufteilen in Funktionen (SubVis) würde ich gerne weiterhin,
auch ohne Klassen (das macht die Sache einfach übersichtlicher).
Wie würde das obere Beispiel (Cluster: Vector3D, SubVi Set und Get)
als mit Cluster aussehen?
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
03.02.2010, 11:42 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 11:48 von GerdW.)
was du suchst sind typedefs! Einfach den Cluster definieren, markieren, Menu->Edit->Customize Control, dort dann als typedef einstellen und speichern. Dann kannst du den Cluster überall einfügen (Rechts-Klick auf Frontpanel->choose control) und er wird (bei Änderungen am typedef) automatisch angepasst. Dazu gibt's auch was in der LabVIEW-Hilfe
Edit:
Beim Debuggen auf Einzelschritt umstellen. Dann kannst du auch in SubVIs hineinsteppen...
EditEdit:
Den Vorschlag mit FGVs hattest du ja schon weiter oben erhalten. Und der Tipp, den Datenfluß mit einem ErrorCluster zu bestimmen, kam bestimmt auch schon...
"BTW ..." JA!
Edit3:
Wenn du erst ein Array mit 3 Werten initialisiert und danach dann die 3 Werte durch andere ersetzt, dann kannst du auch gleich einfach ein Array bauen aus den 3 Werten...
was du suchst sind typedefs! Einfach den Cluster definieren, markieren, Menu->Edit->Customize Control, dort dann als typedef einstellen und speichern. Dann kannst du den Cluster überall einfügen (Rechts-Klick auf Frontpanel->choose control) und er wird (bei Änderungen am typedef) automatisch angepasst. Dazu gibt's auch was in der LabVIEW-Hilfe
Edit:
Beim Debuggen auf Einzelschritt umstellen. Dann kannst du auch in SubVIs hineinsteppen...
EditEdit:
Den Vorschlag mit FGVs hattest du ja schon weiter oben erhalten. Und der Tipp, den Datenfluß mit einem ErrorCluster zu bestimmen, kam bestimmt auch schon...
"BTW ..." JA!
Edit3:
Wenn du erst ein Array mit 3 Werten initialisiert und danach dann die 3 Werte durch andere ersetzt, dann kannst du auch gleich einfach ein Array bauen aus den 3 Werten...
Was sind FGVs?
EDIT: Ziehe die Frage zurück, das Buchweiss was dazu
Wie kann ich ein Array gleich mit drei Werten initialisieren?
EDIT2: Ok, einfach aufziehen!
Typedefs, gute Sache, das werde ich mir anschauen
(Endlich mal wieder ein bekanntes Wort)!
03.02.2010, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 12:18 von eliot.)
das Array Initialisieren scheint nicht zu gehen.
Das Array wird wie in Bild eins Konfiguriert, allerdings
hatt es dennoch die Länge 0.
Da ich im Set Vi das Array erstellen raus genommen habe
(da nicht mehr notwendig), kann die Array erstzen Funktion
nichts machen (Array hat dir Länge 0).
Zum ersten Bild:
Wenn in der Indexanzeige 3 steht, dann bedeutet das, dass das erste im Frontpanel angezeigte Element den Index 3 hat. Die Elemente Index 0, 1 und 2 sind also nicht sichtbar. Demzufolge kann man aus dem Bild nicht ersehen, ob die Länge 3 ist oder nicht.
Zum zweiten Bild:
Das mit "In Array ersetzen" stimmt so aber nicht: Du hast auf den zweiten Index-Eingang die variable Y gelegt.
Eins zur Typdefinition:
Ich ziehe strikte Typdefinitionen vor.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
03.02.2010, 13:17 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 13:29 von eliot.)
' schrieb:Zum ersten Bild:
Wenn in der Indexanzeige 3 steht, dann bedeutet das, dass das erste im Frontpanel angezeigte Element den Index 3 hat. Die Elemente Index 0, 1 und 2 sind also nicht sichtbar. Demzufolge kann man aus dem Bild nicht ersehen, ob die Länge 3 ist oder nicht.
Zum zweiten Bild:
Das mit "In Array ersetzen" stimmt so aber nicht: Du hast auf den zweiten Index-Eingang die variable Y gelegt.
Eins zur Typdefinition:
Ich ziehe strikte Typdefinitionen vor.
Ups, ja, Arrays setzen war falsch verbunden, danke!
Zum ersten Bild: Wie initialisiere ich denn dann Array mit uint32 der Länge 3???
Laut Buch, soll ich das Array auf 3 Elemente aufziehen, dann wird ein Array der länge
3 initialisiert?!
Vorher hatte ich die Funktion "Array initialisieren" genutzt, wenn die Länge des Arrays
nicht 3 ist (in der set Mehode/Vi).
Das hatte dan Funktioniert. Ich habe die Änderung vorgenommen,
da mir gesagt wurde, dass ich Blockdiagramm das Array schon mit 3 Werten
vorbelegen kann, eine anschließdene Initialiserung ist dann nicht mehr nötig!
regards
eliot
EDIT: Ok, das Aufziehen eines Ararys allein reicht nicht aus.
Man muss zusätzlich noch folgendes ausführen: Bearbeiten -> Aktuelle Werte als Standard.
Dann wird das Array der Länge 3 initialisiert.
Das Problem ist nur: Man hat keinerlei Kontrollmöglichekiten,
ob eine Array mit einem Standard intiialisiert wird oder nicht.
Wie kan ich festellen, dass ein Array mit Standards versheen ist?
03.02.2010, 13:45 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 13:49 von GerdW.)
ich hatte nicht gesagt, dass du weiterhin "replace array subset" benutzen sollst... Ich sagte (äh: meinte), dass du stattdessen einfach "Build Array" benutzt! Warum erst initialisieren und Werte ersetzen, wenn ein einfache BuildArray (hier) genauso gut funktioniert...
Edit: Für ein "BuildArray" musst du vorher nichts initialisieren (wir sind ja hier nicht bei C#, oder so )
@IchSelbst:
Strikte TypeDefs haben den Vorteil (?), dass auch "kosmetische" Einstellungen propagiert werden. Dies ist für einen einfachen Datenbuffer, der m.M. nach in diesem Fall nie auf dem Userinterface zu sehen sein wird, reichlich Overkill...
EditEdit:
Wenn du ein Array initialisierst (ich rede von der Funktion "Init Array"!), dann gibst du einen Standardwert vor. Du weißt also, ob und womit initialisiert wurde... Wenn du das hinterher nochmal überprüfen willst, musst du dir eine der zahlreichen Vergleichsfunktionen aussuchen.
' schrieb:Strikte TypeDefs haben den Vorteil (?), dass auch "kosmetische" Einstellungen propagiert werden.
Das ist kein Vorteil, sondern ein Nachteil
Zitat:Dies ist für einen einfachen Datenbuffer, der m.M. nach in diesem Fall nie auf dem Userinterface zu sehen sein wird, reichlich Overkill...
Gerade wenn der Cluster nicht am FP zu sehen ist, ist es sinnvoller eine strikte Definition zu machen.
Mit normalen Definitionen habe ich bisher mehr Probleme (keine Schwierigkeiten, sondern Probleme) gehabt, als die strikte Definition Einschränkungen hat. Probleme treten immer dann auf, wenn der Typ geändert werden soll.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).