ibaPDA-Messungen von Automatisierungsgeräten mit TCP/IP funktionieren manchmal nicht mit Zykluszeiten < 200 ms.

Fehlerbild in ibaPDA

Unvollständige Telegramme oder Ausreißer in den Datenwerten (je nach Controller-Typ des Senders)

Ursache

Das TCP/IP-Protokoll bietet verschiedene Möglichkeiten, wie das "Acknowledge" behandelt wird.

Der Standard WinSocket arbeitet nach RFC1122 mit dem "Delayed Acknowledge"-Mechanismus (Delayed ACK). Dieser sagt aus, dass das "Acknowledge" verzögert wird, bis weitere Telegramme eintreffen, um diese dann gemeinsam zu quittieren. Falls keine weiteren Telegramme kommen, wird spätestens nach 200 ms (abhängig vom Socket) das ACK-Telegramm gesendet.

Ein "Sliding Window" (Parameter Win=nnnn) steuert den Datenfluss. Der Empfänger gibt an, wie viele Bytes er empfangen kann, ohne eine Quittung zu senden.

Manche Controller akzeptieren dieses Verhalten nicht, sondern erwarten nach jedem Datentelegramm eine Quittung. Falls dieses nicht innerhalb einer bestimmten Zeit (200 ms) kommt, wiederholt er das Telegramm und packt evtl. neu zu sendende Daten dazu, was beim Empfänger zu einem Fehler führt, da das vorherige Telegramm korrekt empfangen wurde.

Abhilfe

Das "Delayed Acknowledge" lässt sich einzeln pro Netzwerkadapter über einen Eintrag in der Windows Registry abschalten. Zur einfachen Änderung bietet ibaPDA im I/O-Manager unter Allgemein im Register Einstellungen einen entsprechenden Dialog.

Wählen Sie in der Liste die Netzwerkadapter aus, für die das "Delayed Acknowledge" deaktiviert werden soll, und klicken Sie danach auf <Übernehmen>.

Der Parameter "TcpAckFrequency" (REG_DWORD = 1) wird dadurch im Registry-Pfad der ausgewählten Netzwerkadapter angelegt:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{InterfaceGUID}