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 

Producer/Consumer Loop



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!

18.09.2006, 09:56
Beitrag #1

lioncar Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Apr 2006

8.00
-
kA


Deutschland
Producer/Consumer Loop
Hallo zusammen,

bei mir stellt sich folgendes Problem:

Aufbauend auf eine klassische Producer/Consumer Architektur habe ich eine dritte Loop (While) erstellt! Aus dieser Schleife (Verwendet man den Kontext Producer oder Consumer, soll diese neue Schleife ebenfalls eine Producer Loop sein) möchte ich Daten in die ursprüngliche Producer Loop übertragen! Auf Grund der allgemeinen Schleifenlogik, wird die 1. Producer Schleife erst dann abgearbeitet wenn alle Daten an den Eingängen zur Verfügung stehen. D.h. aber auch, wenn die dritte Schleife (Producer) langsamer läuft, gibt diese der ersten Schleife die Geschwindigkeit vor!

Genau diesen Einfluß möchte ich umgehen. Kurz gesagt, ich möchte in einer Producer/Consumer Architektur Daten aus dem Consumer wieder in den Producer übergeben, ohne das die Producer Loop auf die Daten wartet und ohne das die Schleifendurchlaufzeit des Producer beeinflusst wird!

Hat jemand eine Idee??? Ich wär für eure Hilfe sehr dankbar!

Gruß
lioncar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.09.2006, 10:00
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Producer/Consumer Loop
Man kann es mit Queue realisieren. Da wird die Laufzeit von anderen Loops nicht (abgesehen von Timeouts) beeinflusst.

Ich weiss aber nicht welchen Beispiel "Producer/Consumer" du meinst. Es gibt welche mit Globals, Locals, Queues und Notifiers.

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.09.2006, 10:09
Beitrag #3

lioncar Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Apr 2006

8.00
-
kA


Deutschland
Producer/Consumer Loop
Hallo eugen,

stimmt das habe ich vergessen zu erwähnen! Ich arbeite mit einem Notifier! Mit einem Queue habe ich es bereits probiert! Das Programm bleibt hängen, kann aber nicht genau sagen wo und warum!? Gibt es noch Alternativen zum Queue, da nebenbei der Queue auf resourcen schlugt! Habe ein esehr zeitkritische Anwendung!

Gruß
Timo

' schrieb:Man kann es mit Queue realisieren. Da wird die Laufzeit von anderen Loops nicht (abgesehen von Timeouts) beeinflusst.

Ich weiss aber nicht welchen Beispiel "Producer/Consumer" du meinst. Es gibt welche mit Globals, Locals, Queues und Notifiers.

Gruss, Eugen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.09.2006, 10:55
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Producer/Consumer Loop
Eine Queue schlugt zwar viel Speicher, aber wenig Zeit.
Beim Auslesen der Queue kannst du einen Timeout einstellen. Dieser Timeout bedeutet:
wenn keine Objekte sich in der Queue befinden, wie Lange soll noch die Read Queue warten bis ein Objekt in die Queue reinkommt um es auszulesen. Wenn du diesen Timeout klein haltest, sollte alles schneller passieren.

Zweite Möglichkeit wäre, den Status der Queue vor dem Auslesen abfragen, wenn die Anzahl von Objekten gleich 0 ist, dann gar nicht auslesen. Somit kannst du den Timeout beliebig definieren. Die Task wird nicht angehalten.

Das gleiche gilt übrigens auch für Notifiers.

Wenn du nicht alle Daten brauchst, dann kanst du natürlich besser Notifier benutzen(wegen dem Speicher).

Lies die LV-Hilfe über die Notifiers und Queues, insbesondere über die Timeouts von Schreib- und Lese-VIs.

Inwieweit ist deine Anwendung denn zeitkritisch?

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.09.2006, 09:33
Beitrag #5

lioncar Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Apr 2006

8.00
-
kA


Deutschland
Producer/Consumer Loop
Da eine Queue viel Speicher schlugt, muß der rechner ackern! Das ackern des Rechners wirkt sich auf mein LabVIEW Programm aus! Dieses wird behindert und brauch für die Abarbeitung länger!

Zeitkritisch ist meine Anwendung aus folgendem Grund! Ich möchte über einen Countereingang einer NICHT NI-Hardware die Counts lesen und in eine Drehzahl berechnen! Da ca. 8 Counts einer Drehzahl von 10000 U/min entsprichen, machen sich geringe Verzögerungszeiten in der Schleifendurchlaufzeit starkt bemerkbar. Deswegen möchte ich in der Schleife wo die Drehzahl erfasst wird möglichst wenig Programmcode drin haben. Leider müssen aber alle anderen VI's der Hardware (AI's,DIO,PWM Out) ebenfalls in der gleichen Schleife sein! Das passt mir zwar nicht aber das gibt mir die Hardware so vor! es ist nicht möglich die Hardwarereferenz auf eine 2. Schleife aufzuteilen um dort die anderen Hardware VI's zu verwenden! Deswegen brauche ich eine Möglichkeit, zeitunkritisch Daten von der Consumer Loop zurück in die Producer Loop zu bekommen, da in der Producer Loop ebenfalls Die Ausgangs VI's sind!

habe mit Hlfe des NI-Support eine Lösung basierend auf einen User Event aufgebaut! Funktioniert ganz habe jedoch plötzlich andere Probleme, die ich nicht orten kann! Das Programm läuft nicht so ab wie ich es will!

Ich habe mal das VI mit den Hardware VI's hochgeladen! Da Du die LLB von dem Gerät nicht hast habe ich die Hardware VI's entfernt und durch Bedien- und Anzeige elemente simuliert! Wenn Du interesse und zeit hast schau mal drüber!?

Grüße der Timo
Sonstige .vi  Motorbremse_Drehzahlerfassung_Hardware_simuliert.vi (Größe: 126,85 KB / Downloads: 348)

Sonstige .vi  Motorbremse_Drehzahlerfassung.vi (Größe: 144,96 KB / Downloads: 394)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.09.2006, 09:55
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Producer/Consumer Loop
Init sollte mit einer der Schleifen oder mit beiden verbunden sein, sonst kann es passieren, dass die Schleifen noch vor dem Init starten. Dein VI ist ziemlich gross und unübersichtlich, aber eins kann ich noch dazu sagen:

In deinen Loops werden die Daten direkt angezeigt, genau das schlugt seeehr viele Ressourcen. Die Anzeige der Daten kannst du in eine andere Loop machen und mit kleinerer Frequenz anzeigen, das menschliche Auge merkt es sowieso nicht. Damit sparst du eine Unmenge an Ressourcen.

Ich habe in einem Forum einen interessanten Beitrag gefunden, der Dich auch interessieren könnte:

http://www.LabVIEWforum.de/index.p...f=75&t=2943

Grüße
eugen graf

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.09.2006, 10:50
Beitrag #7

lioncar Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Apr 2006

8.00
-
kA


Deutschland
Producer/Consumer Loop
Ja mit der Init habe ich vergessen, da mich die anderen probleme so beschäftigen! Wenn alles läuft mach ich mich daran das VI zu verkleinern und evtl. Sub Vi's zu erstellen, aber erstmal muß es laufen! ;-)

Wie kann ich denn die Anzeige der Daten in einer Extra Loop realisieren? Ich muß die Daten doch auch irgendwie in diese Loop bekommen!?

Ich habe das Problem geunden warum die Cases in der zweiten Schleife nicht laufen! (Das VI mit simulierter Hardware) Leider bekomme ich keinen Screenshot hier rein! In der ersten Sequenz befindet sich ein Case, indem ein User Event gesendet wird! Genau dieser User Event macht Probleme! In dieser Sequenz habe ich eine "Wartezeit", abhängig vom Itterationszähler programmiert! Gebe ich ihm vor er soll nicht warten läuft alles! Sobald ich jedoch eine Zeit/Faktor eingebe bleibt er an der Stelle wo das user event gesendet wird hängen!?!?!? Führe ich den User Event auserhalb der Sequenz lüft alles! Auch mit Wartezeit!?

gruß
Timo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.09.2006, 13:44
Beitrag #8

lioncar Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Apr 2006

8.00
-
kA


Deutschland
Producer/Consumer Loop
Problem gelöst! Das Problem war, das ich den Timeout in der Ereignisstruktur nicht behandelt habe! Also Timeout Case eingefügt und als Timeout 1ms angegeben! Und schon geht....

Was mich noch weiter interessieren würde ist, wie ich die Daten mit Hilfe einer extra Loop anziegen lassen kann!?

Gruß
Timo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.09.2006, 14:22
Beitrag #9

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Producer/Consumer Loop
Du kannst genauso in deiner Loop die Daten in eine Queue sammeln und dann z.B. 5 oder 10 Punkte in einer extra-Loop die neuen Punkte dem XY-Plot übergeben und anzeigen. Aber es ist eine andere Baustelle.

Gruss, Eugen

Webseite des Benutzers besuchen 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
  Queue verwendung in komplexer Producer/Consumer Abhängigkeit Ksanto 8 4.974 03.04.2017 20:14
Letzter Beitrag: Ksanto
  Parallel Port Read and Write Loop.vi rothhp 2 3.751 16.12.2015 16:08
Letzter Beitrag: rothhp
  While-loop Margi 2 2.903 21.09.2015 12:49
Letzter Beitrag: TDO
  For und While Loop katana 2 3.791 29.07.2015 11:14
Letzter Beitrag: Trinitatis
  While Loop Case überspringen PaulC 13 11.291 07.01.2015 15:13
Letzter Beitrag: GerdW
  Timing simulation and control loop I2thavo 0 3.339 23.07.2014 19:49
Letzter Beitrag: I2thavo

Gehe zu: