Step 7 TCP Kommunikation AG_LRECV

vsiemon

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte eine TCP/IP Verbindung zwischen einer S7 410-5H mittels CP 443-1 Advanced und einer S7-1500 projektieren, um einen 1685 Bytes großen Datenbuffer von der 1500er an die 400er zu übertragen. Programmiert wird das Ganze im CFC (400er Seite) und TIA (1500er Seite).

Setup:

Dazu nutze ich auf der 1500er Seite die T-Bausteine bzw. eine Library (LOpenUserComm) von Siemens, die die Bausteine in eine State-Machine kapselt (https://cache.industry.siemens.com/...tt_992589/v2/109747710_Tcp_BaseComm_V1_de.pdf).

Auf der 400er Seite habe ich herausgefunden, dass für TCP-Verbindungen mittels einer CP die Bausteine AG_SEND/AG_RECV bzw. AG_LSEND/AG_LRECV genutzt werden müssen, da die CP die T-Bausteine nicht unterstützt. Für mein Setup nutze ich den AG_LSEND/AG_LRECV, da diese für die 400er CPU genutzt werden sollen. Laut Doku kann man mit diesen Bausteinen Datenmengen von bis zu 8192 Bytes senden/empfangen.

Problem:

Die Senderichtung mit AG_LSEND (400er an 1500er) funktioniert reibungslos mit einer Payload von 386 Bytes.

Die Empfangsrichtung mit AG_LRECV (1500er an 400er) macht allerdings starke Probleme: für Buffergrößen =< 212 Bytes wird der Empfangsbuffer auf der 400er mit den Daten beschrieben die ich auf der 1500er Seite in den Sendebuffer schreibe.

Sobald aber mehr als 212 Bytes (ich benötige 1686 Bytes) von der 1500er an die 400er gesendet werden sollen, befüllt der AG_LRECV meinen Empfangspuffer auf der 400er Seite nicht mehr (es stehen nur 0 im Buffer) obwohl auf der 1500er Seite Werte in den Sendebuffer geschrieben werden und der Buffer erfolgreich mittels TSEND übertragen wird.

Das Faszinierende dabei: in beiden Fällen wird auf der 400er Seite das NDR Bit am Ausgang vom AG_LRECV gesetzt (= Anzahl an Bytes entsprechen der Buffer-Größe und wurden in den Buffer geschrieben), jedoch stehen nur für =< 212 Bytes die Daten auch wirklich im Buffer. Das Error Bit am Ausgang vom AG_LRECV wird nie gesetzt (= kein Fehler bei AG_LRECV Abarbeitung).

Frage:

Gibt es bei der Verwendung des AG_LRECV Eigenheiten/Besonderheiten die ich ggf. beachten muss?
So wie ich die Doku bzw. das Konzept der AG_RECV Bausteine verstehe, muss der Buffer am RECV Eingang genau die Größe der zu erwartenden Daten haben. Sobald die CP die Menge an Bytes empfangen hat, die der Buffer groß ist, werden diese von der CP in den Buffer kopiert und das NDR am Baustein gesetzt.

Hat jemand ein ähnliches Problem (gehabt) und kann mir ggf. einen Tipp geben woran es liegen könnte, dass der AG_LRECV für > 212 Bytes den Puffer nicht mehr ordentlich beschreibt? (nur 0, keine Werte)

Schon mal Danke im Voraus!
 
Zurück
Oben