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:

Konzeptfrage zu UDP Kommunikation Multiclient



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!

21.01.2015, 13:50
Beitrag #1

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
Konzeptfrage zu UDP Kommunikation Multiclient
Hallo zusammen.

Aktuell überlege ich mir Möglichkeiten, um eine stabile UDP Kommunikation zwischen verschiedenen Teilnehmern zu realisieren. Nun bin ich mir aber aufgrund von mangelnder Erfahrung nicht sicher, wie ich an diese Sache herangehen soll. Nachfolgend versuche ich nun zu beschreiben, wie ich mir den Ablauf vorstelle und erhoffe mir ein Feedback von eurer Seite, ob meine Gedanken "effizient" sind bzw. wo und was man anders/besser machen könnte. Vorab sei noch gesagt, dass ich mittlerweile viel über UDP gelernt habe und mir bewusst ist, dass es sich um ein fehleranfälliges Protokoll handelt und es keine Kontrollstrukturen gibt, sofern man sich selbst keine schafft.

Situationsbeschreibung:
Es wird vom Rechner aus mit bis zu sechs Teilnehmern kommuniziert. Die Anzahl ist stets variabel. Zunächst erfolgt ein Broadcast, auf den alle angeschlossenen Teilnehmer einmalig reagieren und somit ihre Anwesenheit kundtun. Dies ist sowas wie ein Initialisierungsvorgang. Nachdem sich die Teilnehmer gemeldet haben, wird über ein Kommando von allen Teilnehmern eine Liste mit Daten abgeholt. Der Inhalt spielt für die weitere Betrachtung keine Rolle. Es ist nur wichtig, dass diese speziellen Daten angefordert wurden. Anschließend dürfen den Teilnehmern, voneinander unabhängig, Kommandos mit Vorgaben geschickt werden. Die Antworten müssen dann dem jeweiligen Teilnehmer zugeordnet werden können um damit z.B. Anzeigen zu füttern.
Nun kann es passieren, dass ein Teilnehmer abgeklemmt wird und ein neuer hinzukommt. Für diesen Fall soll ein Refresh Button vorgesehen werden. Dieser scant nach neuen Teilnehmern. Hier ergibt sich die erste Hürde. Es muss zum einen der Timeout des "alten" Teilnehmers erfasst, sowie sämtliche Daten zu diesem aus Arrays/Datenspeichern gelöscht werden. Ausserdem muss dann der neue Teilnehmer in die bestehende "Liste" eingefügt werden.

Problematik:
Über UDP Read bekomme ich stets die IP Adresse des sendenden Teilnehmers und für die Auswertung der jeweiligen Nachricht habe ich bereits ein VI, dass die Daten entsprechend aufbereitet und in lesbare Strukturen umsetzt. Wie aber speichere ich nun die Daten effizient, sodass ich auf diese Teilnehmerbezogen zugreifen kann? Hier gingen meine Gedanken in Richtung FGV. Allerdings ist mir nicht klar, wie ich diese dann aufbauen muss. Bisher hatte ich stets Indizies, die ich angeben konnte, aber in diesem Fall habe ich als Auswahlkriterium lediglich die IP Adresse des Teilnehmers und darüber hinaus die Art der Nachricht, die dieser geschickt hat (z.B. die Antwort auf eine Wertevorgabe oder Anfrage von Teilnehmerparametern).
Demnach müsste ich mir zunächst sowas wie einen IP Manager basteln, über den ich mir dann Indizies aus einer Tabelle mit IP Adressen ziehe?! Sicher merkt man, dass mir hier der rote Faden verloren geht...
Kurzum und pauschal ausgedrückt: Ich weiß einfach nicht, wie ich die unterschiedlichen Teilnehmer managen soll, ohne Daten durcheinander zu werfen.

Wie gehen Profis mit solchen Dingen um?
Wie würde man unterschiedliche Daten von unterschiedlichen Teilnehmern speichern und verarbeiten?

Ich freue mich auf euer Feedback. Falls in meinen Schilderungen etwas undeutlich ist, werde ich mich auf entsprechendem Hinweis bemühen, diese genauer auszuführen!

NoWay
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2015, 13:55
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Konzeptfrage zu UDP Kommunikation Multiclient

Akzeptierte Lösung

Hallo NoWay,

ich würde wahrscheinlich auch eine FGV verwenden.

Zitat:in diesem Fall habe ich als Auswahlkriterium lediglich die IP Adresse des Teilnehmers
Das ist doch perfekt!
Ich arbeite gern mit Key-Value-Paaren, einfach realisiert über Variantattribute. Die IP kannst du einfach und eineindeutig in einen Key-String umwandeln…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.01.2015, 09:43 (Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2015 09:46 von NoWay.)
Beitrag #3

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Konzeptfrage zu UDP Kommunikation Multiclient
Hallo GerdW.

Das ist eine interessante Technik. Ich habe gestern noch ein paar erfolgreiche Versuche durchgeführt. Nun strebe ich Überlegungen an, wie ich das auf meine Problematik anwenden kann. Ich kriege den Absprung aber nicht hin.

Der Keyname ist demnach die IP Adresse und mit einem weiteren Set Variant Attribute würde ich dem bisherigen "Datenspeicher" einen weiteren Eintrag hinzufügen, bzw überschreiben, wenn unter dem gleichen Schlüssel bereits ein Eintrag vorhanden ist. Das funktioniert, wenn ich die Set und Get Attribute aneinander reihe. Über das Get Attribute kann ich dann alle gespeicherten Elemente abrufen. Mir ist jetzt allerdings nicht klar, wie ich dies in Zusammenspiel mit einer FGV nutzen kann. Oder anders formuliert: Wie verwende ich diese Technik um unterschiedliche Nachrichten IP bezogen zu speichern, um sie an anderen Stellen im Programm wieder aufrufen zu können? Der zündende Gedanke fehlt mir da schlichtweg.
Kannst du mir da vllt. noch ein paar Details nachreichen?

EDIT:
Oder muss ich etwa nur den Variant Datenstrom in einer FGV speichern? Das wäre ja echt genial o_O"

Gruß
NoWay
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.01.2015, 09:48 (Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2015 10:10 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Konzeptfrage zu UDP Kommunikation Multiclient
Hallo NoWay,

Zitat:Wie verwende ich diese Technik um unterschiedliche Nachrichten IP bezogen zu speichern
Entweder erweiterst du deinen Key, um etwas in der Form "IP-Nachrichtentyp" zu erhalten (bei einer übersichtlichen Anzahl Nachrichtentypen) oder du speicherst in deinem Value ein Array der Nachrichten (z.B. ein Array of Cluster).

Wie genau organisierst du deine Daten?
- mehrere IPs aka Nodes
- mehrere Nachrichtentypen pro Node
- willst du auch eine Historie der Nachrichten (pro Node?, pro Typ?) vorhalten?

Hier mal ein Ausschnitt aus einer FGV:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.01.2015, 10:08 (Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2015 10:57 von NoWay.)
Beitrag #5

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Konzeptfrage zu UDP Kommunikation Multiclient
(22.01.2015 09:48 )GerdW schrieb:  Wie genau organisierst du deine Daten?
- mehrere IPs aka Nodes
- mehrere Nachrichtentypen pro Node
- willst du auch eine Historie der Nachrichten (pro Node?, pro Typ?) vorhalten?

Mein erter Gedanke ging in diese Richtung. Die IP Adressen würde ich in einem Array bzw. seperaten FGV speichern wollen. Die Nachrichtentypen sind verschieden. Ich schicke z.B. eine Nachricht mit dem Typ "Control" an einen Teilnehmer und dieser reagiert mit einer Nachricht vom Typ "Data". Die Typisierung ist in der Nachricht hinterlegt:
   
Über Typ wird dann ein Case aufgerufen, der mir die Payload entsprechend der Protokollvorlage konvertiert. Am Ende steht dann ein individueller Cluster pro Nachrichtentyp. Es gibt aktuell sechs verschiedene Nachrichtentypen. Bzgl. Historie: Aus der "Data" Nachricht gewinne ich Informationen, die später zur Anzeige in der GUI und diversen Graphen Verwendung finden sollen. Hierzu muss ich mir dann durchaus einen Datenpuffer aufbauen.

EDIT
Es sieht so aus, als habe ich es begriffen Big Grin Konnte mir eben eine FGV basteln, die IP bezogen Daten speichert, also quasi genau das, was ich brauche.
Danke für diesen wirklich wertvollen Hinweis, GerdW!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: