26.07.2010, 09:41
Beitrag #1
|
haiopei
LVF-Grünschnabel
Beiträge: 17
Registriert seit: Jul 2010
13
2009
EN
86456
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
Hallo zusammen,
ich bin neu bei der LabVIEW-Programmierung. Dabei ist folgendes (eher grundsätzliches) Problem aufgetreten:
Ich möchte gerne in einem Hauptprogramm mehrere Unterprogramme (gleichzeitig) aufrufen. Leider musste ich feststellen, dass die Ausführung des Hauptprogramms so lange unterbrochen wird, bis das aufgerufene SubVI wieder geschlossen wird. Wie kann man das Programm dazu bringen, direkt nach dem Aufruf des SubVIs weiterzuarbeiten, unabhängig vom SubVI. Lassen sich auch mehrere gleichzeitig öffnen?
Viele Grüße
Thomas
P.S.: Ich hab leider auf die Schnelle keinen Beitrag gefunden, der so ein Problem beschreibt. Falls es so einen schon gibt, sag ich gleich sorry für die schlechte Suche...
|
|
|
26.07.2010, 09:49
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
Parallele Schleifen in Deinem MainVI sollten helfen.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
26.07.2010, 10:25
Beitrag #3
|
|
|
26.07.2010, 11:04
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 11:05 von Falk.)
Beitrag #4
|
Falk
ja, das bin ich...
Beiträge: 343
Registriert seit: Jan 2006
8.0 :: 201x ::202x
2006
DE_EN
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
' schrieb:Und das ist auch gut so, denn das ist das Datenflussprinzip. Wenn du Applikationen mit LabVIEW erstellen möchtest rate ich dir, dich ersteinmal mit den Basics zu beschäftigen (was ist das Datenflussprinzip, wie werden Daten übergeben...).
Zu deiner Frage: die hat Y-P schon beantwortet.
Manchmal kommt es aber auch darauf an, was man genau möchte. Es gibt Situationen da brauch man das Datenflussprinzip in der Form gar nicht. Spontan fällt mir da die Gerätesteuerung eines unabhängigen Gerätes ein. Über die Hauptapplikation soll nur das zugehörige Steuerungsprogramm aufgerufen werden. Dieses und die Hauptapplikation laufen dann parallel einfach vor sich hin und müssen dann eventuell nicht einmal Daten miteinander austauschen.
@Thomas
Alternativ kannst du deine SubVIs auch mittels VI-Referenz und "Invoke Node" aufrufen. Dort kannst du bestimmen, ob deine Hauptapplikation bis zur Beendigung deines Unterprogramms wartet oder mit der Ausführung weiter macht. Vorausgesetzt du hast keinen direkten Datenfluss zwischen beiden Schichten.
Schöne Grüße
Falk
|
|
|
26.07.2010, 11:13
Beitrag #5
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
Es gibt dazu 2 Möglichkeiten. Die erste hat Markus schon genannt, allerdings braucht man dazu nicht mehrere Schleifen. Das betreffende SUB-VI braucht keine Schleife, man platziert es einfach frei im Raum neben der Hauptausführungsschleife. Am Ausgang sollte nichts angeschlossen sein. Es wird dann bei Start das Programms ausgeführt, Beenden über Melder oder globale Variable.
Wesentlich flexibler ist der Aufruf des SUB-VI über Referenzen, hier mal ein Beispiel wie das aussieht:
Es wird das SubVI "Skalieren" ausgeführt.
Hierbei gibt es durchaus die Möglichkeit, das VI aufzurufen ohne daß anschließend gewartet wird bis das VI beendet ist (Siehe rechts die Methode "VI ausführen, Warten bis beendet = false). Es gibt da sogar noch mehr an Zauberei: Man kann vom Haupt-VI aus jedes Bedienelement betätigen und jede Anzeige lesen, und zwar ohne daß im Sub-VI diese Elemente überhaupt am Connektor-Ikon angeschlossen sind.
|
|
|
26.07.2010, 11:58
Beitrag #6
|
|
|
26.07.2010, 12:16
Beitrag #7
|
haiopei
LVF-Grünschnabel
Beiträge: 17
Registriert seit: Jul 2010
13
2009
EN
86456
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
Hallo,
danke schon mal für die Antworten.
Nochmal zur Konkretiesierung des Problems. Ich habe eine Hauptapplikation, bei der immer bestimmte Werte von Messgeräten ausgelesen werden müssen. Diese werden allerdings nur angezeigt und werden von den SubVIs nicht benötigt. Daher kann der Datenfluss vernachlässigt werden.
Ich möchte SubVIs starten, damit das Programm übersichtlicher wird. Wenn man einzelne Programme verwendet, muss man sie jeweils immer einzeln starten. Hat man das ganze in einem Programm mit einer Oberfläche, wird es sehr schnell unübersichtlich.
@ Lucki:
Was ist das für ein VI? Ist das bei den Beispielen dabei? Oder könntest du es bitte hochladen?
Thomas
|
|
|
26.07.2010, 14:55
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 15:43 von Y-P.)
Beitrag #9
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
' schrieb:@ Lucki:
Was ist das für ein VI? Ist das bei den Beispielen dabei? Oder könntest du es bitte hochladen?
Das tut eigentlich nichts zur Sache. Die Ereignisstrkuktur befindet sich im recht umfangreichen Hauptprogramm, und was das für ein Sub-VI ist, ist doch völlig egal. Ich mache Dir umgekehrt den Vorschlag, daß Du Dein (möglichst vereinfachtes) Sub-Vi mal postest und wir zeigen Dir, wie man das vom Haupt-VI aus startet und stoppt, ohne daß in der Zwischenzeit das Haupt-VI pausiert.
Die Referenzmethode habe ich glaube ich mal von Jens gelernt, es müßte da ein Beispiel von ihm geben. (Mit der Forums-Suchmaschine tue ich mich schwer, suche mal selbst. Man ist da auch von der Super-Intelligenz von Goggle in dieser Hinsicht zu sehr verwöhnt)
Eine ganz klassische Anwendnung für das gleichzeituge Laufen von 2 VIs ist ja die Erzeuger-Verbraucher-Struktur. Meist will man am Verbraucher etrwas sehen und bedienen, der Erzeuger läuft im Hintergrund. Hier Beispiel: Der Erzeuger ist das Sub-VI, es wird außerhalb der Haupschleife des Haup-VI gestartet. Daß es nicht beendet wird, stört nicht, die Hauptscheife funktioniert trotzdem. Die Datenübertragung erfolgt über eine Melder vom SubVI zum HauptVI.
Gestoppt wird das SUB-VI bei Beenden das Haupt-VIs so: Es wird im Haup-VI der Melder zerstört. Das erzeugt einen Fehler im Sub-VI, der Fehler stoppt das Sub-VI. (Das ist nicht die allereleganteste Methode, aber es funktioniert)
LV-Version: Was 2008 aktuell war.
Datenverbraucher.vi (Größe: 17,71 KB / Downloads: 658)
DatenErzeuger.vi (Größe: 8,07 KB / Downloads: 539)
|
|
|
26.07.2010, 15:44
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Hauptprogramm weiter ausführen bei SubVI-Aufruf
Hab' Dir die VI-Version hinzugefügt.
Die findest Du übrigens mit "VI Properties" -> "List unsaved changes" heraus.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
| |