LabVIEWForum.de - reentrant Frage

LabVIEWForum.de

Normale Version: reentrant Frage
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe zur Datenerfassung mir z.B. ein VI geschrieben das kann mit dem Parameter

*Start (öffnet die Verbindung zum Kanal)
*process (liest die Werte)
*stop (schließt die Verbindung)

Zwischen den Aufrufen merkt sich das VI zB. den Port etc. intern

Jetzt möchte ich aber dieses VI mehrfach aufrufen - so einfach Reentrant setzten? ich rufe zB:

PortA VI-start VI-Process VI-Stop und parallell dazu
PortB VI-start VI-Process VI-Stop

Schätze LV macht dann bei jedem Aufruf eine eigene Instanz auf und die wissen nichts voneinander....?

Wie macht man so etwas dann?

Danke

Gottfried
Hallo Gottfried,

standardmäßig werden parallel aufgerufene, identische SubVIs nicht unabhängig voneinander ausgeführt. Wie LabVIEW das intern regelt, weiß ich nicht. Vermutlich wird erst das eine, dann das andere abgearbeitet. Zumindest wird nicht für jedes mehrfach verwendete SubVI ein eigener Speicherbereich angelegt.
Aber dieses Verhalten kannst du über die besagte Einstellung "reentrant" ändern:

SubVI öffnen:
File -> VI Properties -> Category: Execution -> "Reentrant execution"

Oder worum geht's dir genau?
Ich habe nicht genau verstanden, ob du genau das bereits probiert hast oder ob du diese Einstellung suchst.

Gerade bei der Messwerterfassung hat es bei mir auch immer ohne die Einstellung funktioniert:
Task erstellen mit diversen Parametern -> Messwerte einlesen (Task-Daten kommen über einen Draht vom Erstellen-SubVI -> Task beenden (Daten werden ebenfalls weitergereicht). Verdrahtung wie hier.
Hallo, Mechatronik-Ingenieur,
ich denke, es geht gottfried um Folgendes:
Er hat sich ein FGV-VI mit mehreren Zuständen geschrieben:
-Port öffnen
-lesen
-schreiben
-Port schließen

Port-Refnum u.ä. merkt er sich im Schieberegister des FGV.

So ein VI kann jetzt beliebig aufgerufen werden an verschiedenen Stellen aufgerufen werden, vor allem Lese/Schreibeaufrufe, sobald einmal der Port geöffnet ist.

Aber jetzt soll das Ganze parallel für 2 Ports laufen. Reentrant würde jetzt die Lösung lauten, aber das geht ja nicht, wegem dem FGV mit den verschiedenen States, die an verschiedenen Stellen im Programm aufgerufen werden...

@gottfried: Mir fällt gerade auch nichts Gescheites ein. Eine Idee wäre, sich im FGV ein "Array of Refnum" zu merken. Damit wäre dann die parallele Programmierung wieder möglich. Allerdings echt parallel ausgeführt wird es dann nicht.

Gruß, Jens
Danke erst einmal, es gibt auch Sicherheit wenn andere auch keine Lösung finden.

Gottfried
Referenz-URLs