劉柯, 耿春明, 夏繼強
(北京航空航天大學 機械工程及自動化學院, 北京 100191)
PROFINET基于工業(yè)以太網(wǎng)實現(xiàn),從數(shù)據(jù)傳輸?shù)目焖傩浴崟r性以及通信的安全性、可靠性出發(fā),為自動化領域的網(wǎng)絡通信提供了一套完整的解決方案[1]。為了滿足用戶不同的實時性需求,PROFINET提供了三種通信方式:UDP/IP、PROFINET RT、PROFINET IRT。本文主要研究使用廣泛的PROFINET RT通信。
目前國外對PROFINET RT通信的性能和響應時間等方面作了較多的研究與分析[2-5],而國內(nèi)對于PROFINET RT研究的文獻并不是很多,多篇文獻雖然對PROFINET RT通信作了簡單的介紹,概括性地描述了PROFINET通信幀的組成及結(jié)構,但沒有對PROFINET RT通信保證實時性的技術手段、通信規(guī)律等方面作出說明[6-9],而這些方面的研究將對深入理解PROFINET RT技術、利用這門技術更好地為相關產(chǎn)業(yè)服務產(chǎn)生重要影響。本文從PROFINET RT實現(xiàn)實時性的方法出發(fā),介紹并分析了PROFINET RT通信的規(guī)律以及PROFINET RT通信幀結(jié)構與組態(tài)的關系。
PROFINET RT通信主要通過以下四個方面保障通信的實時性:
(1)傳統(tǒng)的以太網(wǎng)利用CSMA/CD技術解決可能出現(xiàn)的網(wǎng)絡競爭訪問問題,從而導致數(shù)據(jù)發(fā)送和接收時間的不確定性。PROFINET技術充分利用交換機技術,通常在PROFINET設備上集成多個帶交換功能的端口,減小了可能的數(shù)據(jù)通信沖突域。另外,PROFINET設備還支持IEEE 802.1Q標準,RT通信幀中攜帶標識優(yōu)先級的VLAN標簽,使得交換機中各種報文的發(fā)送有了先后順序,降低了數(shù)據(jù)沖突的可能性[10]。
(2)如圖1所示,傳統(tǒng)以太網(wǎng)的四層模型包括應用層、傳輸層、網(wǎng)絡層和鏈路層,而PROFINET的實時數(shù)據(jù)包括RT和IRT,旁路了TCP/UDP和IP層,精簡了協(xié)議棧,減少了實時報文通過協(xié)議棧的時間,為快速生成報文和解析提供了有利條件[11-12]。
(3)PROFINET RT通信使用100 Mbps快速以太網(wǎng),每個設備按照組態(tài)時設置的通信間隔周期性地與控制器通信。網(wǎng)絡中各個設備的通信間隔可以不同,這樣既能合理利用網(wǎng)絡資源,也能降低網(wǎng)絡堵塞的可能性。
(4)PROFINET RT使用了一系列的通信超時監(jiān)視時間,如下文中的看門狗時間,如果在該時間段內(nèi)設備或控制器沒有接收到通信對象的數(shù)據(jù),設備或控制器就將報警并啟動相應的處理程序。
圖1 PROFINET使用的精簡協(xié)議棧模型
在PROFINET RT通信中,控制器與設備間的通信遵循生產(chǎn)者-消費者模型,兩者按照約定的通信間隔周期性地交換數(shù)據(jù)。PROFINET RT的總線發(fā)送周期是指在該時間段內(nèi)控制器能獲得網(wǎng)絡中所有設備的實時數(shù)據(jù),也就是對網(wǎng)絡中的所有設備而言,在該時間段內(nèi)每個設備至少向控制器發(fā)送了一次實時數(shù)據(jù)。而設備的發(fā)送周期是指設備每隔多長時間向控制器發(fā)送一次實時數(shù)據(jù),每個設備的發(fā)送周期可以不同且網(wǎng)絡中每個設備的發(fā)送周期都不能超過該網(wǎng)絡的總線發(fā)送周期。
總線發(fā)送周期被分為多個時長相同的時段(Phase),時段的長度取決于網(wǎng)絡中設備的實時性能和組態(tài)時的設定。在控制器參數(shù)化網(wǎng)絡中的每個設備時,與時段長度相關的參數(shù)將在設備參數(shù)化階段發(fā)送給設備。時段時長的計算公式如下:
Phase=SendClockFactor×31.25 μs
(1)
式中:SendClockFactor為發(fā)送時鐘因子,其取值范圍在設備的GSD(General Station Description)文件中說明。由于網(wǎng)絡中每個設備可以有不同的發(fā)送周期,所以PROFINET RT定義了一個減速比(ReductionRatio)。減速比表示時段的倍數(shù),代表每隔多少個時段設備發(fā)送一次實時數(shù)據(jù),所以設備發(fā)送周期的計算公式如下:
SendCycle=ReductionRatio×Phase
(2)
對于PROFINET RT通信而言,設備支持的減速比范圍與該設備的一致性類別有關。設備具體支持的減速比范圍在設備的GSD文件中說明。SendClockFactor和ReductionRatio在參數(shù)化設備階段通過連接請求幀發(fā)送給設備。
圖2 關于發(fā)送數(shù)據(jù)時間間隔的參數(shù)
圖2為利用Wireshark軟件捕捉到的連接請求幀中關于設備發(fā)送數(shù)據(jù)的時間間隔參數(shù),其中FrameID用于標識設備將來向控制器發(fā)送實時數(shù)據(jù)的RT幀,SendClockFactor和ReductionRatio用于確定設備的發(fā)送時間間隔,根據(jù)圖中的信息可知該設備每隔2×32×31.25 μs即每隔2 ms向控制器發(fā)送一次實時數(shù)據(jù)。Phase告訴設備在哪個時段開始發(fā)送數(shù)據(jù),F(xiàn)rameSendOffset告訴設備該設備發(fā)送時刻相對于總線發(fā)送周期開始時刻的時間差。由于PROFINET RT是子網(wǎng)內(nèi)的非同步通信,網(wǎng)絡中的每個設備并不知道總線發(fā)送周期的開始時刻。所以Phase和FrameSendOffset對于PROFINET RT通信無關緊要,每個設備僅遵守為它們定義的通信時間間隔。
圖2中的WatchdogFactor表示看門狗時間因子,默認值為3,用戶可以根據(jù)實際需要在組態(tài)軟件中更改,由看門狗時間因子可計算出看門狗時間。如果在看門狗時間間隔內(nèi),控制器沒有向設備發(fā)送實時數(shù)據(jù),則設備應切換到安全狀態(tài)??撮T狗時間的計算公式如下:
WatchdogTime=WatchdogFactor×SendCycle
(3)
PROFINET RT通信幀的結(jié)構如表1所示。
表1 PROFINET RT幀結(jié)構
表1中相關數(shù)據(jù)解釋如下:
7字節(jié)的前導碼、1字節(jié)的幀起始定界符、目的MAC地址、源MAC地址與以太網(wǎng)幀的含義相同。
VLAN:PROFINET RT支持IEEE 802.1Q標準,RT幀中攜帶一個4字節(jié)的VLAN標簽,用于區(qū)分實時幀與普通UDP幀的優(yōu)先級。在VLAN標簽中,一共有3個二進制位用于設置幀的優(yōu)先級,也就是說共有8種優(yōu)先級:0~7,其中0的優(yōu)先級最低,7的優(yōu)先級最高。PROFINET RT幀使用優(yōu)先級6或7[13]。
Type:PROFINET RT的以太網(wǎng)幀類型為0x8 892。
FrameID:用于標識PROFINET RT幀,如圖2中的FrameID所示,其具體的值由控制器在參數(shù)化設備階段傳遞給設備,PROFINET RT幀的FrameID范圍是:0x8 000~0xBFFF[14]。設備根據(jù)FrameID就可辨別使用的實時性類別。
RT Data:實時幀的數(shù)據(jù)部分。其組成結(jié)構與組態(tài)時在設備上使用到的模塊/子模塊有關,具體組成如表2所示。下文中的輸入都是指設備到控制器,輸出都是指控制器到設備。
表2 RT Data結(jié)構
表2中,Data表示子模塊的IO數(shù)據(jù),具體的字節(jié)數(shù)由使用的子模塊定義。IOPS全稱IO Provider Status,由數(shù)據(jù)生產(chǎn)者提供,代表數(shù)據(jù)狀態(tài),IOPS等于0x80代表子模塊數(shù)據(jù)有效。IOCS全稱IO Consumer Status,由數(shù)據(jù)消費者提供,代表子模塊數(shù)據(jù)能否被相應的消費者正確處理,IOCS等于0x80代表消費者正確處理了該子模塊的數(shù)據(jù)。
每個輸入子模塊或輸出子模塊的數(shù)據(jù)由Data、IOPS或IOCS組成,當子模塊并不需要提供輸入Data或接收輸出Data部分時,子模塊的數(shù)據(jù)組成將只有IOPS或IOCS。如果子模塊既能提供輸入數(shù)據(jù)又能接收輸出數(shù)據(jù),那么子模塊的數(shù)據(jù)組成中除了Data和IOPS,還將出現(xiàn)IOCS。
由于IO數(shù)據(jù)是根據(jù)槽/子槽的組合尋址,不管是輸入數(shù)據(jù)還是輸出數(shù)據(jù),RT Data部分都將按照組態(tài)時設備上使用的槽/子槽,從槽0開始依次排列使用到的模塊/子模塊的數(shù)據(jù),并在每個子模塊數(shù)據(jù)的相應位置附上子模塊的IOPS或IOCS,所以實際RT Data部分的結(jié)構可能與表2不同,因為IOCS與IOPS出現(xiàn)的位置與次數(shù)將由組態(tài)時使用的模塊/子模塊的類別、數(shù)量和位置決定。
APDU:應用協(xié)議數(shù)據(jù)單元,具體結(jié)構如表3所示。
表3 APDU結(jié)構
CycleCounter為周期計數(shù)器,每增加1代表31.25 μs。網(wǎng)絡中的設備根據(jù)參數(shù)化階段控制器規(guī)定的通信間隔周期性的向控制器發(fā)送數(shù)據(jù),設備根據(jù)自身的時鐘每過31.25 μs就將CycleCounter加1并將CycleCounter放入APDU中一起發(fā)送給控制器[15]??刂破鞲鶕?jù)設備連續(xù)兩次的數(shù)據(jù)幀中的CycleCounter之差檢驗設備的通信間隔是否滿足要求??刂破靼l(fā)送給設備的輸出數(shù)據(jù)中的CycleCounter也遵循相同的規(guī)律。
以圖2的數(shù)據(jù)為例,設備每隔2 ms向控制器發(fā)送一次數(shù)據(jù),那么連續(xù)兩次實時幀中的CycleCounter之差應為:2X1000/31.25即64。如圖3所示,SiemensA_8a:30:a2代表控制器,SiemensA_b3:24:24代表設備,控制器、設備相鄰兩次通信間的CycleCounter值為64。
由于CycleCounter只有兩個字節(jié),最大可表示的無符號數(shù)為65 535,隨著通信的進行,CycleCounter不斷增加,那么其值肯定會溢出。為了避免這種情況的發(fā)生,可以先用較大的數(shù)表示CycleCounter,如用4個字節(jié)表示CycleCounter,在CycleCounter增加后,直接取CyclCounter的低十六位。如果設備的硬件在數(shù)值溢出時的行為與上述相同,也可以直接使用兩字節(jié)表示CycleCounter。
如圖3所示,選中的SiemensA_b3:24:24的CycleCounter值為65 472,下一次應該發(fā)送的CycleCounter值為65 472加上64為65 536,超出了2個字節(jié)無符號數(shù)的表示范圍。而65 536的十六進制為0x10 000,直接取其低十六位得到0x0000,與圖3中下一次SiemensA_b3:24:24發(fā)出的實時幀中的CycleCounter一致。所以在實際應用中,控制器或設備相鄰兩次CycleCounter之差還應考慮溢出的特殊情況。
圖3 CycleCounter在實際系統(tǒng)中捕捉到的值
DataStatus為數(shù)據(jù)狀態(tài),用于指示設備上是否存在較大問題以及設備的當前狀態(tài)等。
TransferStatus為傳輸狀態(tài),在PROFINET RT通信中該字節(jié)為0x00。
FCS:四字節(jié)冗余校驗。
本文論述和分析了PROFINET RT通信的規(guī)律及計算通信周期的相關參數(shù),對PROFINET RT通信幀的結(jié)構組成作了較詳細的介紹。PROFINET RT通信基于工業(yè)以太網(wǎng)實現(xiàn),具有實時性高、通信幀攜帶數(shù)據(jù)量大和使用靈活等特點,可滿足工廠自動化領域的使用要求。本文可為PROFINET設備的使用和開發(fā)提供一定的借鑒和幫助。