26.07.2011, 16:32
Beitrag #1
|
flattervieh
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
|
|
|
26.07.2011, 19:08
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2011 19:10 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
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
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...
|
|
|
27.07.2011, 07:23
Beitrag #3
|
flattervieh
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
|
|
|
27.07.2011, 08:49
Beitrag #5
|
|
|
27.07.2011, 10:09
Beitrag #7
|
jg
CLA & CLED
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.
|
|
|
27.07.2011, 10:14
Beitrag #8
|
flattervieh
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.
|
|
|
27.07.2011, 11:03
Beitrag #9
|
jg
CLA & CLED
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.
|
|
|
| |