基于FPGA的EtherCAT链路冗余原理及其设计与验证

工业以太网

1人已加入

描述

摘 要: EtherCAT是一种实时工业以太网协议,使用链路冗余技术是实现链路稳定性和可靠性的重要手段。介绍了基于FPGA的EtherCAT链路冗余原理,设计通过FPGA实现主站与从站、从站与从站之间的通信链路与冗余链路的自动切换,从而实现EtherCAT的链路冗余。通过测试验证了此方法的可行性,增加了EtherCAT系统的可靠性与可维护性。

0 引言

EtherCAT最初是由德国的倍福公司基于标准以太网技术提出的工业以太网,是一种具有灵活网络拓扑结构的技术[1]。EtherCAT技术具有速度快、同步性能好、支持多种拓扑结构、采用标准以太网帧、带宽利用率高等优点[2]。工业以太网中冗余技术是提高以太网系统可靠性和可维护性最有效的手段之一[3]。链路冗余是应对网口故障(包括主站网卡本身故障和连接)及链路故障(指从站节点之间的链路存在断开情况,如网线断开)的补救措施。通常在对系统稳定运行要求比较高的情况下,就需要应用链路冗余技术。链路冗余是一种单一容错机制,即如果链路在某一处发生故障,依然可以与各个从站保持数据的传输。当通信恢复时主要的通信方向也会恢复。如果不止一个地方发生通信中断,所有的必须在发生另一个错误之前恢复。文献[4]中介绍了一种工业以太网EtherCAT冗余和热插拔技术,此种方法采用环型冗余结构,将最后一个 ESC节点连接到主站,此种方法虽然可以解决单点故障,但是在故障修理时需要断电,且不能解决多点故障。为了解决此问题,本文通过介绍基于FPGA的EtherCAT的链路冗余原理,设计通过FPGA实现主站与从站、从站与从站之间的通信链路与冗余链路的自动切换,从而实现EtherCAT的链路冗余,增加了EtherCAT 系统的可靠性与可维护性 。

1 EtherCAT原理

EtherCAT是一种实时工业以太网技术,采用主从站结构,如图1所示。主站发送以太网帧给各从站,从站通过寻址从数据帧中抽取对应的数据或将数据插入数据帧,然后将该数据帧传输到下一个EtherCAT从站。最后一个EtherCAT从站发回经过完全处理的报文,并由第1个从站作为响应报文发送给主站。主站使用标准的以太网接口卡或具有以太网接口的嵌入式工业控制计算机,EtherCAT从站使用专用的从站控制芯片ESC,采取接收转发机制,以太网帧可以双向通行,但只有以太网帧由下行电报方向进入时,相应的报文才能得到处理,如果指定转发的网口未连接,ESC自动将以太网帧沿原入口返回。

FPGA

EtherCAT数据直接使用以太网数据帧,使用的帧类型为0x88A4。EtherCAT数据包括2 B的数据头和44 B~1 498 B的数据。数据区由一个或多个EtherCAT子报文组成,每个子报文对应独立的设备和从站存储区。每个EtherCAT 子报文包括子报文头、数据域和相应的工作计数器(Working Counter,WKC),子报文寻址到从站节点并交换数据后,工作计数器将被增加,用以记录该子报文的处理状态。子报文头中,8 bit命令字节指定了子报文类型(读写类型,寻址类型);8 bit索引号给出子报文编码。32 bit的子报文地址指定了对从站的操作地址,寻址类型定义了寻址方式;8 bit长度用以指示报文数据区的字节数;R为4 bit的保留位;4 bit M表示本报文是否为最后一个报文;16 bit中断目前保留。

2 基于FPGA的链路冗余原理

在EtherCAT通信链路运行过程中,可能会存在如下几种故障:

(1)网口故障,包括主站网卡本身故障和连接。

(2)链路故障,指从站节点之间的链路存在断开情况,比如网线断开。

为了能够增加EtherCAT系统的可靠性及可维护性,在EtherCAT主站与从站的链路之间通过FPGA增加了冗余功能,每一条链路都有对应的冗余链路作为备用。链路1出现故障时,可以通过FPGA自动切到冗余链路1;链路2出现故障时,通过FPGA自动切到冗余链路2。这样如果链路在某一处发生故障,依然可以与各个从站保持数据的传输。当通信恢复时主要的通信方向也会恢复,极大地增强了系统的稳定性和可维护性。

如图2所示,EtherCAT主从站网络构成框图中,冗余卡为基于FPGA的链路冗余卡,通过通信链路1与主机冗余型CPU连接,冗余链路1与备机冗余型CPU连接,实现主从站之间的主备切换冗余。通过通信链路2与下一级冗余卡的链路1连接,冗余链路2与下一级冗余卡的冗余链路1连接,实现EtherCAT的链路冗余。

FPGA

3 链路冗余的FPGA实现方法

FPGA实现主站与从站、从站与从站之间的通信链路与冗余链路的自动切换功能。

如图3所示,FPGA的4个接口0、1、2、3与4条通信链路通过MII(Media Independent Interface)方式连接。FPGA的4个接口分为2组,接口0和接口1为1组,接口2和接口3为1组,两组的逻辑相同。现以接口0和接口1说明冗余的切换方式:

FPGA

(1)FPGA复位状态为接口;

(2)运行过程中,通信链路1状态不正常,冗余链路1正常,接口1切换为接口0;

(3)冗余链路1正常时,通信链路1恢复正常,此时不切换,还是连接接口1;

(4)冗余链路1不正常,通信链路1恢复正常,接口2切换为接口1运行。

接口2和接口3的切换方式与接口0和接口1的切换方式相同。

在FPGA实现过程中,主要是通过判别两个接口的PHY(Physical Layer)的数据连接信号(linkmii)和数据有效信号(rx_dv)判断链路的状态。其中,接口0的数据连接信号为linkmii0,数据有效信号为rx_dv0,接口1的数据连接信号为linkmii1,数据有效信号为rx_dv1。因为PHY在数据传输过程中,rx_dv信号只在数据有效时拉高,因此,需要检测时间阈值(cnt_time0、cnt_time1),即两次rx_dv时间差,超过时间阈值(cnt_time0=1、cnt_time1=1)认为此接口无数据连接。接口0和接口1的切换条件判断为:

(1)当linkmii0为低,linkmii1为高,选择为接口0;

(2)当linkmii0为高,linkmii1为低,选择为接口1;

(3)以前状态为接口1,当linkmii0为低,linkmii1为低,rx_dv0=1,cnt_time0=0,则选择为接口0;

(4)以前状态为接口1,当linkmii0为低,linkmii1为低,rx_dv1=1,cnt_time1=0,则选择为接口0;

(5)以前状态为接口0,当linkmii0为低,linkmii1为低,rx_dv1=1,cnt_time0=1,则选择为接口0;

(6)以前状态为接口1,当linkmii0为低,linkmii1为低,rx_dv0=1,cnt_time1=1,则选择为接口0。

接口2和接口3的切换选择逻辑与此类似。

4 功能测试

为了验证此链路冗余方法的可行性,搭建了以ALTERA公司的Cyclone III EP3C40E484i为核心的测试系统,此芯片有332个IO管脚,39 600个LE,可满足设计的要求。根据FPGA实现冗余链路的要求,现根据测试图型将测试叙述如下:

(1)图4中,0时刻前为通信链路和冗余链路都没有连接到冗余卡上(linkmii0=1,linkmii1=1),此时默认选择接口0,0时刻后冗余链路连接到冗余卡上(linkmii1=0,linkmii0=1),此时切换为接口1。

FPGA

(2)图5中,0时刻前为冗余链路连接到冗余卡上(linkmii1=0,linkmii0=1),通道选择为接口1,0时刻后,冗余链路从冗余卡上断开(linkmii1=1,linkmii0=1),此时通道回到默认接口1。

FPGA

(3)图6中,0时刻前为通信链路与冗余链路都连接到冗余卡上(linkmii0=0,linkmii1=0),通道选择为接口1,但此时通信链路有数据有效信号(rx_dv0=1),冗余链路没有数据有效信号(rx_dv1=0),此时通道切换到接口0。

FPGA

(4)图7中,0时刻前为通信链路与冗余链路都连接到冗余卡上(linkmii0=0,linkmii1=0),通道选择为接口0,但此时冗余链路有数据有效信号(rx_dv1=1),通信链路没有数据有效信号(rx_dv0=0),此时通道切换到接口1。

FPGA

5 结论

本文首先介绍EtherCAT的基本原理,以增加EtherCAT系统稳定性和可维护性为出发点,给出了基于FPGA的EtherCAT链路原理,设计通过FPGA实现主站与从站、从站与从站之间的通信链路与冗余链路的自动切换,从而实现EtherCAT的链路冗余。通过测试验证此方法的可行性,增加了EtherCAT 系统的可靠性与可维护性。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分