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 

Erzeuger-Verbraucher Entwurfsmuster und Errorcluster



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!

08.02.2010, 19:27
Beitrag #1

wernerIBN Offline
Datenflussumgeher
**


Beiträge: 124
Registriert seit: Sep 2009

8.6 und 2011
2000
DE

52425
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Hallo,
ich arbeite mit dem Erzeuger-Verbraucher Entwurfsmuster undLv86_img.

Es geht mir um die Verbraucherschleife.
Nehmen wir an, ich habe ein Gerät, das ich öffnen-beschreiben-schliessen kann.
öffnen-beschreiben-schliessen ist in einem SUB-VI mit errorclustern, also habe ich öffnen.vi-beschreiben.vi-schliessen.vi mit den Errorclustern durchverbunden.

Das will ich nun so in die Verbraucherschleife packen, dass das öffnen.vi vor Ausführen des restlichen Programms initialisiert wird. Daher platziere ich das links ausserhalb der verbraucher-while und verkabele den Errorcluster auf ein Schieberegister der while.

Nach beenden des Programms soll schliessen.vi aufgerufen werden, daher ist es rechts von der verbraucher-while, und erhält den Errorcluster aus dem Schieberegister.

In der Mitte der Verbraucherschleife habe ich nun mehrfach mein beschreiben.vi - je nach Befehl schreibe ich da halt was anderes. Die Idee ist zu Beginn einmal das Gerät öffnen, dann zig mal beschreiben, und am Ende einmal das ganze wieder schliessen.

Was mir nun zu denken gibt, ist ja die Möglichkeit das irgend ein schreibbefehl in beschreiben.vi ja fehlschlagen kann, und der Errorcluster auf Fehler geht. Der Fehler kommt aber nicht korrekt an vor dem nächsten beschreiben.vi-case an, da ja das Schieberegister aussen auf der while sitzt, und die Erzeigerschleife ja innen in den case rotiert.

Auf dem case kann ich kein Schieberegister setzten, das scheint nicht zu gehen.

Wie krieg ich den Errorcluster wieder an den Eingang des beschreiben.vi.

Mit Feedbackknoten hab ich probiert, aber es nicht hinbekommen.

Gibt es da einen Standardweg, es ist doch eigentlich üblich und schön so eine Kette aus n VIs per errorcluster zu verbinden, das muss doch logisch irgendwie in so eine Verbraucherschleife einzubauen sein ???

Wer kann mir da ein schönes Beispiel nennen ?

Werner


Angehängte Datei(en)
Sonstige .vi  bolometer_1.vi (Größe: 19,53 KB / Downloads: 442)

Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2010, 21:57
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Könnte es sein, dass du etwas falsch verstehst? Oder verstehe ich deine Frage nicht, kann auch gut sein...

Also, im Case "Queue-Status" entsteht ein Fehler. Das geht dann zwecks dem Schieberegister in den nächsten Durchlauf der Schleife. Hier wird dann erst einmal auf das nächste Queue-Element gewartet. Und nur wenn bei diesem Dequeue ein Fehler auftritt, dann springst du in den "Error-Case" der Case-Struktur. Ansonsten wird der Case "No Error" abgearbeitet, bloß dass der Error-Cluster, der an deine "Queue-Status" Case-Struktur geht, eine Fehlermeldung enthält.
Wie du diesen Fehler behandelst, dass musst du selber wissen.

Gruß, Jens

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
08.02.2010, 22:59 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2010 23:01 von Lucki.)
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
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Habe jetzt nicht alles verstanden, aber vielleicht passt das:
Ein universelle Methode zur Fehlerbehandlung - insbesondere auch für solche Erzeuger- Verbraucher-Strukturen - ist im Buch von Johnson/Jennings im Kapitel 8 "Building an Application" beschrieben.
Danach gibt es eine extra Queue nur für den Fehlertransport. Im Top-Level-VI hat man eine eigene unabhängige Schleife, in der sich das Dequeue-Element befindet. Hier werden alle Fehler empfangen und behandelt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.02.2010, 08:49 (Dieser Beitrag wurde zuletzt bearbeitet: 09.02.2010 09:14 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
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Habs mal rauskopiert:
   
Zur Erläuterung:
Fig 8.18 ist das "Error Queue subVI" (= dieses komische ganz kleine Symbol. welches in den anderen Bildern vorkommt) Es es nimmt die Fehler entgegen und bringt sie in die "Error Queue"
Fig 8.17 ist die Schleife im HauptVI für die Fehlerbehandlung ( die hier bewußt primitiv gehalten ist)
Fig 8.19 zeigt das Ganze in Aktion.
Meine Meinung: Einfach und Genial.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.02.2010, 09:05
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Offtopic2
' schrieb:Meine Meinung: Einfach und Genial.
Queues sind immer eine sehr gute Wahl. Die haben nämlich mehrere Vorteile: Man kann sie verwenden wie das Message-System in Win32 => Eventgesteuert. Und: sie durchbrechen das Datenflußprinzip: Die explizite Sequenzierung, die eigentlich einem modularen System entgegensteht, ist manchmal doch recht unerwüncht.

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
09.02.2010, 12:22
Beitrag #6

wernerIBN Offline
Datenflussumgeher
**


Beiträge: 124
Registriert seit: Sep 2009

8.6 und 2011
2000
DE

52425
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Aha, danke an alle.

Das heisst also, wenn in meiner Verbraucherschleife in dem Case Queue-Status (nur als beispiel) ein Fehler in einem VI entsteht (hier tell current position) dann muss ich da lokal direkt reagieren.

Ich sehe 2 Möglichkeiten:

1.) Global vorher eigens eine ERROR-Queue anlegen, und da alle Errorcluster reinlaufen lassen und behandeln
2.) bei einem Error ein Event abfeuern und beispielsweise meine Applikation anhalten

zu Jens G:

Zitat:bloß dass der Error-Cluster, der an deine "Queue-Status" Case-Struktur geht, eine Fehlermeldung enthält.
Wie du diesen Fehler behandelst, dass musst du selber wissen.

Genau darum gehts, wenn mein vi tell current position einen Error erzeugt, dann hat der Error-Cluster, der beim nächsten Durchlauf an meine "Queue-Status" Case-Struktur geht, leider eben keinen Fehler... ich hätte gerne, dass der Fehler sich gemerkt wird, weiss aber nicht wie ich das anstellen soll.

Werner

Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.02.2010, 12:32
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
' schrieb:2.) bei einem Error ein Event abfeuern und beispielsweise meine Applikation anhalten
Bei dieser Methode sehe ich allergrößte Probleme.
Zwischen Fehler feststellen und Applikation anhalten kann soviel Zeit vergehen, dass trotz des Fehlers Sachen gemacht werden, die aufgrund des Fehlers eigentlich nicht gemacht werden dürfen.

Diese Methode entspricht in etwas dem Vorgehen mit Exceptions bei Win32. Nur: Dort hält in Folge des Auslösens einer Exception der aktuelle Prozess sofort an. Der kann dann gecancelt werden. In LV würde der Prozess aber weiterlaufen. Außerdem: Was tun mit parallelen Prozessen? Mit Gewalt anhalten oder nicht?

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
09.02.2010, 15:11
Beitrag #8

wernerIBN Offline
Datenflussumgeher
**


Beiträge: 124
Registriert seit: Sep 2009

8.6 und 2011
2000
DE

52425
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Zitat:Zwischen Fehler feststellen und Applikation anhalten kann soviel Zeit vergehen, dass trotz des Fehlers Sachen gemacht werden, die aufgrund des Fehlers eigentlich nicht gemacht werden dürfen.

Das leuchtet mir ein, und ist ein gutes Argument.

Vermutlich ist es besser (obwohl unelegant) einfach im Fehlerfall SOFORT einen Fehlerdialog aufzumachen.

Werner

Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.02.2010, 15:35
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
' schrieb:Vermutlich ist es besser (obwohl unelegant) einfach im Fehlerfall SOFORT einen Fehlerdialog aufzumachen.
Was angemessen ist, kommt auf den tatsächlichen Fehler an.

Wenn dir die Platte crashed, darfst du machen wie mit Exception: brachial allea schließen. Wenn dein Prüfling zu heiß wird (was auch im Sinne eines Fehlers ein solcher ist), sollte das Programm ganz normal darauf reagieren in der Art, dass das kein Fehler ist, sondern ein ganz normaler Zustand. Weil deine COM-Schnittstelle Fehler bringt, weil du eine falsche Baudrate zugelassen hast - bis du selber Schuld.

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
30.06.2010, 07:24 (Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2010 07:41 von Matze.)
Beitrag #10

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Erzeuger-Verbraucher Entwurfsmuster und Errorcluster
Hallo zusammen,

ich habe versucht, Abb. 8.18 zu erstellen, die Lucki in Beitrag #4 angehängt hat.

Der Eingang "Element" des SubVIs "Element einfügen" akzeptiert bei mir nur einen String.
Laut Abbildung müsste der der Error-Cluster hin. Klar, da dieser im Fehlerfall in die Queue eingetragen werden soll.

Was mache ich falsch?

   

Nachtrag:
Wenn ich den Umweg über das SubVI "Queue anfordern" gehe und dort als Eingang einen Error-Cluster platziere und dann davon die Referenz erstelle, geht es.Wink
Ich habe die Referenz zuerst direkt vom SubVI "Element einfügen" erstellt.

Ich habe jedoch eine Verständnisfrage dazu:
Zunächst erscheint mir eine Schleife mit Schieberegister, die nur einmal durchlaufen wird, weniger sinnvoll.
Dieses SubVI aus Abb. 8.18 platziere ich doch mehrmals in meinem Programm, jeweils am Ausgang einer "Fehlerkette" oder nur einmal?
Ich verstehe nicht ganz, wieso das Schieberegister hier Wirkung zeigt.

Grüße
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.715 28.07.2016 13:21
Letzter Beitrag: Atlaspremier
  Erzeuger-Verbraucher Muster Abbruch Verbraucherschleife mit Abarbeitung der Queue lumaxo 5 6.709 12.02.2015 13:55
Letzter Beitrag: Lucki
  Erzeuger/Verbraucher Schleife mit mehreren Verbrauchern LV-Fred 4 5.927 08.06.2012 15:58
Letzter Beitrag: Kiesch
  Erzeuger-Verbraucher-System beenden Matze 13 13.151 25.10.2010 19:13
Letzter Beitrag: rbliomera
  Design "Erzeuger/Verbraucher wernerIBN 11 13.562 07.10.2009 10:27
Letzter Beitrag: wernerIBN
  Erzeuger/Verbraucher-Entwurfsmuster wernerIBN 8 9.113 07.10.2009 08:42
Letzter Beitrag: IchSelbst

Gehe zu: