ich kommuniziere mit einem Beckhoff-Identsystem per TCP/IP (Bibliothek TcpIp.lib). Die Verbindung steht, ich kann auch Daten zum BIS schicken, doch leider weiß ich nicht, wann ich alles empfangen habe. In der TwinCAT Hilfe steht:
Zitat:
Daten können in einem TCP/IP-Netzwerk fragmentiert (in mehreren Paketen) empfangen oder verschickt werden. Es ist also möglich, dass nicht alle Daten auf einmal mit einem Aufruf der Instanz von FB_SocketReceive empfangen werden können. Aus diesem Grund muss die Instanz zyklisch (pollend) in der SPS-Task aufgerufen werden, so lange bis alle benötigten Daten empfangen wurden.
...
Bei einem einfachen Protokoll in dem z.B. ein Nullterminierter String von einem Remote-Server empfangen werden soll, muss der Funktionsbaustein FB_SocketReceive z.B. so oft aufgerufen werden, bis in den empfangenen Daten die Nullterminierung erkannt wurde.
Wie kann ich einen STRING überprüfen, ob darin eine Nullterminierung vorkommt?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wenn der Emfangsbaustein keinen Status "Nullterminierung" kennt oder keinen Wert "Anzahl der Daten im Paket" liefert, woraus man erkennen kann, "nur 80 von maximal 120 Bytes im Paket = Ende", hat man zwei Möglichkeiten:
Man definiert sich ein eindeutiges Zeichen, was als letztes Zeichen übertragen wird. Wird dieses Zeichen erkannt => alles übertragen.
Man ermittelt beim Sender die String-Länge und schickt diese dem String voran. Der Emfänger liest zuerst die Stringlänge aus und ruft den Emfangsbaustein dann so oft auf, bis die alle Zeichen des Strings empfangen wurden.
Gruß
M.Wunsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Gemeinschaft,
ich kommuniziere mit einem Beckhoff-Identsystem per TCP/IP (Bibliothek TcpIp.lib). Die Verbindung steht, ich kann auch Daten zum BIS schicken, doch leider weiß ich nicht, wann ich alles empfangen habe. In der TwinCAT Hilfe steht:
Wie kann ich einen STRING überprüfen, ob darin eine Nullterminierung vorkommt?
Wenn der Emfangsbaustein keinen Status "Nullterminierung" kennt oder keinen Wert "Anzahl der Daten im Paket" liefert, woraus man erkennen kann, "nur 80 von maximal 120 Bytes im Paket = Ende", hat man zwei Möglichkeiten:
Man definiert sich ein eindeutiges Zeichen, was als letztes Zeichen übertragen wird. Wird dieses Zeichen erkannt => alles übertragen.
Man ermittelt beim Sender die String-Länge und schickt diese dem String voran. Der Emfänger liest zuerst die Stringlänge aus und ruft den Emfangsbaustein dann so oft auf, bis die alle Zeichen des Strings empfangen wurden.
Gruß
M.Wunsch