LabVIEWForum.de
Beenden eines SUBVI ohne Abbruch des MainVI's - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Beenden eines SUBVI ohne Abbruch des MainVI's (/Thread-Beenden-eines-SUBVI-ohne-Abbruch-des-MainVI-s)

Seiten: 1 2


Beenden eines SUBVI ohne Abbruch des MainVI's - knutknorrsen - 03.07.2012 08:46

Hallo,

ich bin zur Zeit mit der Programmierung eines Teststandes vertraut.
Dabei ist es grundsätzlich so, dass ich mit Hilfe eines Linearmotors einen Zylinder positionieren muss, um dessen Hubvolumen zu nutzen (Druckmessungen mit vordefiniertem Volumen).

Ich steuere den Linearmotor mit Hilfe eines LabVIEW Programmes an. Dieses verwende ich als Sub VI in meinem Haupt Programm.
Da das vorgefertigte LV-VI des Linearmotors nach dem Producer/Consumer Prinzip abläuft habe ich folgendes Problem:

Bis zu dem SubVI funktioniert alles, doch dann verfängt sich das ganze in der SubVI-Schleife (Der Servocontroller muss ja kontinuierlich abgefragt werden).
Kann man ein SubVI ausschalten, ohne das MainVI auch zu beenden?

Anbei die beiden VI's

Ich verwende: lv11_img

[attachment=40503]

Ich bin ob eurer Hilfe dankbar und lauere hier auf Antwort!


Grüße

Knut


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - jg - 03.07.2012 08:55

Offtopic2
Bitte in Zukunft alle Anhänge hier im Forum hochladen, auch die Screenshots (vgl. LVF-Regeln )

Gruß, Jens


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - GerdW - 03.07.2012 08:57

Hallo Knut,

Zitat:Kann man ein SubVI ausschalten, ohne das MainVI auch zu beenden?
Nein, das geht nicht.
Aber du kannst das subVI beenden, um zum mainVI zurückzukehren...

- Dieses subVI ist außerdem nicht als solches gedacht. Es hat seine eigene (aktiv verwaltete) Bedienoberfläche, die man auch anzeigen muss. Außerdem scheint es schon etwas älteren Datums zu sein und könnte etwas Überarbeitung vertragen...
- Den Wert des StopButtons zum Zeitpunkt des Aufrufs des subVI zu übergeben, dürfte wohl auch nicht ganz der eigentlichen Aufgabe entsprechen. Dann könnte man nämlich gleich eine Case-Struktur um das subVI herum legen...


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - knutknorrsen - 03.07.2012 09:07

Ich danke zunächst für die schnelle Antwort. Smile


Zitat:Aber du kannst das subVI beenden, um zum mainVI zurückzukehren


Das würde mir ja schon reichen!

Ich muss bei der Initialisierung erst nur einen Wert anfahren. Danach kann das subvi ja ruhig beendet werden!
An der "Home"-Position verweilt mein Motor ja dann erst. Wird dann der Positionierungs-Knopf gedrückt, soll der Motor mit eingeschaltetem Magnet verfahren. Die SubVIs brauch ich ja nur, wenn ich auch wirklich einen Knopf drücke.

Oder ist es so, dass diese VIs die ganze Zeit im Hintergrund laufen und dann, wenn ich sie beende nicht mehr funktionieren danach?
Zitat:Den Wert des StopButtons zum Zeitpunkt des Aufrufs des subVI zu übergeben, dürfte wohl auch nicht ganz der eigentlichen Aufgabe entsprechen. Dann könnte man nämlich gleich eine Case-Struktur um das subVI herum legen...

Könnte man, nur dachte ich, dass ich einfach den Stop Button verwende, wenn er denn schon in meinem "SubVI" verwendet wird. Da werde ich noch ein bisschen weiter arbeiten! Construction

Marvin


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - GerdW - 03.07.2012 09:14

Hallo knut,

Zitat:Oder ist es so, dass diese VIs die ganze Zeit im Hintergrund laufen und dann, wenn ich sie beende nicht mehr funktionieren danach?
Es ist in LabVIEW so wie in jeder anderen Programmiersprache auch:
Man ruft eine Funktion (subVI) auf, dann läuft diese Funktion, bis sie beendet wird. Wenn die Funktion beendet wurde, läuft sie natürlich nicht mehr weiter, stattdessen läuft die Hauptroutine/das MainVI weiter...

In LabVIEW nennt sich dieses Prinzip DATAFLOW. Vielleicht solltest du mal den Link in meiner Signatur durcharbeiten?


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - knutknorrsen - 03.07.2012 09:26

Das mit dem DATAFLOW ist mir bekannt.

Es war lediglich ein Nachfragen, da du die Begriffe "nicht mehr weiterlaufen" wohl anders definierst.

Wie ich oben geschrieben habe ist es mir gleich, ob das Programm dann abbricht, solange es vorher die Richtige Position angefahren hat. Wie kann ich so etwas realisieren?

Als erstes würde mir da einfallen, dass man nach einer bestimmten Wartezeit das Programm automatisch abbricht.
Könnte man da prinzipiell eine Timed Loop verwenden?
Oder wäre es einfacher mit einer Tick count?


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - GerdW - 03.07.2012 09:36

Hallo Knut,

Zitat:Als erstes würde mir da einfallen, dass man nach einer bestimmten Wartezeit das Programm automatisch abbricht.
Das Gleiche wurde gerade im NI-Forum gefragt...

Zitat:Das mit dem DATAFLOW ist mir bekannt.
Das ging aus der Fragestellung nicht hervor, sie implizierte eher das Gegenteil...


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - knutknorrsen - 03.07.2012 10:10

Damit bricht auch nur das SubVI ab!

wie erhalte ich denn die globale Variable?


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - GerdW - 03.07.2012 10:15

Hallo Knut,

Zitat:Damit bricht auch nur das SubVI ab!
Du solltest wohl besser "abbrechen" mal definieren.
Unter "abbrechen" verstehe ich die Nutzung der "Stop"-Funktion oder das Klicken auf den roten Stopp-Knopf in der VI-Menüleiste.

Ein subVI wird dagegen beendet, wenn es fertig gerechnet hat und die Kontrolle an das mainVI zurückgibt. Das hat nichts mit abbrechen zu tun...

Zitat:wie erhalte ich denn die globale Variable?
Muss ich dir jetzt erklären, wie man lokale/globale Variablen anlegen kann (was ich als absolutes Basiswissen ansehe) oder willst du selbst mal dein LabVIEW-Einsteigerkurs machen, wie er im Link meiner Signatur zu finden ist?


RE: Beenden eines SUBVI ohne Abbruch des MainVI's - knutknorrsen - 03.07.2012 10:21

Lokale Variablen finde ich nur die Globale nicht.. aber um nicht weiter zu stören durchstöber ich jetzt mal ein paar Foren...

Was ich an der Lösung auf der NI seite nicht gebrauchen kann ist leider, dass ein weiterer Knopf verwendet wird um das ganze abzubrechen.

Ich benötige eigentlich nur ein beenden des Ganzen.