工業(yè)控制網絡對網絡的實時性要求很高,不僅要求傳輸速度快,數據傳輸還要具有確定性。以太網的通信存在不確定性,不能滿足實時性要求,成為以太網應用于工業(yè)控制領域的主要障礙。本設計實現的實時以太網[2]就是網絡中每個節(jié)點的通信被嚴格地限定在規(guī)定時間內,確保在同一網段內同時只有一臺在發(fā)送數據。
1.前言
工業(yè)控制網絡是一種特定應用的網絡,和商業(yè)信息網絡相比,它具有自身的要求和特點,其中非常重要的一點就是實時性要求高,不僅要求傳輸速度快,還要求響應快,并且數據傳輸要具有確定性。以太網的通信調度方式——帶有沖突檢測的載波偵聽多路訪問機制(csma/cd),是一種非確定性的通信調度方式。網絡每個節(jié)點要通過競爭來取得信息的發(fā)送權:節(jié)點監(jiān)聽信道,只有發(fā)現信道空閑時才能發(fā)送信息。信息開始發(fā)送后,還需要檢查是否發(fā)生碰撞,如發(fā)生碰撞,則需等待,等待的時間取決于“二進制指數退避算法”得出的隨機延遲[1][4],這種隨機延遲為工業(yè)通信的數據傳輸增加了難以避免的不確定性。
2.系統(tǒng)模型
本設計通過在以太網mac層之上增加確定性調度層,上層采用了epa[3](ethernetofplantautomation)協(xié)議的數據封裝格式,因此使數據包的類型判斷和調度發(fā)送時間的獲取成為可能。epa是一種基于工業(yè)以太網的現場總線標準,是在控制系統(tǒng)與現場測量、控制裝置之間,以及現場測量、執(zhí)行機構之間進行通信的分布式數字控制系統(tǒng)。這樣對所有的上層數據包在整個實時網段范圍內進行數據包統(tǒng)一調度發(fā)送,從而避免碰撞現象的發(fā)生并確保數據傳輸的確定性要求。通信模型如圖1所示:
圖1實時以太網通信模型
3.系統(tǒng)設計
本設計是在嵌入式平臺下實現的,利用arm7處理器和cs8900網絡接口芯片搭建的硬件平臺進行開發(fā),在同一網段中,每一個運行的設備等同于一個網絡節(jié)點。
上層采用epa協(xié)議封裝,分實時數據和非實時數據進行發(fā)送和接收。實時數據到達后,通過實時通信服務接口向下遞交,對數據進行緩存處理,等待調度發(fā)送。下一個發(fā)送周期到來后,將用新的實時數據更新相應緩沖區(qū);非實時通信服務通過os中提供的bsd接口來提供,但是為了實現確定性的調度,非實時數據包穿越tcp/ip協(xié)議棧到達數據鏈路層時,不允許直接調用硬件驅動接口進行數據包收發(fā)操作,而是通過一個虛擬的驅動接口將數據包放入相應的發(fā)送和接收隊列。修改原e-nic的驅動接口,使其成為虛擬驅動接口,無法直接將數據遞交給硬件驅動,而是入非周期隊列。對硬件網卡的收發(fā)操作在硬件驅動接口中實現。設計圖如圖2:
圖2以太網確定性調度設計圖
確定性調度層負責何時調用硬件驅動接口收發(fā)數據幀。當確定性調度層收到數據幀時,根據以太網幀首部的type字段來區(qū)分實時數據幀和非實時數據幀。若是實時數據幀,將用收到的實時數據更新相應緩沖區(qū);若是非實時數據,則將其放入相應的接收隊列并通過任務通信機制通知上層協(xié)議棧數據幀到達事件。確定性調度層的調度表由調度算法生成。
4.主要模塊描述
實時通信服務接口、虛擬驅動接口、時鐘同步服務和實時調度算法為本設計的四個主要模塊。
4.1實時通信服務接口
實時通信服務接口負責為上層應用(協(xié)議)提供周期性實時消息的實時通信服務。
周期性實時消息的發(fā)送和接收采用緩沖機制,即為本節(jié)點在運行過程中要發(fā)送的每個周期性實時消息在內存中定義相應的緩沖區(qū),每當上層應用通過實時通信服務接口發(fā)送新的消息時,即用該新消息值更新其對應緩沖區(qū)中的舊消息值;為本節(jié)點在運行過程中要接收的每個周期性實時消息在內存中定義相應的緩沖,每當上層應用通過實時通信服務接口接收新的消息時,則將對應緩沖區(qū)中的消息值返回。節(jié)點在運行過程中將要發(fā)送的每個周期性實時消息必須要有與其對應的已知的目標地址(包括目標mac地址-用于識別節(jié)點,端口號-用于識別實時消息所對應的緩沖區(qū)元素)。
實時通信服務接口要提供以下接口函數:
(1)rtappinterface()
創(chuàng)建實時接口函數,用于實時周期性消息的發(fā)送和接收。
(2)rtmapping()
將由rtappinterface()函數創(chuàng)建的接口進程映射到特定的地址(mac,端口號(即緩沖元素的索引))。
(3)rtsend()
使用已創(chuàng)建和映射完畢的實時接口進程進行實時消息的發(fā)送。
(4)rtrecv()
使用已創(chuàng)建和綁定完畢的實時接口進程進行實時消息的接收。
4.2虛擬驅動接口
虛擬驅動接口負責為上層tcp/udp/ip協(xié)議棧提供一套虛擬的驅動程序接口,該接口必須與上層協(xié)議棧所使用的原硬件驅動接口一致,但需改變該接口中的具體函數實現,使得虛擬驅動接口所對應的具體函數無法直接實現對硬件的控制(如打開,關閉設備,收發(fā)數據包等)。必須確保用虛擬驅動接口替換原硬件驅動接口后,從tcp/ip協(xié)議棧使用驅動接口的角度來看,和使用原硬件接口一樣,即用虛擬驅動接口替換原硬件驅動接口的改動對于上層協(xié)議棧的使用而言必須是透明的。對上層協(xié)議棧發(fā)下來的數據包以fifo的順序緩存到消息隊列,何時調用硬件驅動接口發(fā)送這些數據包由確定性調度層決定。
虛擬驅動接口提供的主要函數:
(1)rtvirtualin()
接收ip層的發(fā)送數據包,根據數據包類型確定轉存入隊列還是向下遞交。
(2)rtvirtualout()
調用驅動層的發(fā)送函數發(fā)送數據,接收發(fā)送返回信息。
(3)rtvirtualpackettype()
取對應字段,判斷到來包類型(epa類型字段以太網類型字段)。
4.3時鐘同步
在實時網段內,時鐘同步是非常關鍵的,因為實時網段內各節(jié)點上的任務運行和消息發(fā)送都是基于時間基準的,特別是總線上的消息調度,為了避免碰撞,消息間必須留出足夠的間隙來容納節(jié)點間的同步誤差。為了提高時鐘同步精度,應把時鐘同步功能放在協(xié)議棧中盡可能靠近硬件的位置。本系統(tǒng)中時鐘同步功能由確定性調度層來提供。時鐘同步協(xié)議采用ieee1588協(xié)議[6]。
在實時網段內選定一節(jié)點作為主時鐘,主時鐘定期發(fā)布時鐘同步消息,時鐘同步消息作為主時鐘節(jié)點上的周期性消息。由于時鐘同步消息在調度好的同步窗口中發(fā)送,可以保證時鐘消息的發(fā)送獨立于當前網絡負載而無碰撞的發(fā)送,因而時鐘消息從發(fā)布節(jié)點到各個接收節(jié)點的延遲對各個接收節(jié)點而言為一常量。
4.4實時調度算法
本設計采用的算法根據rm和edf算法改進而成的[7],每個基本周期開始時動態(tài)生成此基本調度單位(esu)的調度時間表。整個鏈路時間由連續(xù)等長的基本調度單位(esu)組成,通常esu為實時網段內所有周期性實時消息的周期的最大公約數hcf。每個esu被分成周期性實時消息窗口(pw)和非周期性消息窗口(aw),如圖3所示。pw中的調度根據事先由周期性實時消息調度算法生成的調度表來進行,調度表的長度為所有周期性實時消息的周期的最小公倍數lcm,調度表中與各個節(jié)點相關的部分被存放在各個節(jié)點中,各節(jié)點根據調度表中規(guī)定的時刻,以宏周期為循環(huán)單位周而復始的執(zhí)行周期性實時消息的發(fā)送動作。在aw中,數據采用優(yōu)先級隊列節(jié)點輪詢的方式發(fā)送。按照非周期數據實時要求將非周期數據劃分為i個優(yōu)先級,每個優(yōu)先級在節(jié)點中維護一個非周期優(yōu)先級隊列,因此每個節(jié)點中的非實時優(yōu)先級隊列為i個。發(fā)送時采用節(jié)點輪詢的方式按優(yōu)先級從高到低的順序進行發(fā)送,每次被輪詢節(jié)點將指定優(yōu)先級隊列中的數據全部發(fā)送。
圖3基本周期內數據發(fā)送窗口
5.結論
本系統(tǒng)所實現的實時以太網可以完成網段內數據的調度發(fā)送,基于本設計的實時以太網完全可以應用于一般的過程控制工業(yè)領域。通過改進原型系統(tǒng)的時鐘同步機制等來可以進一步提高系統(tǒng)的實時性以及時鐘精度,基于本設計的實時以太網改進的目標是把時鐘精度提高到微秒級,進而應用于時間精度要求較高的工業(yè)領域,如運動控制等。