LabVIEWForum.de
Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette (/Thread-Kommunikation-zwischen-verschiedenen-Rechnern-z-B-TCP-IP-als-Kette)



Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Matrim - 20.08.2008 14:40

Hallo,

ich habe mir die Beispiele zur (einfachen) Kommunikation Client/Server via TCP/IP angeschaut und ausprobiert.

Kann ich diese entsprechend abwandeln, um folgendes Szenario zu erzielen:

n - Rechner kommunizieren in einer Kette, d.h. alle bis auf den letzten Rechner senden und erhalten Daten von ihrem Nachfolger SOWIE alle bis auf den ersten Rechner senden und erhalten Daten von ihren Vorgänger.

Als Skizze: (1) <--> (2) <--> (3) <--> ... <--> (n-1) <--> (n)

Bzw. was müsste ich als Vorleistung schaffen, damit ich in meiner jeweiligen Hauptschleife meiner VIs solche Nutzung hätte:
* lies aktuellen Datensatz von Nachfolger bzw Vorgänger
* schreibe aktuellen Datensatz (an Vorgänger bzw. Nachfolger).

Wenn ich die oben genannten Beispiele abwandle, müsste jeder Rechner 2x Server sein (jeweils verschiedene Ports) und 2xClient, bis auf den Anfangs und Endrechner? Spricht etwas gegen diese Umsetzung? Oder geht es besser, leichter?

Wie löse ich die anfängliche Verbindungsaufbauphase? In den Beispielen wurde immer davon ausgegangen, dass der Server als erstes gestartet wird, wie kann ich den Client so festhalten, dass er entsprechend wiederholt versucht, eine Verbindung aufzubauen?

Danke für Hinweise,
Mat.


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - A.Berndsen - 20.08.2008 19:27

' schrieb:Spricht etwas gegen diese Umsetzung? Oder geht es besser, leichter?

Es geht leichter.
Mit "shared Variables" geht das sicher deutlich einfacher. Aber das soll Dir z.B. Markus oder Eugen genauer erklären, die sind da fitt.

Grüße
Andreas


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - eg - 20.08.2008 19:58

' schrieb:Es geht leichter.
Mit "shared Variables" geht das sicher deutlich einfacher. Aber das soll Dir z.B. Markus oder Eugen genauer erklären, die sind da fitt.

Grüße
Andreas

Ich bin bei SVs gar nicht fitt. Gerade umgekehrt, ich empfele immer TCP/IP und Markus SVs.

Aber zuerst folgende Frage:

Warum muss es eine Kette sein? Man kann doch einen Server machen und jeder PC kann dann mit jedem anderen PC über diesen Server kommunizieren.
Wenn du Interesse dran hast, kann ich dir ein fertiges Template anbieten.

Ansonsten klar, es geht. Gibt es Schierigkeiten dabei?


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Dennis.Moser - 21.08.2008 06:09

Zitat:Spricht etwas gegen diese Umsetzung?
jaein...

Zitat:Warum muss es eine Kette sein? Man kann doch einen Server machen und jeder PC kann dann mit jedem anderen PC über diesen Server kommunizieren.
Richtig, dies würde die Ausfallsicherheit erhöhen, auch wenn die Gefahr besteht das der Server ausfallen könnte. Da so i.d.r. nur die Kommunikation eines Client ausfällt (evtl. Netzwerktechnisch) und nicht die ganze Kette unterbrochen wird...

Ich würde auf Server / Client setzten.

Gruß Dennis


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Y-P - 21.08.2008 06:36

Du kannst auf einem Rechner die Shared Variables Engine in Deine Applikation mit einbinden und dort auch programmatisch deployen. Dann musst Du nur noch in Deinem *.alias-File die IP-Adresse des Rechners angeben, auf dem die SVE läuft. Wie das alles geht siehst Du hier.
Alle anderen Rechner können dann über die Shared Variables kommunizieren. Um die Rechner zu unterscheiden kannst Du ja einen kleinen Kenner/Header verwenden, den Du vor der Weiterverarbeitung wieder entfernst.

Gruß Markus


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Matrim - 21.08.2008 08:08

Es sollte von daher eine Kette sein, da ich so jeweils ein einzelnes Gerät simulieren möchte.
Es findet entlang dieser Kette eine Abarbeitungsreihenfolge statt. Also Gerät 1 tut was und übergibt an Gerät 2 usw.
(Die Reihenfolge wird dadurch bestimmt, dass jedes Gerät seinen Vorgänger bzw Nachfolger kennt.)


Bei ersten Tests habe ich folgendes Problem, wenn ich die VIs starte, dann timen die "Clienten" aus, da eventuell der entsprechende Server noch nicht gefunden wurde.

Folgender (Laufzeit?) Fehler kommt (s.A.)

Wie kann ich da z.B. erreichen, dass er in einer Schleife wartet, bis er eine Verbindung zum Server aufbaut, bzw immer wieder in so einer Schleife wartet, auch wenn die Verbindung mal verloren geht?

Ansonsten schaue ich mir das auch mal mit den Shared Variables an...

Vielen Dank soweit!


Kommunikation zwischen verschiedenen Rechnern (z.B. TCP/IP) als Kette - Y-P - 21.08.2008 08:32

Du kannst, wenn Du es so wie ich machst, die SV pollen. Durch den Header weißt Du genau, welcher Rechner was gesendet hat. Du kannst ja die SV in eine State-Machine einbauen, d.h. Du pollst eine SV und wenn die Nachricht für den entsprechenden Rechner ist, dann arbeitest Du Deine unterschiedlichen Cases ab.
Mehr sage ich dazu nicht, da Du Dich wohl eh für TCP/IP entscheidest.

Gruß Markus