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 

Dieses Thema hat akzeptierte Lösungen:

Queues VI übergreifend verwenden



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!

05.03.2015, 08:37
Beitrag #1

mdu Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Feb 2015

2012
2014
EN



Queues VI übergreifend verwenden

0.0 .rar  Queues_1VI.rar (Größe: 40,47 KB / Downloads: 501)
Hallo,

nachdem ich seid 2 Tagen ergebnislos nach einer Möglichkeit am suchen bin Queues für den Datenaustausch zwischen 2 oder mehreren VIs zu verwenden möchte ich das mal hier im Forum fragen.

Ich habe ein paar wenige Beiträge hier im Forum gefunden die dieses Thema ansprechen, jedoch immer ohne Beispiel und ohne konkrete Antwort auf die Frage wie es gemacht wird.

Im Anhang befindet sich ein einfaches Beispiel, dass die funktionsweise von Queues in einem VI erklärt und zeigt. Wie kann ich zum Beispiel (für diesen Fall) die Erzeuger und Verbraucherschleife in jeweils einem anderen VI bearbeiten und die Kommunikation der Queue gewährleisten?

Geht das über Referenzen? Wenn ja wie?

Vielen Dank für eure Hilfe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 09:22
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Queues VI übergreifend verwenden
Hallo mdu,

Zitat:Wie kann ich zum Beispiel … die Erzeuger und Verbraucherschleife in jeweils einem anderen VI bearbeiten und die Kommunikation der Queue gewährleisten?
Zwei Möglichkeiten:
1. Man erzeugt die Queue-Referenz wie du im VI und reicht sie per Draht an die zwei subVIs (Erzeuger + Verbraucher) weiter. Ganz normal also…
2. Man erzeugt die Queue-Referenz mit einem Namen (benannte Queue) - "Queue anfordern" hat dafür einen extra Eingang! Dies kann man in beiden subVIs mit demselben Namen machen und schon arbeiten beide subVIs mit derselben Queue…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 09:58
Beitrag #3

toaran_ Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 237
Registriert seit: Feb 2007

2012
2006
EN

90763
Deutschland
RE: Queues VI übergreifend verwenden
Hi

Wenn man benannte Queue's oder Notifier erstellt und im subvi mittels "Queue anfordern" anfordert... muss man auch den selben Datentypen angeben sonst wird eine neue Queue Referenz erzeugt...

Ich habe mir für meine Projekte immer ein "Handler" VI gebaut das einzig dafür zuständig ist alle alle Referenzen zu öffnen. für diese Referenzen die ich übergreifend nutzen hab ich dann eine Globale Variable in der ich die einfach speichere und beim öffnen eines Vis das die Ref. braucht wird einmal die Globale gelesen...

T
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 11:26 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2015 11:56 von Lucki.)
Beitrag #4

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Queues VI übergreifend verwenden

Akzeptierte Lösung

Zunächst mal: Ein ganz dickes Lob für das so wunderschön aufgeräumte VI. Solange ich hier im Forum dabei bin, habe ich so etwas Schönes kaum gesehen, die Regel ist eher säuisches Aussehen bis zum Geht-nicht-mehr.
Unterschied Lokale/globale Variablen einerseits und Queues/Melder andererseits:
Beim Datenaustausch mit lokalen/Globalen Variablen gibt es keine Synchronisation zwischen Erzeuger und Verbraucher. Beim Lesen weiß der Verbraucher nicht, ob der Wert bereits gelesen wurde oder nicht. Und umgekehrt, der Erzeuger weiß nicht, ob der letzte Wert beim Verbraucher schon abgeholt wurde oder nicht.
Dieses Manko wird überwunden mit Queues und Meldern.

Unterschied Queue und Melder:
Grob gesagt: Bei Queues kann es mehrere Erzeuger geben, aber immer nur einen Verbraucher.
Bei Meldern kann es mehrere Verbraucher geben. (Ob auch mehr als 1 Erzeuger möglich ist, weiß ich jetzt nicht genau)

Queues mit mehreren Erzeugern: Natürlich hat dann der Verbraucher ein Interesse daran zu wissen, von woher das Element kommt. Deshalb ist das Queueelement in der Regel ein Cluster mit den Elementen "Name" (Adresse) und "Wert" . Da wiederum der "Wert" je nach Herkunft unterschiedliches Format haben kann, nimmt man als Format meistens den Typ "Variant".

Die Einführung einer Wartefunkion in Deiner Verbraucherschleife ist hier für Studienzwecke natürlich begründbar. In realen Anwendungen wird man das aber nicht machen. Man könnte hier auch das studieren: Wenn der Verbrauch langsamer ist als die Erzeugung, dann ist eines Tages die Queue voll, und dann gibt es zwei Möglichkeiten: Entweder man macht es wie Du, dann bremst ab da die Verbraucherschleife die Erzeugerschleife aus. Es gehen aber keine Daten verloren. Oder man verwendet das VI "Element verlustbehaftet aus der Queue entfernen". Dann wird die Erzeugerschleife nicht ausgebremt, es gehen aber Daten verloren.

Ich habe mal das Haupt Vi ein ganz klein wenig verschlimmbessert und hänge es hier an.
Gruß Ludwig


14.0 .vi  Queues vs Local Variables.vi (Größe: 52,77 KB / Downloads: 655)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 21:29
Beitrag #5

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Queues VI übergreifend verwenden
(05.03.2015 09:58 )toaran_ schrieb:  Wenn man benannte Queue's oder Notifier erstellt und im subvi mittels "Queue anfordern" anfordert... muss man auch den selben Datentypen angeben sonst wird eine neue Queue Referenz erzeugt...
Es wird keine neue Referenz erzeugt sondern der Fehler 1094.

(05.03.2015 11:26 )Lucki schrieb:  Unterschied Queue und Melder:
Grob gesagt: Bei Queues kann es mehrere Erzeuger geben, aber immer nur einen Verbraucher.
Bei Meldern kann es mehrere Verbraucher geben. (Ob auch mehr als 1 Erzeuger möglich ist, weiß ich jetzt nicht genau)
Bei Queues kann es auch mehrere Verbraucher geben. Kann zum Beispiel verwendet werden um rechenintensive Verarbeitung von einzelnen unabhängigen Datenpaketen auf mehrere CPUs zu verteilen o.ä.. Der konsumierende Charakter des "Dequeue Element" kann somit auch bei mehreren Verbrauchern vorteilhaft sein.
Hinsichtlich der Melder sind auch mehrere Erzeuger möglich.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 22:40 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2015 22:42 von teegee.)
Beitrag #6

teegee Offline
LVF-Grünschnabel
*


Beiträge: 49
Registriert seit: Jan 2015

2014
2003
EN


Sonstige
RE: Queues VI übergreifend verwenden
(05.03.2015 09:22 )GerdW schrieb:  Zwei Möglichkeiten:
1. Man erzeugt die Queue-Referenz wie du im VI und reicht sie per Draht an die zwei subVIs (Erzeuger + Verbraucher) weiter. Ganz normal also…
2. Man erzeugt die Queue-Referenz mit einem Namen (benannte Queue) - "Queue anfordern" hat dafür einen extra Eingang! Dies kann man in beiden subVIs mit demselben Namen machen und schon arbeiten beide subVIs mit derselben Queue…

Oder 3. Man erzeugt die Queue-Referenz in einer Functional Global Variable, die man ueberall aufs Blockdiagram werfen kann und immer eine gueltige Referenz kriegt:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.03.2015, 22:46
Beitrag #7

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: Queues VI übergreifend verwenden
(05.03.2015 21:29 )Holy schrieb:  ...Bei Queues kann es auch mehrere Verbraucher geben...

Wenn ein Element aus einer Queue gelesen wurde, isses doch wech. Das ist bei Meldern nicht so. Da kann einunddieselbe Meldung an verschiedenen Stellen ausgelesen werden. Natürlich kann auch aus einer Queue an verschiedenen Stellen gelesen werden aber doch nicht dasselbe Queueelement, oder?

Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2015, 23:02
Beitrag #8

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Queues VI übergreifend verwenden
(05.03.2015 22:46 )Trinitatis schrieb:  Wenn ein Element aus einer Queue gelesen wurde, isses doch wech. Das ist bei Meldern nicht so. Da kann einunddieselbe Meldung an verschiedenen Stellen ausgelesen werden. Natürlich kann auch aus einer Queue an verschiedenen Stellen gelesen werden aber doch nicht dasselbe Queueelement, oder?

Gruß, Marko
Ein normales Dequeue konsumiert das Element, wie ich in dem Beispiel ja beschrieben habe. Mein Einwand zielte auch nur darauf ab auf Anwendungsfälle hinzuweisen die mehrere Verbraucher einer Queue implementieren die hier jeweils unterschiedliche Elemente konsumieren. Einzige Möglichkeit eine Queue ohne konsumieren auszulesen ist "Preview".
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.03.2015, 00:24
Beitrag #9

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Queues VI übergreifend verwenden
(05.03.2015 23:02 )Holy schrieb:  Einzige Möglichkeit eine Queue ohne konsumieren auszulesen ist "Preview".
Nein. Seite einigen LV-Versionen gibt es auch die Funktion "Am Anfang Einfügen". Auslesen und gleich wieder einfügen wäre eine zweite Möglichkeit die Queue unverändert zu lassen.
Bei meiner Erklärungen hatte ich bewußt geschrieben: "Grob gesagt", aber da ahnte ich schon, dass es trotdem von Supergurus Einwände geben könnte. Meine Meinung: Wenn ein Neuling erst mal weiß, dass eine Queue im Unterschied zum Melder nur einen Verbraucher hat, hat er für den Anfang erst mal eine gute Orientierung. Dass mit so einem einzigen Satz noch nicht alles über Queues gesagt ist, müßte eigentlich klar sein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2015, 15:04
Beitrag #10

mdu Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Feb 2015

2012
2014
EN



RE: Queues VI übergreifend verwenden
Hallo,

Vielen Dank für die schnellen Antworten, leider war ich die letzten Tage unterwegs und kann daher erst jetzt antworten.
Ihre Antworten haben mir weiter geholfen, im Endeffekt war es nur die Möglichkeit den Queues einen Namen zu geben die mir fehlte.

Zur zeit arbeite ich an einer Bedienoberfläche mit Menüstruktur die später als Standard für größere Projekte dienen soll. Hierbei laufen mehrere VI´s parallel die alle zu beginn der Anwendung in einem Globalen VI aufgerufen werden. Jedes VI hat eine globale Variable "Alive-bit". Wird nun Die Stopptaste gedrückt führt diese zu dem Globalen VI zurück und setzt dort alle "Alive"Globalen Variablen auf False: Somit werden alle Aufgerufenen VI's beendet.

Diese Lösung ist einfach und funktioniert, der Vorteil in dieser Art der Kommunikation ist, dass es wenig Aufwand erfordert und wenig platz im Blockdiagramm. Jedoch denke ich das es bestimmt bessere Möglichkeiten gibt eine solche Funktion zu lösen. Sollte man hier besser mit Meldern arbeiten, da es sich nur um Boolesche Werte handelt? Oder noch ganz anders vorgehen?

Des Weiteren werden manchmal noch mehrere Werte (Strings oder numerische) unter den VI's ausgetauscht.

Ich wünsche ein schönes Wochenende.
Mit freundlichen Grüßen

mdu
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
  LabVIEW Queues Schrankwand 3 2.847 14.12.2023 13:41
Letzter Beitrag: Schrankwand
  Bool Werte über Queues maxil 52 18.426 12.07.2019 14:00
Letzter Beitrag: GerdW
  Queues? flizzer82 14 28.316 23.05.2017 19:58
Letzter Beitrag: jg
  Queues mit FGVs in Polymorphen VI Andre_A 7 6.127 17.05.2014 07:39
Letzter Beitrag: cb
  If Schleife und queues Danjo 4 6.338 27.05.2013 15:14
Letzter Beitrag: jg
  Dynamisch Queues erstellen Kiesch 9 9.948 24.06.2012 21:46
Letzter Beitrag: Kiesch

Gehe zu: