APP下载

基于Windows 套接字的Ethercat 主站协议栈设计与实现

2021-10-26

机电产品开发与创新 2021年5期
关键词:主站线程以太网

柳 青

(北京电子科技职业学院, 北京 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平台上的应用。

猜你喜欢

主站线程以太网
基于C#线程实验探究
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
基于国产化环境的线程池模型研究与实现
浅谈linux多线程协作
EtherCAT主站与主站通信协议的研究与实现*
多表远程集抄主站系统
谈实时以太网EtherCAT技术在变电站自动化中的应用
一种90W高功率以太网供电系统的设计
浅谈EPON与工业以太网在贵遵高速公路中的应用
基于改进经济压差算法的主站AVC的研究