榮 鋒,朱瑞華
(1.天津工業(yè)大學(xué) 電子與信息工程學(xué)院,天津 300387;2.天津市光電檢測技術(shù)與系統(tǒng)重點實驗室,天津 300387)
PROFINET是工業(yè)控制領(lǐng)域廣泛應(yīng)用的一種工業(yè)以太網(wǎng),具備成熟的解決方案[1]。在HMS Networks對工業(yè)網(wǎng)絡(luò)市場研究報告中發(fā)現(xiàn)PROFINET的市場份額位居首位,尤其是在工廠自動化、過程自動化、安全應(yīng)用領(lǐng)域[2]。截止到2022年初,PROFINET約已連接1 600萬個節(jié)點,足以證明PROFINET的應(yīng)用是如此廣泛。而國內(nèi)在“中國制造2025”的國家戰(zhàn)略推動下,PROFINET也將有更大的發(fā)展,因此對PROFINET的研究也應(yīng)該更深層次和多方面。
對于PROFINET的研究可大致分為性能分析、產(chǎn)品開發(fā)、診斷、安全等。張國棟等人對PROFINET RT和IRT的數(shù)據(jù)轉(zhuǎn)發(fā)方式進(jìn)行了分析,并利用公式推導(dǎo)出了IO設(shè)備的刷新時間[3]。KLEINES H等人通過數(shù)值模擬PROFINET IO網(wǎng)絡(luò)性能[4]。劉柯等人對RT通信幀的結(jié)構(gòu)、周期組成以及通信周期的相關(guān)參數(shù)計算進(jìn)行了研究[5]。對于PROFINET IO設(shè)備的開發(fā),從原理上普通以太網(wǎng)網(wǎng)卡不能完全實現(xiàn)PROFINET IO功能,目前市場上廣泛應(yīng)用的解決方案是依賴西門子公司的ERTEC芯片、瑞薩公司的TPS-1芯片、赫優(yōu)訊公司的Netx51/52芯片等專用網(wǎng)絡(luò)控制芯片來實現(xiàn)PROFINET IO通信。如閆菲等人用ERTEC200P芯片開發(fā)了PROFINET IO工業(yè)以太網(wǎng)接口[6]。徐建明等人基于TPS-1芯片設(shè)計了一種PROFINET耦合器設(shè)備[7]。劉振杰以NETX51芯片設(shè)計了一款PROFINET從站接口模塊[8]。但這些方案開發(fā)成本較高,對于一些非運動控制領(lǐng)域有一定的冗余性。因此本文利用普通網(wǎng)卡通過軟件設(shè)計實現(xiàn)PROFINET IO通信的NRT、RT功能。為證明廣泛性,在樹莓派3B+硬件平臺上移植協(xié)議棧,實現(xiàn)樹莓派接入PROFINET網(wǎng)絡(luò)。PROFINET IO協(xié)議棧依照設(shè)備類型Class B進(jìn)行設(shè)計,支持非同步實時數(shù)據(jù)交換,可以實現(xiàn)LLDP、DCP、SNMP協(xié)議。本設(shè)計可以實現(xiàn)對實時性要求不苛刻的非運動控制領(lǐng)域的工業(yè)控制。
PROFINET通信系統(tǒng)中,DCP在系統(tǒng)啟動時分配設(shè)備名稱和IP地址,是PROFINET網(wǎng)絡(luò)中數(shù)據(jù)交互的基礎(chǔ),對于PROFINET的研究和實現(xiàn)通信功能離不開DCP。因此本文在實現(xiàn)PROFINET IO通信功能的基礎(chǔ)上對協(xié)議棧中的DCP子協(xié)議進(jìn)行深入研究,從DCP協(xié)議的原理出發(fā),對DCP在PROFINET系統(tǒng)中的作用及軟件實現(xiàn)進(jìn)行研究和分析。利用西門子PLC S7-1200控制器搭建通信測試平臺,驗證DCP協(xié)議在PROFINET中的作用及樹莓派RT和NRT通信的實現(xiàn),并將Wireshark軟件抓取到的數(shù)據(jù)幀解析,得出IO設(shè)備的更新時間抖動。本文的研究將會幫助自動化工程師加深對PROFINET協(xié)議棧的理解,從而更好的去應(yīng)用PROFINET。
PROFINET根據(jù)不同的應(yīng)用類型提供了兩種解決方案,PROFINET CBA和PROFINET IO[9]。其中PROFINET CBA主要用于實現(xiàn)控制器之間的通信,而PROFINET IO主要用于實現(xiàn)控制器與IO設(shè)備之間的通信。
PROFINET IO定義了3個設(shè)備角色:IO控制器、IO監(jiān)控器和IO設(shè)備。
1)IO設(shè)備是構(gòu)成自動化過程接口的外圍現(xiàn)場設(shè)備,分為塊IO設(shè)備和模塊化IO設(shè)備兩種類型。塊IO設(shè)備具有固定模塊配置,而模塊化IO設(shè)備可靈活添加和刪除模塊。
2)IO控制器用于控制自動化過程,負(fù)責(zé)其相關(guān)的現(xiàn)場設(shè)備的 IP 地址分配、配置、參數(shù)設(shè)置、警報處理。
3)IO監(jiān)視器用于完成對設(shè)備的遠(yuǎn)程控制、檢查、維護(hù)或參數(shù)化 IO設(shè)備的客戶端功能,通過在監(jiān)視器禁用IO控制器來臨時強制過程輸出值,通常是HMI、工程工具充當(dāng)監(jiān)視器。
PROFINET IO設(shè)備在應(yīng)用層定義了插槽/子插槽的設(shè)備模型,其中插槽表示設(shè)備的物理或邏輯模塊,又被分為多個子插槽,子插槽相當(dāng)于過程數(shù)據(jù)的接口,每個插槽的IO數(shù)據(jù)、報警、診斷數(shù)據(jù)都被分配到這些子插槽中[10]。IO設(shè)備不同模塊和子模塊在通用站點描述文件(GSD,general station description)中描述。塊IO設(shè)備具有通用站點描述文件中描述的固定模塊配置,而模塊化IO設(shè)備允許根據(jù)需要添加和刪除模塊,GSD文件中包含所有可能的模塊,但I(xiàn)O設(shè)備的實際模塊需要在工程工具中定義,下載到控制器后,由控制器告訴IO設(shè)備需要的配置。
PROFINET IO針對數(shù)據(jù)對實時性不同的要求,劃分為標(biāo)準(zhǔn)通道,實時通道和等實時通道[11]。標(biāo)準(zhǔn)通道是基于UDP/IP,用于上下文管理,處理IO設(shè)備的配置和診斷。實時通道(RT)用于傳輸循環(huán)過程數(shù)據(jù)、事件和警報,它在標(biāo)準(zhǔn)通道的基礎(chǔ)上,將實時數(shù)據(jù)幀嵌入到以太網(wǎng)幀中,不使用任何高層協(xié)議。也就是直接在數(shù)據(jù)鏈路層進(jìn)行封裝,在以太網(wǎng)報文頭后加上PROFINET報文頭,因此能繞過UDP/IP堆棧,直接由PROFINET的協(xié)議棧處理,以此來減少數(shù)據(jù)的開銷量,高效利用帶寬,提高PROFINET的實時性能。等實時通道用于對時間要求嚴(yán)格的通信,如運動控制,它通過特殊的IRT硬件使IRT數(shù)據(jù)在預(yù)先配置和計劃的時隙中發(fā)送,從而達(dá)到更高實時性。
DCP為“發(fā)現(xiàn)和基本配置協(xié)議”是一種數(shù)據(jù)鏈路層協(xié)議,它為PROFINET提供多種服務(wù),例如用于PROFINET網(wǎng)絡(luò)中的發(fā)現(xiàn)識別設(shè)備,配置設(shè)備名稱、配置IP地址等[12]。
為實現(xiàn)這些服務(wù)DCP提供了“Identify All”、“Identify”、“Set”、“Set-Flash”、“Set-Reset to Factory”、“Get”和“Hello”作為主要功能。PROFINET工程工具、控制器和設(shè)備中都集成了DCP服務(wù),但他們所側(cè)重的功能不同,如在IO設(shè)備上要能對控制器所發(fā)布的命令做出響應(yīng),要能主動利用Hello功能向控制器發(fā)送消息,而IO控制器要能利用Identify功能來查找具體設(shè)備。主要功能具體描述如下。
Identify All:識別全部設(shè)備。以廣播的方式向整個網(wǎng)絡(luò)發(fā)送消息,所有設(shè)備收到消息都要做出響應(yīng)。工程工具中利用此功能可以獲得所有設(shè)備信息列表來確定網(wǎng)絡(luò)中是否存如下問題:1)設(shè)備有無連接;2)設(shè)備名稱是否設(shè)置;3)設(shè)備中有無重復(fù)的IP地址或重復(fù)的設(shè)備名稱;4)設(shè)備名稱和IP地址設(shè)置是否合規(guī);5)設(shè)備類型或供應(yīng)商是否正確,利用Identify All功能工程工具可以輕松實現(xiàn)網(wǎng)絡(luò)管理。
Identify:查找具體設(shè)備和檢查設(shè)備參數(shù)設(shè)置。系統(tǒng)啟動前,IO控制器會用它來識別設(shè)備,通過設(shè)備名稱來進(jìn)行查找,具有該設(shè)備名稱的設(shè)備進(jìn)行響應(yīng),但如果查找的設(shè)備名稱長度為零則所有未分配名稱的設(shè)備都要做出響應(yīng)。
Get:獲取設(shè)備信息。比如獲取設(shè)備名稱、IP地址和制造商信息等。
Set:向設(shè)備寫入?yún)?shù)。將設(shè)備名稱和IP地址寫入尋址到的設(shè)備中,可以在一個幀中依次請求多個條件,用來找到相匹配的設(shè)備。
Set-Flash:讓指定IO設(shè)備的LED燈閃爍,當(dāng)同一網(wǎng)絡(luò)中有多個同類設(shè)備時,可以通過閃爍LED的方式來確定要操作的對象。
Hello:IO設(shè)備主動給IO控制器發(fā)送信息。主要在快速啟動時使用Hello功能,表示IO設(shè)備已經(jīng)準(zhǔn)備就緒,從而縮短控制器查找IO設(shè)備的時間,實現(xiàn)系統(tǒng)的快速啟動。
DCP是PROFINET重要的組成部分,實現(xiàn)PROFINET IO系統(tǒng)啟動時設(shè)備名稱、IP地址的分配,是PROFINET網(wǎng)絡(luò)中數(shù)據(jù)交互的基礎(chǔ)[13]。同時DCP使PROFINET IO設(shè)備實現(xiàn)無需組態(tài)工具替換成為可能。
2.2.1 啟動時的DCP
DCP協(xié)議是實現(xiàn)PROFINET IO通信的條件,在系統(tǒng)組態(tài)時,工程工具會先給IO控制器分配IP地址,然后給組態(tài)好的IO設(shè)備分配設(shè)備名稱。隨后將組態(tài)好的信息下載到IO控制器中,這樣IO控制器就擁有尋址IO設(shè)備和數(shù)據(jù)交換所需的所有信息。IO控制器在根據(jù)設(shè)備名稱為IO設(shè)備分配IP地址。IP地址和設(shè)備名稱的分配都依賴于DCP子協(xié)議,在系統(tǒng)通電后,IO控制器與IO設(shè)備建立通信關(guān)系和應(yīng)用關(guān)系,然后IO控制器和IO設(shè)備交換過程數(shù)據(jù)、報警和非循環(huán)數(shù)據(jù)。從組態(tài)到系統(tǒng)啟動的步驟如圖1所示。
圖1 組態(tài)到系統(tǒng)啟動
PROFINET系統(tǒng)中,指定DCP協(xié)議分配設(shè)備名稱和IP地址。每個PROFINET設(shè)備會根據(jù)DNS和IP地址分配唯一的設(shè)備名稱。這個設(shè)備名稱用于系統(tǒng)啟動時的PROFINET IO設(shè)備尋址。設(shè)備名稱和IP地址的成功分配是控制器和設(shè)備之間正常通信的前提。DCP協(xié)議分配IO設(shè)備名稱和IP地址的具體步驟如下。
1)IO設(shè)備分配名稱。
自動化系統(tǒng)啟動時需要進(jìn)行基于符號名稱的設(shè)備地址解析,在IO控制器和IO設(shè)備真正建立連接之前,IO設(shè)備就已經(jīng)分配了名字,該名稱是由IO監(jiān)視器分配并保存在IO設(shè)備中。這個名稱用作設(shè)備運行期間對它明確的標(biāo)識。具體流程如圖2所示。
圖2 DCP分配設(shè)備名稱
2) IO設(shè)備分配IP地址。
IO控制器以設(shè)備名稱作為尋址標(biāo)準(zhǔn)向IO設(shè)備發(fā)送請求,具有該名字的設(shè)備發(fā)送響應(yīng)。ARP請求在子網(wǎng)內(nèi)以廣播的方式發(fā)送,用于尋找對應(yīng)IP地址,該IP地址的設(shè)備發(fā)送自己的MAC地址作為響應(yīng),以此來檢查IP地址所對應(yīng)的MAC地址。如果沒有接收到ARP響應(yīng),則代表該IP地址的設(shè)備在此子網(wǎng)內(nèi)不存在或者沒有處在活動的狀態(tài)。然后利用DCP_Set設(shè)置IP地址并等待IO設(shè)備發(fā)送相應(yīng)響應(yīng)進(jìn)行確認(rèn)。具體步驟如圖3所示。
圖3 DCP分配IP地址
PROFINET 網(wǎng)絡(luò)中也可以選用動態(tài)主機(jī)配置協(xié)議(DHCP)對IO設(shè)備進(jìn)行地址分配[14]。但DHCP在地址分配時,依賴一個可以使用的服務(wù)器,通常在自動化應(yīng)用的范圍外,服務(wù)器會因為各種原因關(guān)閉導(dǎo)致地址分配不成功。PROFINET網(wǎng)絡(luò)依賴于靜態(tài)地址,而DHCP提供的是動態(tài)地址這使設(shè)備更換困難。MAC地址通常與DHCP服務(wù)器進(jìn)行綁定,如果需要更換一個設(shè)備,MAC地址即發(fā)生改變,這會阻止新設(shè)備獲取地址,并且使進(jìn)程處于停滯狀態(tài),直到重新配置DHCP服務(wù)器。而使用DCP可以本地化管理地址,IP地址不會過期,并且設(shè)備名稱對每個設(shè)備來說都是唯一的,DCP可以在不使用組態(tài)工具的情況下完成設(shè)備替換。
2.2.2 設(shè)備替換
DCP和LLDP結(jié)合使用可以實現(xiàn)“無需組態(tài)工具的設(shè)備替換”[15]。LLDP通過交換機(jī)端口交換鄰居設(shè)備的信息,LLDP幀中包括發(fā)送端口的端口ID、發(fā)送設(shè)備的MAC地址或設(shè)備名稱、目的端口等。現(xiàn)場設(shè)備接通后,相鄰設(shè)備之間會周期性的發(fā)送LLDP幀用于交換設(shè)備信息。設(shè)備解析收到的LLDP報文,將端口ID和設(shè)備名稱結(jié)合形成設(shè)備別名,這個別名將用于替換設(shè)備的尋址。
如果設(shè)備發(fā)生故障,則將停止與其鄰居設(shè)備循環(huán)交換LLDP幀,這樣可以檢測出設(shè)備故障。當(dāng)響應(yīng)超時,鄰居設(shè)備會刪除故障設(shè)備的信息,控制器也將檢測出這個設(shè)備不再“可尋址”。更換設(shè)備后,控制器會循環(huán)的嘗試用原設(shè)備名稱和新設(shè)備建立聯(lián)系。因為新設(shè)備的設(shè)備名稱為空,所以不能成功建立聯(lián)系,此時控制器使用DCP_Identify服務(wù),設(shè)置請求參數(shù)“Alias Name Of Station”,通過設(shè)備別名詢問設(shè)備,新設(shè)備進(jìn)行應(yīng)答,控制器再通過DCP_Set將新設(shè)備重新命名。
PROFINET IO提供了主要用于IO控制器和IO設(shè)備之間通信的服務(wù)和協(xié)議[16]。PROFINET IO協(xié)議是由一組協(xié)議機(jī)器定義,協(xié)議??偧軜?gòu)如圖4所示[17]。圖3描繪了IO設(shè)備內(nèi)提供應(yīng)用關(guān)系應(yīng)用服務(wù)元素(AR ASE,Application Relationship Application Service Element)行為的協(xié)議機(jī)器及協(xié)議機(jī)器之間的交互?;疑驗镻ROFINET IO協(xié)議中主要的協(xié)議機(jī)器,箭頭代表協(xié)議機(jī)器之間的主要交互。本文所實現(xiàn)的PROFINET IO協(xié)議棧以RT為最高通信標(biāo)準(zhǔn)實現(xiàn)數(shù)據(jù)收發(fā)和診斷報警功能。
圖4 PROFINET IO 協(xié)議總架構(gòu)
圖5 PROFINET IO數(shù)據(jù)交互流程
PROFINET IO用戶通過IO設(shè)備的應(yīng)用層服務(wù)協(xié)議映射機(jī)(FSPM,F(xiàn)AL service protocol machines)發(fā)布或接收服務(wù)原語。IO設(shè)備上下文協(xié)議機(jī)(CMDEV, context management protocol machine device)用于控制通信關(guān)系的建立和啟動停止其他協(xié)議機(jī)。上下文管理RPC設(shè)備協(xié)議機(jī)(CMRPC, context management RPC protocol machine)中映射并封裝了與遠(yuǎn)程過程調(diào)用協(xié)議(DCE RPC,distributed computing environment remote procedure call)相關(guān)的服務(wù)。管理IP和名稱分配協(xié)議機(jī)器(CMINA,context management Ip and name assignment)主要用于處理站名和IP地址的分配,幫助處理DCP_Set和DCP_Identify請求和管理發(fā)送DCP_HELLO請求。消費者協(xié)議機(jī)器(CPM,consumer protocol machine)處理接收循環(huán)數(shù)據(jù),為傳入的實時數(shù)據(jù)幀注冊處理程序并監(jiān)視傳入的數(shù)據(jù)幀。提供者協(xié)議機(jī)器(PPM,provider protocol machine)處理數(shù)據(jù)的循環(huán)發(fā)送并初始化傳輸緩沖區(qū)。報警協(xié)議啟動機(jī)器(ALPMI,alarm protocol machine initiator)用于觸發(fā)警報。報警協(xié)議應(yīng)答機(jī)器(ALPMR,alarm protocol machine responder)用于響應(yīng)傳入的警報。非循環(huán)協(xié)議接收機(jī)器(APMR,acyclic protocol machine receiver)用于接收傳入的報警幀。非循環(huán)協(xié)議發(fā)送機(jī)器(APMS,acyclic protocol machine sender)用于向IO控制器發(fā)送報警以太網(wǎng)幀。
在PROFINET IO通信中,發(fā)送數(shù)據(jù)調(diào)度是周期進(jìn)行,網(wǎng)絡(luò)中的每個設(shè)備的數(shù)據(jù)傳輸開始于循環(huán)RT數(shù)據(jù),隨后是傳輸非循環(huán)RT數(shù)據(jù),例如警報數(shù)據(jù),最后才傳輸NRT數(shù)據(jù)。
PROFINET配置階段,控制器告訴IO設(shè)備實際的模塊和子模塊。IO設(shè)備會在app_plug_dap()函數(shù)中利用app_get_module_cfg()函數(shù)、app_get_submodule_cfg()函數(shù)、app_get_parameter_cfg函數(shù)獲取所需要模塊、子模塊、參數(shù)配置,再調(diào)用pnet_plug_module()、pnet_plug_submodule()將特定模塊插入特定的插槽,特定子插槽插入特定的子模塊,最終實現(xiàn)IO設(shè)備的實際應(yīng)用模塊所有與組態(tài)信息相一致的模塊信息。配置完成后,IO設(shè)備和控制器之間連續(xù)交換循環(huán)數(shù)據(jù)。
PROFINET IO設(shè)備和IO控制器之間的實際數(shù)據(jù)傳輸只能通過應(yīng)用關(guān)系(AR,application relationship)建立通信,而一個AR中可以包含一個或者多個用于交換數(shù)據(jù)的通信關(guān)系(CR,communication relationship)。CR在多個隊列或緩沖區(qū)之間建立,用于交換不同的數(shù)據(jù),循環(huán)RT數(shù)據(jù)使用IO數(shù)據(jù)CR,配置和其他非循環(huán)數(shù)據(jù)在記錄數(shù)據(jù)CR中交換,實時報警在報警CR中交換??刂破髋cIO設(shè)備之間的數(shù)據(jù)交互根據(jù)不同事件調(diào)用不同的回調(diào)函數(shù)進(jìn)行處理,反復(fù)調(diào)用Events_Stata()函數(shù)判斷不同事件。PROFINET數(shù)據(jù)交互流程如圖5所示。
PROFINET IO通信是按照生產(chǎn)者/消費者的模式進(jìn)行,在循環(huán)數(shù)據(jù)交換時,不僅要包含數(shù)據(jù)單元還要包含兩個數(shù)據(jù)狀態(tài)屬性,輸入輸出生產(chǎn)者狀態(tài)(IOPS,input output provider status)和輸入輸出消費者狀態(tài)(IOCS,input output consumer status)。IOCS和IOPS狀態(tài)指示收到或發(fā)送的數(shù)據(jù)是否有效。
當(dāng)IO設(shè)備向IO控制器發(fā)送輸入數(shù)據(jù)時,IO設(shè)備即是生產(chǎn)者也是消費者。作為生產(chǎn)者時,Set_Output_Data()函數(shù)發(fā)送過程數(shù)據(jù)并利用Set_Output_IOPS()函數(shù)為輸入數(shù)據(jù)設(shè)置IOPS狀態(tài),然后通過輸出數(shù)據(jù)CR將過程數(shù)據(jù)提供給IO控制器。作為消費者時,用Set_Intput_IOCS()函數(shù)向控制器報告自己之前接收到的數(shù)據(jù)是否可以使用。
當(dāng)IO控制器向IO設(shè)備發(fā)送輸出數(shù)據(jù)時,IO設(shè)備調(diào)用Get_Intput_Data()函數(shù)獲取輸入緩沖區(qū)中數(shù)據(jù),Get_Intput_IOPS()函數(shù)讀取指定模塊的IOPS狀態(tài),Get_Output_IOCS()函數(shù)獲取IO控制器報告的接收到的數(shù)據(jù)是否可用信息。Data_Status_Changed()函數(shù)通知應(yīng)用程序接收到的數(shù)據(jù)狀態(tài)已更改。循環(huán)數(shù)據(jù)交換過程如圖6所示。
圖6 循環(huán)數(shù)據(jù)交互過程
PROFINET IO設(shè)備中集成的DCP協(xié)議實現(xiàn)程序主要包括處理DCP_Identify請求程序、處理DCP_Set請求程序、處理DCP_Get請求程序、處理DCP_Hello請求程序、閃爍信號燈、重置設(shè)置等。要求IO設(shè)備能夠?qū)刂破靼l(fā)出的DCP服務(wù)請求作出正確的響應(yīng)。IO控制器和IO設(shè)備上電后,IO設(shè)備接收到來自控制器的數(shù)據(jù)包,先判斷此包是否為PROFINET數(shù)據(jù)包,數(shù)據(jù)類型是否等于0x8892。再將接收到的數(shù)據(jù)包解析,根據(jù)frame ID發(fā)送到不同處理程序。本節(jié)主要分析DCP_Identify請求程序和處理DCP_Set請求程序的具體實現(xiàn)過程。
DCP是一種通過不同過濾判據(jù)進(jìn)行讀取和寫入設(shè)備參數(shù)及發(fā)現(xiàn)設(shè)備的協(xié)議。DCP服務(wù)的實現(xiàn)是根據(jù)設(shè)備選項進(jìn)行過濾判斷再執(zhí)行,IO控制器中發(fā)送的請求命令中包含篩選條件,滿足篩選條件的設(shè)備才會作出響應(yīng)。因此協(xié)議中定義了很多選項和子選項,選項及子選項如表1所示。
表1 DCP用到的選項及子選項
DCP_Identify_Req()是處理傳入的DCP_Identify請求函數(shù),是實現(xiàn)構(gòu)造響應(yīng)并發(fā)送響應(yīng)的過程。請求中包含篩選條件,只有所有的條件都匹配的設(shè)備才發(fā)送響應(yīng)。接收到請求中的frame ID=0xfefe時,表示接收到的是DCP_Identify請求需要發(fā)送DCP_Identify響應(yīng)。
先獲取本設(shè)備的MAC地址并給響應(yīng)分配緩沖區(qū),從接收到的請求幀中讀取信息準(zhǔn)備構(gòu)造響應(yīng)幀,其中響應(yīng)幀中的目的地址就是請求幀中的源地址,響應(yīng)幀中的源地址就是本設(shè)備的MAC地址。構(gòu)造響應(yīng)幀的報文頭,從請求幀的報文頭中修改所需要的內(nèi)容,包括以太網(wǎng)報文頭、PROFINET報文頭、DCP報文頭,DCP block報文頭。通過DCP_Get_Req_()函數(shù)來讀取請求幀中block頭中的選項和子選項。如果Option為PF_DCP_OPT_ALL并且子選項為PF_DCP_SUB_ALL時,則將變量Identify_all賦值為ture,表示請求幀是要尋址所有設(shè)備,不過濾此條信息,IO設(shè)備也準(zhǔn)備做出響應(yīng)。根據(jù)讀取請求幀中的Option的值來改變變量match和ret的值,當(dāng)ret=0并且match=true時,PF_dcp_Get_Req()函數(shù)插入Device_Option的元素個數(shù)個block構(gòu)造響應(yīng)幀。造響應(yīng)幀的流程圖如圖7所示。
圖7 處理DCP_Identify請求程序
DCP_Get_Set()是處理DCP_Set請求程序函數(shù),發(fā)送DCP_Set響應(yīng)的流程圖如圖8所示。使用Get_Device_Macaddr()函數(shù)檢查請求幀中的目的地址與本設(shè)備的MAC地址是否相匹配,如果匹配則修改請求幀為構(gòu)造響應(yīng)幀做準(zhǔn)備。包括在響應(yīng)幀中插入frame ID,設(shè)置以太網(wǎng)報頭,并從請求幀中復(fù)制DCP頭等。然后判斷請求幀中的Service_ID是否為PF_DCP_SERVICE_SET,在響應(yīng)中插入塊構(gòu)造完成響應(yīng)后發(fā)送響應(yīng),再通過DCP_Set_Commit()函數(shù)提交對ip_suite的更改。
圖8 處理DCP_Set請求程序
GSD是由元素和屬性構(gòu)成,基于可擴(kuò)展標(biāo)記語言(XML,eXtensible markup language)的通用工作站標(biāo)識語言(GSDML,general station description markup language )編寫,用來描述PROFINET設(shè)備功能的文件[18]。該文件主要描述了可在PROFINET IO設(shè)備中使用的可插拔硬件模塊類型,但設(shè)備實際要使用的硬件模塊需要在工程工具中進(jìn)行配置。配置好的組態(tài)信息下載到控制器中,控制器會告訴IO設(shè)備需要插入的IO模塊的類型,只有IO設(shè)備中所插入的模塊與組態(tài)信息中的配置模塊一致才能控制器和IO設(shè)備才能組態(tài)成功。GSD文件由
圖9 GSD文件結(jié)構(gòu)圖
圖10 GSD文件
PROFINET是在標(biāo)準(zhǔn)以太網(wǎng)的基礎(chǔ)上精簡協(xié)議棧,不僅提高了實時性還使PROFINET的實現(xiàn)更加簡單[19]。這種優(yōu)化是在軟件層面,因此主要要求硬件平臺能夠接受和發(fā)送以太網(wǎng)二層的數(shù)據(jù)幀就可以實現(xiàn)作為 IO設(shè)備接入PROFINET網(wǎng)絡(luò)中。本文選用Raspberry Pi 3B+(樹莓派)作為硬件平臺,它是基于Linux系統(tǒng)的Cortex-A53架構(gòu)微型電腦主板,搭配千兆網(wǎng)卡LAN7515,不僅可以實現(xiàn)數(shù)據(jù)幀的收發(fā)還可以實現(xiàn)PC的基本功能[20]。樹莓派和PLC通過交換機(jī)連接,但此次測試采用的交換機(jī)不是鏡像交換機(jī),因此需要在樹莓派上運行Wireshark軟件來抓取硬件平臺和IO控制器之間的數(shù)據(jù)交互。系統(tǒng)測試連接如圖11所示。
圖11 實驗平臺結(jié)構(gòu)
在工程工具TAL Portal V15中對PROFINET IO系統(tǒng)進(jìn)行組態(tài),將IO設(shè)備的GSD文件加載到工程工具中[21]。組態(tài)連接如圖12所示。
圖12 TAL Portal組態(tài)
控制器上電后發(fā)送DCP廣播消息,子網(wǎng)上的所有IO設(shè)備用其MAC地址應(yīng)答。控制器向IO設(shè)備發(fā)送帶有特定MAC地址的DCP消息,其中包含IO設(shè)備應(yīng)使用的IP地址和站名。IO設(shè)備相應(yīng)地設(shè)置自己的IP地址和站名。 然后,PLC使用在IP上的UDP運行的DCE/RPC協(xié)議啟動IO設(shè)備的實際配置。配置完成后,IO設(shè)備和控制器之間連續(xù)交換循環(huán)數(shù)據(jù)。
樹莓派上運行Wireshark對設(shè)備和控制器之間的通信進(jìn)行抓包分析。在設(shè)備剛啟動時,控制器先通過設(shè)備名稱“pndev”尋址設(shè)備并通過DCP_Set服務(wù)分配IP地址,ARP確認(rèn)過設(shè)備后開始建立連接。系統(tǒng)的初始化數(shù)據(jù)是NRT非實時數(shù)據(jù),通過IP地址傳輸,其中192.168.0.1為PLC控制器的IP地址,192.168.0.50是樹莓派的IP地址。IO控制器和IO設(shè)備之間的連接建立分為四步:第一步建立AR和CR,控制器發(fā)送連接請求,樹莓派對建立連接的請求進(jìn)行響應(yīng),只有在能保證建立連接的時候才會發(fā)送響應(yīng),然后開始建立數(shù)據(jù)交互所需的AR和CR。第二步傳輸參數(shù),控制器發(fā)送寫請求,樹莓派進(jìn)行響應(yīng)后給IO設(shè)備傳輸參數(shù),每個模塊或子模塊的參數(shù)都要進(jìn)行傳輸。第三步傳輸結(jié)束,控制器發(fā)出“DControl”請求也就代表著控制器對參數(shù)的傳輸結(jié)束,樹莓派進(jìn)行響應(yīng)后連接就完全建立起來了。第四步確認(rèn),樹莓派在發(fā)送“CControl”請求對連接的建立進(jìn)行確認(rèn),收到控制器的響應(yīng)后就開始進(jìn)行數(shù)據(jù)交換。Wireshark在啟動期間的抓包如圖13所示。
圖13 啟動期間的數(shù)據(jù)交換
在工程工具中組態(tài)時設(shè)置IO設(shè)備的更新時間為4 ms,利用Wireshark軟件對系統(tǒng)數(shù)據(jù)交互進(jìn)行抓包,組態(tài)工具中的更新時間如圖14所示。將抓取到的數(shù)據(jù)進(jìn)行篩選,篩選出IO設(shè)備發(fā)送給控制器的RT數(shù)據(jù)并導(dǎo)出為CSV文件。在Excel中處理數(shù)據(jù),計算出相鄰兩個數(shù)據(jù)的發(fā)送時間差值得到更新時間,再計算相鄰兩個更新時間的差值得到更新時間抖動值。利用Matlab繪制更新時間折線圖和抖動折線圖,如圖15所示發(fā)送周期在所設(shè)置的4 ms上下浮動,并且可以看到抖動值不超過50 μs,所實現(xiàn)的IO設(shè)備符合PROFINET RT實時性的要求。
圖14 工程工具中的更新時間
圖15 更新時間及抖動值
PROFINET是工業(yè)實時以太網(wǎng)絡(luò)中的典型代表,在PROFINET應(yīng)用廣泛的今天,對PROFINET的研究應(yīng)該更加深入和多面化。針對同類設(shè)備依賴特定芯片,成本較高,可移植性差的問題,通過軟件設(shè)計在普通網(wǎng)卡下實現(xiàn)PROFINET IO的RT和NRT通信。為證明廣泛性,在樹莓派硬件平臺上移植協(xié)議棧實現(xiàn)樹莓派接入PROFINET網(wǎng)絡(luò)。本文在實現(xiàn)通信功能的基礎(chǔ)上對PROFIENT協(xié)議棧中的DCP協(xié)議進(jìn)行重點研究。闡述了DCP協(xié)議的功能、原理和在PROFINET網(wǎng)絡(luò)中所起的作用,對DCP的軟件程序進(jìn)行了設(shè)計與實現(xiàn)。最后為所設(shè)計的IO設(shè)備搭建了一套測試系統(tǒng),并完成硬件組態(tài)。驗證了從組態(tài)到系統(tǒng)啟動中DCP的作用和IO設(shè)備所實現(xiàn)的RT和NRT通信功能。通過在樹莓派上運行Wireshark抓包軟件對IO設(shè)備和控制器PLC建立通信前的流程和DCP的功能實現(xiàn)過程進(jìn)行分析,對所抓取的數(shù)據(jù)進(jìn)行了篩選分析,得出了IO設(shè)備更新時間的抖動值,設(shè)備的實時性及可靠性滿足自動化生產(chǎn)控制中的需要,具有廣泛的應(yīng)用前景。本文對PROFINET IO通信的實現(xiàn)和對集成協(xié)議DCP的分析與研究,可以幫助從事相關(guān)方向的工程師掌握PROFINET技術(shù)的應(yīng)用。