首先分分類,以下幾個同學在不同的OSI層級上實現實時性,所以性能及通用性都各有千秋。
總的來說,第一梯隊的Ethercat/SERCOSIII/PROFINETIRT使用了修改的以太網包,直接改動了鏈路層,所以性能最高但是通用型最差;
第二梯隊的PowerLink和Profinet RT修改了以太網傳輸層而保留了完整的鏈路層,故而實時性能和通用型均處於中間層次;
Ethernet/IP和Profinet直接使用了以太網的傳輸層,由於沖突檢測和故障重傳的機制必然會帶來不確定性和延時,這兩種協議只能實現軟實時。但同時也具有最好的以太網兼容性能。
類型一:軟實時
以Ethernet/IP、Profinet為代表,僅僅在應用層利用軟件方式實現實時性,可以理解成基於“時間控制”的實時(相對“周期控制”而言),即只需保證每個從站在deadline之前收到包,然后通過時間同步來提高實時性。能夠實現這些,以下三大法寶缺一不可:
- UDP:基於UDP而不是TCP,UDP更快更簡單而且不需建立連接;
- QOS(Quality of Service):保證每個從站在周期結束之前必須收到包;
- IEEE1588 :通過IEEE1588協議來讓從站擁有精確的同步時鍾,保證從站動作能夠同步;
類型二:基於以太網幀
以PowerLink和Profinet RT為代表。核心思想是,既然導致以太網不能實時的主要因素是避免介質訪問沖突的CSMA/CD機制帶來的不確定性延時,那么我們修改下介質訪問的方式不就得啦:大家也不要通過監聽和競爭的方式來獲取總線占有權,排排隊分時間片來使用總線就好了。在這種方式下,所有從站不再主動競爭總線使用權,而讓主站作為管理者來調度從站對總線的占用。
最容易想到的方式就是想下圖,一個周期開始,每個從站依次按各自的時間片收發實時數據包,每個實時數據包也是一個以太網包。最后會留一段空余時間來收發非實時的普通以太網數據。
SERCOS III也使用了以下這種時間片的介質訪問方式,但區別是只有非實時階段才使用以太網包,實時階段使用了定制優化了的組幀方式,所以總的來說並沒有兼容以太網的鏈路層。
類型三:基於集束幀
這一類主要是Ethercat和SERCOS-III。
Ehtercat的實現方式可以比喻成一列依次經過所有從站的火車:所有從站的數據集成在一個以太網包中,依次經過每個從站,經過的時候從站從中取出發給自己的下行數據,同時把上行數據塞進包中。所有從站加在一起可以理解成一個以太網節點,而每個從站的數據則是以太網包文中的一個子包。相較於輪詢所有從站的方式,這種方式顯然具有更高的數據吞吐率和更短的通信周期。
SERCOS-III的實現方式稍有區別:一個周期開始先采用時間片划分的方式傳輸完每個從站的實時數據,實時數據結束到周期結束前的一段時間片用來傳輸非實時包,僅非實時包是標准的以太網包。