APP下载

基于Linux平台的EtherCAT主站设计与研究

2023-12-18杨亮亮钱家豪鲁文其潘晓铭

计算机时代 2023年11期

杨亮亮 钱家豪 鲁文其 潘晓铭

关键词:EtherCAT;Linux;工业以太网;SOEM

中图分类号:TP273 文献标识码:A 文章编号:1006-8228(2023)11-12-04

0 引言

在工业自动化控制领域,控制系统需不断满足通信速度、控制精度、抗干扰能力和实时性的要求[1]。传统总线控制方式已不能满足要求,工业以太网技术因其高实时性和稳定性成为工业技术发展的重要推动力,如广泛应用的有EtherCAT、EtherNet/IP、SERCOS等[2]。

EtherCAT 协议使用了一种名为“处理数据”的方式,使得数据可以在网络上以非常高的速度传输,从而获得实时性能好的控制,在测控领域、工业机器人等领域都有着重要的应用价值。

目前市面上使用EtherCAT 来控制高端数控系统的主站,主要是倍福公司基于传统的PC 研发的TwinCAT 商业主站,其价格高昂、不开源、灵活性差,正在被嵌入式主站逐步替代[3-4],但传统的嵌入式主站因其芯片价格一直居高不下,故使用成本高。针对上述问题,本文设计了一种Linux+RT-PREEMPT+SOME 的框架下搭建EtherCAT 主站的方案,采用国产T3 芯片作为主站控制芯片,实现了对二台伺服电机周期性控制,并对其周期性和实时性进行了测试。此方案即满足了EtherCAT 主站强实时性和高稳定性的要求,又解决了传统EtherCAT 主站成本高、便携性差的缺点。

1 EtherCAT系统架构

EtherCAT 是一种实时以太网协议,其核心是一个分布式控制系统,其中多个设备通过一个物理总线连接[5-6]。其系统总体架构及运行原理如图1 所示,搭载Linux 实时系统的全志T3 系列芯片与PHY 芯片连接,然后PHY 芯片连接带有网络隔离变压器的RJ45 接口,组成了EtherCAT 主站,从站由多台伺服驱动器和伺服电机构成,主站通过网线将EtherCAT 报文发送至全部从站。

2 Linux 系统实时性优化

EtherCAT 主站对其搭载的操作系统的实时性提出了要求[7],本文选用的Linux 操作系统内核版本为Linux-3.10.65,其具有丰富软件资料,稳定性和重构性强的优势,但本身作为一个通用操作系统内核而设计的,存在实时性能差的缺点,因此选用RT-Preempt 实时补丁优化Linux 系统[8-9]。优化Linux 系统的实时性步骤如图2 所示,通过SecureCRT 软件,在其终端上输入uname -a 来查看当前开发板的Linux 内核的相关信息,用来判断Linux 操作系统实时性优化是否成功。

3 EtherCAT 主站设计

3.1 应用程序设计

EtherCAT 主站和从站建立通信主要由EtherCAT总线配置和周期实时任务两个阶段组成。如图3 所示。通过在终端使用ifconfig 命令查看所用的网络设备并对网口进行配置。其中ec_config_init()函数负责从站的配置信息:包含从站的数量、产品的ID。以便于主站可以和特定的从站进行PDO 数据交换。

EtherCAT 状态机的通信机制是用来实现主站和从站之间的通信,并且定义了主站和从站在通信过程中可以采取的状态[10]。EtherCAT 主站要控制从站运行,需要经过四个状态,分别是Init( 初始化),Pre-Operational( 预运行),Safe-Operational( 安全运行),Operational(运行),必须按照“初始化→预运行→预运行→安全运行”顺序进行状态的转化,不能越级转化,从运行状态返回时可以越级转化[11]。

EtherCAT 主站控制伺服电机周期同步位置模式模式(Cyclic synchronous position mode, CSP)运行,需要在Pre-Operational 状态转向Safe-Operational 状态期间,需要配置从站的信息,主站按照CiA402 标准协议进行PDO 映射,PDO 可以分为RxPDO(信息写入从站)和TxPDO(从站发出信息),其配置信息如图4所示。

伺服电机csp 模式运行之前,需要设置伺服驱动器的模式并且控制其使能,根据CiA402 协议,csp 模式对应的控制模式为8,因此需要将地址60600008h 写入8,地址60400010h 写入任意数→6→7→15 的顺序使能伺服驱动器。

3.2 周期性实时任务

周期性实时任务的作用是实现主站与从站之间过程数据的交换,其包含了主站周期性实时生成控制指令(逻辑运算指令和运动控制算法)并发送给从站,从站接收完主站指令执行周期性任务以及反馈运行状态。在SOEM 中实现的代码如下所示:

ec_send_processdata();

ec_receive_processdata(EC_TIMEOUTRET);

周期時间的控制精度影响着EtherCAT 实时性的精度,因此时钟函数选用的是拥有纳秒级精度的clock_gettime()和clock_nanosleep()。其周期实时任务设计模块如图5 所示。其中clock_gettime()和clock_nanosleep()函数的第一参数为CLOCK_MONOTONIC,将以绝对时间为准,获取的时间为系统重启到现在的时间,系统时间的更改对其没有影响,t1 和t2为绝对时间。

4 实验平台搭建及测试

本文提出的基于Linux 嵌入式的EtherCAT 主站实验平台如图6所示,其中主要由EtherCAT主站和从站组成,全志T3系列开发板上使用Linux+RT-PREEMPT+SOEM 的开源架构作为EtherCAT 主站,从站选用了两台禾川公司开发的X3E 伺服驱动器和伺服电机。

4.1 Linux 内核实时性测试

RT-PREEMPT 移植完成后,需要对其进行实时性测试,以此来用对在实际应用场合中处理多任务高负载的场景,因此使用压力测试工具模拟系统处于高负载的场景,并且同时运行EtherCAT 主站应用程序,然后使用Cyclictest 工具测量系统的实时性。

使用由图7 可知,没有实时内核的Linux 系统的实时线程最大延迟达到了2ms,已经超出了EtherCAT 对实时性的要求。而由图8 表明,经过实时性优化的Linux 内核的实时线程的性能得到了极大的提升,最大的延迟在60us 左右,平均延迟在18us 左右,最小延迟在11us 左右,其结果表明实时内核的性能更加优于非实现内核,达到了EtherCAT 主站对实时性us 精度的要求。

4.2 EtherCAT 通信测试

周期时间需要实际工程的需求来设定,其中EtherCAT 数据帧收发的时间是一个重要的影响因素,周期时间设定的值必须要大于EtherCAT 一帧数据帧的收发时间,选用clock_gettime() 函数来测量EtherCAT 收发帧的时间,经过长时间的测量,最大时间为420us。考虑到伺服运动控制也需要花费时间,因此将周期时间设为2ms。

启动EtherCAT 主站应用程序,主站与从站进行周期数据交换后,使用交换机分别与PC 和T3 开发板的网口相连,使用Wireshark 软件抓取EtherCAT 数据帧并进行统计与分析,EtherCAT 报文如图9 所示。

EtherCAT通过检擦字报文中的WKC(Working Cnt)的值并和预期的值进行对比,以此来判断从站是否有正确的处理报文,当字报文经过一个从站时,进行读或写操作成功时,WKC 会加1,在进行读/写操作时,读成功时WKC 加1,写成功时WKC 加2,读写都成功时,WKC 的时便会加3[12]。由图9 可知,主站连接着两个伺服从站,执行LRW 和FRMW 的命令后,WKC 的数值从0 分别变为了6 和2,说明了从站正确处理了报文。

4.3 主站实时性测试

在SOEM 中,ecx_context.DCtime 是一个用来表示当前DC 时钟值的变量,可以通过检查ecx_context.DCtime 的值来确定从站的同步状态,因此使用ns 级别精度的clock_gettime()函数来获取当前以及上一个ecx_context.DCtime 的值,通过当前的DC 值减去上一次的DC 值,便可以计算出当前的数据传输时间,经过长时间的测试,其结果如表1 所示,EtherCAT 数据帧传输平均周期为2000005ns 左右,符合设定了2ms 周期,并且最大的周期为2139840ns,与设定的2ms 周期相差了130us 左右,符合EtherCAT 对实时性的要求,而且在测试期间伺服电机通信稳定无报错。

由表1 的结果表明,该方案能稳定运行EtherCAT通信,为了进一步分析其主站的性能,利用tshark 工具将Wireshark 抓取的EtherCAT 数据包中的时间戳提取出来并进行分析,其测试结果如下所示:

由图10 可知,在Linux+RT-PREEMPT+SOEM 的架构中,EtherCAT 主站和从站能正常的周期性通信,该方案的抖动量在80us 左右,最大的抖动量在160us左右。与系统设置的2ms 周期相比,其延迟是符合预期要求的,并且在保证正常通信的情况下,该方案可以轻松地进行跨平臺移植,从而减少了大量不必要的安装和部署工作,降低了学习难度。此外,随着硬件性能的提高,抖动量也会逐渐减少。

5 结束语

本文介绍了基于Linux+RT-PREEMPT+SOEM 的开源框架搭建EtherCAT 主站的主要流程,着重介绍了应用程序设计流程和Linux 内核实时性优化方法,对搭建好的主站进行性能测试,其结果表明,使用优化后的Linux 内核,以本文方案搭建的EtherCAT 主站能顺利运行,主站抖动量稳定在80us 左右,具有较高的实时性和稳定性,较好地解决了传统EtherCAT 成本高昂、便携性差的问题,为EtherCAT 主站在Linux 平台搭建提供了一种切实可行的方案。