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 

Umgang mit der Erzeuger/Verbraucher-Struktur



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!

26.07.2009, 10:22 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2009 10:41 von Den.)
Beitrag #1

Den Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Jun 2009

8.6
2009
de

24143
Deutschland
Umgang mit der Erzeuger/Verbraucher-Struktur
Hallo,

bitte um Hilfe! Im Rahmen eines Projektes muss ich ein Messprogramm erstellen, als Aufbaustruktur habe ich Erzeuger/Verbraucher-Struktur gewählt. Ich habe hier ein vereinfachtes Testprogramm hinzugefügt (siehe Abbildung und angehängte Datei).
Die Daten werden in der Erzeuger-Schleife produziert, dabei wächst die Queue ständig. Stoppt man die Erzeuger-Schleife, dann werden die Daten, die in Queue zwischen gespeichert sind, ordnungsgemäß abgearbeitet. Das Problem besteht darin, dass Verbraucher-Schleife dann auf die neue Daten wartet und man kann die nicht mehr stoppen und Queue freigeben.

Habt ihr irgendwelche Ideen, Lösungen?

Danke im Voraus

Viele Grüße
Den


Angehängte Datei(en) Thumbnail(s)
   

Sonstige .vi  LV_8.6_Queue_Testprogramm.vi (Größe: 61,43 KB / Downloads: 240)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.07.2009, 12:56 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2009 12:57 von eg.)
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Umgang mit der Erzeuger/Verbraucher-Struktur
Drei Möglichkeiten (in allen 3 wird nur ein Stop-Button im Erzeuger verwendet):

1. Du beendest den Verbraucher, wenn du einen Fehler beim Lesen der Queue bekommst, dabei schleisst du die Queue dann, wenn der Producer beendet wird.

2. Du sendest nicht nur das Signal selbst, sondern noch einen Stop-Flag zum Verbraucher in einem Cluster. Der Typ der Queue ist damit ein Cluster aus Signal und booleschen Element.

3. Du machst deine Queue aus einem Cluster aus einem Befehl (oder auch State genannt) und einem "unbestimmten" Datentyp (z.B. String oder Variant). Dann reagierst du im Verbraucher abhängig vom Befehl: Daten oder Stop. Das nennt sich Queued State Machine und ist im Google zu finden (ich glaube bei expressionflow.com)

Es gibt noch die vierte Variante, von der ich aber abraten würde. Du machst einen kleinen Timeout beim Lesen der Queue, somit kannst du zwei Stopbuttons verwenden.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2009, 16:40
Beitrag #3

Falk Offline
ja, das bin ich...
***


Beiträge: 343
Registriert seit: Jan 2006

8.0 :: 201x ::202x
2006
DE_EN


Deutschland
Umgang mit der Erzeuger/Verbraucher-Struktur
Du könntest alternativ auch eine zusätzliche Occurence verwenden, die dir das Ende der Erzeugerschleife darstellt (nach Beendigung der Schleife einfach die Occurence setzen). Ist dann aber in der Verbraucherschleife etwas mehr Arbeit, denn du willst ja sicherstellen, dass die Queue geleert wird.

Schöne Grüße
Falk

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2009, 16:50
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Umgang mit der Erzeuger/Verbraucher-Struktur
@Falk, ich denke das wäre die letzte vierte Variante, nur halt mit Occurence, statt einem eigenem Beendenbutton. Ebenfalls muss man kleinen Timeour beim Lesen der Queue setzen, was nicht unbedingt gut ist, denn erstens muss man zusätzliche Case-Struktur in den Consumer einbauen, die Fehler/Nicht Fehler unterscheidet. Ausserdem kleine Timeouts sind nicht so gut für die CPU und Reaktionszeit beim Beenden zum Beispiel.
Wobei CPU Auslastung ist nicht kritisch.

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
  Protokolieren durch TDMS in einer Erzeuger und Verbraucher Synchronisation Atlaspremier 0 2.709 28.07.2016 13:21
Letzter Beitrag: Atlaspremier
Information Der richtige Umgang mit (Langzeit)Messdaten NoWay 6 5.565 13.05.2015 13:57
Letzter Beitrag: mathez
  Erzeuger-Verbraucher Muster Abbruch Verbraucherschleife mit Abarbeitung der Queue lumaxo 5 6.693 12.02.2015 13:55
Letzter Beitrag: Lucki
  Umgang mit vielen Variablen unterschiedlichen Typs dummyuser 6 5.566 13.01.2014 12:19
Letzter Beitrag: dummyuser
  Erzeuger/Verbraucher Schleife mit mehreren Verbrauchern LV-Fred 4 5.913 08.06.2012 15:58
Letzter Beitrag: Kiesch
  CPU Auslastung : CASE Struktur VS Event Struktur > 20% : 60% ??? Dimasq 14 12.703 08.06.2012 12:28
Letzter Beitrag: Dimasq

Gehe zu: