TIA Probleme mit Datenempfang TRCV

Gerhard85

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

ich habe ein Problem beim Datenempfang einer TCP Verbindung mit dem TRCV_C Baustein.

folgende Ausgangslage:

TIA V15.1
CPU 1515F-2 PN
REA Jet Drucker

Ich soll über eine TCP Verbindung einen Drucker ansprechen. Das funktioniert soweit schon gut.
Ich habe nur das Problem mit dem Empfang von Daten, da sollte ich 64 Byte bekommen die ich auf einen String schreibe.
Es kommen aber nur 48 Byte bei mir an, und der Baustein bleibt auf BUSY und der Status ist auf 7006 (Daten werden gerade empfangen) bis ich den Baustein resete


Ich habe die Länge (LEN) auf 0 gelassen, da steht aber nach dem Empfangsversuch 64 drin.
(Es macht auch keinen Unterschied wenn ich 64 reinschreibe.)

Ich habe es schon mit und ohne ADHOC Modus versucht. (Kein Unterschied)

Die Antwort sollte so ausschauen:
000200000009000a006600000003000000000029000000290000002900010000

Ich bekomme aber nur:
0200000009000a0066000000030000000000290000002900

es fehlen vorne 2 Byte und hinten 16
vorne die zwei kann ich mir noch erklären aber warum wird der Baustein mit dem Empfang nicht fertig?

Bitte um Hilfe.

LG Gerhard
 

Anhänge

  • Screenshot 2022-09-23 101718.JPG
    Screenshot 2022-09-23 101718.JPG
    65,6 KB · Aufrufe: 29
Wie circlehook schon sagte, solltest du deine Daten vorher in ein Bytearray schreiben.
Da dir die ersten beiden Zeichen abgehen könnten diese als Stringheader angesehen werden und beschreiben dir die maximale und tatsächliche Länge des Strings.
Der character "0" hat rein zufällig das gleich Bitmuster wie ein short unsigned integer 48.

Edit: Tipfehler
 
Wie circlehook und R4m80 schon sagten, solltest du deine Daten vorher in ein Bytearray schreiben. Und dann erst mit "DONE" und eventuell "DESERIALIZE" in den endgültigen Daten-Bereich übertragen.
Bei einem String eher die Chars_TO_Strg Funktion nutzen, da das "DESERIALIZE" möglicherweise wieder das selbe Problem hervorruft wie oben.
Aber auf alle Fälle stehen die Daten nur für einen Zyklus komplett im "Empfangsbuffer" und sollten auch erst bei DONE weiterverarbeitet werden.

Edit: Das DONE wird hier zwar nicht kommen und auch das BUSY nicht gehen, weil wahrscheinlich der Baustein meint, dass er in den Empfangsbuffer nur 48 (eigentlich 50) Byte schreiben kann/darf.
 
Der character "0" hat rein zufällig das gleich Bitmuster wie ein short unsigned integer 48.
Danke das war die Lösung.

hab die Daten jetzt auf ein ARRAY of Byte geschrieben und jetzt bekomme ich auch die ganze Antwort.
Die ersten Bytes wurden wirklich als Header vom String angesehen und so wurde der String begrenzt

Super Danke!!

LG Gerhard
 
Zurück
Oben