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 

UDP Verbindung zwischen mehreren PCs



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!

12.03.2010, 15:51 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2010 15:56 von Michael_.)
Beitrag #11

Michael_ Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Nov 2009

8.5.1
2007
de

1100
Oesterreich
UDP Verbindung zwischen mehreren PCs
Also es ist nur eine Netzwerkkarte im PC eingebaut, aber 2 weitere virtuelle NW-Karten sind vorhanden. Vielleicht liegt es daran!
Ich werde es mal versuchen die Karten zu deaktivieren!
Und vielleich hab ich das falsch formuliert. Die Daten kommen praktisch unverzögert am PC an, werden jedoch Verzögert von LabVIEW verarbeitet! Wirkt fast so, als werden die Daten in einen Buffer geschrieben, welcher erst später ausgelesen wird...
Programme kommen noch!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.03.2010, 13:54
Beitrag #12

Michael_ Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Nov 2009

8.5.1
2007
de

1100
Oesterreich
UDP Verbindung zwischen mehreren PCs
Also hier das Programm, welches die Datenkommunikation erledigt!


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2010, 18:06 (Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2010 18:21 von rolfk.)
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
UDP Verbindung zwischen mehreren PCs
' schrieb:Also hier das Programm, welches die Datenkommunikation erledigt!

Also erst mal würde ich nur ein UDP Open machen und da auch keine Adresse anschliessen. Dann würde ich den Addressenausgang vom UDP Read auswerten und die Daten dieser Adresse gemäss verteilen. Voila! Das Timeout des UDP read müsste dann natürlich recht klein sein und der entsprechende Timeout error muss auch ausgewertet werden (im Falle eines solchen Fehlers also keine Daten verteilen da ja nichts reingekommen ist). Bei allen anderen Fehlern ausser Timeout, die Verbindung schliessen und allenfalls neu öffnen.

Der netaddress input ist optional und nicht gedacht um zu bestimmen mit welchem Client man Verbindung haben möchte. Schliesslich ist man ein Server und der akzeptiert grundsätzlich jede Verbindung, (aber weist Anfragen eventuel ab basierend auf Authentifizierung oder Ausgangsaddresse).

Der netaddress Input ist gedacht um den Serversocket eventuel nur mit einer bestimmten lokalen Netzwerkkarte zu verbinden statt mit allen. Ansonsten könnte es bei multiplen Netzwerkkarten und komplexen Netzwerkstrukturen zu unübersichtlichen Routingproblemen im Netzwerklayer kommen. Der grosse Delay könnte gerade davon kommen, dass Du die netaddress angeschlossen hast. Da das wohl die Addresse des Clients ist und nicht die lokale Addresse eines lokalen Netzwerkinterfaces, gerät das Routing im Socketdriver wohl etwas in Schwierigkeiten.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2010, 18:45
Beitrag #14

Michael_ Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Nov 2009

8.5.1
2007
de

1100
Oesterreich
UDP Verbindung zwischen mehreren PCs
Also erstmal Danke für eure Antworten und Tipps!

' schrieb:Also erst mal würde ich nur ein UDP Open machen und da auch keine Adresse anschliessen. Dann würde ich den Addressenausgang vom UDP Read auswerten und die Daten dieser Adresse gemäss verteilen. Voila!

Das Auswerten der Adresse wäre ja so nicht falsch, jedoch für meine Anwendung eher ineffektiv, da ich die Daten der beiden PCs dauerhaft miteinander Vergleichen muss, und daher die verschiedenen Daten im selben Zyklus benötige!
Deshalb erscheint für mich diese Lösung zwar richtig, aber eher ungeeignet, da dies die Auswertung der Daten zeitlich verlängern würde!

Gibt es über UDP keine Möglichkeit in einem Zyklus von 2 verschiedenen Sendern zu empfangen? Bitte helft mir weiter!
mfg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2010, 18:48 (Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2010 18:57 von jg.)
Beitrag #15

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
UDP Verbindung zwischen mehreren PCs
Einige Fehler und überflüssige Sachen hat Rolf schon erklärt.

Weiterhin hast du das Datenflussprinzip von LabVIEW nicht beachtet: Die lokalen Variablen mit den UDP-Refnums sind überflüssig, ja sogar gefährlich. Es ist nicht garantiert, dass die UDP-Open-Befehle vor deiner Lese-Schleife starten. Ohne Datenfluss ist die Reihenfolge zufällig.

Nächster Fehler: Beide Read-VIs in einer Schleife: Wenn jetzt einer deiner Slaves nichts sendet, dann wartet das eine Read-VI bis zu seinem programmierten Timeout (in diesem Fall 25 s), bevor der Durchlauf ein weiteres Mal gestartet wird. Während dieser Warte-Zeit liest natürlich das andere Read-VI nichts.

Lösung: 2 parallele unabhängige While-Schleifen.

Wenn du dann, wie von Rolf angedeutet, Probleme mit 2 Verbindungen hast, stell auf eine um, das müsste langen:
   

Gruß, Jens

EDIT:
' schrieb:Das Auswerten der Adresse wäre ja so nicht falsch, jedoch für meine Anwendung eher ineffektiv, da ich die Daten der beiden PCs dauerhaft miteinander Vergleichen muss, und daher die verschiedenen Daten im selben Zyklus benötige!
Das Auswerten, woher das Paket kommt, machst du am Ausgang des Read-VI! (s. mein Bsp oben). Die Unterscheidung hast du eigentlich schon durch die beiden unterschiedlichen Ports gemacht. Der Eingang am Open VI gibt nicht wie bei TCP/IP die Adresse an, zu der ein Open geschehen soll, sondern sagt, auf welche lokalen Netzwerkadresse die Verbindung geöffnet werden soll!
' schrieb:Gibt es über UDP keine Möglichkeit in einem Zyklus von 2 verschiedenen Sendern zu empfangen?
Verkleinere vor allem den Timeout des Read-VI! Denn wie schon gesagt, wenn einer nichts sendet, dann steht auch das andere Read-VI still...

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.03.2010, 19:04
Beitrag #16

Michael_ Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Nov 2009

8.5.1
2007
de

1100
Oesterreich
UDP Verbindung zwischen mehreren PCs
Ok gut. Wie LabVIEW ein VI abarbeitet ist mir tatsächlich noch unbekannt! gibt es hierzu vielleicht irgendwelche skripten oder erklärungen?? Die könnten mir vielleicht auch weiterhelfen!
Ich werde dein Beispiel sofort auf meine Anwenung umschreiben und testen, sobald ich wiederan die Anlage kann!
mfg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2010, 21:23 (Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2010 21:24 von rolfk.)
Beitrag #17

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
UDP Verbindung zwischen mehreren PCs
' schrieb:Also erstmal Danke für eure Antworten und Tipps!
Das Auswerten der Adresse wäre ja so nicht falsch, jedoch für meine Anwendung eher ineffektiv, da ich die Daten der beiden PCs dauerhaft miteinander Vergleichen muss, und daher die verschiedenen Daten im selben Zyklus benötige!
Deshalb erscheint für mich diese Lösung zwar richtig, aber eher ungeeignet, da dies die Auswertung der Daten zeitlich verlängern würde!

Gibt es über UDP keine Möglichkeit in einem Zyklus von 2 verschiedenen Sendern zu empfangen? Bitte helft mir weiter!
mfg

Ob Du da jetzt zwei Server machst oder nur einen, da die Clients ja wohl nicht synchronisiert sind ist das Parallelisieren der zwei Empfängerloops zum Zwecke der Synchronisation recht sinnlos. Das hilft dafür absolut nicht. Mit einem Shiftregister und etwas logischer Programmierung kannst Du die zwei zeitlich am nächsten beineinanderliegenden Werten genau so gut vergleichen wie wenn Du die von zwei parellelen Empfängern hereinskommst. Verzögerung findet maximal für die Länge des Read-timeouts statt, kannst Du Dir also selber bestimmen.

So eine Applikation schreit ganz einfach nach einem Producer-Consumer Modell. Man hat den Producer (UDP Reader) der die Daten auf Basis der Senderaddresse in einen Buffer oder eine Queue schreibt und den Consumer der diese Daten regelmässig daraus liest und vergleicht und was immer anderes Du machen willst. Man kann auch noch eine Sicherung einbauen, dass der Consumer auf Basis eines Timestamps des letzten geposteten Wertes eines Kanals überprüft ob schon wieder ein neuer Wert reingekommen ist, und im Falle dass dem nicht so ist eine Warnung oder einen Fehler erzeugt.

Aber die Addresse am UDP Open sollte echt weg wenn Du nicht mehrere Netzwerkkarten hast, und wenn Du das schon hast solltest Du die Addresse des Netzwerkinterfaces angeben dass Du für die Kommunikation verwenden willst nicht die des Clients.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.03.2010, 15:30
Beitrag #18

Michael_ Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Nov 2009

8.5.1
2007
de

1100
Oesterreich
UDP Verbindung zwischen mehreren PCs
Ok habe eure Vorschläge jetzt umgesetzt!
Das Receive Programm funktioniert wunderbar, auch ohne Verzögerung!

Jedoch braucht offenbar die restliche Auswertung der Daten so lange, denn mit dieser tritt die verzögerung auf!
Werde einfach die Infrastruktur des Projektes etwas ändern, sodass dies nicht auftritt!
oder gibt es eine Möglichkeit, dass ich 2 VIs parallel nebeneinander ablaufen lassen kann?

mfg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.03.2010, 16:37
Beitrag #19

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
UDP Verbindung zwischen mehreren PCs
Du kannst sie (in manchen Fällen) beide nebeneinander in eine Whileschleife packen, aber besser ist, wenn Du jedes VI in eine eigene Whileschleife packst, dann läuft auf jedem Core eine Schleife und somit ein SubVI.

Gruß Markus

' schrieb:oder gibt es eine Möglichkeit, dass ich 2 VIs parallel nebeneinander ablaufen lassen kann?

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
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
  Versuch - Verbindung zwischen NI9862 & PCAN C.Maier 4 6.451 16.01.2017 14:30
Letzter Beitrag: jg
  Datenaustauch zwischen mehreren Sub Panel VIs mBus 10 12.019 24.04.2014 09:27
Letzter Beitrag: wassersebastian
Question Welches "Protokoll" wählt man zum Datenaustausch zwischen mehreren PCs... PTBist 7 8.526 13.01.2014 13:11
Letzter Beitrag: Y-P
  Bluetooth Verbindung zwischen PC und NXT MessWurm 8 12.629 07.01.2012 20:38
Letzter Beitrag: MessWurm
  LAN-Verbindung zwischen PC und IR-Empfänger stsp 9 10.486 23.04.2009 22:29
Letzter Beitrag: stsp

Gehe zu: