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 

FGV-Array mit Variant-Daten



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!

26.07.2011, 16:32
Beitrag #1

flattervieh Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2009

2011 Prof. SP1
2009
EN


Deutschland
FGV-Array mit Variant-Daten
Hallo zusammen.

Nachdem ich letzt hier etwas über FGVs gelesen habe, vorallem dass dadurch der Speicherverbrauch im Gegensatz zu globalen Variablen oder Property-Nodes geringer sein soll, habe ich mir jetzt ein kleines Konzept überlegt mit dem man das ganze auf beliebig viele Variablen aufblasen kann um dieses FGV-Array als Variablenspeicher für alle anfallen Variablen zu nutzen.

Die Idee ist, ein SubVI mit 3 Eingängen und (aktuell) 3 Ausgängen. Als Eingänge 2 beliebige Datentypen, einmal der Variablenname und einmal der Variablenwert, der dritte Eingang ist ein enum. Ausgänge sind Variablenname, Variablenwert un Fehler.

Das enum kann 3 Werte einnehmen.
- read: Variablenname am Eingang ist nötig
- write: Variablenname und -wert am Eingang sind nötig
- clear: kein Eingang nötig

Die Eingänge Variablenname und -wert sind vom Typ egal, da diese Eingänge im SubVI auf ein Variant-Control gehen, damit beliebige Datentypen gespeichert werden können.

Die Ausgänge Variablenname und -wert sind bisher leider noch vom Typ Variant, müssen also nach ihrer Übergabe noch umgewandelt werden (z.B. mittels "Variant to Data").

Der Fehler-Ausgang ist aktuell eigentlich dazu nötig falls eine Variable gelesen werden soll die nicht vorhanden ist.

Zur Funktion im SubVI habe ich mir überlegt dass bei einem "write" Variablenname und -wert an ein Array angehängt werden. Sollte der Variablenname bereits vorhanden sein, so wird der bestehende Wert aktualisiert.
Bei einem "read" wird in der Spalte mit Variablenname nach dem übergebenen Namen gesucht und der dazugehörige Wert zurück geliefert.
Ein "clear" führt, wie der Name schon vermuten lässt, zu einem Löschen des gesamten Arrays.



Jetzt wollte ich fragen was Ihr von dem Konzept haltet. Evtl. hat ja aber noch jemand eine Idee für eine Funktion die ich noch unbedingt mit einbauen sollte.

Schöne Grüße und einen schönen Abend
flattervieh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.07.2011, 19:08 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2011 19:10 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: FGV-Array mit Variant-Daten
Hallo flattervieh,

dein Konzept ist gut, aber: wenn du schon mit Variants arbeitest, warum dann nicht richtig?
Guckst du hier, wie man die Attribute von Variants für ebendiese Aufgabe nutzen kann Smile

Dann würde ich dir empfehlen:
- immer auch einen ErrorIn-Input vorsehen (wie willst du sonst per ErrorCluster zeitliche Abläufe koordinieren?)
- den "Variablennamen"-Ein- und Ausgang als String vorzugeben
- den Dateninput an den vorgesehenen Zweck anzupassen und den Datenausgang entsprechend schon innerhalb der FGV wieder von Variant zurückzuwandeln (wobei das teilweise schon von der oben beschriebenen Methode übernommen wird!)
- natürlich das empfohlene Anschlusspattern 4-2-2-4 benutzen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 07:23
Beitrag #3

flattervieh Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2009

2011 Prof. SP1
2009
EN


Deutschland
RE: FGV-Array mit Variant-Daten
Hallo GerdW.

Erstmal vielen Dank für die Hinweise. Den Variablennamen wollte ich eh als String machen, damit der eineindeutig ist.
Ein ErrorInput ist sicherlich sinnvoll, dazu muss ich mich dann aber erstmal noch in die Thematik mit solchen Fehlermeldungen einarbeiten und schauen wie ich das am besten nutzen kann.
Das mit den Variantattributen sieht interessant aus, dadurch kann ich die Variablen dann einfacher suchen wenn ich einen Wert aus einem großen Array suchen will.

Was meinst du aber mit "Dateninput an den vorgesehenen Zweck anpassen"? Mehrere Eingänge, mal Zahlen und mal Strings?

Und warum ist das Anschlusspattern 4-2-2-4 empfohlen? Weil es das Standardpattern ist?

Grüße
flattervieh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 07:36
Beitrag #4

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: FGV-Array mit Variant-Daten
(27.07.2011 07:23 )flattervieh schrieb:  Ein ErrorInput ist sicherlich sinnvoll, dazu muss ich mich dann aber erstmal noch in die Thematik mit solchen Fehlermeldungen einarbeiten und schauen wie ich das am besten nutzen kann.

Für eine FGV haben der Errorein- und ausgang in erster Linie die Aufgabe, die FGV nach dem Datenflussprinzip in dein Programm zu integrieren. Ohne diese Errorverdrahtung hast du die gleiche Problematik von Race Conditions wie bei normalen globalen/lokalen Variablen. Darüberhinaus kannst du mittels des Errorhandling z.B. beeinflussen, was in deiner FGV im Fehlerfall passieren soll:

   


(27.07.2011 07:23 )flattervieh schrieb:  Und warum ist das Anschlusspattern 4-2-2-4 empfohlen? Weil es das Standardpattern ist?

Zum einen ist es das Standardpattern, zum anderen sollte es vermieden werden, mehr Eingänge/Ausgänge zu verwenden. Das macht den Code wesentlich schwerer zu lesen. Werden mehr Eingänge benötigt (ich beschränke mich meistens auf 3 + Error), dann sollte man clustern statt die Eingänge auf 10+ aufzublasen Smile


Beste Grüße,
NWO

9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris
.

NI schrieb:To use the abort button is like using a tree to stop a car!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 08:49
Beitrag #5

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
RE: FGV-Array mit Variant-Daten
Nur eine kleine Info. Es gibt bereits ein Konzept für generische FGV's. Allerdings muss man schonmal mit LVOOP gearbeitet haben um es zu verstehen. Das Ganze nennt sich LV2OO Style Global. Trotzdem wollte ich die Info hier lassen:

http://forums.ni.com/t5/LabVIEW/LV2OO-St...m-p/562527

Eventuell hilft es jemandem.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 09:53
Beitrag #6

flattervieh Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2009

2011 Prof. SP1
2009
EN


Deutschland
RE: FGV-Array mit Variant-Daten
Hallo Abrissbirne. Vielen Dank für den Hinweis mit dem LV2OO allerdings habe ich noch keinerlei Erfahrung mit LVOOP. Daher sagt mir das zeug da gar nix. Ich hab mir mal die Blockdiagramme davon angeschaut, aber irgendwie komm ich damit mal so gar nicht klar. Werd mich da aber mal bei Gelegenheit einarbeiten.

NWOmason dir auch danke mit der Erklärung der Pattern.
Das mit dem Erroreingang muss ich mir auch mal noch anschaun. Jedoch habe ich bisher einfach noch gar nichts dass mit Fehler meldet. Es sei denn irgendwelche Hardware-Bausteine. Race-Conditions verhinder ich eigentlich dadurch, dass ich alles mit State-Machines aufbaue. Da ich aber bisher immer mehrere States habe die noch dazu z.b. in Sequenzen eingebaut sind etc. bin ich auf die Idee mit den FGV gestoßen da ich oft Variablen habe die irgendwo gesetzt werden und irgendwo anders benötigt werden. Wenn ich das alles mit Drähten und Schieberegistern direkt mache wird mir aber der Verdrahtungsaufwand zu unübersichtlich. Daher wäre so ein zentrales "Datenspeicher-VI" ideal.

Kann ein VI parallel gleichzeitig mehrmals auf ein SubVI zugreifen? Ich hatte bisher gedacht dass da nur ein einmaliger Zugriff möglich ist. Ansonsten versteh ich das mit dem Erroreingang so, als dass dieser den mehrfachen Zugriff unterbindet. Aber das könnte ich dann ja auch mit einem Flag im SubVI ebenfalls erreichen, dass einfach bei Aufruf und verlassen des SubVI gesetzt bzw wieder entfernt wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.07.2011, 10:09
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: FGV-Array mit Variant-Daten
(26.07.2011 16:32 )flattervieh schrieb:  Nachdem ich letzt hier etwas über FGVs gelesen habe, vorallem dass dadurch der Speicherverbrauch im Gegensatz zu globalen Variablen oder Property-Nodes geringer sein soll, habe ich mir jetzt ein kleines Konzept überlegt mit dem man das ganze auf beliebig viele Variablen aufblasen kann um dieses FGV-Array als Variablenspeicher für alle anfallen Variablen zu nutzen.
FGV und weniger Speicherverbrauch stimmt nicht unbedingt. Ein FGV hat jedoch andere Vorteile.
(27.07.2011 09:53 )flattervieh schrieb:  Kann ein VI parallel gleichzeitig mehrmals auf ein SubVI zugreifen? Ich hatte bisher gedacht dass da nur ein einmaliger Zugriff möglich ist.
Da liegst du richtig. Solange ein VI nicht als Reentrant definiert ist (was bei einem FGV eher weniger sinnvoll ist), kann nur 1x darauf zugegriffen werden. Trotzdem kannst du dir noch Race-Conditions erzeugen, wenn du die Abarbeitungsreihenfolge nicht per Code festlegst. Merke: Alles, was "parallel" im BD liegt, kann von LV auch parallel abgearbeitet werden.
Die sauberste Möglichkeit ist hierbei die Verwendung des Error-Clusters. Auf Sequenzstrukturen kann man (fast) immer verzichten.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 10:14
Beitrag #8

flattervieh Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2009

2011 Prof. SP1
2009
EN


Deutschland
RE: FGV-Array mit Variant-Daten
Durch die FGV habe ich aber endlich auch Variablen die ich nicht kreuz und quer verbinden muss.

Den Errorcluster verwendet ihr dann also um Race-Conditions zu verhindern. Das erreicht man ja an sich eigentlich durch jede Art von "Verdrahtung". Die Idee dazu den Errorcluster zu verwenden ist natürlich gut.

Dann werde ich mal schaun wie ich das in meine zukünftigen VI's einbauen kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 11:03
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: FGV-Array mit Variant-Daten
(27.07.2011 10:14 )flattervieh schrieb:  Den Errorcluster verwendet ihr dann also um Race-Conditions zu verhindern. Das erreicht man ja an sich eigentlich durch jede Art von "Verdrahtung". Die Idee dazu den Errorcluster zu verwenden ist natürlich gut.
Genau, eigentlich geht jede "Verdrahtung", um eine Ablaufreihenfolge zu erzwingen, wo es nötig ist.

Es ist aber ein weit verbreiteter und auch guter Programmierstil, dafür immer zusätzlich den Error-Cluster zu nehmen. Dies ermöglicht auch eine Fehlerbehandlung (s. Beitrag von NWOmason).

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.07.2011, 08:11
Beitrag #10

flattervieh Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2009

2011 Prof. SP1
2009
EN


Deutschland
RE: FGV-Array mit Variant-Daten
Hallo zusammen.
Das mit den Variant-Attributen hat mich erstmal ein bissl irritiert, aber nun hab ich das endlich verstanden. Mein VI kann nun sowohl numeric als auch string variablen speichern und ausgeben. Genau so wie es soll.
Was mir allerdings jetzt noch fehlt ist eine Möglichkeit ein Array ebenfalls zu speichern. Einfaches anschließen eines Array sorgt nur dafür, dass die Dimensionen des Array gespeichert werden.

Ich hab mal mein bisheriges VI angehängt, für den Fall dass jemand noch Verbesserungsvorschläge hat.
Ein Erroranschluss ist noch nciht vorhanden, wird aber noch folgen. Dann werd ich vermutlich auch Ein- und Ausgänge zu Clustern zusammenfügen.


Angehängte Datei(en)
8.2 .vi  FGV.vi (Größe: 15,7 KB / Downloads: 208)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Wert des Variant ermitteln LV-New 8 4.449 23.02.2022 09:09
Letzter Beitrag: LV-New
  Variant in Grundtypen zerlegen LV-New 6 3.611 10.01.2022 10:55
Letzter Beitrag: LV-New
  Fehlermeldung 91 bei 2D Array umwandeln zu Variant und wieder zurück Tobzn 4 4.337 31.03.2018 21:05
Letzter Beitrag: Tobzn
  Variant-Attributsliste Hasenfuss 2 3.143 27.06.2016 15:10
Letzter Beitrag: Freddy
  Variant Attribute initialisieren NoWay 6 5.520 27.10.2015 08:56
Letzter Beitrag: IchSelbst
  Variant Datentyp TDO 12 10.548 13.04.2015 07:38
Letzter Beitrag: TDO

Gehe zu: