LabVIEWForum.de
kontinuierliche Datenübergabe von mehreren SubVis in ein Array - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: kontinuierliche Datenübergabe von mehreren SubVis in ein Array (/Thread-kontinuierliche-Datenuebergabe-von-mehreren-SubVis-in-ein-Array)

Seiten: 1 2


kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 21.02.2013 11:58

Hey LabView Freunde, ich habe ein Problem bei meiner Programmierung.

Ich habe mehrere Netzteile, die ich ansteuere. Jedes Netzteil wird über ein Subvi angesteuert. Das subvi ist jeweils das gleiche und wird reentrant gestartet/ausgeführt.
Die Netzteile können auch die aktuellen Ist-Werte angeben. Nun möchte ich die aktuellen Ist-Werte im Hauptprogramm angezeigt bekommen. Die Ist-Werte werden im SubVi in einem Idle - State im 10 ms Takt angezeigt/ erzeugt.

Das Problem ist, dass ich die Werte (Spannung, Strom) von allen Netzteilen in einem Array angezeigt bekommen möchte, da ich eine Anzeige brauche in verschiedenen Registerkarten, ja nachdem welche Registerkarte gerade aktiv ist, möchte ich eine andere Zeile im Array angezeigt bekommen. Die Werte sollen aber kontinuierlich aktuell angezeigt werden. Die Subvis laufen durchgehend und werden erst dann beendet, wenn auch das Hauptprogramm geschlossen wird.

Zur Zeit ist es so, dass ich ein Array mit einem Cluster der beiden Variablen im Hauptprogramm erzeuge. (Mir fällt gerade auf Cluster ist unnötig). Nun erstelle ich eine Referenz des Arrays. Im Subvi möchte ich über ein Eigenschaftsknoten einen einzelnen Wert im Array kontinuierlich verändern \ersetzen. Und das soll zeitgleich bei allen Subvis passieren. Jedes subvi verändert immer nur die gleiche Zeile im Array. Im Hauptprogramm werden nun auchdie Werte verändert, aber beim schreiben wird der Index geändert und somit springt das Array andauernd von einem Index zum anderen hin und her.


Ich hoffe ihr habt meine Problematik verstanden. Habt Ihr eine Idee, wie ich mein Problem lösen kann.
Da ich heute nicht an das Programm komme, folgen Vis oder Screens morgen.

Vielen Dank im vorraus

MfG Henning


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - GerdW - 21.02.2013 12:10

Hallo Henning,

Zitat:Nun erstelle ich eine Referenz des Arrays. Im Subvi möchte ich über ein Eigenschaftsknoten einen einzelnen Wert im Array kontinuierlich verändern \ersetzen. Und das soll zeitgleich bei allen Subvis passieren. Jedes subvi verändert immer nur die gleiche Zeile im Array.
OOOEEENNNKKK! RACE CONDITION!
Du hast hier parallele Read-Modify-Write-Zugriffe auf eine einzelne Resource, aka Race Condition...

Besserer Ansatz:
- Funktionale Variable: jedes subVI ruft die FGV mit den Parametern "Zeile" und "Wert" auf, die FGV speichert den Wert an der richtigen Stelle. Das HauptVI kann die Werte aus der FGV abfragen und anzeigen lassen
- Queue: jedes subVI sendet Wertepaare (Zeile, Wert) an die Queue. Im Hauptprogramm wird die Queue gelesen und die Werte in einem Array gespeichert

Ich bin ein starker Verfechter des FGV-Ansatzes...

Allgemeiner Tipp:
- Du musst die Anzeige von Daten und die Datenspeicherung im VI voneinander trennen (nicht nur hier, sondern auch gedanklich). Dies ist auch hilfreich, wenn man Daten anders darstellen will, als man sie intern speichern will.
- Mit Referenzen im 10ms-Takt rumzumachen ist auch nicht der sinnvollste Weg...


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 21.02.2013 15:59

Hallo Gerd,

vielen Dank für deine schnelle Antwort.

Mit funktionale Globale Variablen habe ich mich bis jetzt noch nicht so sehr außereinader gesetzt.
So wie ich das aber verstanden habe, ist das ein eigenes kleines SubVi, das nur zum Schreiben und Lesen einer Variablen verwendet wird. Vielleicht hast du ein kleines Bsp. oder einen Tip, wo ich ein gutes Bsp. im Forum finde.

Für den Ansatz mit der Queue benötige ich eine extra Queue oder?
Kann nicht die gleiche Queue verwenden, mit der ich die state machine im Main steuere und auch die SubVis aufrufe und auch nicht die, mit der ich die states im SubVi regel oder?
Achso zur Erklärung: Jedes SubVi erstellt sein eigens Queue mit eigenem Namen. Diese Info wird jeweils ins main_Queue geben und somit registrieren sich die Queues. Das Hauptprogramm weiß nun, welche und wie viele vorhanden sind/ gestartet wurden.

Zitat:- Du musst die Anzeige von Daten und die Datenspeicherung im VI voneinander trennen (nicht nur hier, sondern auch gedanklich). Dies ist auch hilfreich, wenn man Daten anders darstellen will, als man sie intern speichern will.
Wie meinst du das genau? Quasi an welcher Stelle meines Programms?

Zitat:- Mit Referenzen im 10ms-Takt rumzumachen ist auch nicht der sinnvollste Weg...
Das sehe ich genauso, mir fiel gestern nix besseres mehr ein, meine Daten aktualisert in ein Array aus verschiedenen SubVis auf mein Frontpanel zu bekommen

MfG
Henning


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - GerdW - 21.02.2013 16:17

Hallo Henning,

zu den Queues:
ich würde dir empfehlen, mit nur einer Queue zu arbeiten, indem du ihr einen Namen zuweist! Alle subVIs schreiben in die gleiche Queue, das MainVI liest diese Queue aus...

Zu den FGVs:
Da gibt es genug Beispiele im Forum...


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 21.02.2013 16:25

Hallo Gerd,
ich werde morgen das SubVi der Netzteile mal hochladen.
Dort erzeuge ich zur Zeit eine Queue, die bei jedem SubVi einen anderen Namen bekommt.

erstmal vielen Dank
werde mich bis morgen weiter über FGVs informieren.


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - GerdW - 21.02.2013 16:33

Hallo Henning,

dann gib ihnen doch den gleichen Namen...


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 22.02.2013 10:28

wie versprochen hier mein SubVi für die Netzteile und mein Main.


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 22.02.2013 13:09

Hey Gerd,
ich verstehe nicht ganz wie das funktioniert, wenn ich nur eine Queue habe.
Wie wissen dann die Netzteile ob die Spannungsänderung für sie gilt oder für ein anderes Netzteil.


Ich habe das nun mit einer FGV versucht aber weiterhin besteht das Problem die Daten aus den laufenden SubVis in das Hauptprogramm zu transportieren.

Viele Grüße


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - jg - 22.02.2013 14:30

Gerd hat gesagt, dass du für die Rückmeldung der Ist-Werte eine gemeinsame Queue verwenden kannst.

Von einer Ansteuerung mehrerer SubVIs per Queue(s) war zu diesem Zeitpunkt nicht die Rede.
In diesem Fall sind natürlich mehrere Queues angebracht, für jeden Prozess eine!

Gruß, Jens

P.S.: Versuche, ohne die Flat-Sequences auszukommen. Im Main-VI geht das schon auf den ersten Blick, im Netzteil-VI musst du auch nur noch eine korrekte Datenflussabhängigkeit vom Release-Queue erzeugen.


RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array - simbi - 22.02.2013 15:07

Hallo Jens,

danke für deine Antwort. Hatte mich schon gewundert. Wenn man programmiert, sieht man nur noch seinen Code. Smile und vergisst was man überhaupt alles über den erzählt hat.

Ich glaube ich werde das Problem mit einer Queue versuchen zu lösen, da ich nicht weiß wie ich die Daten per FGV kontinuierlich ins Main bekomme.

Vielen Dank für den Tip versuche die Flat Sequenzen rauszuwerfen.