INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Hauptprogramm weiter ausführen bei SubVI-Aufruf



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

26.07.2010, 09:41
Beitrag #1

haiopei Offline
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...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 09:49
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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 !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 10:25
Beitrag #3

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Hauptprogramm weiter ausführen bei SubVI-Aufruf
' schrieb:Leider musste ich feststellen, dass die Ausführung des Hauptprogramms so lange unterbrochen wird, bis das aufgerufene SubVI wieder geschlossen wird.
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 11:04 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 11:05 von Falk.)
Beitrag #4

Falk Offline
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

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 11:13
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 11:58
Beitrag #6

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Hauptprogramm weiter ausführen bei SubVI-Aufruf
' schrieb: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.
Man sollte trotzdem die Basics kennen. Nur dann weiss ich auch in welcher Situation welcher Lösungsanatz der bessere ist. Außerdem sollten auch parallel laufende Threads wieder Datenflusskonform programmiert sein, sonst sollte man es lassen LabVIEW zu verwenden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 12:16
Beitrag #7

haiopei Offline
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 12:26
Beitrag #8

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Hauptprogramm weiter ausführen bei SubVI-Aufruf
' schrieb: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.
Falsch. Selbst wenn man Daten anzeigt, fliessen diese von einer Quelle zu einer Senke. Der Datenfluss ist allgegenwärtig, da LabVIEW diesen als Programmparadigma vorgibt.

' schrieb: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.
Das ist durchaus löblich, aber ich denke Luckis Vorschlag ist für deine Erfahrung eventuell noch nicht zu empfehlen. Versuche es doch mit parallelen Schleifen oder SubVIs. Denn genau das was du machen willst ist eine große Stärke von LabVIEW - Abeistabläufe zu parallelisieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 14:55 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 15:43 von Y-P.)
Beitrag #9

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

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.

Sonstige .vi  Datenverbraucher.vi (Größe: 17,71 KB / Downloads: 657)

Lv85_img

Sonstige .vi  DatenErzeuger.vi (Größe: 8,07 KB / Downloads: 538)

Lv85_img
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2010, 15:44
Beitrag #10

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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. Wink
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 !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Unterprogramm im Hauptprogramm heshamali88 17 11.995 25.07.2016 15:11
Letzter Beitrag: heshamali88
  Programm weiter strukturieren gfzk 8 5.302 28.07.2015 15:22
Letzter Beitrag: GerdW
  SubVI parallel ausführen mit Rückgabewert skywalker 9 6.521 20.03.2015 14:21
Letzter Beitrag: GerdW
  Aufruf verschiedener SubVI´s ElektroAnne 3 5.558 01.10.2014 13:58
Letzter Beitrag: GerdW
Question weiter bei konstantem Wert olmethn 9 5.680 10.10.2012 15:52
Letzter Beitrag: BNT
  Aufruf einer DLL parallel zu subVI tiwo 2 4.202 16.08.2012 15:22
Letzter Beitrag: tiwo

Gehe zu: