LabVIEWForum.de
mehrere Instanzen von VIs bzw VISA - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: mehrere Instanzen von VIs bzw VISA (/Thread-mehrere-Instanzen-von-VIs-bzw-VISA)



mehrere Instanzen von VIs bzw VISA - birdfire - 22.05.2011 11:43

Hallo,

ich möchte mit folgendem Treiber mehere Multimeter parallel auslesen:
http://sine.ni.com/apps/utf8/niid_web_display.model_page?p_model_id=5217

Ich hab ein Projekt mit allen sub-VIs erstellt und lasse zwei Instanzen der SubVIs in While-Schleifen zum Auslesen der Seriellen Schnittstelle ablaufen. (siehe Example.vi

Öffne ich jetzt das subVi "Read" so stelle ich fest, dass dieses Sub-VI ständig zwischen den Com-Ports hin und her springt.
Ich dachte, dass mehrere Instanzen von Sub-VIs unabhängig von einander ausgeführt werden.....oder hängt das mit VISA zusammen?!

Achja, ich bin blutiger Anfänger.....Blush


RE: mehrere Instanzen von VIs bzw VISA - jg - 22.05.2011 15:53

(22.05.2011 11:43 )birdfire schrieb:  Ich dachte, dass mehrere Instanzen von Sub-VIs unabhängig von einander ausgeführt werden.....
Oh nein, da unterliegst du einem Irrtum. Mehrere Instanzen eines Sub-VIs können in der Regel NICHT parallel und unabhängig voneinander ausgeführt werden. Es wird immer nur eine Instanz desselben Sub-VIs ausgeführt. Das ist auch gut so, sonst würden solche Sachen wie FGV (Funktionale Globale Variable) nicht funtionieren.

Ausnahme: Du stellst das Sub-VI in den VI-Eigenschaften auf Reentrant.

Gruß, Jens


RE: mehrere Instanzen von VIs bzw VISA - IchSelbst - 22.05.2011 16:40

Instanzen werden per se immer parallel ausgeführt.

Platziert man ein und das selbe SubVI (auf LabVIEW-Deutsch: nicht reentrant) mehrere Male auf einem Blockdiagramm, so ist das nur eine einzige Instanz. Demzufolge dürfen diese SubVIs nicht parallel ausgeführt werden. In textorientiert heißt das: Eine Instanz entspricht der Deklaration einer "Variablen". Alleine das Hinschreiben des Namens der Instanz (das entspricht nämlich dem Positionieren eines SubVIs auf einem BD), erstellt noch keine weitere Instanz.

Instanzen werden in LabVIEW durch den Parameter "Reentrante Ausführung" beeinflusst. Ist ein SubVI als reentrant definiert, dann wird bei jedem Platzieren (beachte: bei jedem Plazieren) des SubVIs eine Instanz erzeugt.

Außerdem muss beachtet werden, dass der Reentrant-Status nur für das "Main-SubVI" gilt, nicht für die SubVIs, die innerhalb dieses "Main-SubVIs" aufgerufen werden. Muss aus applikationstechnischen Gründen die gesamte VI-Hierarchie (ggf. auch nur Teile der SubVIs) reentrant sein, so muss der Reentrant-Status bei jedem entsprechendem SubVI eingestellt werden.


RE: mehrere Instanzen von VIs bzw VISA - Lucki - 22.05.2011 19:04

(22.05.2011 16:40 )IchSelbst schrieb:  Platziert man ein und das selbe SubVI (auf LabVIEW-Deutsch: nicht reentrant) mehrere Male auf einem Blockdiagramm, so ist das nur eine einzige Instanz. Demzufolge dürfen diese SubVIs nicht parallel ausgeführt werden.

Jens sagt aber, sie können gar nicht parallel ausgeführt werden, d.h Labview tut so etwas nicht. Das entpricht auch meinen Erfahrungen.

Ich würde für das permanenten Auslesen in einer Schleife erst mal das dauernde Öffnen und Schließen der Schnittellen aus den Schleifen herausnehmen. (Wenn ich ein Computer wäre und mir würde das angetan, ich müßte den Verstand verlieren)

Was ich mit Entsetzen gesehen habe: Beide Schnittstellen sind auf COM1 eingestellt. Das darf doch nicht wahr sein, oder?

Es sei noch angemerkt, daß die beiden Fragen reentrant oder nicht und gleichzeitige Auführung ja oder nein eigentlich nichts miteiander zu tun haben.
Wenn ein Subvi nicht reeantrant ist und es anthält Merker, z.B in Form nicht initialisierter Schieberegister, dann kommt es in der Regel zur Katastrophe, wenn das Ikon in einem VI mehrere Male vorkommt. Und das, obwohl beide sicher nicht gleichzeitig ausgeführt werden.

Eine sichere Methode, daß sich die beiden Reads nicht ins Gehege kommen: die sequentielle Ausfürung erzwingen:

[attachment=33897]


RE: mehrere Instanzen von VIs bzw VISA - jg - 22.05.2011 20:29

(22.05.2011 19:04 )Lucki schrieb:  
(22.05.2011 16:40 )IchSelbst schrieb:  Platziert man ein und das selbe SubVI (auf LabVIEW-Deutsch: nicht reentrant) mehrere Male auf einem Blockdiagramm, so ist das nur eine einzige Instanz. Demzufolge dürfen diese SubVIs nicht parallel ausgeführt werden.
Jens sagt aber, sie können gar nicht parallel ausgeführt werden, d.h Labview tut so etwas nicht. Das entpricht auch meinen Erfahrungen.
Können nicht ... - Dürfen nicht ... - das ist doch im Prinzip egal. Wichtig zu wissen ist: Ein SubVI, das NICHT reentrant definiert ist, wird immer nur einmal gleichzeitig ausgeführt, egal wie oft es innerhalb einer ganzen Programmhierachie vorkommt, selbst wenn es vom Code her mehrfach parallel ausgeführt werden könnte.

Gruß, Jens