Ethernet-Kommunikation mit 1 PC und 2 Steuerungen

M-Ott

Level-3
Beiträge
1.774
Reaktionspunkte
374
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Frage:
Unsere Steuerungen (CPU 314C-2 DP) sind gelegentlich mit Ethernet Schnittstelle (CP343-1 LEAN) ausgestattet und werden dann vor Ort an einen Rechner des Kunden angeschlossen um von der jeweiligen Lagerverwaltungssoftware des Kunden gesteuert zu werden. Auf dem Kundenrechner ist keine Software von uns. Die Kommunikation läuft über AG_SEND / AG_RECV. Dabei ist der kundenseitige Rechner als TCP-Server konfiguriert und die SPS als TCP-Client.
Jetzt haben wir zum ersten Mal den Fall, dass zwei unserer Steuerungen an den selben Rechner müssen.

Meine Frage:
Wie lässt sich der Datenaustausch am einfachsten so steuern, dass jede Steuerung gezielt die Daten bekommt, die für sie gedacht sind?
Kann ich das einfach über verschiedene Ports (z.B. CPU1 über Port 2000, CPU2 über Port 2001) bewerkstelligen oder muss ich tatsächlich eine Kennung für jede Steuerung mitsenden und in der Steuerung auswerten lassen, ob das Paket für sie ist?

Am Prinzip der Verbindung würde ich nur sehr ungerne etwas ändern (never change a running system), und leider kann ich die Kommunikation mit zwei CPUs auch nicht testen, da mir nur eine CP zum Testen zur Verfügung steht.
 
Hallo,

sollte eigentlich so sein:

jede CPU hat eine einge IP Adresse, Port-Nummer kann bei beiden CPUs gleich sein.

Der TCP-Master öffnet eine TCP Verbindung zur CPU.1/Portnummer und kommuniziert die Daten welche für die CPU.1 bestimmt sind. Das selbe macht der TCP-Master (also der PC) für die 2-te CPU und für noch mehr wenns sein muss.

Auf der CPU kann - bis auf die IP Adresse - identische Software verwendet werden.

bg
bb
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Frage:
Unsere Steuerungen (CPU 314C-2 DP) sind gelegentlich mit Ethernet Schnittstelle (CP343-1 LEAN) ausgestattet und werden dann vor Ort an einen Rechner des Kunden angeschlossen um von der jeweiligen Lagerverwaltungssoftware des Kunden gesteuert zu werden. Auf dem Kundenrechner ist keine Software von uns. Die Kommunikation läuft über AG_SEND / AG_RECV. Dabei ist der kundenseitige Rechner als TCP-Server konfiguriert und die SPS als TCP-Client.
Jetzt haben wir zum ersten Mal den Fall, dass zwei unserer Steuerungen an den selben Rechner müssen.

Meine Frage:
Wie lässt sich der Datenaustausch am einfachsten so steuern, dass jede Steuerung gezielt die Daten bekommt, die für sie gedacht sind?
Kann ich das einfach über verschiedene Ports (z.B. CPU1 über Port 2000, CPU2 über Port 2001) bewerkstelligen oder muss ich tatsächlich eine Kennung für jede Steuerung mitsenden und in der Steuerung auswerten lassen, ob das Paket für sie ist?

Am Prinzip der Verbindung würde ich nur sehr ungerne etwas ändern (never change a running system), und leider kann ich die Kommunikation mit zwei CPUs auch nicht testen, da mir nur eine CP zum Testen zur Verfügung steht.

Habe das Problem selbst noch nicht gehabt, stehe aber demnächst davor, da wir mehrere PtP Verbindungen (von verschiedenen CPU's) zu einem Leitrechner auf TCP umrüsten (SPS- und Rechner-Software von mir). Von daher hab ich mich zumindest schon mal gedanklich damit auseinander gesetzt.

In erster Linie müsste da an der Lagerverwaltungssoftware (also auf Rechnerseite) was gemacht werden.

Die Software muss ja entscheiden, an welche CPU (IP-Adresse) die Daten gesendet werden (wird ja sicher kein Broadcast rumgesendet). Ich würde das auf der Rechnerseite evtl. über mehrere Socketverbindungen zur jeweiligen IP und mit verschiedenen Ports lösen.

Ist aber nur so ne Idee.

Mal ne Gegenfrage ...
Wie konfigurierst du den LEAN (muss ich wie gesagt demnächst selbst machen)?
 
@bits'bytes
Funktioniert das auch dann, wenn die CPUs als Clients fungieren?
Dann habe ich ja den Verbindungsaufbau von den CPUs.
Sendet der übergeordnete Rechner (der ja dann als Server fungiert) dann nicht undefiniert (also an keine bestimmte IP-Adresse)?
Es bekäme doch dann jeder Teilnehmer, der am gleichen Port an diesem Server hängt, die gleichen Daten, oder irre ich mich?
 
Zuletzt bearbeitet:
Funktioniert das auch dann, wenn die CPUs als Clients fungieren?
Dann habe ich ja den Verbindungsaufbau von den CPUs.
Sendet der übergeordnete Rechner (der ja dann als Server fungiert) dann nicht undefiniert (also an keine bestimmte IP-Adresse)?
Es bekäme doch dann jeder Teilnehmer, der am gleichen Port an diesem Server hängt, die gleichen Daten, oder irre ich mich?

Der Verbindungsaufbau erfolgt normalerweise so dass ein Client auf eine bestimmte Portnummer am Server ein Verbindungsrequest einstellt. Aktzeptiert der Server die Verbindung wechselt er intern die Port-Nummer. Die "Anfrage" Portnummer ist somit wieder frei für weitere Anfragen.

D.h. jede aktzeptierte Verbindung hat serverseitig ihre eigene Portnummer, welche aber vom Server zugewiesen wird und nicht von der CPU bestimmt wird.


Wie das ganze mit AG..... aussieht kann ich leider nicht sagen, dass ist ganz allgemeine Info.

bg
bb
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@bits'bytes
Funktioniert das auch dann, wenn die CPUs als Clients fungieren?
Dann habe ich ja den Verbindungsaufbau von den CPUs.
Sendet der übergeordnete Rechner (der ja dann als Server fungiert) dann nicht undefiniert (also an keine bestimmte IP-Adresse)?
Es bekäme doch dann jeder Teilnehmer, der am gleichen Port an diesem Server hängt, die gleichen Daten, oder irre ich mich?

Nö - das geht immer über die IP/Port. Nur ein Broadcast (Rundruf) geht an alle IP's im Netzwerk.

An sich kann jeder an jeden senden. Du könntest bei deinem Aufbau auch von CPU1 an CPU2 senden und umgekehrt.

EDIT:
Das schöne an TCP ist ja, dass im Grunde alle gleichberechtigt sind. Jeder kann sozusagen (aus Sicht der Software) senden wann er will. TCP regelt auf unterster Ebene den Datenaustausch.
 
Zuletzt bearbeitet:
Ok. Ich bin nicht so tief in der Netzwerktechnik drin.
Ich war schon damit zufrieden, dass ich die Schnittstelle testen konnte.

Es ist also kein Problem für den Server, gezielt Daten via TCP an eine IP-Adresse zu senden, auch wenn mehrere Teilnehmer am gleichen Port Verbunden sind. Das heißt also, beide CPUs können am gleichen Port hängen (natürlich mit unterschiedlichen IP-Adressen).
 
@ssound
Ich habe den CP in der HW-Konfig vernetzt, IP und Subnetzmaske eingegeben und die Adresse eingegeben (benötigst Du nachher wieder für den AG_SEND / AG_RECV). Bei IP-Konfiguration habe ich die die Auswahl auf "IP-Adresse im Dialog..." gelassen.
Im NetPro habe ich einen "PG/PC" eingefügt, dann bei dem PC unter "Eigenschaften - Schnittstelle" mit "Neu - Industrial Ethernet" die Ethernet-Schnittstelle eingegeben (mit IP-Adresse) und anschließend vernetzt.
Den Haken bei "MAC-Adresse..." habe ich weggenommen.
Mit Klick auf die CPU die Verbindungstabelle öffnen. Mit Doppelklick auf eine leere Zeile der Verbindungstabelle kannst Du eine neue Verbindung einrichten. PC auswählen, TCP auswählen. Haken bei "Aktiver Verbindungsaufbau" stehen lassen, unter "Adressen" den Port einstellen und "OK".
"Speichern und übersetzen" und "Übertragen".
Fertig!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist also kein Problem für den Server, gezielt Daten via TCP an eine IP-Adresse zu senden, auch wenn mehrere Teilnehmer am gleichen Port Verbunden sind. Das heißt also, beide CPUs können am gleichen Port hängen (natürlich mit unterschiedlichen IP-Adressen).

Ja.

Ist das Netzwerk über Hub's verschaltet, bekommen zwar alle Teilnehmer die Daten, aber nur der mit der richtigen IP fühlt sich angesprochen. Alle anderen ignorieren/verwerfen die Daten.

Ist das Netzwerk über Switches verschaltet, bekommt nur der Zielteilnehmer die Daten. Der Switch routet an den richtigen Teilnehmer.
 
Zurück
Oben