INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Ablaufinvariant (Reentrant) vs. Vorlage (.vit)



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

17.02.2009, 11:30
Beitrag #1

Raijin Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Nov 2008

8.6 Base
2008
de

22145
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
Moin moin,

ich benötige von einer VI, die für einen bestimmten Messgeräte-Typ die Ansteuerung übernimmt, mehrere Instanzen (für jedes vorhandene Gerät eine), die u.a. die Adresse des zugeordneten Geräts speichern. Im weiteren Programmverlauf würde ich über diese Instanzen dann also "direkt" auf das entsprechende Messgerät zugreifen, ohne jedes Mal Adresse und dergleichen übergeben zu müssen.

Bei meinen Recherchen bin ich auf zwei Techniken gestoßen, mit denen ich Instanzen erzeugen kann: Ablaufinvarianten und Vorlagen (also .vit). Mit den Vorlagen habe ich jetzt schon ein wenig rumgespielt und denke, dass sie sich für mich eignen. Die Frage ist nun ob Ablaufinvarianten, also reentrante VIs diesen Job ebenfalls erledigen können? Und wenn ja, besser oder schlechter? Alle Beispiele zu reentranten VIs, die ich bisher gefunden habe, beziehen sich lediglich auf zeitaufwändige, parallele Berechnungen, die sonst nacheinander ablaufen würden.
In meinem Fall muss ich aber zu einem späteren Zeitpunkt im Programm explizit auf eine ganz bestimmte Instanz zugreifen.


Bin für jeden Hinweis dankbarWink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.02.2009, 12:21
Beitrag #2

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
' schrieb:Moin moin,

ich benötige von einer VI, die für einen bestimmten Messgeräte-Typ die Ansteuerung übernimmt, mehrere Instanzen (für jedes vorhandene Gerät eine), die u.a. die Adresse des zugeordneten Geräts speichern. Im weiteren Programmverlauf würde ich über diese Instanzen dann also "direkt" auf das entsprechende Messgerät zugreifen, ohne jedes Mal Adresse und dergleichen übergeben zu müssen.

Bei meinen Recherchen bin ich auf zwei Techniken gestoßen, mit denen ich Instanzen erzeugen kann: Ablaufinvarianten und Vorlagen (also .vit). Mit den Vorlagen habe ich jetzt schon ein wenig rumgespielt und denke, dass sie sich für mich eignen. Die Frage ist nun ob Ablaufinvarianten, also reentrante VIs diesen Job ebenfalls erledigen können? Und wenn ja, besser oder schlechter? Alle Beispiele zu reentranten VIs, die ich bisher gefunden habe, beziehen sich lediglich auf zeitaufwändige, parallele Berechnungen, die sonst nacheinander ablaufen würden.
In meinem Fall muss ich aber zu einem späteren Zeitpunkt im Programm explizit auf eine ganz bestimmte Instanz zugreifen.
Bin für jeden Hinweis dankbarWink

VITs sind nur für die Entwicklungs-Umgebung gedacht, damit kopiert man praktisch bestehden Code in ein neues VI. Die Idee diese zur Laufzeit per VI-Server erzeugen zu lassen ist keine gute - auch wenn es geht. Die "richtige" Methode zur Erzeugung von Instanzen von einem bestimmten VI ist, dieses als reentrantes VI zu entwicklen und mehrfach im Code zu verwenden.

Wenn du dann später auf bestimmte Instanzen zugreifen musst, dann musst du dir einen Zugriffsmechanismus überlegen. Ich verwende dazu z.B. immer Queues: beim Start des Reentranten VIs erzeugt dieses VI eine Queue und sendet die Queue-Referenz an ein "Verwaltungs-VI". Damit kann ich dann dieses Reentrante VI wie ein Objekt verwenden ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.02.2009, 12:28
Beitrag #3

Raijin Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Nov 2008

8.6 Base
2008
de

22145
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
Erstmal danke für die Antwort!


Das klingt ja schon mal ganz gut. Da ich allerdings noch LabVIEW-Neuling bin (Learning by doing), habe ich mit Queues noch nix gemacht. Makuckn ob ich das irgendwie hinbekomme Big Grin
Oder hast du vielleicht ein kurzes Beispiel parat?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.02.2009, 10:23
Beitrag #4

Raijin Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Nov 2008

8.6 Base
2008
de

22145
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
Ich hab jetzt mal ein bischen rumgespielt und die Referenz der Instanzen in einem Array gespeichert. Von da aus greife ich dann über Methodenknoten auf die Elemente zu, starte die Instanz-VI und lese die Ausgabeelemente wieder aus.
Der Nachteil dieses Arrays ist, dass ich anhand der Referenz nicht auf den ersten Blick erkennen kann welche Instanz sich dahinter verbirgt. Später sollte es ja so sein, dass ich z.B. zwei Messgeräte habe, von denen eines den Eingangs- und das andere den Ausgangswiderstand misst. Am liebsten würde ich daher die Instanzen mit einem Namen ansprechen. Bei OpenG habe ich mir das Dictionary-Paket runtergeladen, funktioniert auch, aber geht das nicht auch irgendwie anders?

Wie ich das ganze nu aber mit Queues lösen soll - wie du es vorgeschlagen hast - weiß ich nicht. Machst du das jeweils über eine Ein- und Ausgabe-Queue pro Instanz oder wie? So nach dem Motto vorne immer Befehle an die VI in die InputQueue reinschieben und das Ergebnis dann hinten aus der OutputQueue auslesen?

Wäre super, wenn du mir ein Beispiel geben könntest wie du das machst.



Hier mein kleiner Test (LV 8.6)


Sonstige .zip  InstanzenTest.zip (Größe: 26,11 KB / Downloads: 294)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.02.2009, 09:51
Beitrag #5

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
' schrieb:Wie ich das ganze nu aber mit Queues lösen soll - wie du es vorgeschlagen hast - weiß ich nicht. Machst du das jeweils über eine Ein- und Ausgabe-Queue pro Instanz oder wie? So nach dem Motto vorne immer Befehle an die VI in die InputQueue reinschieben und das Ergebnis dann hinten aus der OutputQueue auslesen?

Wäre super, wenn du mir ein Beispiel geben könntest wie du das machst.
Hier mein kleiner Test (LV 8.6)

genau so. Jedes "Modul" (=reentrantes VI) erzeugt eine eigene Queue mit einem eigenen Namen. Die Queue Referenz der Instanz wird wiederum an ein "Verwaltungs-Modul" übergeben, so dass ich sowohl zur Instanz (über die Instanz-Queue) als auch aus der Instanz heraus kommunizieren kann.

Ein Beispiel findest du im Anhang ...


Sonstige .zip  Modul_Bsp.LV851.zip (Größe: 80,97 KB / Downloads: 348)

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.02.2009, 18:39
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
hmm ... klappts?

wenn ich mich schon ne Stunde hinsetzte und ein Beispiel programmiere hätt ich doch irgendwie ganz gern mal FeedbackWink

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.02.2009, 10:32
Beitrag #7

Raijin Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Nov 2008

8.6 Base
2008
de

22145
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
Hi!

Danke für das Beispiel und deine Mühe! Ich lag seit Samstag flach wegen einer Mandelentzündung, daher melde ich mich so spät.

Also das Beispiel funktioniert und ich bin gerade dabei, es komplett zu verstehen. Wie gesagt Queues sind noch Neuland für michWink


Ich gebe mal kurz wieder wie ich dein Beispiel verstehe:

Programmstart: MainQ wird erzeugt; MainQ verwaltet die "Befehle" an die Module.
Modulstart: Modul registriert sich über die MainQ; ModulQ wird in Array gespeichert.
Increment-Klick: Increment-Befehl für Modulx an MainQ => Increment-Befehl an ModulxQ => Get-Befehl an ModulxQ => Get-Befehl an MainQ => Anzeige


Ich frage mich allerdings ob das Speichern der ModulQ im Array notwendig ist? Kann man die Queue nicht einfach über den Namen ansprechen? Am liebsten würde ich es nämlich vermeiden, Instanzen über einen ArrayIndex anzusprechen, da dabei die Zuordnung Index<->Name nicht klar ersichtlich ist. Gerade in meinem Falle wo an einem Arbeitsplatz mehrere verschiedene Messgerätetypen verwendet werden. Da hat man dann in einem Array plötzlich 2 Keithley, 1 Fluke, 1 DMP40 , etc. Ein "gemischtes" Array über Indizes anzusprechen behagt mir daher nicht.
Bei OpenG hab ich mir das Dictionary-Paket geladen wo man die Daten mit Schlüsseln speichern kann. Allerdings wundert es mich, dass LV sowas nicht selbst anbietetSad
Aber braucht man das bei Queues überhaupt? Schließlich haben sie ja einen Namen, den ich direkt ansprechen kann?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2009, 12:16
Beitrag #8

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
' schrieb:Aber braucht man das bei Queues überhaupt? Schließlich haben sie ja einen Namen, den ich direkt ansprechen kann?


müsste auch gehen, mir ist das irgendwie "lieber", wenn ich die Referenzen in einem Array habe ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2009, 09:51
Beitrag #9

Raijin Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Nov 2008

8.6 Base
2008
de

22145
Deutschland
Ablaufinvariant (Reentrant) vs. Vorlage (.vit)
' schrieb:VITs sind nur für die Entwicklungs-Umgebung gedacht, damit kopiert man praktisch bestehden Code in ein neues VI. Die Idee diese zur Laufzeit per VI-Server erzeugen zu lassen ist keine gute - auch wenn es geht. Die "richtige" Methode zur Erzeugung von Instanzen von einem bestimmten VI ist, dieses als reentrantes VI zu entwicklen und mehrfach im Code zu verwenden.

Eine Frage habe ich noch. Und zwar geht es um die Instanzierung selbst. In deinem Beispiel hast du die Reentrante VI einfach 2x ins BD eingebaut. Dadurch werden ja auch zwei feste Instanzen erzeugt. Wenn ich nun aber "auf Knopfdruck" neue brauche, geht das so nicht, oder? Dann müsste ich das ja wieder über den VI-Server zur Laufzeit tun. Im obigen Zitat meintest du das sei keine gute Idee. Oder bezog sich das nur auf die VITs?

So stelle ich mir das vor (unabhängig von Queues, etc.):

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Report in einer Word Vorlage TDO 2 3.374 15.10.2015 09:26
Letzter Beitrag: TDO
  Reentrant VI´s debuggen NoWay 2 6.787 07.07.2015 13:59
Letzter Beitrag: Kiesch
  non-reentrant Sub-VIs in unabhängigen Applikationen Nordvestlys 2 2.754 02.03.2015 11:44
Letzter Beitrag: Nordvestlys
  Verständnisfrage zu reentrant VI´s NoWay 1 4.260 27.05.2014 09:50
Letzter Beitrag: gottfried
  Icon Vorlage nutzen W-C 4 5.231 24.04.2013 12:27
Letzter Beitrag: W-C
  reentrant und subpanel raeuberfisch 4 4.107 01.03.2013 06:56
Letzter Beitrag: raeuberfisch

Gehe zu: