14.12.2010, 22:27
(Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2010 22:28 von ungetuem.)
Beitrag #1
|
ungetuem
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2010
2009
-
de
Deutschland
|
SubVI Daten auslesen
Hallo erstmal,
Programmiere noch nicht lange mit Labview und habe grad folgendes Problem:
Habe hier eine VI erstellt in der, wenn ein Boolean Schalter true gesetzt ist, in einer Schleife ein Wert X ständig aktualisiert wird.
Jetzt habe ich diese VI mit connectors ausgestattet und gespeichert und benutze sie in einer anderen VI. Wenn ich der SubVI nun in der VI den boolean wert übergebe und den Wert X auslesen möchte funktioniert das nicht.
Was mache ich falsch?
Danke im Vorraus,
Grüße ungetuem
|
|
|
15.12.2010, 00:23
Beitrag #2
|
Richard
LVF-Gelegenheitsschreiber
Beiträge: 70
Registriert seit: Jun 2009
8.6,9.0,9.1,10.0,11.0
2008
DE_EN
80797
Deutschland
|
SubVI Daten auslesen
Hallo und Willkommen im LVF,
kannst du einen screenshot des VIs posten? Aus deiner beschreibung kann man viel ableiten.
Folgendes VI stellt meine Interpretation des Problems dar, wo kein Problem besteht, also liege ich wohl falsch. Ich hoffe mal es dient als Denkanstoß.
Mit minimalbeispielen kann man immer besser helfen.
Gruß Richard
und die zugehörigen VIs
host_show.vi (Größe: 6,14 KB / Downloads: 254)
sub_show.vi (Größe: 5,65 KB / Downloads: 259)
|
|
|
15.12.2010, 00:51
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 00:55 von ungetuem.)
Beitrag #3
|
ungetuem
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2010
2009
-
de
Deutschland
|
SubVI Daten auslesen
Hi und danke für die Antwort,
In meinem Fall ist es sehr ähnlich nur dass IN der SubVI eine Schleife ist. In dieser wird kontinuierlich ein Wert X neu berechnet. es ist also nicht nur eine "Funktion" mit in und output sondern ein
eigenes Programm das die ganze zeit läuft und aus der VI gesteuert und ausgelesen werden soll. Irgendwie seh ich da absolut keine Möglichkeit
Im Anhang die SubVI
Grüße ungetuem
|
|
|
15.12.2010, 06:51
Beitrag #4
|
Richard
LVF-Gelegenheitsschreiber
Beiträge: 70
Registriert seit: Jun 2009
8.6,9.0,9.1,10.0,11.0
2008
DE_EN
80797
Deutschland
|
SubVI Daten auslesen
Natürlich kommt aus dem SubVi nichts raus, es läuft und läuft und läuft... bis du auf den Roten Knopf drückst. Du wirst von diesem VI in dieser Konfiguration nie werte zurückbekommen. Aber dafür 100% CPU auslastung, da die Schleife mit vollgas läuft.
Was soll dieses VI tun? Messwerte erfassen?
Ein möglicher Workarround wäre falls das bei deinem VI umsetzbar ist:
Du bekommst die Daten aus dem SubVI erst übergeben, wenn dieses durchlaufen ist (Datenflussprinzip).
Alternativ kannst du über eine Queue, GFV, uvm. zwischen Schleifen/SubVIs kommunizieren, wenn sich diese in parallelen Schleifen befinden und somit gleichzeitig laufen. Um in diese Richtung weiterzuhelfen müssten wir wissen, was du damit eigentlich anstellen willst.
Gruß Richard
|
|
|
15.12.2010, 10:27
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 10:42 von ungetuem.)
Beitrag #5
|
ungetuem
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2010
2009
-
de
Deutschland
|
SubVI Daten auslesen
Hallo,
Ja das Programm ist zur Aufnahme von Messdaten (in meinem Fall soll eine Temperatur immer wieder gemessen werden)
Ich verstehe dass die Schleife ewig weiterläuft und niemals einen wert zurückgeben wird, habe aber gehört dass es die Möglichkeit GIBT Werte aus/in eine/r laufenden Schleife ein-/auszulesen und z.b. in einer anderen Schleife synchron zu verwenden. Kommunikation zwischen schleifen ist kein Problem solange ich mich innerhalb einer VI befinde. Ich weiß nur nicht wie ich mit Schleifen kommuniziere die in einer SubVI laufen.
DIe Option die ich jetzt gefunden habe sind globale Variablen in der SubVI zu verwenden, was aber vermieden werden soll. Gibt es noch andere Möglichkeiten(das Wort Referenzen ist gefallen, kann aber nichts damit anfangen und was ich im internet dazu finde löst mein Problem nicht)?
Gruß ungetuem
|
|
|
15.12.2010, 10:41
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 10:42 von GerdW.)
Beitrag #6
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
SubVI Daten auslesen
Hallo ungetuem,
mal sehen, was Richard da so geschrieben hatte:
Zitat:Alternativ kannst du über eine Queue, GFV, uvm. zwischen Schleifen/SubVIs kommunizieren, wenn sich diese in parallelen Schleifen befinden und somit gleichzeitig laufen.
Siehe, da haben wir doch schon zwei weitere Möglichkeiten: Queues und GFV (eigentlich FGV, FunctionalGlobalVariable). Es gibt auch u.a. noch Notifier (deutsch: Melder) - und zu allem schöne Beispiele, die schon mit LabVIEW mitgeliefert werden. Einfach mal im Hilfe-Menü den Beispiele-Finder starten...
Zitat:einer anderen Schleife synchron ... verwenden
Meinst du wirklich "synchron"? Oder doch etwa asynchron, zeitlich parallel?
|
|
|
15.12.2010, 10:47
Beitrag #7
|
|
|
15.12.2010, 10:49
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 10:49 von ungetuem.)
Beitrag #8
|
ungetuem
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2010
2009
-
de
Deutschland
|
SubVI Daten auslesen
Hi und danke für die Antwort,
ich bin mir nicht ganz sicher:)aber ich glaube ich meine synchron. der Boolean Wert aus der VI soll in der SubVI sobald der entsprechende Schalter geklickt wurde eingelesen und verwendet werden.
gruß ungetuem
|
|
|
15.12.2010, 11:00
Beitrag #9
|
BsaiboT
LVF-Stammgast
Beiträge: 449
Registriert seit: Nov 2009
2010
2007
kA
22459
Deutschland
|
SubVI Daten auslesen
Ich bin der Meinung, dass du dir die Verwendung von Queues anschauen solltest (in Verbindung mit dem Producer-Consumer-Prinzip).
Dazu wirst du hier im Forum sicherlich fündig.
Das Erzeuger-Verbraucher-Prinzip ermöglicht es dir kontinuierlich Daten einlesen und diese unabhängig weiterverarbeiten zu können. Je nach Umfang kannst du dir auch gleich das Prinzip der Statemachine anschauen.
Als genereller Hinweis, da es oft falsch gemacht wird:
Der Task zum Einlesen von Daten muss nur einmal zu Beginn des Programmes erstellt und beim Beenden zerstört werden. Alles Andere führt zu unnötig hoher Prozessorlast und Verzögerungen im Programmablauf, die den Verlust (Nichteinlesen) von Messdaten zur Folge haben kann.
EDIT: Da waren wieder welche schneller in der Beantwortung deiner Frage... -_- Das kommt davon, wenn man sich während dem Schreiben einer Anwort durch Arbeit "ablenken" lässt....
|
|
|
15.12.2010, 13:46
|
ungetuem
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2010
2009
-
de
Deutschland
|
SubVI Daten auslesen
ok vielen dank soweit, werd mich dann mal mit queues beschäftigen
grüße ungetuem
|
|
|
| |