![]() |
SubVI parallel ausführen mit Rückgabewert - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: SubVI parallel ausführen mit Rückgabewert (/Thread-SubVI-parallel-ausfuehren-mit-Rueckgabewert) |
SubVI parallel ausführen mit Rückgabewert - skywalker - 19.03.2015 09:16 Hallo zusammen, ich habe ein Main, welches ein SubVI über Referenz aufruft (Eingabeparameter ebenfalls als Referenz). Dadurch wird dieses parallel ausgeführt. Funktionsbeschreibung: Das Main beinhaltet ein Rundinstrument mit zwei Zeigern, welches die Ist- (blau) und Soll-Geschwindigkeit (rot) anzeigt. Beim Drücken des Buttons "Bremsen" wird das SubVI v_Soll.vi aufgerufen und der zweite Zeiger (rot, Soll-Geschwindigkeit) läuft im Hintergrund eine Bremskurve ab. Parallel besteht die Möglichkeit, die Ist-Geschwindigkeit mit + oder - zu verändern. Nach Ablauf der Bremskurve soll allerdings die Soll-Geschwindigkeit genau auf dem Wert stehen bleiben, der als letztes vom SubVI ausgegeben wurde. Dies bekomme ich nicht hin. Bei mir "hüpft" die Soll-Geschwindigkeit immer wieder auf 0. Anbei die zwei VIs. [attachment=52568][attachment=52569] Ich hoffe jemand versteht mein Problem. ![]() Gruß Stefan RE: SubVI parallel ausführen mit Rückgabewert - GerdW - 19.03.2015 10:48 Hallo Skywalker, Zitat:Nach Ablauf der Bremskurve soll allerdings die Soll-Geschwindigkeit genau auf dem Wert stehen bleiben, der als letztes vom SubVI ausgegeben wurde.Die rote Nadel bleibt doch genau da stehen, wo sie vom subVI hingestellt wurde: bei einem Wert von ~95… Zitat:Ich hoffe jemand versteht mein Problem.Nicht wirklich… Wieso muss das mit einem subVI erledigt werden, welches per VI-Server aufgerufen wird? Wieso über Referenzen die Anzeigen beeinflussen? Ich kann mir auch nicht vorstellen, warum zum Bremsen die Soll-Geschwindigkeit auf 165 erhöht werden muss!? RE: SubVI parallel ausführen mit Rückgabewert - skywalker - 19.03.2015 16:33 Hallo, die rote Nadel bleibt da stehen, aber sobald ich wieder die Ist-Geschwindigkeit verändere, springt die rote Nadel auf 0. Genau das soll nicht passieren, sondern in diesem Fall auf 95 bleiben. Das gezeigt Programmbeispiel repräsentiert nur einen Teil des gesamten Programms. Die Bremskurve für die Soll-Geschwindigkeit (rot) beginnt nun Mal bei 165 km/h und läuft die definierte lineare Bremskurve bis 95 km/h ab. Wie kann ich denn die Anzeigen ohne Referenzen von SubVI aus beeinflussen? RE: SubVI parallel ausführen mit Rückgabewert - GerdW - 19.03.2015 16:42 Hallo skywalker, THINK DATAFLOW! Im Erhöhen/Verringern-State greifst du auf ein Schieberegister zu- im Bremsen-State dagegen nicht. Wie soll das Schieberegister mitbekommen, dass du irgendwelche Werte geändert hast? Also bleibt dieser Sollwert dort immer Null… Zitat:Wie kann ich denn die Anzeigen ohne Referenzen von SubVI aus beeinflussen?Mit einer sauberen Statemachine. Mit einem subVI, welches Eingangsparameter hat und Werte ausgibt (oder gleich diesen Cluster bearbeitet). RE: SubVI parallel ausführen mit Rückgabewert - skywalker - 20.03.2015 07:30 Guten morgen, ich stehe irgendwie auf dem Schlauch. Mir ist bewusst, dass ich im Verringern-/Erhöhen-State ein Schieberegister nutze und im Bremsen-State nicht. Aber wie kann ich von SubVI sagen, dass die Soll-Geschwindigkeit in das Schieberegister des Main geschrieben werden soll? Wie gesagt, das gepostete Beispiel repräsentiert nur einen Ausschnitt des Gesamtprogrammes. Im "richtigen" Programm nutze ich die Statemachine mit Typedefs. @GerdW: Könntest du bitte erklären, was das bedeutet? Zitat:Mit einem subVI, welches Eingangsparameter hat und Werte ausgibt (oder gleich diesen Cluster bearbeitet). Stefan RE: SubVI parallel ausführen mit Rückgabewert - GerdW - 20.03.2015 08:10 Hallo skywalker, Zitat:Aber wie kann ich von SubVI sagen, dass die Soll-Geschwindigkeit in das Schieberegister des Main geschrieben werden soll?Direkt vom subVI aus kannst du nicht auf das Schieberegister zugreifen. Aber du kannst ja dein MainVI entsprechend anpassen - z.B. mit Events statt mit Referenzen arbeiten und neue Werte per Event (ValueSignalling oder UserEvent) vom subVI ins MainVI schicken. Dann kann das MainVI dafür sorgen, dass der neue Wert an der korrekten Stelle gespeichert wird… Zitat:Könntest du bitte erklären, was das bedeutet?Ich meine damit ein handelsübliches subVI mit Ein- und Ausgängen, welches direkt im MainVI eingebunden wird, statt eines Aufrufs über den VIServer… RE: SubVI parallel ausführen mit Rückgabewert - skywalker - 20.03.2015 08:53 Ich kann vom SubVI Events ins Main schicken? Das wusste ich nicht. Wie geht das? Im Main greife ich dann mit der Eventstruktur (seperate while-Schleife) die Wertänderung des Drehknopfes (Geschwindigkeit) ab und schicke diese in diese in den entsprechenden Case. RE: SubVI parallel ausführen mit Rückgabewert - GerdW - 20.03.2015 09:25 Hallo skywalker, Zitat:Wie geht das?Ich wiederhole aus meinem vorigen Beitrag: Zitat:per Event (ValueSignalling oder UserEvent) RE: SubVI parallel ausführen mit Rückgabewert - skywalker - 20.03.2015 14:17 Hallo, ich habe es jetzt mit einer Queue realisiert und es scheint zu klappen. [attachment=52585][attachment=52584] Allerdings rufe ich das SubVI weiterhin über VIServer auf. Anders sehe ich keine Möglichkeit, die Bremskurve parallel im Hintergrund laufen zu lassen und gleichzeitig die Ist-Geschwindigkeit im Main zu ändern. RE: SubVI parallel ausführen mit Rückgabewert - GerdW - 20.03.2015 14:21 Hallo skywalker, Zitat:Anders sehe ich keine Möglichkeit, die Bremskurve parallel im Hintergrund laufen zu lassen und gleichzeitig die Ist-Geschwindigkeit im Main zu ändern.Pack die "Bremskurve" in eine parallel laufende Schleife mit einer kleinen Statemachine (Idle, Bremsen, Quit)… |