1 引言
基於TCP/IP協議的工業乙太網以其高通信速率和低應用成本被大量應用到工業通信中。乙太網協議和TCP/IP協議本身未定義冗餘通信,因此以提高可靠性為目標的乙太網冗餘通信研究受到了極大關注。乙太網高可用性自動化網絡標準IEC CDV 62439提出了「冗餘至網絡"和「冗餘至節點"兩類乙太網冗餘方案。前一類方案只提供線路和交換機冗餘,節點本身沒有冗餘通道。比較典型的應用有STP、RSTP和MSTP。它們採用物理環網連接交換機和網橋。正常工作時阻斷一個方向的通道防止「廣播風暴」。故障發生後,通過啟用阻斷通道實現冗餘通信。這類方案實現成本低,但是存在一定的故障恢復時間,且無法解決因節點網卡故障引起的通信中斷。後一類方案中的節點和兩個獨立的冗餘乙太網連接,節點同時在兩個網絡上收發數據,因此能消除網絡的故障恢復時間。其典型代表為PRP。PRP節點上連接冗餘乙太網的兩個通道具有相同的MAC地址和IP位址。所有報文同時在兩個網絡上發送,接收節點通過報文時間標籤篩選冗餘報文。這種方案不可避免地增加了網絡上報文的數量,且不能實現精確的時鐘同步。文獻中介紹了一種基於環網的冗餘方案,該方案能同時實現節點的冗餘通信和網絡的精確時鐘同步。該方案的節點具有兩個具有數據交換功能的乙太網接口。節電通過菊花鏈的形式串接成一個環網,故障發生時通過調整路由表實現冗餘通信。採用環網冗餘的ProfiNet把每個通信周期分成IRT部分和Open部分。在IRT部分節點向環網的兩個方向同時發送數據,實現了重要報文零故障恢復時間的冗餘通信。但是當多個節點同時發生故障時,就會造成環網的癱瘓。另有文獻介紹的主幹冗餘方法則極大地利用了網絡資源,它採用多條獨立的乙太網連接兩個節點,數據在各個乙太網上分散傳輸。故障發生後,通過其他通道分擔故障通道的報文傳輸實現冗餘通信,此方案無法消除故障恢復時間。本文提出了一種新的冗餘至節點的工業乙太網冗餘方案,通過在報文中設計報文時間標籤、節點間互檢生成並實時維護網絡狀態映射表、次要報文在網絡狀態良好時採用雙網分散傳輸等措施,可有效降低了網絡的通信負荷,提高乙太網的穩定性與可靠性。
2 冗餘通信結構設計
2.1 網絡拓撲結構
本方案的冗餘通信網絡採用「冗餘至節點"的雙乙太網結構(如圖1)。每個節點配備兩個完全獨立的網絡接口(通訊介質、網絡控制器、驅動接口等均冗餘配置),構成A、B兩個獨立乙太網通道。每個接口擁有各自的IP位址,分別與物理上獨立的乙太網A網和B網相連。IP位址的第四個字節與節點號對應(例如,節點n的A網和B網的IP位址分別為128.128.3.n,128.128.4.n)。當其中一個網絡出現故障時,節點仍可以利用另一個網絡進行報文收發,有效提高了系統的可靠性。
圖1 冗餘乙太網拓撲結構
2.2 節點網絡層次模型
網絡中報文可以在A、B兩個網絡冗餘傳輸也可以獨立分散傳輸。但在應用層上必須保證所有報文的埠單一性,因此本文在TCP/IP層和應用層之間設計了冗餘處理層,如圖2所示。
發送方的冗餘處理層負責報文冗餘通信方式的選擇,冗餘報文的複製、報文時間標籤的添加、傳輸通道的分配,實現了節點雙網冗餘傳輸和雙網分散傳輸的發送。
接收方的冗餘處理層負責報文冗餘通信方式的判別、冗餘報文的合併、網絡故障自診斷,實現了節點雙網冗餘傳輸和雙網分散傳輸的接收。
圖2 通信節點的結構
2.3 通信報文格式
為區分冗餘報文、非冗餘報文以及實現冗餘報文的篩選,本方案把乙太網報文用戶數據區的前2個字節定義為報文時間標籤(如圖3)。報文時間標籤的最高位為「冗餘通信」表示冗餘通信傳輸方式。低15位為循環序列碼,標識相同傳輸模式下發往同一目標節點的報文發送順序。本方案在發送節點為每個目標節點、廣播組、多播組各設計了一個寄存器存放上一次發送的報文的循環序列號。通過時間標籤相當於為兩個節點的通信傳輸建立了連接。
圖3 冗餘乙太網報文格式
3 冗餘通信的實現
3.1 雙網冗餘傳輸處理
利用報文中的時間標籤,節點可以實現零故障恢復時間的雙乙太網冗餘通信,其通信過程分為冗餘發送處理和冗餘接收處理。
3.1.1 冗餘發送處理機制
發送節點的冗餘處理層根據報文的目標地址把對應寄存器裡的循環序列碼加1,作為新報文的循環序列碼。新報文同時在A、B兩個網絡上發送。因此當一個通道出現故障時,發送節點仍能通過另一個通道及時發送報文,實現了零故障恢復時間的冗餘發送。
3.1.2 時間優先法冗餘接收處理機制
雙冗餘傳輸模式下,接收方同時接受A、B兩個網絡上的報文,當一個通道出現故障時,接收方仍能通過另一個通道及時接收到報文,實現了零故障恢復時間的冗餘接收。接收節點通過報文時間標籤判斷來自A、B兩個網絡的報文是否相同。實際應用中,冗餘報文在A、B兩個網絡上的到達時間可能存在差別。本方案採用時間優先法處理冗餘報文的接收,即只接收通過校驗的優先到達的報文。
本方案在接收節點設計了一組報文時間標籤隊列,每個隊列對應一個發送節點,用於冗餘報文的篩選(如圖4)。節點接收到來自節點n的校驗正確的新報文後,查詢節點n的隊列,如果隊列中已經有該報文的時間標籤存在,節點丟棄該報文並刪除隊列中該報文的時間標籤。否則節點在隊列中存放報文的時間標籤及其到達時間。因此即使從傳輸超前的網絡中接收的報文校驗失敗,節點仍有機會從傳輸滯後的網絡中接收數據。與PRP的「滑動丟包窗口」相比採用此方法處理冗餘報文增加了報文接收的可靠性。節點根據隊列中存放的報文到達時間周期性地清除隊列中超時的報文的時間標籤,以確保隊列中的報文時間標籤在合理接收範圍內。