TIA TCON / TRCV Unterschiedliche Verhalten / Adhoc

Kaffeesüchtig

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

ich bin momenten dabei in einem Schmierprojekt Kommunikation über TCP/IP mit TRCV zu testen.
Ausgangslage:
TCON und TRCV.
1669908105321.png
TCON ist passiv ausgeführt. Ich baue eine Verbindung über Hercules auf.

Der Datenbaustein DATA_CON.receive ist dabei mittels Array of char aufgebaut.
1669908487678.png

Folgendes Phänomen:
Wenn ich nur die beiden Calls habe und drei verschiedene Telegrammlängen (8, 17, 22) schicke, dann setzt TSEND direkt nach Erhalt des Telegrammes (kürzer als die 40 chars) das NDR Flag und schiebt die Längen (8,17,22) auch raus.

1669909923781.png

OK, dachte ich mir, dann setzen wir ein Netzwerk darunter und schieben die Daten mit NDR in ein gleiches Feld in einen anderen DB, um diese dort zu zerlegen und weiterzubearbeiten.

1669910079280.png

Sobald ich dieses Netzwerk aber einpflege, ändert sich der Ablauf. NDR wird nur noch gesetzt, wenn der Buffer mit 40 Stellen aufläuft.
Verwendet wird TIA17 mit 1214er Steuerung.

1669910216116.png

Hat das verhalten schon mal jemand beobachtet?
Prinzipiell waren das Versuche, mit unterschiedlicher Telegrammlänge zu arbeiten. Somit müsste ich vermutlich Byteweise empfangen. Wie löse ich das aber, wenn ich kein definiertes Endezeichen habe?

Gruß

Michael
 
Hallo,

habe es vermutlich gefunden und werde mal versuchen ein Firmwareupdate zu machen.
Ich habe noch so ne 1HE31 auf 1212C Basis mit Firmware 3.0.2, da scheint das so zu laufen, wie ich will.
Mehr geht mit den ???31 Nummern ja nicht.
Werde berichten.

1669921432578.png

Gruß

Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst bei TCP keine unterschiedlichen Telegrammlängen sinnvoll verarbeiten, wenn es kein Protokollrahmen gibt, an dem du wie auch immer erkennen kannst wie lang der Datensatz nun ist. Du kannst auch nicht davon ausgehen, dass wenn du in deinem Client Programm wie Hercules 10 Zeichen absendest, dass dann auch im SPS-Programm 10 Bytes am Stück gelesen werden. In der Praxis wird das zwar fast immer der Fall sein, aber richtig ist, sich nicht darauf zu verlassen.
 
Hallo Thomas,

danke. D.h. im Idealfall auf ein geframtes Protokoll (min. STX/ETX) bestehen, im Idealfall noch Längenangabe am Anfang.
Habe eben auch festgestellt, dass die 1214C auch die V3.0.2 hat. So gesehen wird mir wohl nichts anderes über bleiben, dem Braten trau ich nicht mehr...

Danke
 
Im Grunde reichen dafür z.B. fix zwei Bytes zu Beginn, in dem du dann als Integer angibst, wie viele Bytes noch folgen. Dann kannst du fest beim ersten mal 2 Bytes lesen, und dann n Bytes. Das vereinfacht meiner Meinung nach die Verarbeitung in der SPS, da man dann nicht irgendwelche Arrays nach Zeichen durchsuchen muss. Da sind Längenheader meiner Meinung nach besser, zumindest wenn es nur ein einziger Block ist.
 
Zurück
Oben