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 

Unterschied Design Pattern



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.07.2018, 14:20
Beitrag #1

Mechatroniker28 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Mar 2018

2017
2017
DE



Unterschied Design Pattern
Hallo LabVIEW-Team,

Was ist der Unterschied zwischen Queued Message Handler, Ereignistruktur und Producer Consumer?
Ich will wissen welche Architektur für welche Bereich geeignet ist?
Ich bedanke mich im Voraus.

Viele Grüße
Mechatroniker28
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.07.2018, 13:16 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2018 09:58 von IchSelbst.)
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.573
Registriert seit: Feb 2005

11, 14, 15, 17
-
DE

97437
Deutschland
RE: Unterschied Design Pattern
(05.07.2018 14:20 )Mechatroniker28 schrieb:  Was ist der Unterschied zwischen Queued Message Handler, Ereignistruktur und Producer Consumer? Ich will wissen welche Architektur für welche Bereich geeignet ist?

"Queued Message Handler": QMH
QMH ist, wie der Name besagt, ein System, dass Messages mittels Queues handhabt. QMH ist immer Mittel zum Zweck. Ein Zweck z.B. ist die Producer-Consumer-Strategie.

Hauptzweck einer Queue besteht darin, unabhängige Programmmodule logisch zu verbinden. Jedes einzelne Modul für sich alleine arbeitet quasi selbstständig - strenggenommen ohne zu wissen (ohne wissen zu müssen) wer sonst noch irgendwo arbeitet. Da aber jedes Modul etwas produziert (ein Modul, das nichts produziert, ist zuerst einmal sinnlos), ist es sinnvoll, dass das Modul zum einen diese Daten nach außen geben kann, zum anderen ist es sinnvoll, das das Modul von außen gesteuert werden kann. Vom Modul aus gesehen ist das Außen ein anderes Modul. Die Schnittstelle zwischen den einzelnen Modulen kann man mit Queues realisieren (und/oder Meldern, die als Sonderfall einer Queue angesehen werden können).

Ganz wichtig: Eine Queue hat immer eine Richtung - nämlich vom "Producer" zum "Consumer": Ersterer schreibt Daten in die Queue (versendet also Daten per Queue), Letzterer ließt die Date aus der Queue aus (empfängt also Daten per Queue). Diese Richtungsgebundenheit bedeutet natürlich, dass zum Verbinden zweier Module in der Regel zwei Queues notwendig sind.


"Producer Consumer"
Auch hier gilt: selbsterklärend. Irgendwer produziert etwas, ein anderer konsumiert dieses Etwas. Das Etwas nun muss also vom Produzenten zum Verbraucher (warum sollte es sonst produziert werden). Der Weg, den das Etwas nimmt, heißt Queue.
Beispiel (also Bereich): Das Datenerfassungsmodul "AIn" produziert Daten (Messwerte) dadurch, dass Werte aus dem DAQmx gelesen werden. Diese Daten stellt das Modul sozusagen der Allgemeinheit zur Verfügung - indem es die Daten in eine Queue (kann auch ein Melder sein) schreibt. Wer die Daten haben will, soll sie aus der Queue (dem Melder) herausholen.
"Daten", also das, was in der Queue gehandhabt wird, müssen nicht unbedingt Daten in Form von Messwerten sein. "Daten" können auch Kommandos oder Mitteilungen ("Message") sein. Der Consumer (von Messwerten) sagt z.B. dem Producer (der Messwerte), dass er (der Producer) diese oder jene Kanäle sampeln soll. Das sagt der Consumer selbstverständlich per Queue.

Hinweis:
"Producer/Consumer" kann man im engeren Sinne auf Queues beziehen und im weiteren Sinne auf Module.


"Ereignistruktur"
Das Element "Ereignistruktur" nehme ich immer dann, wenn der Anwender über die GUI eine Eingabe in das System machen will. Eine solche Eingabe ist immer eine einmalige Sache, also ein "Ereignis". Ein Ereignis soll aber immer eine Wirkung haben - z.B. das Starten der Abtastung von Messwerten im AIn-Modul. In dem Ereignis-Case würde man also in eine Queue schreiben, die das AIn-Modul veranlasst, ab jetzt Daten zu samplen.


Fazit:
Das Programm wird aufgeteilt in viele unabhängige Module, die untereinander per Queue/Melder kommunizieren. Die Kommunikation des Anwenders mit den Modulen geschieht am Schnittpunkt "Ereignisstruktur".


Änderungshinweis:
Da war ja ein ganzer Absatz doppelt - blödes Ctrl-V ...

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
08.07.2018, 07:52 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2018 09:19 von Lucki.)
Beitrag #3

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

Beiträge: 7.632
Registriert seit: Mar 2006

LV 2015-17 prof.
1995
DE

01108
Deutschland
RE: Unterschied Design Pattern
IchSelbst hat das ja sehr schöne erklärt, nur noch eine kleine Ergänzung: Das Entscheidende ist, dass Erzeuger und Verbraucher nicht synchron laufen müssen. (oder man könnte auch sagen: Die Synchronisation besorgt die Struktur selbst). Der Erzeuger muß mit der Erzeugung neuer Daten nicht warten, bis die vorherigen Daten verarbeitet worden sind, und der Verbraucher muß nicht befürchten (falls der Erzeuger mit der Erzeugung neuer Daten nicht wartet), daß Daten verloren gehen. wenn er die Daten nicht schnell genug abholt. Natürlich funktioniert das Ganze dauerhaft nur dann, wenn der Verbaucher mit der Verarbeitung der Daten im Schnitt einen Tick schneller ist als der Erzeuger mit der Erzeugung derselben. (Der Verbraucher braucht aber kein Wait in seiner Schleife, das Wait macht die Queuefunktion selbst. Wenn beim Versuch, neue Daten abzuholen, noch keine oder nicht genügend Daten in der Queue sind, wird an der Datenabholfunktion gewartet, bis die Bedingung erfüllt ist)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.07.2018, 14:39
Beitrag #4

Achim Offline
*****
*****


Beiträge: 4.154
Registriert seit: Nov 2005

8.x / 20xx
2000
EN

978xx
Deutschland
Exclamation RE: Unterschied Design Pattern
@ IchSelbst:

Sehr schön geschrieben!
Guru1


Das sollte FÜR IMMER auf die Startseite des LVF!Dafuer

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.07.2018, 14:49
Beitrag #5

Mechatroniker28 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Mar 2018

2017
2017
DE



RE: Unterschied Design Pattern
Hallo LabVIEW-Team,

vielen Dank für die Antwort "Ichselbst". Was meinst du mit "AIn"? Ist das nur ein name?
Lucki, auf welche Design Pattern beziehst du dich?

Viele Grüße
Mechatroniker28
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.07.2018, 16:14
Beitrag #6

jg Offline
CLD & CLED
LVF-Team

Beiträge: 15.237
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Unterschied Design Pattern
AIn = Analog In

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
Anzeige
10.07.2018, 21:15
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.573
Registriert seit: Feb 2005

11, 14, 15, 17
-
DE

97437
Deutschland
RE: Unterschied Design Pattern
(10.07.2018 14:49 )Mechatroniker28 schrieb:  Lucki, auf welche Design Pattern beziehst du dich?
Er bezieht sich auf das Design Pattern "Producer Consumer?": Producer = Erzeuger. Consumer = Verbraucher.

Lucki beschreibt einen wichtigen Vorgang: Wie synchronisiere ich die Daten verschiedener Module, die selbst asynchron arbeiten sollen. Auch hier fällt mir ein Beispiel ein: Supermarkt (= Queue). Frühmorgens (also asynchron zur Kundschaft, die einkauft) kommt der große LKW und bringt (= Schreiben in die Queue) neue Ware ("Daten"). Im Laufe des Tages kommt dann die Kundschaft (asynchron zum LKW) und macht den Laden wieder leer (Lesen aus der Queue). Kommt keine Kundschaft aber der LKW, läuft der Laden über …

Gegenmodel: Fahrender Bäcker auf dem Dorf. Ohne Queue hackt die Sache: Der Kunde muss sich beim LKW einfinden, genau zu dem Zeitpunkt, wenn der LKW da ist - also synchron. Kommt der Kunde später, ist der LKW weg und der Kunde bekommt keine Brötchen. Kommt der LKW zu spät, kommt der Zeitplan des Kunden durcheinander, weil er unerwarteterweise warten muss.

Fazit:
Mit Queues kann man hervorragend zwischen zwei asynchronen Abläufen Daten austauschen.

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
13.07.2018, 14:55
Beitrag #8

Mechatroniker28 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Mar 2018

2017
2017
DE



RE: Unterschied Design Pattern
Vielen Dank Ichselbst,

was für Vorteile würde es noch geben, wenn man Ereignisstrukuturen für GUI`s verwendet?
Ich bedanke mich im Voraus.

Viele Grüße
Mechatroniker28
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.07.2018, 16:26 (Dieser Beitrag wurde zuletzt bearbeitet: 13.07.2018 16:26 von jg.)
Beitrag #9

jg Offline
CLD & CLED
LVF-Team

Beiträge: 15.237
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Unterschied Design Pattern
Da gibt es doch gar keine Diskussion. Sobald ich ein VI habe, welches eine GUI-Interaktion seines Frontpanels behandeln soll, habe ich da eine Event-Struktur drinnen. Das macht das Programmieren viel einfacher.

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
13.07.2018, 22:10
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.573
Registriert seit: Feb 2005

11, 14, 15, 17
-
DE

97437
Deutschland
RE: Unterschied Design Pattern
(13.07.2018 14:55 )Mechatroniker28 schrieb:  Was für Vorteile würde es noch geben, wenn man Ereignisstrukturen für GUI`s verwendet?
Da eine Ereignisstruktur zum richtigen Programmieren dazu gehört, ist es nicht vorteilhaft sie zu verwenden, sondern von Nachteil, sie nicht zu verwenden.

Die Inhalte der meisten Ereignis-Cases kann man bestimmt auch ohne Ereignissequenz handhaben, also in einem ganz normalen Datenfluss bearbeiten.

Aber:
Da du die vielen Inhalte der Cases dann nicht mehr gestapelt hast, verbrauchen die Inhalte der Cases entsprechend viel Platz im Blockdiagramm. Das aber wird mit der Zeit, also im Laufe der Programmerstellung, wenn immer neue Elemente dazukommen, unübersichtlich - sprich nicht debugbar: 1. fataler Programmierfehler. Jetzt könntest du sagen, dann machst du halt eine Case-Sequenz, dann ist es wieder übersichtlich - dann sage ich: das wäre ja schon fast die Ereignissequenz.

Zweitens:
Meistens will man eine Operation nach einer Wertänderung ausführen, sobald der Cursor das Eingabeelement verlässt. Dieses aber in einem Datenfluss festzustellen ist bei manchen Eingabeelementen nicht so einfach. Wenn du eine Wertänderung feststellen willst, musst du den vorherigen Wert mit dem jetzigen Wert vergleichen. Das aber würde einen Rückkopplungsknoten im Datenfluss bedeutet. Das Erkennen der Wertänderung ist aber (schon seit beinahe Urzeiten) eine Eigenschaft eines jeden Eingabeelementes. Die Ereignissequenz ist also ein Mittel zum Ausnutzen vorhandener (wenn auch unsichtbarer) Funktionalitäten. Mit Ereignissequenz sparst du also Programmieraufwand.

Drittens:
Da du ohne Ereignissequenz einen kontinuierlichen Datenfluss hast, verbraucht du automatisch auch Prozessorzeit. Das scheint zwar bei modernen Prozessoren irrelevant - das kommt aber darauf an, wie der Rest des Programmes gestaltet ist. Im schlimmsten Falle kommt es zu unvorhergesehenen (und unvorhersehbaren) Ereignissen, die auch wieder ein Debuggen schwierig machen.

Hinweis:
Immer pro VI nur eine einzige Ereignisstruktur verwenden. Mehr braucht man auch nicht. Wer mehr braucht, hat einen strukturellen Fehler im Programm ...

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Unterschied zwischen CanBus und RS232 lememe 0 2.494 17.05.2011 10:45
Letzter Beitrag: lememe

Gehe zu: