Skip to main content

Verbindungsabbruch (DHT)

Besonders bei PROFINET-Controller auf Plattformen mit eingeschränkten Echtzeitfähigkeiten, wie Linux oder CODESYS Control Win, kann ein zu kurz gewählter Sendetakt (< 4ms) oft nicht eingehalten werden. Das äußert sich mit dem Fehler „AR consumer DHT expired“ (PNIOStatus = 0xCF81FD05).

Häufige Ursachen für Verbindungsabbruch

  • Powersafe policy

    Moderne Betriebssysteme und CPUs verfügen üblicherweise über zahlreiche Energiesparfunktionen, bei denen Teile des Systems (CPU oder auf Netzwerkadapter) „schlafen gelegt“ werden. Das „Aufwecken“ der Komponenten kann so verzögert stattfinden, dass nicht mehr stabil gesendet werden kann. Kurioserweise führt also ausgerechnet eine geringe Auslastung des Systems zu Störungen in der Kommunikation. Diese Powersafe-Funktionen sollten daher bei Problemen deaktiviert werden.

  • Realtime Patch (Linux)

    Um kurze Sendetakte (1 ms oder weniger) stabil einhalten zu können, ist es in der Regel erforderlich, auf dem Linux-System ein so genanntes Echtzeit-Patch zu installieren. Das hängt von der Performance und der Auslastung der jeweiligen Plattform ab. Erkennbar an einem großen Jitter der „Profinet_IOTask“ (im Task-Monitoring).

  • Erhöhung der Priorität der Netzwerktask, die den PROFINET-Netzwerkadapter verwaltet.

    Verwenden Sie die PLC Shell und führen Sie diese Befehle aus (Details siehe Laufzeitbeschreibung):

    irq-list
    irq-set prio eth 0
  • Traffic Scheduling (Linux)

    Bei paralleler Nutzung des Profinet-Netzwerk-Adapters mit anderen Diensten, die viel Datenverkehr erzeugen (beispielsweise große Webvisu), kann es zu einem Verdrängen der Profinet-Echtzeitdaten auf dem Adapter kommen. Dies kann über das so genannte Traffic-Scheduling, bei dem die Profinet-Daten höher priorisiert werden, vermieden werden.

    Beispiel: In der *.cfg-Datei des Laufzeitsystems ist Linux.PACKET_QDISC_BYPASS gesetzt. Der gesamte übrige Datenverkehr wird in der Bandbreite limitiert und auf niedrige Priorität gesetzt (/etc/interfaces):

    iface eth0 inet static

    ...

    #move all outgoing traffic to a default class with low priority

    pre-up /sbin/tc qdisc add dev $IFACE root handle 1:0 htb default 1

    pre-up /sbin/tc class add dev $IFACE parent 1:0 classid 1:1 htb rate 1Mbps ceil 1Mbps prio 0