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_BYPASSis 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 prioritypre-up /sbin/tc qdisc add dev $IFACE root handle 1:0 htb default 1pre-up /sbin/tc class add dev $IFACE parent 1:0 classid 1:1 htb rate 1Mbps ceil 1Mbps prio 0