基于Windows 套接字的Ethercat 主站协议栈设计与实现
2021-10-26柳青
柳 青
(北京电子科技职业学院, 北京 100176)
0 引言
Ethercat 作为一种开放式高速实时以太网广泛应用于运动控制、自动化等领域。在当前Ethercat 主站的研究中为了追求实时性能和高精度时钟同步, 对系统的软件或硬件都提出了特殊要求。 蒋杰等通过改造Linux 内核在X86 平台上实现了Ethercat 主站[1],孙跃祥等在Xilinx Zynq-7000 处理器构建了嵌入式Ethercat 主站[2]。
然而在物料传输、 工件检测等对实时性要求不高的系统中,如果采用上述方案则存在系统复杂,成本高,开发周期长等问题。 因此提出了这一种在Windows 平台上采用网络套接字来实现Ethercat 主站协议栈的方法。 该方法基于Ethercat 规范中Ethercat UDP/IP 报文格式,将Ethercat 报文嵌入udp 数据包的方式,不需要专用硬件或者特殊网卡驱动,协议栈配置灵活,可移植性好。
1 整体架构设计
Ethercat 主站的主要功能是对从站的配置、 数据交换、为应用程序提供编程接口,因此该将协议栈设计为三个线程模块和一个数据模块。 三个工作线程分别负责应用程序接口、Ethercat 报文生成、解析与收发、配置服务通信。 每个线程都可以访问数据模块中的数据,线程之间通过数据模块交互信息,协议栈架构见图1。
图1 Ethercat 主站协议栈框架
数据模块包含了每个从站的信息,包括:基本信息,如从站位置、生产厂商、版本号等;配置信息,主站对从站初始化时,需要对其SM 和FMMU 进 行 配置,否则在从站状态转换时会出错,另外在使用PDO 通信时,也必须对从站1C12、1C13 等对象进行配置[3],以映射报文中的数据到从站的字典对象中。 从站结构体代码如下所示:
2 Ethercat 报文解析
Ethercat 协议使用标准的IEEE 802.3 以太网帧传输数据,作为一种开放式实时以太网协议,支持UDP/IP 传输协议[3],在这种模式下,将Ethercat 报文作为UDP 的数据,Ethercat 从站控制器就可以识别并处理数据包。 为了能够区分Ethercat 报文和其他报文, 协议规定了Ethercat 使用的UDP 端口为0x88A4,Ethercat UDP/IP 报文格式如下:
报文头规定了该报文的指令类型、 数据地址以及数据长度,数据部分是报文携带的数据信息,对于读报文,从站控制器将从站数据复制到该区域,对于写报文,从站控制器将该区域的数据复制到从站对应的内存中。 从站控制器会根据每次报文的执行结果更新该字段, 主站通过检查该字段来判断报文指令是否执行成功。Ethercat 报文生成函数如下:
3 配置与服务线程
Ethercat 主站在初始化阶段需要扫描网络,并对各个从节点进行配置[5],另外应用程序对界面服务数据的读写需要SDO 通信, 这些任务都需要通过几个阶段来完成,会消耗比较多的时间, 为了避免执行这些任务导致应用程序阻塞,将这些任务在一个单独的线程中执行,应用程序可以很快得到返回。
该线程不断查询数据模块中的控制字, 轮询应用程序请求类型,收到请求则会调用相应的处理函数,在处理函数中,不断改变处理状态,以使应用层可以掌握处理进度及结果。 处理完成后,将请求字段复位,以便接受下一次请求。 配置流程如下:
(1)采用FBWR 指令扫描总线网络,读取设备ID 等。
(2)配置SM 寄存器。
(3)计算FMMU,并配置FMMU 寄存器。
(4)配置SDO、PDO。
(5)状态转换。
4 通信实验
为了验证协议栈的正确性, 采用德国倍福公司的Ethercat 从站模块进EL2889、EL1889 进行通信测试,实验实物见图2。 采用Wireshark 软件抓取通信数据包,抓取的数据包见图3。
图2 Ethercat 通信实验平台
图3 Wireshark 抓包数据
在图3 中,以第497 个数据包为例,主站计算的IP地址为192.168.0.100, 目 的IP 设置为192.168.0.255,目的端口号设置为0X88A4, 十进制表示为33980,该数据包为协议栈发出的APWR 指令,数据长度为2,WKC 为0。 第498 个数据包为从站返回的应答包, 可以看出数据部分发生变化,WKC 也变为1, 说明Ethercat 从站已经成功处理该数据包,协议栈可以和从站正常进行数据交互。
5 结论
阐述了基于Windows 套接字的Ethercat 主站协议栈设计方法,根据Ethercat UDP/IP 规范,将Ethercat 报文嵌入到udp 报文中, 避免了使用专门硬件或者开发特殊网卡驱动,实现了主站对从站的寄存器读写,并详细设计了主站对从站的配置流程,最后通过Wireshark 软件抓取通信数据包,实验表明:协议栈能够与从站进行数据交互,设计简单、配置灵活,有利于Ethercat 协议在通用Windows平台上的应用。