Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Nullterminierung in STRING finden - Wie?

c.reps
2009-02-24
2009-02-24
  • c.reps - 2009-02-24

    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:

    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?

     
  • Martin Wunsch - 2009-02-24

    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:

    1. Man definiert sich ein eindeutiges Zeichen, was als letztes Zeichen übertragen wird. Wird dieses Zeichen erkannt => alles übertragen.

    2. 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

     

Log in to post a comment.