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 

VI durch anderes VI fernsteuern



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!

11.11.2015, 13:09 (Dieser Beitrag wurde zuletzt bearbeitet: 11.11.2015 15:51 von joptimus.)
Beitrag #1

joptimus Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2015

2014 SP1
2010
EN



VI durch anderes VI fernsteuern
Hi,

ich habe ein VI, mit dem ich einen linearen Antrieb steuere. Da dieses VI Teil eines größeren Programms sein soll, möchte ich es durch ein übergeordnetes VI fernsteuern. Wären die übergebenen Werte statisch, würde ich einfach ein SubVI draus machen, aber das sind sie leider nicht:
Es gibt eine Schleife, die bei verschiedenen Ereignissen (Drücken eines Buttons oder Ändern eines Eingabewerts, z.B. für die Zielposition) Befehlsstrings in den Controller des Antriebs schreibt. Die Werte können und müssen sich ändern, während das VI läuft.

Ich habe ein separates kleines Test-VI zur Fernsteuerung gemacht, das auch wunderbar funktioniert. Dazu habe ich globale Variablen und Eigenschaftsknoten mit "signaling value" verwendet.
Aber in meiner Anwendung mit dem Antrieb will es einfach nicht funktionieren.

Ich habe die drei VIs aus meinem Test angehängt (ein aufrufendes, ein empfangendes und das VI mit den Variablen).
Auch das VI des Antriebs "Linear Y.vi" (nicht ausführbar wegen fehlender SubVIs und Controller, aber zum Reinschauen sollte es reichen) und mein aufrufendes Test-VI "linearachsen_test_fernsteuerung_2" dafür.
Kann jemand vielleicht bitte drüberschauen und mir einen Tip geben? Gibt es eine noch vernünftigere Möglichkeit, sich ändernde Daten zur Laufzeit von VIs zwischen VIs zu übergeben?

Danke und Gruß
Joe

Edit:
Ich habe es nun mit Benutzerereignissen hinbekommen Big Grin
Aber nun wüsste ich noch gerne, ob man mehrere dieser Ereignisse übersichtlich registrieren kann? So wie in diesem Bild hier:
https://lavag.org/uploads/monthly_01_201...174491.png

Mit ist da nicht klar, wo die Eingänge herkommen. Bei mir ist es eine globale Variable. In dieser würde ich gerne mehrere Ereignisse zusammenfassen, ich weiß aber nicht wie.


Angehängte Datei(en)
14.0 .vi  test_Globale variablen.vi (Größe: 4,64 KB / Downloads: 172)

14.0 .vi  test_receiving.vi (Größe: 18,29 KB / Downloads: 172)

14.0 .vi  test_calling.vi (Größe: 8,81 KB / Downloads: 197)

14.0 .vi  Linear Y.vi (Größe: 287,93 KB / Downloads: 190)

14.0 .vi  linearachsen_test_fernsteuerung_2.vi (Größe: 11,41 KB / Downloads: 177)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.11.2015, 16:19 (Dieser Beitrag wurde zuletzt bearbeitet: 11.11.2015 16:20 von IchSelbst.)
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VI durch anderes VI fernsteuern
(11.11.2015 13:09 )joptimus schrieb:  Edit:
Ich habe es nun mit Benutzerereignissen hinbekommen Big Grin
Aber nun wüsste ich noch gerne, ob man mehrere dieser Ereignisse übersichtlich registrieren kann? So wie in diesem Bild hier:
Ganz schlecht ist, die neuen Erkenntnisse in den ursprünglichen Post zu schreiben. Das ließt doch keine mehr. Lieber einen neuen Post machen ...

Nicht ganz so schlecht ist das mit den Ereignissen. Huh

Ich aber nehme zum Fernsteuern von VIs Queues - da kannst du nämlich beliebig viele Befehle hinschicken. Such mal nach "Producer/Consumer-Verfahren".

Hab ich da was von "globalen Variablen" gelesen? Ich hab den Code jetzt nicht angekuckt. Ich hoffe ich habe das nur gelesen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.11.2015, 16:28 (Dieser Beitrag wurde zuletzt bearbeitet: 11.11.2015 16:32 von joptimus.)
Beitrag #3

joptimus Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2015

2014 SP1
2010
EN



Question RE: VI durch anderes VI fernsteuern
(11.11.2015 16:19 )IchSelbst schrieb:  
(11.11.2015 13:09 )joptimus schrieb:  Edit:
Ich habe es nun mit Benutzerereignissen hinbekommen Big Grin
Aber nun wüsste ich noch gerne, ob man mehrere dieser Ereignisse übersichtlich registrieren kann? So wie in diesem Bild hier:
Ganz schlecht ist, die neuen Erkenntnisse in den ursprünglichen Post zu schreiben. Das ließt doch keine mehr. Lieber einen neuen Post machen ...

Nicht ganz so schlecht ist das mit den Ereignissen. Huh

Ich aber nehme zum Fernsteuern von VIs Queues - da kannst du nämlich beliebig viele Befehle hinschicken. Such mal nach "Producer/Consumer-Verfahren".

Hab ich da was von "globalen Variablen" gelesen? Ich hab den Code jetzt nicht angekuckt. Ich hoffe ich habe das nur gelesen.

Mit Queues hab ich mich noch nie beschäftigt, das dauert mir für mein aktuelles Projekt zu lange, mich da einlesen.
Ja, es ist eine globale Variable dabei, wo die User Events (mehrere) drinstehen. Ich weiß, globale Variablen sind nicht gern gesehen (warum eigentlich, wenn es nur eine ist wie in meinem Fall?).

Im Moment würde ich dennoch gerne wissen, wie ich mit Benutzerereignissen und z.B. Clustern arbeiten kann. Ich hab nämlich keinen blassen Schimmer, wie ich die Elemente hier verbinden soll:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.11.2015, 16:38
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VI durch anderes VI fernsteuern
(11.11.2015 16:28 )joptimus schrieb:  Mit Queues hab ich mich noch nie beschäftigt, das dauert mir für mein aktuelles Projekt zu lange, mich da einlesen.
DAS ist dein größter Fehler! No Der führt sofort zur Disqualifizierung. Queues sind grundlegende Bestandteile ...
Das Einlesen in die Queue-Geschichte und das Verwenden der Queue geht schneller, als hier zu posten und alles mit Ereignissen machen zu wollen.

Zitat:Ja, es ist eine globale Variable dabei, wo die User Events (mehrere) drinstehen. Ich weiß, globale Variablen sind nicht gern gesehen (warum eigentlich, wenn es nur eine ist wie in meinem Fall?).
Aus einer werden zwei, aus zwei vier ... Angel_not

Zitat:Im Moment würde ich dennoch gerne wissen, wie ich mit Benutzerereignissen und z.B. Clustern arbeiten kann. Ich hab nämlich keinen blassen Schimmer, wie ich die Elemente hier verbinden soll:
Was ist denn das für eine Logik: Musst dich in Ereignisse einlesen - dann kannst du dich gleich in Queues einlesen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.11.2015, 16:42
Beitrag #5

joptimus Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2015

2014 SP1
2010
EN



RE: VI durch anderes VI fernsteuern
(11.11.2015 16:38 )IchSelbst schrieb:  
(11.11.2015 16:28 )joptimus schrieb:  Mit Queues hab ich mich noch nie beschäftigt, das dauert mir für mein aktuelles Projekt zu lange, mich da einlesen.
DAS ist dein größter Fehler! No Der führt sofort zur Disqualifizierung. Queues sind grundlegende Bestandteile ...
Das Einlesen in die Queue-Geschichte und das Verwenden der Queue geht schneller, als hier zu posten und alles mit Ereignissen machen zu wollen.

Zitat:Ja, es ist eine globale Variable dabei, wo die User Events (mehrere) drinstehen. Ich weiß, globale Variablen sind nicht gern gesehen (warum eigentlich, wenn es nur eine ist wie in meinem Fall?).
Aus einer werden zwei, aus zwei vier ... Angel_not

Zitat:Im Moment würde ich dennoch gerne wissen, wie ich mit Benutzerereignissen und z.B. Clustern arbeiten kann. Ich hab nämlich keinen blassen Schimmer, wie ich die Elemente hier verbinden soll:
Was ist denn das für eine Logik: Musst dich in Ereignisse einlesen - dann kannst du dich gleich in Queues einlesen.

Du missverstehst mich. Das mit den Ereignissen funktioniert schon, es ist im Block Diagramm nur etwas unübersichtlich. Und ich wüsste gerne, wie ich das in Verbindung mit Clustern besser zusammenpacke.
Nicht mehr und nicht weniger. Queues kann ich mir später immer noch anschauen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.11.2015, 16:51 (Dieser Beitrag wurde zuletzt bearbeitet: 11.11.2015 16:53 von jg.)
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: VI durch anderes VI fernsteuern
1) Für den Cluster unbedingt eine Typ-Def anlegen, sonst ärgerst du dich bei Erweiterungen jedes mal.

2) "Unbundle by Name"
   

Gruß, Jens

EDIT: Queues sind einfacher als du denkst/befürchtest. Je eher du dich damit befasst, umso glücklicher wirst du sein... Wink

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.11.2015, 09:49 (Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2015 10:49 von joptimus.)
Beitrag #7

joptimus Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2015

2014 SP1
2010
EN



RE: VI durch anderes VI fernsteuern
(11.11.2015 16:51 )jg schrieb:  1) Für den Cluster unbedingt eine Typ-Def anlegen, sonst ärgerst du dich bei Erweiterungen jedes mal.

2) "Unbundle by Name"


Gruß, Jens

EDIT: Queues sind einfacher als du denkst/befürchtest. Je eher du dich damit befasst, umso glücklicher wirst du sein... Wink

Hi,

danke, das sieht gut aus.
Allerdings fehlt da nicht das Schreiben in die globale Variable mit den Benutzerereignissen. Wenn ich die hier weglasse, kann ich über mein aufrufendes VI die Buttons im aufgerufenen VI nicht steuern.
Die Ereignisse werden ja in einem anderen VI erzeugt (generate user VI). So sieht das dann bei mir aus:

   
   
   

Edit:
Ach ja:
Wenn ich das aufgerufende VI zuerst ausführe und dann erst das Caller-VI, funktioniert alles.
Andersherum aber nicht, dann haben die Buttons keinen Effekt?

Dann habe ich - weil es ja letztendlich so sein soll - das "Slave-VI" mit einer Invoke Node im Caller-VI aufgerufen. Beim allerersten Ausführen des Caller-VIs funktioniert die Fernsteuerung der LEDs, aber beim nachfolgenden Aufruf nicht?
Ich habe die drei VIs angehängt in einer Zip Datei. Was stimmt hier nicht?


Angehängte Datei(en)
0.0 .zip  global events 2.zip (Größe: 28,29 KB / Downloads: 191)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.11.2015, 11:25
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VI durch anderes VI fernsteuern
(12.11.2015 09:49 )joptimus schrieb:  Wenn ich das aufgerufende VI zuerst ausführe und dann erst das Caller-VI, funktioniert alles.
Andersherum aber nicht, dann haben die Buttons keinen Effekt?
Grundsätzlich gilt: Du musst das VI, das die Benutzerreferenz (nicht das Benutzerereignis) erzeugt, zuerst ausführen. Nachdem die Referenz erstellt ist, kannst du sie in allen anderen VIs verwenden (eben per globaler Variablen).

Zitat:Beim allerersten Ausführen des Caller-VIs funktioniert die Fernsteuerung der LEDs, aber beim nachfolgenden Aufruf nicht?
Du brauchst die Funktion "Benutzerreferenz erzeugen" natürlich nur ein einziges mal machen. Wenn du in irgendeinem VI ständig neue Referenzen erzeugt, müsstest du die Referenzen auch ständig an alle anderen VIs verschicken (per globaler Variablen). Das würde schon funktionieren (vom Löschen der nicht mehr verwendeten Referenzen mal abgesehen). Du musst aber bedenken: Läuft dein "aufgerufenes Programm" kontinuierlich ab, oder beendet es sich im selben Raster wie das Caller-VI? Wenn es kontinuierlich läuft (wovon ich eigentlich ausgehe), dann ist dieses VI nicht in der Lage, die neue Referenz zu übernehmen. Die "alte" Referenz wird ja in der While-Schleife verwendet. Zum übernehmen der neuen Referenz müsste die While-Schleife beendet werden ...

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.11.2015, 13:57 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2015 22:32 von jg.)
Beitrag #9

joptimus Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2015

2014 SP1
2010
EN



RE: VI durch anderes VI fernsteuern
(12.11.2015 11:25 )IchSelbst schrieb:  
(12.11.2015 09:49 )joptimus schrieb:  Wenn ich das aufgerufende VI zuerst ausführe und dann erst das Caller-VI, funktioniert alles.
Andersherum aber nicht, dann haben die Buttons keinen Effekt?
Grundsätzlich gilt: Du musst das VI, das die Benutzerreferenz (nicht das Benutzerereignis) erzeugt, zuerst ausführen. Nachdem die Referenz erstellt ist, kannst du sie in allen anderen VIs verwenden (eben per globaler Variablen).

Zitat:Beim allerersten Ausführen des Caller-VIs funktioniert die Fernsteuerung der LEDs, aber beim nachfolgenden Aufruf nicht?
Du brauchst die Funktion "Benutzerreferenz erzeugen" natürlich nur ein einziges mal machen. Wenn du in irgendeinem VI ständig neue Referenzen erzeugt, müsstest du die Referenzen auch ständig an alle anderen VIs verschicken (per globaler Variablen). Das würde schon funktionieren (vom Löschen der nicht mehr verwendeten Referenzen mal abgesehen). Du musst aber bedenken: Läuft dein "aufgerufenes Programm" kontinuierlich ab, oder beendet es sich im selben Raster wie das Caller-VI? Wenn es kontinuierlich läuft (wovon ich eigentlich ausgehe), dann ist dieses VI nicht in der Lage, die neue Referenz zu übernehmen. Die "alte" Referenz wird ja in der While-Schleife verwendet. Zum übernehmen der neuen Referenz müsste die While-Schleife beendet werden ...

Hm okay.
Mir ist nicht so ganz klar, was genau ich dann zwischen den VIs übergeben muss bzw. wie ich das Erstellen und Erzeugen eines Benutzerereignisses
(siehe hier: http://zone.ni.com/reference/de-XX/help/...er_events/ )
auf meine beiden VIs verteilen muss.

P.S.
Welche Funktion meinst du mit "Benutzerreferenz erzeugen"? Die gibt es laut dem Tutorial im Link oben gar nicht bzw. heißt anders.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.11.2015, 20:03
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VI durch anderes VI fernsteuern
Du kannst ja mal folgendes probieren.


Angehängte Datei(en) Thumbnail(s)
   

14.0 .vi  UserEvent_ManageEvants_PSP.vi (Größe: 25,83 KB / Downloads: 201)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
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
  Stream-Libary anderes Verzeichnes LV-New 5 3.804 23.04.2021 07:11
Letzter Beitrag: GerdW
  Elemente aus Blockdiagramm von einem vi in ein anderes vi kopieren funktioniert nicht keep_smile 6 6.959 17.04.2015 11:47
Letzter Beitrag: keep_smile
Question Werteübergabe in anderes VI mit globaler Variable BobbyBau91 3 6.281 27.01.2014 19:04
Letzter Beitrag: BobbyBau91
  State Machine macht mit selben Funktionen jedesmal etwas anderes anuller 6 6.575 10.04.2012 12:42
Letzter Beitrag: Lucki
  Daten an anderes VI übergeben ohne GV etc... rio170 19 16.321 03.02.2011 15:17
Letzter Beitrag: rio170
  Daten von VI in anderes VI übertragen delirio 2 4.616 21.12.2010 15:03
Letzter Beitrag: Y-P

Gehe zu: