TIA Variable Telegrammlänge - TSEND_C mit NodeRed

sheridan

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

Ich möchte einen String per TSEND_C über TCP von einer S7-1500 an NodeRed senden und weiterverarbeiten. Das Ganze funktioniert auch, nur habe ich folgendes Problem:
Die Länge des Strings variiert je nach Daten, ich schicke aber die volle Länge (mit der vorher fest definierten String-Länge) über das Netzwerk, was nicht toll ist. Anschließend muss ich überflüssigen Bytes wieder abschneiden.

Da man keine String-Variable während der Laufzeit definieren kann, habe ich bis jetzt keinen Lösungsansatz.
Der String hat eine Länge von ca. 100 Zeichen, kann aber bis zu 200 Zeichen lang sein.

Hat jemand eine Idee?
 
Mit TSEND_C auf S7-1500 habe ich keine Erfahrung, doch Ideen:
Ist in dem String die aktuelle Stringlänge korrekt eingetragen?
Kann TSEND_C überhaupt Strings korrekt versenden?
Wenn der String in Speicher mit Standard-Zugriff liegt, dann kann an TSEND_C.LEN die maximal zu sendende Zeichenzahl angegeben werden.

Wieviele verschiedene Längen können bei Dir vorkommen? Notfalls deklariere mehrere Strings oder BYTE/CHAR-Arrays unterschiedlicher Länge und mache für den TSEND_C eine Fallunterscheidung.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, der LEN-Eingang ist an mir vorbeigegangen, damit gehts!

Meine Lösung sieht nun so aus: Per AT-Layer schneide ich die ersten zwei Bytes weg und habe so automatisch die aktuelle Stringlänge > Diese kommt an LEN.
Ich versende einen JSON-String (Messreihe), der in eine Time-Series-Datenbank kommt. Und jetzt funktioniert es sauber!

In der Hilfe steht, das man LEN ungleich Null nur im nicht optimierten Zugriff verwenden kann. Ich weiß nicht ob es wegen dem AT-Layer eine Sondersituation ist.
Aber funktionieren tut es.

Jetzt muss ich mich um die Pufferung kümmern, möchte bei Ausfall der Verbindung eine gewisse Überbrückung.
 

Anhänge

  • AT.jpg
    AT.jpg
    120,6 KB · Aufrufe: 19
Zurück
Oben