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 

Kommunikation zw. Haupt- und Sub-VI



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!

12.01.2008, 11:44
Beitrag #1

PhilippDerGrößere Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Jan 2008

8.5
2007
de_en

8501
Oesterreich
Kommunikation zw. Haupt- und Sub-VI
Hallo,
ich hab schon ein bisschen im Forum herumgeschaut, bin aber nicht wirklich auf die richtige Lösung gestoßen.
Ziel:
Das Haupt-VI soll nur zur Erfassung von Benutzereingaben dienen. Es gibt (im Moment nur 1) ein Sub-VI, dass die Messaufgabe übernimmt. Es soll kontinuierlich seine Daten rausschreiben und ins Haupt-VI (dort geschieht die Anzeige) übertragen. So lange bis die Abbruchbedingung aus dem Haupt-VI kommt.
Problem:
Das Sub-VI als normales VI funktioniert, jedoch die Kommunikation zw. Haupt- und Sub-VI nicht. Anschlüsse sind vorhanden!

Danke

(Beide in Version 8.5)
Haupt-VI:

Sonstige .vi  Hauptprogramm.vi (Größe: 22,83 KB / Downloads: 416)


Sub-VI:

Sonstige .vi  AnalogwertEinlesen2AI_DAQmx_SubVI_.vi (Größe: 35,09 KB / Downloads: 315)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.01.2008, 14:49 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2008 15:41 von jg.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Kommunikation zw. Haupt- und Sub-VI
Schau dir mal die beiden VIs an. Das Datenverbraucher-Vi ist das Hauptprogramm, das Datenerzeuger-VI entspricht Deinem DAQmx-VI. Die erzeugten Daten werden über einen Melder (oder besser Queue) an das Hauptprogramm gegeben. Das Sub-Vi synchronisiert das Haupt-VI, da der Melde-Empfänger immer werten muß, bis neue Daten anliegen.
Wenn das Hauptrogramm gestoppt wird. wird der Melder "zerstörend" freigegeben. Das erzeugt natürlich im Melde-Sender im Sub-Vi eine Fehlermeldung. Diese beendet das Sub-VI.
Man kann es natürlich auch anders machen, aber Du wirst sowieso nicht umhin können, ein Queue zur Datenübertragung zum Hauptprogramm zu verwenden. Dann ist es so das Einfachste.
(Beim Datentransport über eine globale Variable hättest Du, abgesehen davon das es langsamer ist, das Problem der Synchronisation)
Lv85_img


Angehängte Datei(en)
Sonstige .vi  Datenverbraucher.vi (Größe: 17,67 KB / Downloads: 538)

Sonstige .vi  DatenErzeuger.vi (Größe: 8,2 KB / Downloads: 478)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.01.2008, 15:29 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2008 15:41 von jg.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Kommunikation zw. Haupt- und Sub-VI
Und hier den Melder in Dein DAQ-VI eingefügt
Lv85_img


Angehängte Datei(en)
Sonstige .vi  Main.vi (Größe: 18,55 KB / Downloads: 394)

Sonstige .vi  DAQmx_Sub.vi (Größe: 40,89 KB / Downloads: 325)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.01.2008, 18:03
Beitrag #4

PhilippDerGrößere Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Jan 2008

8.5
2007
de_en

8501
Oesterreich
Kommunikation zw. Haupt- und Sub-VI
Danke für die schnelle Antwort! Hab aber erst in ein paar Tagen Zeit mir das genauer anzusehen. Meld mich dann wieder.
EDIT: Hab's nimmer erwarten können. Also, wenn ich das richtig verstehe was dein Programm macht: Das DAQmx-VI läuft immer und übergibt dem Main-VI immer die Daten über die Queue.

Dazu hätte ich dann noch einige Fragen:

Ich würde die Messdatenerfassung gerne erst mit Kommando starten, da wäre es doch besser das Sub-VI erst später zu starten oder?
Und ich würde die Erfassung gerne mit einer Taste aus dem Hauptprogramm abbrechen können, dieses soll aber weiterlaufen. Verwendet man hierzu eine globale Variable?
Was ist der Unterschied zwischen Melder und Queue? Unter Synchronisierung findet man nämlich beides.

Dann gibt's da noch Unklarheiten beim Sub-VI:

Was bezweckst du mit dem Schalter Testmode?
Ist deine Lösung mit der Aktualisierung der Datenerfassung (Sample Rate/Rate Aktualisierung) besser als immer nur die Daten herauszugeben, die beim letzten Aufruf zur Verfügung standen (und das mit "Verfüfbare Samples pro Kanal" abzufragen)?

Danke für deine Hilfe!
lg. PHilipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.01.2008, 16:45
Beitrag #5

PhilippDerGrößere Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Jan 2008

8.5
2007
de_en

8501
Oesterreich
Kommunikation zw. Haupt- und Sub-VI
Entschuldige, manchmal brauch ich ein bisschen länger. Hab es geschafft mit deinem modifizierten Programm meines zusammenzubauen.
Ich hätte aber trotzdem noch ein paar Fragen (die von oben übriggeblieben sind):

Was ist der Unterschied zwischen Melder und Queue? Unter Synchronisierung findet man nämlich beides.
Was bezweckst du mit dem Schalter Testmode?
Ist deine Lösung mit der Aktualisierung der Datenerfassung (Sample Rate/Rate Aktualisierung) besser als immer nur die Daten herauszugeben, die beim letzten Aufruf zur Verfügung standen (und das mit "Verfüfbare Samples pro Kanal" abzufragen)?

Lg, Philipp

PS: Mein modifiziertes Programm:
(LV 8.5)

Sonstige .vi  Hauptprogramm.vi (Größe: 27,05 KB / Downloads: 335)


Sonstige .vi  DAQmx_Sub.vi (Größe: 40,95 KB / Downloads: 325)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.01.2008, 20:15
Beitrag #6

thomas.sandrisser Offline
LVF-SeniorMod


Beiträge: 1.298
Registriert seit: Sep 2005

xxxx
2005
EN

78759
United States
Kommunikation zw. Haupt- und Sub-VI
Was ist ein Notifier?
Was ist eine Queue

Der Button "Testmode" ermoeglicht das Testen des DAQmx SubVIs -> reine Funktionsueberpruefung.
False: Werte werden in den Notifier geschrieben
True: True Case wird abgearbeitet und solange der User NICHT den Schalter von TRUE auf FALSE zurueck stellt, wird KEIN fiktiver Fehler erzeugt, der die Schleife abbricht.

Durch die Anzahl der zu lesenden Samples beim DAQmx Read erzwingt man ein implizites Timing. Die Read Funktion pollt die Anzahl der empfangenen Samples nicht. Ein weiterer Vorteil ist die Vermeidung von dynamischer Speicherallokierung.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.01.2008, 17:46
Beitrag #7

PhilippDerGrößere Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Jan 2008

8.5
2007
de_en

8501
Oesterreich
Kommunikation zw. Haupt- und Sub-VI
' schrieb:Was ist ein Notifier?
Was ist eine Queue

Durch die Anzahl der zu lesenden Samples beim DAQmx Read erzwingt man ein implizites Timing. Die Read Funktion pollt die Anzahl der empfangenen Samples nicht. Ein weiterer Vorteil ist die Vermeidung von dynamischer Speicherallokierung.

Danke. Den Unterschied zwischen Notifier und Queue hab ich so ziemlich verstanden: Notifier unterbricht das Hauptprogramm wenn Daten kommen, Queue schreibt die Daten kontinuierlich in einen Puffer, dieser wird dann vom Hauptprogramm ausgelesen. Das mit Notofier funktioniert mit polling eh recht ähnlich wie eine Queue.

Aber was versteht man unter implizitem Timing? Durch Anzahl Samples sagst du dem Read doch nur wieviele Samples es sich abholen soll. Oder meinst du damit, dass es warten muss, bis soundsoviele Daten zur Verfügung stehen?
Was meinst du mit dynamischer Speicherallokierung?

lg, PHILIPP
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2008, 20:16 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2008 09:10 von Lucki.)
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Kommunikation zw. Haupt- und Sub-VI
' schrieb:Danke. Den Unterschied zwischen Notifier und Queue hab ich so ziemlich verstanden: Notifier unterbricht das Hauptprogramm wenn Daten kommen, Queue schreibt die Daten kontinuierlich in einen Puffer, dieser wird dann vom Hauptprogramm ausgelesen. Das mit Notofier funktioniert mit polling eh recht ähnlich wie eine Queue.

Aber was versteht man unter implizitem Timing? Durch Anzahl Samples sagst du dem Read doch nur wieviele Samples es sich abholen soll. Oder meinst du damit, dass es warten muss, bis soundsoviele Daten zur Verfügung stehen?
Was meinst du mit dynamischer Speicherallokierung?

lg, PHILIPP
Freedive hat selbstverständlich recht: Den "Testmode" in dem VI hatte ich vorgesehen, damit man die Datenerfassung autark ohne das Hauptprogramm testen kann.

"Implizites Timing" ist kein offizieller Begriff, Freedive meint damit, daß die While-Schlife, in der sich das QAQmx Read befindet, entsprechend dem Datenaufkommen getimed und mit den Daten synchronisiert wird, ohne das sich dazu in der Schleife ein Timer befindet.

Die Datenerfassung wird hardwaremäsig vom internen Timer auf der Messkarte getaktet und die Samples kommen in der Regel erst einmal in einen Buffer. Das DAQmx Read hat mit dem Timing der Datenerfassung überhaupt nichts zu tun, da es nur die Daten aus dem Puffer liest. Es hat aber sehr wohl zu tun mit dem Timing bei der Datenverarbeitung und deren Synchronisation mit der Datenerassung, und zwar funktioniert es so:

In der Regel wird eine Anzahl von Daten festgelegt, die gelesen werden sollen, z.B. N=10. Das VI Read wartet dann geduldig mit der dem Lesen, bis 10 Samples im Buffer sind (D.h es blockiert so lange, so wie es die Wait-Funktion auch tut) ). Damit ergibt sich das richtige Timing mit der Datenerfassung und die Synchronisation. Pech ist es natürlich, wenn die Datenverarbeitung in der Schleife zu lange dauert. Bei 100 Daten im Buffer werden auch nur 10 Werte herausgelesen, und wenn die Datenerzeugung schneller ist als die Verarbeitung, dann füllt sich der Buffer immer mehr, bis es zum Überlauf kommt.

Man kann DAQmx read auch anweisen, alle Daten im Buffer auszulesen. Aber selbst dann ist hier kein Polling (= laufendes Nachfragen, ob schon etwas im Buffer ist) erforderlich. Denn wenn der Buffer ganz leer ist, dann wartet das VI, bis wenigstens 1 Sample im Buffer ist, so daß auch hier die Datenverarbeitung in der Schleife nie mit leeren Daten dasteht.

PS: Wer in die Schleife mit DAQmx Read noch eine Wait-Funktion einbaut, outet sich als jemand, der dieses Prinzip noch nicht verstanden hat. Man sieht das hier bei Anfängern leider immer wieder.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.01.2008, 23:02
Beitrag #9

PhilippDerGrößere Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Jan 2008

8.5
2007
de_en

8501
Oesterreich
Kommunikation zw. Haupt- und Sub-VI
Danke vielmals. Kenn mich jetzt aus.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2008, 08:37 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2008 08:55 von Grobi.)
Beitrag #10

Grobi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 220
Registriert seit: Jan 2007

2013
2006
kA

26725
Deutschland
Kommunikation zw. Haupt- und Sub-VI
' schrieb:Danke vielmals. Kenn mich jetzt aus.

Ich noch nicht ganz, deshalb mal eine Frage dazu von mir Tongue

Ich habe ein Problem mit dem Notifier. Also wie hier beschrieben läuft das ganze
quasi als Erzeuger/Verbraucher.

Der Erzeuger fordert einen Melder an des Typs "Signalverlauf". Dieser Verlauf wird dann
mit "Meldung senden" losgeschickt. Das Signal einlesen geschieht jede Sekunde, somit
wird auch jede Sekunde die neue Meldung losgeschickt. Soweit so gut. Der Verbraucher
fordert diesen Melder nun an und mit "auf Meldung warten" verarbeitet er den Melderinhalt.
Klappt auch alles soweit. Nun ist es aber ja so, dass während der Melder wartet der restliche
Programmteil lahmgelegt ist. Befinden sich jetzt im Verbraucher zum Beispiel Eigenschaftsknoten
eines Graphen, die mit Schiebern oder Textfelder verändert werden können, werden diese auch
nur jede Sekunde aktualisiert. Das ganze sieht dann ziemlich ruckartig und hakelig aus.

Wie kann ich es lösen, dass quasi nur die Anzeige mit dem Melder arbeitet aber die Graphenmanipulation
nicht darauf warten muss. Muss ich dabei vielleicht mit zwei parallelen While-Schleifen arbeiten?
Funktionieren tut das ganze ja, aber sieht net schön aus wenn man es bedienen will...

edit: Ich meine sowas wie im Anhang. Der Eigenschaftsknoten sollte unabhängig von
der Wartezeit des Melders sofort den neuen Wert bekommen.

edit2: Ich habs auch mit Queue versucht, aber der Erzeuger packt dann immer das Signal dort hinein
und der Verbraucher kommt quasi nicht nach. Wenn das Signal sich nach längerer Zeit ändert,
dauert es lange bis dies beim Verbraucher angezeigt wird, da die Queue rappelvoll ist und erst alles
nacheinander angezeigt wird (Ich glaub den Satz versteht man nicht...)

edit3: Ich muss noch dazu sagen, dass bei einem Erzeuger ca. 10 Verbraucher da sind, so dass der
1. Verbraucher zum Beispiel beim Queue-Einsatz diese nicht leeren darf, da die andern den Inhalt auch noch brauchen.
So, mehr fällt mir (vorerst) nicht dazu ein.


Angehängte Datei(en) Thumbnail(s)
   
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
  Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen mez15 5 4.059 14.02.2017 08:32
Letzter Beitrag: GerdW
  Durch Schließen des SubVIs reagiert das Haupt VI nicht mehr?! C.Maier 2 3.567 07.10.2016 07:52
Letzter Beitrag: Lucki
  Öffnen des Haupt-VI's nach Initialisierungsfenster mit Ladebalken antonym 2 3.366 20.07.2015 09:39
Letzter Beitrag: antonym
  Mehrere Sub VI's in einem "Haupt" VI verwenden Timo86 4 4.193 05.11.2013 15:00
Letzter Beitrag: Timo86
  Eventstruktur in SubVi verarbeiten (aus Haupt Vi) qubie 1 3.649 12.06.2011 19:56
Letzter Beitrag: BNT
  Haupt VI "hängt" nach Aufruf/schließen von SUB-VI RabenFlug 1 4.707 26.02.2011 21:27
Letzter Beitrag: Richard

Gehe zu: