LabVIEWForum.de - Anzeige von Werten aus SubVI im HauptVI

LabVIEWForum.de

Normale Version: Anzeige von Werten aus SubVI im HauptVI
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Das hab ich grad als PM gekriegt:


ich schlage mich erst seit kurzem mit LabVIEW rum und dass was ich am Basis Kurs gelernt habe, nutzt mir nichts. Also wie die meisten Anfänger kämpfe ich mit dem Problem der Werteübergabe von Variabeln von Main/SubVI's. Da Du ein LabVIEW Profi bist, kannst Du mir sicher weiter Helfen.


Kurz was ich machen möchte:
Meine Grundstruktur im Hauptprogramm ist eine State Machine. Jeder State ist eine Testablauf. Da ich immer wieder die gleichen Module verwenden möchte, habe ich für die Funktionen SubVI's programmiert. Bei den SubVI kann ich auch über Lokalevariablen die aktuellen Werte in die While Schleife importieren. Soweit so gut, soblad ich dies aber in das MainVI einpflanze bleibt es natürlich in der While Schleife stecken.

Die ganze Sicherheitslogik ist auch als SubVI programmiert. D.h. wenn ein einem SubVI die bedingungen für ein Notaus / Alarm erfüllt sind, muss die Boolean Variable an das Alarm SubVI übergeben werden.
Leider kann ich nicht bei jedem SubVI die While Loop weg lassen, damit es nicht hängen bleibt?

Gem. LabVIEW und Bücher ist die Verwendung von Lokalen- und Globalen Variablen ein Zeichen für einen schlechten Programmierstill.

Wäre super wenn Du mir da weiter helfen könntest.


Vielen Dank und Grüsse

HpK
Hi,

hast du also While-Schleifen in SubVI's?

A.
' schrieb:Hi,

hast du also While-Schleifen in SubVI's?

A.

Für gewisse Funktion muss ich While - and For-Schleifen verwenden. Da das SubVI solange arbeiten muss, bis die Abbruchbedinung erfüllt ist bzw. bis die gewünschte Zahl von durchläufen erreicht ist. Wenn aber die bedingungen für ein Alarm /Error erfüllt sind, muss das SubVI abgebrochen sein und das Boolean an das Alaram / Error SubVI über geben werden.

Auch wenn ich auf das SubVI verzichten würde, müsste ich in der State Machine in jeweiligen State eine While bzw. For Schleife verwenden. Könnte dann aber Lokale Varibalen verwenden, aber nicht mehr Modular programmierung. (Benutzung der SubVI in mehren States)

Daher: Wie bekomme ich immer den aktuellen Wert von SubVI in meine Main State Maschine.
Im SubVI kann ich die Werte aus der Schleife mit Lokalen Variablen aktualliseren (Gem. NI Verwendung von Lokalen und Globalen Variblen zeugen von einem schlechten Programmierstill)

Danke und Gruss HP
Hi,

wenn du in einem State eine While-Schleife unterbringst - egal ob in nen SubVI oder direkt - wird die State-Machine nicht weiterlaufen! D.h. es wird auch keine Information aus dem SubVI im HauptVI weiterverarbeitet. Was du machen müsstest wäre folgendes:

Deine Main-State-Machine hat ja schon eine umgebende While-Schleife, die alles am Leben erhält. Du musst dann in einen State springen, dort ins SubVI und dieses 1x abarbeiten....dann wird das SubVI mit der Information "Nochmal" oder "Ende" wieder verlassen, je nach Bedingung...diese Information wird noch im State ausgewertet und dann springst du entweder wieder in diesen State (= "Nochmal") oder in den nächsten

A.
' schrieb:Hi,

wenn du in einem State eine While-Schleife unterbringst - egal ob in nen SubVI oder direkt - wird die State-Machine nicht weiterlaufen! D.h. es wird auch keine Information aus dem SubVI im HauptVI weiterverarbeitet. Was du machen müsstest wäre folgendes:

Deine Main-State-Machine hat ja schon eine umgebende While-Schleife, die alles am Leben erhält. Du musst dann in einen State springen, dort ins SubVI und dieses 1x abarbeiten....dann wird das SubVI mit der Information "Nochmal" oder "Ende" wieder verlassen, je nach Bedingung...diese Information wird noch im State ausgewertet und dann springst du entweder wieder in diesen State (= "Nochmal") oder in den nächsten

A.

Ich denke, dass die äusserste While Schleife auch nicht störrt, da ja alles in diese rein gepackt wird. Über ein Shift-Register wird ja auch der aktuelle State rausgeben, wenn das SubVI abgearbeitet ist. Die State Machine funktioniert auch und die Funktionweise der State Machine habe ich auch verstanden. Aber ich mit dem Austausch der sich änderen Variablen im SubVI zum MainVI (State) bzw. in mein Sicherheits VI (probiert als parallele While Schleife bzw. als SubVI ohne While Schleife) happert es leider.
Im SubVI kann ich die Variablen über eine Lokale Varibale aus der While Schleife auslesen, aber sobald im Main intergriert muss ich das Frontpanel vom SubVI öffnen und die Variabeln ändern, damit die Variablen im SubVI geändert werden.

Da ich immer wieder die gleichen Funktionen verwende, habe ich diese als SubVI erstellt und nun im jeweilgen State eingepflanzt. Leider muss ich im SubVI zum Teil While-Schleifen bzw. For Schleifen verwenden. Ich könnte auf die SubVI's Verzichten und es Flach im State programmieren und nur über Bedingungen ein wechsel in einen neuen State realisieren, was aber einen riesigen Programmieraufwand bedeute.

Ich dachte bei LabVIEW ist ein Vorteil, dass man sich Module (SubVI's) programmieren kann, und diese immer wieder verwenden kann.

Lange Rede kurzer Sinn: Was für Möglichkeiten habe ich Werte von Variablen von Schleifen zu Schleifen bzw. von SubVI's zu MainVI's etc. zu Übergeben, oder was für Programmstrukuten muss ich verwenden, dass diees möglich ist?

Ganz Wichtig: Ich möchte dass wenn die Bedingung für ein Alarm / Error eintreten sofort eine Aktion haben und nicht erste wenn die Schleife bzw. das SubVI abgearbeitet ist.

Vielen Dank und Grüsse

Hp
' schrieb:Da ich immer wieder die gleichen Funktionen verwende, habe ich diese als SubVI erstellt und nun im jeweilgen State eingepflanzt. Leider muss ich im SubVI zum Teil While-Schleifen bzw. For Schleifen verwenden. Ich könnte auf die SubVI's Verzichten und es Flach im State programmieren und nur über Bedingungen ein wechsel in einen neuen State realisieren, was aber einen riesigen Programmieraufwand bedeute.

Ich dachte bei LabVIEW ist ein Vorteil, dass man sich Module (SubVI's) programmieren kann, und diese immer wieder verwenden kann.

So ist es...das geht aber auch in anderen Programmierumgebungen.

Wie kriegen deine SubVI's denn Daten, die sie verarbeiten? Wenn du mal ein paar Screenshots deines Programms zeigen würdest, könnten wir besser helfen...ich hab so das Gefühl, dass wir aneinander vorbei reden...
Probiere bitte das mal aus, vielleicht wird es dir gefallen und passen. Ich persönlich verwende diese (ähnliche) Struktur in meinen Programmen.

eg

(VIs LV 8.0)
Referenz-URLs