Skip to main content

Aborting the Connection (DHT)

Especially with PROFINET Controllers on platforms with limited real-time capabilities, such as Linux or CODESYS Control Win SL, a send interval which is selected too low (< 4 ms) often cannot be maintained. This is indicated by the error "AR consumer DHT expired" (PNIOStatus = 0xCF81FD05).

Common causes for aborting the connection

  • Powersafe policy

    Modern operating systems and CPUs typically have numerous power-saving features which "sleep" parts of the system (CPU or network adapter). "Waking up" those components can be delayed so that sending can no longer be done reliably. Curiously enough, a low load on the system causes interference in communication. Therefore, these Powersafe functions should be disabled if problems occur.

  • Real-time patch (Linux)

    To make sure that short send intervals (1 ms or less) are reliable, it is usually necessary to install a real-time patch on the Linux system. This depends on the performance and load of the respective platform. This is recognizable by a large jitter of the "Profinet_IOTask" (in task monitoring).

  • XDP: On Linux systems with XDP and a runtime system > 3.5.22.0, XDP can provide noticeably better results in data throughput and jitter. For more information, see the following: CODESYS Control with Linux XDP

  • Increase of the priority of the network task which manages the PROFINET network adapter.

    Use the PLC Shell to execute these commands (for details, see the runtime description):

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

    If you use the Profinet network adapter in parallel with other services which generate a high volume of data traffic (such as a large web visualization), then the Profinet real-time data may be displaced on the adapter. This can be prevented by traffic scheduling where the Profinet data is prioritized higher.

    Example: Linux.PACKET_QDISC_BYPASS is set in the *.cfg file of the runtime. The entire remaining traffic is limited in bandwidth and set to low priority (/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