LabVIEWForum.de - SubVI-Daten auslesen

LabVIEWForum.de

Normale Version: SubVI-Daten auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

ich habe folgendes Problem, weiß einfach nicht weiter und wollte euch mal um Rat fragen.

Ich habe ein Sub-VI geschrieben, in welchem die Temperatur über zwei Widerstandsthermometer Pt100 (angeschlossen an Multimeter) eingelesen wird (Siehe Bild). Aufgrund der langsamen RS-232-Verbindung brauche ich für einen Messvorgang ca. 500-700 ms. Das Sub-VI soll nun in ein Hauptprogramm eingebunden werden, welches Laserspektren misst. Jedesmal, wenn die Spektren gemessen werden, soll auch die Temperatur abgespeichert werden. Das Problem ist, dass die Lasermessung in 10 ms Abständen erfolgt. Ein Sub-VI direkt einbauen, würde alles verlangsamen.
Vielmehr soll der letzte zur Verfügung stehende Temperaturwert mit abgespeichert werden (Dieser Satz ist vermutlich entscheidend in diesem Beitrag).
Des Weiteren soll die Temperatur auf dem Frontpanel ständig aktuallisiert werden (nur zur Kontrolle für den Anwender), deshalb enthält das Sub-VI eine Whileschleife. Ein weiterer Grund, das Sub-VI nicht direkt einzubinden (würde ja alles anhalten, solange die Whileschleife nicht gestoppt wird. Soviel habe ich durch Stöbern in Forum schon herausgefundenBlush).

Nun meine Frage: Wie muss ich die VIs anordnen, damit einerseits die langsame Temperaturmessung vor sich hin läuft, und ich andererseits jederzeit im Main-VI während schnellen Messvorgängen auf die aktuell vorliegenden Temperaturwerte zugreifen kann.
Mit Queues und Notifier komm ich nicht weiter, das würde nur funktionieren, wenn die Temperaturmessung der schnellere Vorgang von beiden wäre. Mit globalen Variablen und Referenzen fehlt mir der nötige Durchblick.

Ich habe versucht, ein Beispiel-Code anzuhängen. Code ist natürlich nicht komplett, sonst würde ich ja jetzt keine Fragen stellen Blush
Wie muss ich das SubVI platzieren und verdrahten/abändern, damit im MainVI bei gedrücktem boolschen Schalter der aktuelle Wert des SubVIs (bei längerem Drücken mehrfach in xy ms Abständen des MainVIs) abgespeichert wird?


Ich hoffe ihr könnt mir Tipps geben,
selbst nach über einem Jahr LabVIEW Erfahrung stoße ich immer noch schnell an neue Grenzen.

Viele Grüße,
Fabian
(14.12.2011 00:10 )BMTstudent schrieb: [ -> ]Nun meine Frage: Wie muss ich die VIs anordnen, damit einerseits die langsame Temperaturmessung vor sich hin läuft, und ich andererseits jederzeit im Main-VI während schnellen Messvorgängen auf die aktuell vorliegenden Temperaturwerte zugreifen kann.
Mit Queues und Notifier komm ich nicht weiter, das würde nur funktionieren, wenn die Temperaturmessung der schnellere Vorgang von beiden wäre. Mit globalen Variablen und Referenzen fehlt mir der nötige Durchblick.

Hallo,

mit allen erwähnten Mitteln kann dies gelöst werden. Für die aktuelle Anzeige der Temperatur ließe sich folgendes Konstrukt mit Referenzen verwirklichen:

[attachment=37679]

Der Indikator wird per Refernez an das parallel laufende Sub-VI übergeben. Dort kann mittels Property-Node der Wert direkt in den Indikator im Main geschrieben werden.

Leider kann ich die VIs nicht öffen, da ich nur LV2010 habe, aber grundsätzlich musst du ja das Sub-VI parallel laufen lassen zur schnellen Main-Schleife, weil das Ganze - wie du schon erwähnt hast - zu langsam wird. Da wirst du dann an das Problem stoßen, dass mit einem Stop-Taster beide (alle) Schleifen gleichzeitig zu beenden sind. Da wird das Thema 'Parallele Schleifen' aufkommen. Dabei wirst du wieder auf die Punkte 'Globale Variable' und 'Queue/Notifier' stoßen. Weswegen es sich an der Stelle schon lohnt die Beispiele dazu nochmal genauer zu studieren Smile

Beste Grüße,
NWO
Wenn es Dir nicht 100% auf die Synchronität ankommt, dann kannst Du auch ganz einfach 2 While-Schleifen parallel laufen lassen und mit lokalen Variablen die Daten hin- und herschieben. Wenn es aber ganz genau synchron sein muss, dann mach es so, wie NWO schon beschrieben hat.

Gruß Markus
Die vorgeschlagenen Lösungen funktionieren beide, haben aber jede hat ihren spezifischen Nachteil:
Lokale Variable:
Wertübergabe sehr schnell, du müsstest dich aber dann von der Idee verabschieden, die Temperaturmesung in einem Sub-VI auzulagern.
Referenz:
Wertübergabe ist ca. 100 mal langsamer als mit lokaler Variable. Abfragen über Referenz in einer zeitkritischen Haupschleife sind deshalb nicht unbedingt zu empfehlen.

Wenn es sowohl schnell als auch in einem SubVI erfolgen soll, dann ist die Lösung: Wertübergabe über globale Variable oder FGV (= Funktionale globale Variable = selbsgestricktes VI, welches ein Globale Variable nachbildet. Viele Forum-User meiden GVs und schwören auf FGVs. Ich nicht unbedingt).
Anbei Beispiel. (Schönheitsfehler, es kann 500ms dauern, bis das VI stoppt. Wenn dich das stört: dem kann man abhelfen)
Edit: Version 2011 --> 2010
[attachment=37701][attachment=37702][attachment=37703]
Hallo Lucki,

Könntest du die VIs vielleicht noch für Version 2010 hochladen? Würde sie mir gerne auch ansehen. Smile
Danke!
(14.12.2011 13:19 )Cerub schrieb: [ -> ]Könntest du die VIs vielleicht noch für Version 2010 hochladen? Würde sie mir gerne auch ansehen. Smile
Habs oben editiert, weiß nur nicht wie die Elemente auf dem FP dann ausschauen
Hallo liebe LabVIEW InGENIEure,
mal wieder ein Newbee am Start^^
Ich hab jetzt schon einiges autodidaktisch gemacht, wahrscheinlich nicht die besten Strukturen etc. aber man wurschtelt sich so durch Wink

Zu meiner Frage ich hab das hier so gelesen da ich vor einem ähnlichen Problem stehe.
Ich habe ein MainVI in dem ich ein SubVI mehrfach aufrufe ( Ablaufinvariante Ausführung ) nun möchte ich die Ergebnisse aus diesen Subs gerne in meinem MainVI zusammenführen - Verrechnen und Anzeigen. Nun stellt sich mir die Frage wenn ich für die Ansteuerung GV verwende. Dann schreiben doch beide Subs in die gleiche GV?

Wie würdet ihr das Problem behandeln?

Danke schon im Voraus für eure Unterstützung
Lade doch mal das VI hoch, auch wenn es nicht funktioniert und nicht vollständig ist. Wichtig wäre die Info, ob die SubVis in der Haupschleife des Main-Vis aufgerufen werden oder parallel arbeiten.
(21.06.2016 10:39 )PreVIEW schrieb: [ -> ]Wie würdet ihr das Problem behandeln?

Das wird wohl auf Queues hinauslaufen. Du musst nur dafür sorgen, dass alle Instanzen der SubVIs synchronisiert in ihre Queues schreiben. Und dann liest du parallel dazu die Queues aus und verrechnest deren Werte zu einem Ergebnis. Ist diese Synchronität für dich irrelevant, dann geht es sicher auch mit einer GV - z.B. als Array, in dem jede VI-Instanz ein Element verändert.


Gruß, Marko
(22.06.2016 22:55 )Trinitatis schrieb: [ -> ]
(21.06.2016 10:39 )PreVIEW schrieb: [ -> ]Wie würdet ihr das Problem behandeln?

Das wird wohl auf Queues hinauslaufen.
Daran hatte ich auch gedacht, und möglich wäre auch eine einzige Queue für alle Daten. Das Queue-Element müßten dann ein Cluster mit zwei Elementen sein: Das erste Element gibt über die Herkunft der Daten Auskunft gibt, das zweite ist das Datenelement selbst. In der Hauptschleife müßten dann die Daten entsprechend ihrer Herkunft wieder auseinandersortiert werden. Hört sich umständlich an. Aber: die Daten von mehrere Queues in einer einzigen Hautpschleife zu empfangen geht fast überhaupt nicht. Höchstens dann, wenn alle Raten streng synchronisiert sind.
Seiten: 1 2 3
Referenz-URLs