LabVIEWForum.de
Datenfluss zwischen VI und subVI - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Datenfluss zwischen VI und subVI (/Thread-Datenfluss-zwischen-VI-und-subVI)



Datenfluss zwischen VI und subVI - lumaxo - 07.04.2014 13:12

Hallo,

Ich frage mich schon länger wie man am besten zwischen einem Top Level VI und einem subVI Daten kommuniziert.
Bisher habe ich derartige Konstruke immer vermieden und alles notwendige in die Top Level VI gepackt.

konkretes Beispiel: Ich habe eine PI-Regler subVI (mit while loop) und hätte gerne die Prozessgröße auch in der main VI aktualisiert.

Ich weiß das derartige Fragen schon öfter gestellt wurden. Allerdings finde ich viele verschiedene Antworten.
Anscheinend können dazu: Globale Variablen, shared Variablen, Referenzen, Queues etc. verwendet werden.

Was ist die beste/ordentlichste Methode?

Welche Methode (falls eine andere) nutzt man am besten um Eigenschaften von Bedien- und/oder Anzeigeelementen in subVIs
zu definieren.

Vielen Dank


RE: Datenfluss zwischen VI und subVI - GerdW - 07.04.2014 13:23

Hallo lumaxo,

Zitat:Anscheinend können dazu: Globale Variablen, shared Variablen, Referenzen, Queues etc. verwendet werden.
Was ist die beste/ordentlichste Methode?
Darauf gibt es keine eindeutige Antwort, das hängt vom Anwendungsfall ab…

Zitat:konkretes Beispiel: Ich habe eine PI-Regler subVI (mit while loop) und hätte gerne die Prozessgröße auch in der main VI aktualisiert.
Grundsätzlicher Gedanke: die PI(D)-Regler, die mit LabVIEW (bzw. Toolkits) geliefert werden, kommen ohne While-Loop aus. Warum benötigst du überhaupt eine?

Zitat:Welche Methode (falls eine andere) nutzt man am besten um Eigenschaften von Bedien- und/oder Anzeigeelementen in subVIs zu definieren.
Eigenschaften ändert man mit Eigenschaftsknoten. Methoden sind etwas anderes!
Hier wird nicht umsonst die OOP-Terminologie verwendet: jedes LV-Objekt hat Eigenschaften, die man abfragen/ändern kann, und unterstützt bestimmte Methoden…


RE: Datenfluss zwischen VI und subVI - lumaxo - 07.04.2014 13:42

Zitat: Grundsätzlicher Gedanke: die PI(D)-Regler, die mit LabVIEW (bzw. Toolkits) geliefert werden, kommen ohne While-Loop aus. Warum benötigst du überhaupt eine?

Prinzipiell aus akademischen Interesse. Es geht mir aber auch nicht um den PI-Regler an sich.
Anderes Beispiel ich habe eine Linear Achse welche zu Programmstart an eine bestimmte Position verfahren wird. Dies habe ich in einer subVI realisiert und hätter gerne, dass die aktuelle Position auch in der VI aktualisiert wird (oder was auch immer).

Zitat:Eigenschaften ändert man mit Eigenschaftsknoten. Methoden sind etwas anderes!
Ich meinte mit "Methode" in diesem Fall die Art und Weise wie ich die Eigenschaftknoten aus einem subVI ansprechen kann.
Vermutlich mit Referenzen, richtig?

Zitat:Darauf gibt es keine eindeutige Antwort, das hängt vom Anwendungsfall ab…
Könntest du das etwas vertiefen bzw. mir etwas zum nachlesen verlinken?
Wie würde man es im geschilderten Fall machen?

Danke


RE: Datenfluss zwischen VI und subVI - GerdW - 07.04.2014 13:47

Hallo lumaxo,

Zitat:Vermutlich mit Referenzen, richtig?
Richtig!

Zitat:Könntest du das etwas vertiefen bzw. mir etwas zum nachlesen verlinken?
Es gibt da die Links in meiner Signatur…

Zitat:Wie würde man es im geschilderten Fall machen?
Das hängt vom verwendeten Programmierdesign ab. (Funktionale) globale Variablen, Queues, Notifier, alle möglichen Arten der Netzwerkkommunikation (inkl. SVs), manchmal sogar Referenzen…

Jede dieser Möglichkeiten hat ihre Berechtigung und auch ihre Vor- und Nachteile. Und die muss man im Hinterkopf haben, wenn man sich für eine Methode entscheidet!


RE: Datenfluss zwischen VI und subVI - lumaxo - 07.04.2014 14:03

Zitat:Das hängt vom verwendeten Programmierdesign ab. (Funktionale) globale Variablen, Queues, Notifier, alle möglichen Arten der Netzwerkkommunikation (inkl. SVs), manchmal sogar Referenzen…

Ich bin ehrlich gesagt überrascht, dass es dafür keine Standardlösung gibt.
Bin ich der einzige der gerne mal eine while Schleife in ein subVI packt und trotzdem Daten (ein Anzeigeelement) daraus lesen möchte?

Mein Programmdesign ist das Erzeuger-Verbraucher, allerdings ist meine subVI während der Initialisierung. Ich verstehe daher nicht was das Programmdesign damit zu tun hat.Blink


RE: Datenfluss zwischen VI und subVI - GerdW - 07.04.2014 14:08

Hallo luxamo,

Zitat:Ich bin ehrlich gesagt überrascht, dass es dafür keine Standardlösung gibt.
Wie schon gesagt: es gibt Anwendungsfälle und dazu passende Lösungen. Es gibt keine "einzig selig machende Standardlösung"!

Zitat:Bin ich der einzige der gerne mal eine while Schleife in ein subVI packt und trotzdem Daten (ein Anzeigeelement) daraus lesen möchte?
Nein, das ist der normale Anwendungsfall.

Zitat:Mein Programmdesign ist das Erzeuger-Verbraucher
Also verwendest du Queues. Dann nimm diese doch für den Datentransport zum MainVI!

Zitat:allerdings ist meine subVI während der Initialisierung.
Das ist unerheblich…

Zitat:Ich verstehe daher nicht was das Programmdesign damit zu tun hat.
Monolithischer großer Block oder schön verteilte Tasks?
Gibt es Anforderungen an Datensicherheit? Darf man Werte überspringen oder braucht mal alle Werte?
Gibt es feste Datenraten oder ist man flexibel?


RE: Datenfluss zwischen VI und subVI - jg - 07.04.2014 14:43

Für "Last Value" Übertragung bieten sich an:
- Single Process Shared Variables
- FGVs (Current Value Table... / CVT Reference Library)
Gruß, Jens


RE: Datenfluss zwischen VI und subVI - lumaxo - 07.04.2014 15:34

Danke für die Hinweise, ich habe es jetzt so realisiert.

Für meine Anwendung passt das so denke ich.