Rendimiento de Ethernet/Fieldbus
La siguiente sección describe cómo optimizar un sistema Linux existente que ejecuta un CODESYS Sistema de ejecución mientras se utilizan buses de campo basados en Ethernet. Estos buses de campo incluyen EtherCAT, PROFINET, o EtherNet/IP.
La descripción aquí se da como ejemplo de la EtherCAT Maestro y también se puede usar de la misma manera para PROFINET.
Requerimientos
Hardware
PC de sobremesa
Ordenador Linux:
Al menos un puerto Ethernet libre por cada bus de campo sensible en tiempo real (por ejemplo, EtherCAT Master/PROFINET) para uso exclusivo.
Importante
El puerto usado no debe conectarse mediante un conmutador o USB (ni siquiera internamente).
Software
CODESYS IDE
Aplicación IEC con un EtherCAT Master
Sistema operativo Linux (por ejemplo Debian) con un núcleo en tiempo real
Para obtener más información, consulte lo siguiente: Optimización del rendimiento
CODESYS Sistema de ejecución, por ejemplo CODESYS Control for Linux SL
Configuración
El objetivo es básicamente garantizar que todos los hilos que intervienen en el funcionamiento del CODESYS El sistema de ejecución, como EtherCAT Masters, se ejecuta en una CPU predefinida con una prioridad definida. Para ello, es posible realizar ajustes tanto en la aplicación IEC como en el
Importante
No utilice la CPU 0 para ello, ya que el sistema operativo la suele utilizar para determinados servicios del sistema (tareas de limpieza).
Para la optimización en el sistema Linux, se recomienda utilizar los comandos PLCShell. Los ajustes necesarios también se pueden configurar mediante la configuración de tiempo de ejecución o directamente en el sistema Linux. Para obtener más información, consulte lo siguiente: Optimización del rendimiento
Establezca una conexión con CODESYS con el sistema de ejecución y abra el PLCShell.
Set
scaling_governorparaperformance.rt-set scaling_governor all performance
Configure la frecuencia de la CPU. Debe configurar estos ajustes directamente en el sistema Linux. Para obtener más información, consulte lo siguiente: Configuración de la frecuencia de la CPU en un sistema Linux.
En la versión de ejecución SP23 y superior, habrá comandos PLCShell para configurar la frecuencia de la CPU.
Primero determine las frecuencias posibles:
rt-get cpu_frequency
Ejemplo de una salida

Establezca la frecuencia (mínima y máxima) en un valor fijo:
rt-set cpu_frequency all 3000000
Deshabilite el hyperthreading:
rt-set hyperthreading off
Desactivar la limitación:
rt-set throttling off
Habilite los subprocesos NAPI para el adaptador de red usado (aquí:
ens5):rt-set napi ens5 on
Determine los subprocesos IRQ y NAPI del adaptador de red:
irq-list
Ejemplo de una salida

Utilice
irq-set-prioyirq-set-affinitypara aumentar la prioridad de los adaptadores de red (por ejemplo, en la 55) y vincular los adaptadores de red a la misma CPU (por ejemplo,0x2para CPU 1.Importante
Establezca las preferencias por nombre, no por número. Los números pueden cambiar cuando se inicia el sistema.

Establezca los subprocesos NAPI respectivos con la misma prioridad y CPU:

Establezca la prioridad del
EtherCAT_Taska 1. Esto corresponde a la prioridad 55 en tiempo real de Linux.Para obtener más información, consulte lo siguiente: Mapeo de las prioridades de las tareas en un sistema Linux
Utilice un grupo de tareas para vincular el
EtherCAT_Taska la misma CPU (aquí: Core 1, corresponde a la afinidad0x2):
Ejemplo de caso: EtherCAT, PROFINET, EtherNet/IP
Escenario: 3 buses de campo basados en Ethernet (ejemplo EtherCAT, PROFINET, EtherNet/IP) en un sistema Linux con al menos 4 CPU
Se recomiendan los siguientes ajustes (se evita la CPU 0):
Fieldbus | Nombre de tarea de IEC | Prioridad de tarea de IEC | Núcleo de tareas de IEC | Prioridad de IRQ | Afinidad de IRQ |
|---|---|---|---|---|---|
EtherCAT |
| 1 | 1 | 55 | 0x2 (CPU 1) |
PROFINET |
| 1 | 2 | 55 | 0x4 (CPU 2) |
EtherNet/IP |
| 1 | 3 | 55 | 0x8 (CPU 3) |
Configuración de la frecuencia de la CPU en un sistema Linux
Importante
Los siguientes ajustes se pierden cuando se inicia un sistema Linux y, por lo tanto, deben restablecerse tras un reinicio.
Puede usar los siguientes comandos de la consola de Linux para determinar las frecuencias de CPU mínimas y máximas (aquí: CPU0-3):
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_max_freq cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_max_freq cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_min_freq cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_min_freq
Ejemplo de una salida
3800000 3800000 3800000 3800000 1600000 1600000 1600000 1600000
Puede usar los siguientes comandos para configurar las frecuencias de la CPU:
echo "3000000" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq echo "3000000" | sudo tee /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq