文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.179010
中文引用格式: 黃兵,豐大軍,劉云龍,等. 基于FPGA的EtherCAT協(xié)議鏈路冗余研究[J].電子技術(shù)應用,2017,43(9):80-82,86.
英文引用格式: Huang Bing,F(xiàn)eng Dajun,Liu Yunlong,et al. Research on link redundancy of EtherCAT protocol based on FPGA[J].Application of Electronic Technique,2017,43(9):80-82,86.
0 引言
EtherCAT最初是由德國的倍福公司基于標準以太網(wǎng)技術(shù)提出的工業(yè)以太網(wǎng),是一種具有靈活網(wǎng)絡拓撲結(jié)構(gòu)的技術(shù)[1]。EtherCAT技術(shù)具有速度快、同步性能好、支持多種拓撲結(jié)構(gòu)、采用標準以太網(wǎng)幀、帶寬利用率高等優(yōu)點[2]。工業(yè)以太網(wǎng)中冗余技術(shù)是提高以太網(wǎng)系統(tǒng)可靠性和可維護性最有效的手段之一[3]。鏈路冗余是應對網(wǎng)口故障(包括主站網(wǎng)卡本身故障和連接)及鏈路故障(指從站節(jié)點之間的鏈路存在斷開情況,如網(wǎng)線斷開)的補救措施。通常在對系統(tǒng)穩(wěn)定運行要求比較高的情況下,就需要應用鏈路冗余技術(shù)。鏈路冗余是一種單一容錯機制,即如果鏈路在某一處發(fā)生故障,依然可以與各個從站保持數(shù)據(jù)的傳輸。當通信恢復時主要的通信方向也會恢復。如果不止一個地方發(fā)生通信中斷,所有的必須在發(fā)生另一個錯誤之前恢復。文獻[4]中介紹了一種工業(yè)以太網(wǎng)EtherCAT冗余和熱插拔技術(shù),此種方法采用環(huán)型冗余結(jié)構(gòu),將最后一個 ESC節(jié)點連接到主站,此種方法雖然可以解決單點故障,但是在故障修理時需要斷電,且不能解決多點故障。為了解決此問題,本文通過介紹基于FPGA的EtherCAT的鏈路冗余原理,設計通過FPGA實現(xiàn)主站與從站、從站與從站之間的通信鏈路與冗余鏈路的自動切換,從而實現(xiàn)EtherCAT的鏈路冗余,增加了EtherCAT 系統(tǒng)的可靠性與可維護性 。
1 EtherCAT原理
EtherCAT是一種實時工業(yè)以太網(wǎng)技術(shù),采用主從站結(jié)構(gòu),如圖1所示。主站發(fā)送以太網(wǎng)幀給各從站,從站通過尋址從數(shù)據(jù)幀中抽取對應的數(shù)據(jù)或?qū)?shù)據(jù)插入數(shù)據(jù)幀,然后將該數(shù)據(jù)幀傳輸?shù)较乱粋€EtherCAT從站。最后一個EtherCAT從站發(fā)回經(jīng)過完全處理的報文,并由第1個從站作為響應報文發(fā)送給主站。主站使用標準的以太網(wǎng)接口卡或具有以太網(wǎng)接口的嵌入式工業(yè)控制計算機,EtherCAT從站使用專用的從站控制芯片ESC,采取接收轉(zhuǎn)發(fā)機制,以太網(wǎng)幀可以雙向通行,但只有以太網(wǎng)幀由下行電報方向進入時,相應的報文才能得到處理,如果指定轉(zhuǎn)發(fā)的網(wǎng)口未連接,ESC自動將以太網(wǎng)幀沿原入口返回。
EtherCAT數(shù)據(jù)直接使用以太網(wǎng)數(shù)據(jù)幀,使用的幀類型為0x88A4。EtherCAT數(shù)據(jù)包括2 B的數(shù)據(jù)頭和44 B~1 498 B的數(shù)據(jù)。數(shù)據(jù)區(qū)由一個或多個EtherCAT子報文組成,每個子報文對應獨立的設備和從站存儲區(qū)。每個EtherCAT 子報文包括子報文頭、數(shù)據(jù)域和相應的工作計數(shù)器(Working Counter,WKC),子報文尋址到從站節(jié)點并交換數(shù)據(jù)后,工作計數(shù)器將被增加,用以記錄該子報文的處理狀態(tài)。子報文頭中,8 bit命令字節(jié)指定了子報文類型(讀寫類型,尋址類型);8 bit索引號給出子報文編碼。32 bit的子報文地址指定了對從站的操作地址,尋址類型定義了尋址方式;8 bit長度用以指示報文數(shù)據(jù)區(qū)的字節(jié)數(shù);R為4 bit的保留位;4 bit M表示本報文是否為最后一個報文;16 bit中斷目前保留。
2 基于FPGA的鏈路冗余原理
在EtherCAT通信鏈路運行過程中,可能會存在如下幾種故障:
(1)網(wǎng)口故障,包括主站網(wǎng)卡本身故障和連接。
(2)鏈路故障,指從站節(jié)點之間的鏈路存在斷開情況,比如網(wǎng)線斷開。
為了能夠增加EtherCAT系統(tǒng)的可靠性及可維護性,在EtherCAT主站與從站的鏈路之間通過FPGA增加了冗余功能,每一條鏈路都有對應的冗余鏈路作為備用。鏈路1出現(xiàn)故障時,可以通過FPGA自動切到冗余鏈路1;鏈路2出現(xiàn)故障時,通過FPGA自動切到冗余鏈路2。這樣如果鏈路在某一處發(fā)生故障,依然可以與各個從站保持數(shù)據(jù)的傳輸。當通信恢復時主要的通信方向也會恢復,極大地增強了系統(tǒng)的穩(wěn)定性和可維護性。
如圖2所示,EtherCAT主從站網(wǎng)絡構(gòu)成框圖中,冗余卡為基于FPGA的鏈路冗余卡,通過通信鏈路1與主機冗余型CPU連接,冗余鏈路1與備機冗余型CPU連接,實現(xiàn)主從站之間的主備切換冗余。通過通信鏈路2與下一級冗余卡的鏈路1連接,冗余鏈路2與下一級冗余卡的冗余鏈路1連接,實現(xiàn)EtherCAT的鏈路冗余。
3 鏈路冗余的FPGA實現(xiàn)方法
FPGA實現(xiàn)主站與從站、從站與從站之間的通信鏈路與冗余鏈路的自動切換功能。
如圖3所示,F(xiàn)PGA的4個接口0、1、2、3與4條通信鏈路通過MII(Media Independent Interface)方式連接。FPGA的4個接口分為2組,接口0和接口1為1組,接口2和接口3為1組,兩組的邏輯相同?,F(xiàn)以接口0和接口1說明冗余的切換方式:
(1)FPGA復位狀態(tài)為接口;
(2)運行過程中,通信鏈路1狀態(tài)不正常,冗余鏈路1正常,接口1切換為接口0;
(3)冗余鏈路1正常時,通信鏈路1恢復正常,此時不切換,還是連接接口1;
(4)冗余鏈路1不正常,通信鏈路1恢復正常,接口2切換為接口1運行。
接口2和接口3的切換方式與接口0和接口1的切換方式相同。
在FPGA實現(xiàn)過程中,主要是通過判別兩個接口的PHY(Physical Layer)的數(shù)據(jù)連接信號(linkmii)和數(shù)據(jù)有效信號(rx_dv)判斷鏈路的狀態(tài)。其中,接口0的數(shù)據(jù)連接信號為linkmii0,數(shù)據(jù)有效信號為rx_dv0,接口1的數(shù)據(jù)連接信號為linkmii1,數(shù)據(jù)有效信號為rx_dv1。因為PHY在數(shù)據(jù)傳輸過程中,rx_dv信號只在數(shù)據(jù)有效時拉高,因此,需要檢測時間閾值(cnt_time0、cnt_time1),即兩次rx_dv時間差,超過時間閾值(cnt_time0=1、cnt_time1=1)認為此接口無數(shù)據(jù)連接。接口0和接口1的切換條件判斷為:
(1)當linkmii0為低,linkmii1為高,選擇為接口0;
(2)當linkmii0為高,linkmii1為低,選擇為接口1;
(3)以前狀態(tài)為接口1,當linkmii0為低,linkmii1為低,rx_dv0=1,cnt_time0=0,則選擇為接口0;
(4)以前狀態(tài)為接口1,當linkmii0為低,linkmii1為低,rx_dv1=1,cnt_time1=0,則選擇為接口0;
(5)以前狀態(tài)為接口0,當linkmii0為低,linkmii1為低,rx_dv1=1,cnt_time0=1,則選擇為接口0;
(6)以前狀態(tài)為接口1,當linkmii0為低,linkmii1為低,rx_dv0=1,cnt_time1=1,則選擇為接口0。
接口2和接口3的切換選擇邏輯與此類似。
4 功能測試
為了驗證此鏈路冗余方法的可行性,搭建了以ALTERA公司的Cyclone III EP3C40E484i為核心的測試系統(tǒng),此芯片有332個IO管腳,39 600個LE,可滿足設計的要求。根據(jù)FPGA實現(xiàn)冗余鏈路的要求,現(xiàn)根據(jù)測試圖型將測試敘述如下:
(1)圖4中,0時刻前為通信鏈路和冗余鏈路都沒有連接到冗余卡上(linkmii0=1,linkmii1=1),此時默認選擇接口0,0時刻后冗余鏈路連接到冗余卡上(linkmii1=0,linkmii0=1),此時切換為接口1。
(2)圖5中,0時刻前為冗余鏈路連接到冗余卡上(linkmii1=0,linkmii0=1),通道選擇為接口1,0時刻后,冗余鏈路從冗余卡上斷開(linkmii1=1,linkmii0=1),此時通道回到默認接口1。
(3)圖6中,0時刻前為通信鏈路與冗余鏈路都連接到冗余卡上(linkmii0=0,linkmii1=0),通道選擇為接口1,但此時通信鏈路有數(shù)據(jù)有效信號(rx_dv0=1),冗余鏈路沒有數(shù)據(jù)有效信號(rx_dv1=0),此時通道切換到接口0。
(4)圖7中,0時刻前為通信鏈路與冗余鏈路都連接到冗余卡上(linkmii0=0,linkmii1=0),通道選擇為接口0,但此時冗余鏈路有數(shù)據(jù)有效信號(rx_dv1=1),通信鏈路沒有數(shù)據(jù)有效信號(rx_dv0=0),此時通道切換到接口1。
5 結(jié)論
本文首先介紹EtherCAT的基本原理,以增加EtherCAT系統(tǒng)穩(wěn)定性和可維護性為出發(fā)點,給出了基于FPGA的EtherCAT鏈路原理,設計通過FPGA實現(xiàn)主站與從站、從站與從站之間的通信鏈路與冗余鏈路的自動切換,從而實現(xiàn)EtherCAT的鏈路冗余。通過測試驗證此方法的可行性,增加了EtherCAT 系統(tǒng)的可靠性與可維護性。
參考文獻
[1] Geon Yoon,Dae H yun Kwon,Soon Chang Kon,et al.Ring topology-based redundancy Ethernet for industrial network[C].SICE-ICASE International Joint Conference,2006.
[2] EtherCAT Technology Group(ETG).EtherCAT:the Ethernet fieldbus[J].PC Control,2005(7):14-19.
[3] Madren Frank.Redundancy with standards in industrial Ethernet LANs[J].Engineer IT,2006:72-75.
[4] 郇極,肖文磊,劉艷強.工業(yè)以太網(wǎng)EtherCAT冗余和熱插拔技術(shù)[J].北京航空航天大學學報,2009(2):38-41.
作者信息:
黃 兵,豐大軍,劉云龍,王 皓
(華北計算機系統(tǒng)工程研究所,北京100083)