BC9000 Modbus TCP mehrere Clients

maxder2te

Level-3
Beiträge
1.555
Reaktionspunkte
587
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab grade ein Projekt auf dem Tisch, wo es darum geht, Daten aus etwa 30 BC9000 Controllern auszulesen. In den Controllern läuft keine Logik, sondern sie sind per Modbus TCP an ein zentrales Steuerungssystem angeschlossen. Ich möchte jetzt die BC9000 Controller auf ein zweites zentrales Überwachungssystem aufschalten, geplant war das per TCP/IP Protokoll zu machen und in die BC ein bisschen Programm zu laden. Allerdings ist der BC9000 wohl der einzige BC, der kein natives offenes TCP/IP unterstützt, sondern lediglch Modbus TCP und ADS.

Ist es denn möglich, mehrere Modbus TCP Clients zeitgleich an den BC zu koppeln? Die ADAM Module von Advantech unterstützen das, an einer S7-1200 ist das auch machbar. Die Beckhoff-Dokumentation schweigt sich dazu aus.
 
Zuletzt bearbeitet:
Du willst die an einen 2. Master anschließen? Das sollte kein Problem sein, weil bereits das TCP sich um die Kollisionen in der Netzwerkkomunikation kümmert, bzw. verhindert. Dem BC dürfte es egal sein, von woher die Anfrage kommt.
Aber schreibe nicht auf die Ausgänge, sonst knallt's. ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du willst die an einen 2. Master anschließen? Das sollte kein Problem sein, weil bereits das TCP sich um die Kollisionen in der Netzwerkkomunikation kümmert, bzw. verhindert. Dem BC dürfte es egal sein, von woher die Anfrage kommt.
Aber schreibe nicht auf die Ausgänge, sonst knallt's. ;)
Ist das eine wissende Antwort oder eine Einschätzung?
Da TCP verbindungsbasiert arbeitet ist das keineswegs klar dass der Koppler auf Port 502 mehr als eine Verbindung akzeptiert.
 
Eine Einschätzung. Der Anwendungsfall ist ziemlich selten. Ich würde normalerweise nicht auf so eine Idee kommen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hat jemand Erfahrung mit der Konstallation oder das schon mal probiert?
Ich hab keine BC9000 da zum Testen, lediglich 20 Jahre alte BC9050 und BK9000 und kein lauffähiges KS2000.
 
Hat jemand Erfahrung mit der Konstallation oder das schon mal probiert?
Da mache ich Dir wenig Hoffnung - zu speziell ist der Anwendungsfall.

Die BC9000 sind noch älter als die BC9050 und die KS2000 würde Dir für den Test nichts nützen. Der BC9050 ist nur die Low-Cost-Variante und funktionell beim MODBUS dem BC9000 gleich. Also raus den BC9050 ein paar Klemmen dran stecken und zwei ModbusTCP-Master verbinden.

Hier hast Du alles, was Du über den MODBUS TCP wissen musst.

Im Transmission Control Protokoll ist es üblich, dass die Ports nur zum Aushandeln der eigentlichen Verbindung dienen. Das heißt der Client meldet sich beim Server über den vordefinierten Port an, der Server weißt im Handshake dem Client einen neuen Port zu, über den der zukünftige Datenverkehr stattfinden soll. Es ist unüblich, dass der Datenverkehr über den gleichen Port stattfindet, der bleibt nämlich für den nächsten Client offen.

Der Wikipedia-Artikel untermauert meine Aussagen mit dem ersten Satz:
Das Modbus-Protokoll ist ein Kommunikationsprotokoll, das auf einer Client/Server-Architektur basiert.
Mehr kann ich leider für Dich nicht tun.
 
Im Transmission Control Protokoll ist es üblich, dass die Ports nur zum Aushandeln der eigentlichen Verbindung dienen. Das heißt der Client meldet sich beim Server über den vordefinierten Port an, der Server weißt im Handshake dem Client einen neuen Port zu, über den der zukünftige Datenverkehr stattfinden soll. Es ist unüblich, dass der Datenverkehr über den gleichen Port stattfindet, der bleibt nämlich für den nächsten Client offen.
Das wäre mir neu. Rufst Du z.B. eine Webseite über HTTP auf nutzt der Client als Quellport einen zufälligen Port, der Zielport ist aber immer 80 und ändert sich nicht. Bei Modbus ist es auch so, da erfolgt die Kommunikation immer über den eingestellten Port.
Es gibt Protokolle, z.B. VXI11, da wird erst ein Port angefragt und über den erfolgt dann die Kommunikation.
Hier mal ein Screenshot einer TCP/IP Kommunikation. Der Server arbeitet auf Port 10001 und daran ändert sich auch nie etwas, der Client nutzt bei diesem Socket den Port 50568.
1767947126563.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum sollte ich mich nicht irren?

Als ich früher Server programmiert habe, haben wir das grundsätzlich so gehalten, wie ich es beschrieben habe. Das war das Standardvorgehen. Mit dem ACK haben wir einen neuen Port bekanntgegeben, über dem dann die Verbindung gehalten wurde. Das hat jeder Client verstanden. Das ist halt die Frage, wie der Server programmiert ist. Das ist bei mir aber nun auch schon einige Jahr(zehnt)e her.

Aber völlig unabhängig davon ist, ein TCP-Server unterstützt per se Mehrfachverbindungen, wie auch immer. Das ist hier die Kernaussage.

Ich kann so viele Clients mit dem Port 80 verbinden wie ich will und der Server muss sich die Verbindungsziele merken können. Sonst wäre ja jeder HTTP-Server mit einem Client schon ausgelastet. Das ist nicht der Fall, möglicherweise arbeitet es auch einfach wie ein Peer-To-Peer und cached einfach nur die Anfragen. Ob der BC9000 das am Port 502 macht oder nicht, lässt sich von mir nicht beantworten, ich würde erwarten, dass es so geht. Es gibt also so einige Varianten, wie ein Server programmiert werden kann.

Der TE möchte Gewissheit. Ich vermute aber, dass das kaum jemand geben kann - also hilft nur ausprobieren - leider.
 
Zuletzt bearbeitet:
Als ich früher Server programmiert habe, haben wir das grundsätzlich so gehalten, wie ich es beschrieben habe. Das war das Standardvorgehen. Mit dem ACK haben wir einen neuen Port bekanntgegeben, über dem dann die Verbindung gehalten wurde. Das hat jeder Client verstanden. Das ist halt die Frage, wie der Server programmiert ist. Das ist bei mir aber nun auch schon einige Jahr(zehnt)e her.
Das habt Ihr dann aber so gemacht, das ist kein Standard. Ich habe in letzter Zeit öfters WireShark Aufzeichnungen von verschiedenen TCP/IP Verbindungen gemacht und da wurde nie ein neuer Port vergeben.
Ich habe gerade mal ein kleines Programm geschrieben, wo TwinCAT der Server ist und auch da bleibt der Port gleich.
1767951883567.png
Aber völlig unabhängig davon ist, ein TCP-Server unterstützt per se Mehrfachverbindungen, wie auch immer. Ich kann so viele Clients mit dem Port 80 verbinden wie ich will und der Server muss sich die Verbindungsziele merken können. Sonst wäre ja jeder HTTP-Server mit einem Client schon ausgelastet. Das ist nicht der Fall. Das ist hier die Kernaussage. Ob der BC9000 das am Port 502 macht oder nicht, lässt sich von mir nicht beantworten, ich würde erwarten, dass es so geht.
Der TE möchte Gewissheit. Ich vermute aber, dass das kaum jemand geben kann - also hilft nur ausprobieren - leider.
Theoretisch können mehrere Verbbindungen zum Port eines Servers aufgebaut werden, aber nicht so viele wie Du willst, sondern so viele wie der Server zulässt und das kann im ungünstigsten Fall tatsächlich nur eine sein, was ich schon mehrfach gehabt habe.
Die Implementation des Modbus TCP Servers auf dem BC sollte allerdings tatsächlich mehr als eine Verbindung zulassen.

Und sie tut es auch, die Gewissheit das es geht erhält der OP aus dem Handbuch. Man muss sich die Info allerdings raussuchen, da sie ziemlich versteckt ist, ich musste auch erst Minuten durch das Handbuch scrollen. Hier mal ein Screenshot des Abschnitts aus dem Handbuch.
1767952813840.png
 
Und sie tut es auch, die Gewissheit das es geht erhält der OP aus dem Handbuch. Man muss sich die Info allerdings raussuchen, da sie ziemlich versteckt ist, ich musste auch erst Minuten durch das Handbuch scrollen. Hier mal ein Screenshot des Abschnitts aus dem Handbuch.
Danke - die Zeit dafür habe ich aktuell einfach nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab mir jetzt selber einen BK9000 mit einer KL1002 und einer KL9010 auf dem Tisch aufgebaut und ihn rudimentär zum Laufen gebracht. 4 gleichzeitige Verbindungen sind da einige Minuten lang gelaufen (getestet mit QModMaster), mit pollendem Zugriff reißt eine der 4 Verbindungen immer wieder ab.
 
Ich hab mir jetzt selber einen BK9000 mit einer KL1002 und einer KL9010 auf dem Tisch aufgebaut und ihn rudimentär zum Laufen gebracht. 4 gleichzeitige Verbindungen sind da einige Minuten lang gelaufen (getestet mit QModMaster), mit pollendem Zugriff reißt eine der 4 Verbindungen immer wieder ab.
Soweit die Software bei jedem Poll einen Socket neu aufbaut und nach der Datenübertragung wieder schließt, passt das verhalten ja, da ja nur drei Verbindungen unterstützt werden. Dann schaut halt eine der Verbindungen immer wieder in die Röhre.
Bleibt der Socket jedoch dauerhaft offen, müsste nach der dritten Verbindung dauerhaft nichts mehr gehen.
 
Soweit die Software bei jedem Poll einen Socket neu aufbaut und nach der Datenübertragung wieder schließt, passt das verhalten ja, da ja nur drei Verbindungen unterstützt werden. Dann schaut halt eine der Verbindungen immer wieder in die Röhre.
Bleibt der Socket jedoch dauerhaft offen, müsste nach der dritten Verbindung dauerhaft nichts mehr gehen.
Das passt dann ja auch soweit zu meinen Beobachtungen. Jetzt kommt nur noch die spannende Aufgabe, die Umschaltung der Steuerhoheit zwischen den beiden Cleints zu realisieren, das wird per Modbus TCP definitiv nichts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das passt dann ja auch soweit zu meinen Beobachtungen. Jetzt kommt nur noch die spannende Aufgabe, die Umschaltung der Steuerhoheit zwischen den beiden Cleints zu realisieren, das wird per Modbus TCP definitiv nichts.
Steuern kann nur der Erste der sich per Modbus verbindet.
 
Steuern kann nur der Erste der sich per Modbus verbindet.
Ja das habe ich auch so verstanden. D.h. aber auch dass sich die Steuerhoheit nicht wirklich gezielt zuteilen lässt. Dafür brauche ich Alternativen.

Durch welche aktuellen Gerätschaften kann man denn die BC9000 heute ersetzen? Irgendeine CX7xxx oder CX8xxx?
Anforderungen an die Leistung = 0, Modbus TCP Server und OPC UA Server wären wünschenswert.
 
Ich habe mein Haus mit 7 Liniencontrollern BK9100 bzw. BC9000, das geht easy via TCP/IP abzufragen. Die Controller erlauben eine schreibende Adresse und 3 lesende Adressen (sh. auch Beckhoff Doku), und TCP/IP ist in Windows überall integriert, also lesen mit Boardmitteln. Mit mehreren Controllern schreiben ist vom Konzept her schon murks - mach doch eine Bridge, die als einzige mit dem Liniencontroller Modbus redet und die du von mehreren Clients ansteuern kann. Wenn man das Timing beim Polling einhält, laufen die Dinger sowas von stabil und ohne irgendwelche Ausfälle.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mein Haus mit 7 Liniencontrollern BK9100 bzw. BC9000, das geht easy via TCP/IP abzufragen. Die Controller erlauben eine schreibende Adresse und 3 lesende Adressen (sh. auch Beckhoff Doku), und TCP/IP ist in Windows überall integriert, also lesen mit Boardmitteln.
Dann lies bitte noch mal in der von Dir erwähnten Anleitung nach, denn Du liegst mit Deiner Aussage um eine Verbindung daneben. In #10 habe ich den passenden Ausschnitt des Handbuchs gepostet und da steht, dass maximal drei Verbindungen möglich sind, wobei die erste aufgebaute Verbindung auch Schreibrechte erhält.
Es sei denn ich habe Dich missverstanden und die eine lesende Verbindung bezog sich auf die schreibende Verbindung, also eine mit Schreibrechten und Leserechten und zwei weitere mit Leserechten.
 
Zurück
Oben