-> Hier kostenlos registrieren
Hallo zusammen.
Ich stehe zur Zeit vor einem Problem.
Folgende Situation.
Ich kommunizieren mit einem PC(Client) mit einer S7-317 (Server).
Das hat bis jetzt auch gut funktioniert.
Allerdings habe ich bis jetzt immer maximal 1460 Byte übertragen, so dass ich am PC, wie SPS nur ein Datenpacket erhalten habe.
Da ich jetzt aber die Kommunikation beschleunigen wollte, und es laut Dokumentation möglich ist 8192 Byte zu verarbeiten, wollte ich dies erweitern.
--Einschub
Bevor jetzt jemand frägt, warum das dann schneller sein soll. Meine Erklärung:
Die Bausteine FB 65, 66 usw. werden zyklisch aufgerufen, und in einer Schrittkette wird Senden und Empfangen durchgearbeitet. Dies dauert halt ein paar SPS Zyklen. Wobei hier die Datenmänge fast egal ist, da die Bausteine assynchron arbeiten.
Ok so viel dazu.
--Einschub ende
Jetzt zu meinem Problem
Wenn ich von PC aus, sagen wir mal 5000 Byte anfordere, sendet die SPS zu erst 1460 Byte, diese kann ich bei mir im OnRead (ClientSocket) abfragen. Daraufhin bekomme ich ein zweites Empfangsereignis mit den Restlichen 3540 Byte.
Mit ist schon einmal schleierhaft, wie ich mehr als 1460 Byte übertragen kann. Die MTU von Ethernet liegt doch bei 1518 Byte mit 18 Byte Frame 20 Byte TCP Header und 20 Byte IP Header. Mir ist klar das im Ersten Datenpacket ausgemacht wird auf welche Größe man sich einigt, aber die muss doch auch noch in den Ethernetframe passen???
Meiner Meinung nach sollte ich eingentlich für alle vielfachen von 1460 Byte ein Ereignis bekommen.
Ich habe die Verbindung mit einem Sniffertool (Wireshark) angeschaut und hier wurde meine Vermutung bestätigt.
Es sind immer 1460 Byte Pakete, die dann zu einem 1460 und Rest zusammengesetzt werden müssen.
Bsp.: 6000Byte senden, 1460Byte + 4540Byte erhalten.
Das war jetzt lesen aus SPS.
Nur angenommen ich möchte 5000 Byte in die SPS schreiben, habe ich ein ähnliches Problem.
Ich sende die Daten mit dem PC raus.
Dieser macht den gleichen Mist. Erst 1460 Byte in den Empfangspuffer de SPS kopieren und dann mit dem nächsten Empfang die daten im Puffer natürlich überschreiben, ohne das die SPS die Daten umkopieren konnte.
Und um den Wahnsinn perfekt zu machen, funktioniert es manchmal und manchmal nicht. Soll heißen bis 2000 Byte bekomme ich meist nur ein Empfangsereignis und darüber meistens 2. Und beim schreiben in die SPS funktioniert es bei 20 * 5000 Byte und beim 21 mal gehts wieder in die hose.
So nach dieser sehr langen Erklärung:
Gibt es eine Möglichkeit die Segmentierung in dem TCP IP Protokoll zu überwachen zu steuern oder Einfluss daruaf zu nehmen?
Wie habt ihr das Problem gelöst?
Kann ich sicher sein, das eine Mindestdatenmänge immer ankommt? Also ich schicke natürlich auch immer mindestens 16 Byte, wiel dies mein indievidueller Header ist, bei dem Zeil DB Länge Datentyp und so weiter drin steht.
Danke für eure Hilfe
Ich stehe zur Zeit vor einem Problem.
Folgende Situation.
Ich kommunizieren mit einem PC(Client) mit einer S7-317 (Server).
Das hat bis jetzt auch gut funktioniert.
Allerdings habe ich bis jetzt immer maximal 1460 Byte übertragen, so dass ich am PC, wie SPS nur ein Datenpacket erhalten habe.
Da ich jetzt aber die Kommunikation beschleunigen wollte, und es laut Dokumentation möglich ist 8192 Byte zu verarbeiten, wollte ich dies erweitern.
--Einschub
Bevor jetzt jemand frägt, warum das dann schneller sein soll. Meine Erklärung:
Die Bausteine FB 65, 66 usw. werden zyklisch aufgerufen, und in einer Schrittkette wird Senden und Empfangen durchgearbeitet. Dies dauert halt ein paar SPS Zyklen. Wobei hier die Datenmänge fast egal ist, da die Bausteine assynchron arbeiten.
Ok so viel dazu.
--Einschub ende
Jetzt zu meinem Problem
Wenn ich von PC aus, sagen wir mal 5000 Byte anfordere, sendet die SPS zu erst 1460 Byte, diese kann ich bei mir im OnRead (ClientSocket) abfragen. Daraufhin bekomme ich ein zweites Empfangsereignis mit den Restlichen 3540 Byte.
Mit ist schon einmal schleierhaft, wie ich mehr als 1460 Byte übertragen kann. Die MTU von Ethernet liegt doch bei 1518 Byte mit 18 Byte Frame 20 Byte TCP Header und 20 Byte IP Header. Mir ist klar das im Ersten Datenpacket ausgemacht wird auf welche Größe man sich einigt, aber die muss doch auch noch in den Ethernetframe passen???
Meiner Meinung nach sollte ich eingentlich für alle vielfachen von 1460 Byte ein Ereignis bekommen.
Ich habe die Verbindung mit einem Sniffertool (Wireshark) angeschaut und hier wurde meine Vermutung bestätigt.
Es sind immer 1460 Byte Pakete, die dann zu einem 1460 und Rest zusammengesetzt werden müssen.
Bsp.: 6000Byte senden, 1460Byte + 4540Byte erhalten.
Das war jetzt lesen aus SPS.
Nur angenommen ich möchte 5000 Byte in die SPS schreiben, habe ich ein ähnliches Problem.
Ich sende die Daten mit dem PC raus.
Dieser macht den gleichen Mist. Erst 1460 Byte in den Empfangspuffer de SPS kopieren und dann mit dem nächsten Empfang die daten im Puffer natürlich überschreiben, ohne das die SPS die Daten umkopieren konnte.
Und um den Wahnsinn perfekt zu machen, funktioniert es manchmal und manchmal nicht. Soll heißen bis 2000 Byte bekomme ich meist nur ein Empfangsereignis und darüber meistens 2. Und beim schreiben in die SPS funktioniert es bei 20 * 5000 Byte und beim 21 mal gehts wieder in die hose.
So nach dieser sehr langen Erklärung:
Gibt es eine Möglichkeit die Segmentierung in dem TCP IP Protokoll zu überwachen zu steuern oder Einfluss daruaf zu nehmen?
Wie habt ihr das Problem gelöst?
Kann ich sicher sein, das eine Mindestdatenmänge immer ankommt? Also ich schicke natürlich auch immer mindestens 16 Byte, wiel dies mein indievidueller Header ist, bei dem Zeil DB Länge Datentyp und so weiter drin steht.
Danke für eure Hilfe