イーサネット/フィールドバスパフォーマンス
次のセクションでは、を実行する既存の Linux システムを最適化する方法について説明します。 CODESYS イーサネットベースのフィールドバスを使用する際のランタイムシステム。これらのフィールドバスには EtherCAT、 PROFINET、または EtherNet/IP。
ここでの説明は、例として示されています EtherCAT マスターして同じように使うこともできます PROFINET。
必要条件
ハードウェア
デスクトップ PC
リナックス PC:
リアルタイムセンシティブフィールドバスごとに少なくとも1つの空きイーサネットポート(EtherCATマスター/PROFINETなど)を専用で使用してください。
重要
使用するポートは、スイッチやUSBで接続しないでください(内部接続もできません)。
ソフトウェア
CODESYS IDE
EtherCAT マスターを使用した IEC アプリケーション
リアルタイムカーネルを使用する Linux オペレーティングシステム (Debian など)
詳細については、以下を参照してください。 パフォーマンス最適化
CODESYS ランタイムシステム — 例えば CODESYS Control for Linux SL
コンフィギュレーション
目標は基本的に、すべてのスレッドが動作に関与していることを確認することです CODESYS EtherCAT マスターのようなランタイムシステムは、あらかじめ定義された CPU 上で優先順位が決められています。そのためには、IEC アプリケーションと Linux システムの両方で設定が可能です
重要
CPU 0 は通常、オペレーティングシステムで特定のシステムサービス (ハウスキーピング) に使用されるため、CPU 0 を使用しないでください。
Linux システムで最適化するには、PLCShell コマンドを使用することをお勧めします。必要な設定は、ランタイム設定から、または Linux システムで直接設定することもできます。詳しくは、以下を参照してください パフォーマンス最適化
CODESYS とランタイムシステムとの接続を確立し、PLCShell を開きます。
セット
scaling_governorにperformance。rt-set scaling_governor all performance
CPU 周波数を設定します。これらの設定は Linux システムで直接行う必要があります。詳しくは、以下を参照してください Linux システムでの CPU 周波数の設定。
ランタイムバージョン SP23 以降では、CPU 周波数を設定するための PLCShell コマンドが用意されています。
まず、可能な周波数を決定します。
rt-get cpu_frequency
出力の例

周波数 (最小と最大) を固定値に設定します。
rt-set cpu_frequency all 3000000
ハイパースレッディングを無効にする:
rt-set hyperthreading off
スロットリングを無効にする:
rt-set throttling off
使用しているネットワークアダプタの NAPI スレッドを有効にします (ここでは:
ens5):rt-set napi ens5 on
ネットワークアダプタのIRQスレッドとNAPIスレッドを確認します。
irq-list
出力の例

使用
irq-set-prioそしてirq-set-affinityネットワークアダプターの優先度を上げて (たとえば 55)、ネットワークアダプターを同じ CPU にバインドするには (たとえば、0x2CPU 1 用です。重要
プリファレンスを番号ではなく名前で設定します。番号はシステムの起動時に変わることがあります。

それぞれの NAPI スレッドを同じ優先度と CPU に設定します。

の優先順位を設定します
EtherCAT_Task1 へ。これは Linux のリアルタイム優先順位 55 に相当します。詳細については、以下を参照してください。 Linux システムにおけるタスク優先度のマッピング
タスクグループを使用してバインドします
EtherCAT_Task同じ CPU (ここでは Core 1、アフィニティに対応)0x2):
ケース例: EtherCAT、 PROFINET、 EtherNet/IP
シナリオ:3 つのイーサネットベースのフィールドバス (例 EtherCAT、 PROFINET、 EtherNet/IP) 4 個以上の CPU を搭載した Linux システムでは
以下の設定が推奨されます (CPU 0 は避けてください)。
フィールドバス | IEC タスク名 | IEC タスク優先度 | IEC タスクコア | IRQ プライオリティ | IRQ アフィニティ |
|---|---|---|---|---|---|
EtherCAT |
| 1 | 1 | 55 | 0x2 (プロセッサ 1) |
PROFINET |
| 1 | 2 | 55 | 0x4 (CPU 2) |
EtherNet/IP |
| 1 | 3 | 55 | 0x8 (プロセッサ 3) |
Linux システムでの CPU 周波数の設定
重要
次の設定は Linux システムの起動時に失われるため、再起動後にリセットする必要があります。
次の Linux コンソールコマンドを使用して、CPU 周波数の最小値と最大値を決定できます (ここでは 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
出力の例
3800000 3800000 3800000 3800000 1600000 1600000 1600000 1600000
次のコマンドを使用して 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