igh ethercat 实时性测试

测试硬件

  • 工控机:rk3588板子
  • 系统 : ubuntu20.04, kernel 5.10.209-rt89
  • ethercat 电机

编译安装

内核编译

  • 按厂家提供的源码和资料编译。
  • 由于是直接在工控机进行编译,所以就不需要配置交叉编译环境。

# 安装所需工具包
sudo apt install -y cmake make gcc g++ libssl-dev flex bison python2-dev

cd rt_kernel_build/kernel
make rockchip_linux_docker_defconfig modules -j8

igh 编译

网卡检查
  • 如果要用 igh 网卡直驱 功能,需要检查当前网卡是否支持,通过以下网址查询:

    • igh 网卡驱动支持 : docs.etherlab.org/ethercat/1.…
    • 可知 linux-5.10 支持 igb 驱动。
  • 查看网卡型号 :

    • 使用命令 sudo ethtool -i eth2 查看对应网卡的驱动;
    • 由于所使用的网卡是I210 驱动为 igb , 就可以使用 网卡直驱 功能;
sudo ethtool -i eth2

# 
driver: igb
version: 5.10.110
firmware-version: 3.12, 0x800004fa
expansion-rom-version:
bus-info: 0004:41:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
  

编译
  • 参考官方说明文档,以下是实际编译脚本。
tar xjf ethercat-1.6.2.tar.bz2
cd ethercat-1.6.2/

./configure -prefix=/opt/etherlab 
--with-linux-dir=/home/root/igh/ctb8809_kernel_build/kernel 
-enable-igb=yes 
--enable-8139too=no  

make
make modules

  • configure 说明:
    • -prefix=/opt/etherlab : 设置安装路径;
    • --with-linux-dir=[dir] : 设置linux源码路径
    • -enable-igb=yes : 启用 igb 直驱模块编译
    • --enable-8139too=no :关闭 igb 直驱模块编译

igh 安装

安装
make install -j8 
make modules_install -j8
depmod
配置链接和参数
# 配置 rules
echo KERNEL=="EtherCAT[0-9]*", MODE="0664" > /etc/udev/rules.d/99-EtherCAT.rules

# 配置 link
ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/ethercat
ln -s /opt/etherlab/bin/ethercat /usr/bin/ethercat

# 修改网卡配置 mac (ifconfig 查看),修改驱动配置 (generic 为通用驱动,走linux内核协议栈,默认用此驱动 )
mkdir -p /etc/sysconfig
cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat
vi /etc/sysconfig/ethercat

igh 使用

启动

  • 配置修改后需要 start 或 restart 生效。
/etc/init.d/ethercat start

igh ethercat 基本指令

功能示例
启动主站/etc/init.d/ethercat start
停止主站/etc/init.d/ethercat stop
查看主站状态ethercat master
重新扫描从站ethercat rescan
列出所有从站ethercat slaves
显示详细从站信息ethercat slaves -v

实时性测试

测试环境

  • 一台 ethercat 电机
  • 通讯周期 配置 1ms
  • 测试代码 使用官方提供的示例进行修改

ethercat 数据抓包

  • 测试程序启动后,通过 tcpdump 抓取 ethercat 协议包;
# tcpdump install
sudo apt install tcpdump

# 抓包
sudo tcpdump -i eth2 -w ethercat.pcap 'ether proto 0x88a4'

# -i eth2 : 指定网卡 eth2
# -w ethercat.pcap : 输出到 ethercat.pcap
# 'ether proto 0x88a4' :  ethercat 协议包

ethercat 抓包 数据分析

分析指标
  • 使用 相对抖动 作为评估指标。
    • 定义​​:​​相邻两个周期​​的实际时间间隔与​​理想的周期长度​​之间的偏差
    • ​计算公式​​:相对抖动 = (本次周期实际开始时间 - 上次周期实际开始时间) - 理想周期T
    • ​关注点​​:​​周期与周期之间的稳定性 ​
测试分组

a. 无锁核,无rt补丁 b. 锁核+FIFO调度+内存锁定,无rt补丁 c. 锁核+FIFO调度+内存锁定,+rt补丁 d. 锁核+FIFO调度+内存锁定,+rt补丁,+网卡直驱


测试结果
a组结果

image.png

b组结果

image.png

c组结果

image.png


测试总结
备注std(us)max(us)
a无锁核,无rt补丁8.38108
b锁核+FIFO调度+内存锁定,无rt补丁0.9216
c锁核+FIFO调度+内存锁定,+rt补丁0.9922
  • 可以看到 a组 使用ethercat不做其他优化,周期抖动非常大,且max能达到 100 多 us;
  • 通过 锁核+FIFO调度+内存锁定 进行优化,可以看到 抖动明显降低,且max 为 20 us 左右;
  • 在 锁核+FIFO调度+内存锁定 优化基础上,再加 rt补丁 无明显提升,所以实际使用并非强制需要 rt补丁 (如果不锁核的话,rt补丁还是需要的);

参考

  • igh 源码:gitlab.com/etherlab.or…
  • igh 网卡驱动支持 : docs.etherlab.org/ethercat/1.…
本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]