榮 鋒,朱瑞華
(1.天津工業大學 電子與信息工程學院,天津 300387;2.天津市光電檢測技術與系統重點實驗室,天津 300387)
PROFINET是工業控制領域廣泛應用的一種工業以太網,具備成熟的解決方案[1]。在HMS Networks對工業網絡市場研究報告中發現PROFINET的市場份額位居首位,尤其是在工廠自動化、過程自動化、安全應用領域[2]。截止到2022年初,PROFINET約已連接1 600萬個節點,足以證明PROFINET的應用是如此廣泛。而國內在“中國制造2025”的國家戰略推動下,PROFINET也將有更大的發展,因此對PROFINET的研究也應該更深層次和多方面。
對于PROFINET的研究可大致分為性能分析、產品開發、診斷、安全等。張國棟等人對PROFINET RT和IRT的數據轉發方式進行了分析,并利用公式推導出了IO設備的刷新時間[3]。KLEINES H等人通過數值模擬PROFINET IO網絡性能[4]。劉柯等人對RT通信幀的結構、周期組成以及通信周期的相關參數計算進行了研究[5]。對于PROFINET IO設備的開發,從原理上普通以太網網卡不能完全實現PROFINET IO功能,目前市場上廣泛應用的解決方案是依賴西門子公司的ERTEC芯片、瑞薩公司的TPS-1芯片、赫優訊公司的Netx51/52芯片等專用網絡控制芯片來實現PROFINET IO通信。如閆菲等人用ERTEC200P芯片開發了PROFINET IO工業以太網接口[6]。徐建明等人基于TPS-1芯片設計了一種PROFINET耦合器設備[7]。劉振杰以NETX51芯片設計了一款PROFINET從站接口模塊[8]。但這些方案開發成本較高,對于一些非運動控制領域有一定的冗余性。因此本文利用普通網卡通過軟件設計實現PROFINET IO通信的NRT、RT功能。為證明廣泛性,在樹莓派3B+硬件平臺上移植協議棧,實現樹莓派接入PROFINET網絡。PROFINET IO協議棧依照設備類型Class B進行設計,支持非同步實時數據交換,可以實現LLDP、DCP、SNMP協議。本設計可以實現對實時性要求不苛刻的非運動控制領域的工業控制。
PROFINET通信系統中,DCP在系統啟動時分配設備名稱和IP地址,是PROFINET網絡中數據交互的基礎,對于PROFINET的研究和實現通信功能離不開DCP。因此本文在實現PROFINET IO通信功能的基礎上對協議棧中的DCP子協議進行深入研究,從DCP協議的原理出發,對DCP在PROFINET系統中的作用及軟件實現進行研究和分析。利用西門子PLC S7-1200控制器搭建通信測試平臺,驗證DCP協議在PROFINET中的作用及樹莓派RT和NRT通信的實現,并將Wireshark軟件抓取到的數據幀解析,得出IO設備的更新時間抖動。本文的研究將會幫助自動化工程師加深對PROFINET協議棧的理解,從而更好的去應用PROFINET。
PROFINET根據不同的應用類型提供了兩種解決方案,PROFINET CBA和PROFINET IO[9]。其中PROFINET CBA主要用于實現控制器之間的通信,而PROFINET IO主要用于實現控制器與IO設備之間的通信。
PROFINET IO定義了3個設備角色:IO控制器、IO監控器和IO設備。
1)IO設備是構成自動化過程接口的外圍現場設備,分為塊IO設備和模塊化IO設備兩種類型。塊IO設備具有固定模塊配置,而模塊化IO設備可靈活添加和刪除模塊。
2)IO控制器用于控制自動化過程,負責其相關的現場設備的 IP 地址分配、配置、參數設置、警報處理。
3)IO監視器用于完成對設備的遠程控制、檢查、維護或參數化 IO設備的客戶端功能,通過在監視器禁用IO控制器來臨時強制過程輸出值,通常是HMI、工程工具充當監視器。
PROFINET IO設備在應用層定義了插槽/子插槽的設備模型,其中插槽表示設備的物理或邏輯模塊,又被分為多個子插槽,子插槽相當于過程數據的接口,每個插槽的IO數據、報警、診斷數據都被分配到這些子插槽中[10]。IO設備不同模塊和子模塊在通用站點描述文件(GSD,general station description)中描述。塊IO設備具有通用站點描述文件中描述的固定模塊配置,而模塊化IO設備允許根據需要添加和刪除模塊,GSD文件中包含所有可能的模塊,但IO設備的實際模塊需要在工程工具中定義,下載到控制器后,由控制器告訴IO設備需要的配置。
PROFINET IO針對數據對實時性不同的要求,劃分為標準通道,實時通道和等實時通道[11]。標準通道是基于UDP/IP,用于上下文管理,處理IO設備的配置和診斷。實時通道(RT)用于傳輸循環過程數據、事件和警報,它在標準通道的基礎上,將實時數據幀嵌入到以太網幀中,不使用任何高層協議。也就是直接在數據鏈路層進行封裝,在以太網報文頭后加上PROFINET報文頭,因此能繞過UDP/IP堆棧,直接由PROFINET的協議棧處理,以此來減少數據的開銷量,高效利用帶寬,提高PROFINET的實時性能。等實時通道用于對時間要求嚴格的通信,如運動控制,它通過特殊的IRT硬件使IRT數據在預先配置和計劃的時隙中發送,從而達到更高實時性。
DCP為“發現和基本配置協議”是一種數據鏈路層協議,它為PROFINET提供多種服務,例如用于PROFINET網絡中的發現識別設備,配置設備名稱、配置IP地址等[12]。
為實現這些服務DCP提供了“Identify All”、“Identify”、“Set”、“Set-Flash”、“Set-Reset to Factory”、“Get”和“Hello”作為主要功能。PROFINET工程工具、控制器和設備中都集成了DCP服務,但他們所側重的功能不同,如在IO設備上要能對控制器所發布的命令做出響應,要能主動利用Hello功能向控制器發送消息,而IO控制器要能利用Identify功能來查找具體設備。主要功能具體描述如下。
Identify All:識別全部設備。以廣播的方式向整個網絡發送消息,所有設備收到消息都要做出響應。工程工具中利用此功能可以獲得所有設備信息列表來確定網絡中是否存如下問題:1)設備有無連接;2)設備名稱是否設置;3)設備中有無重復的IP地址或重復的設備名稱;4)設備名稱和IP地址設置是否合規;5)設備類型或供應商是否正確,利用Identify All功能工程工具可以輕松實現網絡管理。
Identify:查找具體設備和檢查設備參數設置。系統啟動前,IO控制器會用它來識別設備,通過設備名稱來進行查找,具有該設備名稱的設備進行響應,但如果查找的設備名稱長度為零則所有未分配名稱的設備都要做出響應。
Get:獲取設備信息。比如獲取設備名稱、IP地址和制造商信息等。
Set:向設備寫入參數。將設備名稱和IP地址寫入尋址到的設備中,可以在一個幀中依次請求多個條件,用來找到相匹配的設備。
Set-Flash:讓指定IO設備的LED燈閃爍,當同一網絡中有多個同類設備時,可以通過閃爍LED的方式來確定要操作的對象。
Hello:IO設備主動給IO控制器發送信息。主要在快速啟動時使用Hello功能,表示IO設備已經準備就緒,從而縮短控制器查找IO設備的時間,實現系統的快速啟動。
DCP是PROFINET重要的組成部分,實現PROFINET IO系統啟動時設備名稱、IP地址的分配,是PROFINET網絡中數據交互的基礎[13]。同時DCP使PROFINET IO設備實現無需組態工具替換成為可能。
2.2.1 啟動時的DCP
DCP協議是實現PROFINET IO通信的條件,在系統組態時,工程工具會先給IO控制器分配IP地址,然后給組態好的IO設備分配設備名稱。隨后將組態好的信息下載到IO控制器中,這樣IO控制器就擁有尋址IO設備和數據交換所需的所有信息。IO控制器在根據設備名稱為IO設備分配IP地址。IP地址和設備名稱的分配都依賴于DCP子協議,在系統通電后,IO控制器與IO設備建立通信關系和應用關系,然后IO控制器和IO設備交換過程數據、報警和非循環數據。從組態到系統啟動的步驟如圖1所示。

圖1 組態到系統啟動
PROFINET系統中,指定DCP協議分配設備名稱和IP地址。每個PROFINET設備會根據DNS和IP地址分配唯一的設備名稱。這個設備名稱用于系統啟動時的PROFINET IO設備尋址。設備名稱和IP地址的成功分配是控制器和設備之間正常通信的前提。DCP協議分配IO設備名稱和IP地址的具體步驟如下。
1)IO設備分配名稱。
自動化系統啟動時需要進行基于符號名稱的設備地址解析,在IO控制器和IO設備真正建立連接之前,IO設備就已經分配了名字,該名稱是由IO監視器分配并保存在IO設備中。這個名稱用作設備運行期間對它明確的標識。具體流程如圖2所示。

圖2 DCP分配設備名稱
2) IO設備分配IP地址。
IO控制器以設備名稱作為尋址標準向IO設備發送請求,具有該名字的設備發送響應。ARP請求在子網內以廣播的方式發送,用于尋找對應IP地址,該IP地址的設備發送自己的MAC地址作為響應,以此來檢查IP地址所對應的MAC地址。如果沒有接收到ARP響應,則代表該IP地址的設備在此子網內不存在或者沒有處在活動的狀態。然后利用DCP_Set設置IP地址并等待IO設備發送相應響應進行確認。具體步驟如圖3所示。

圖3 DCP分配IP地址
PROFINET 網絡中也可以選用動態主機配置協議(DHCP)對IO設備進行地址分配[14]。但DHCP在地址分配時,依賴一個可以使用的服務器,通常在自動化應用的范圍外,服務器會因為各種原因關閉導致地址分配不成功。PROFINET網絡依賴于靜態地址,而DHCP提供的是動態地址這使設備更換困難。MAC地址通常與DHCP服務器進行綁定,如果需要更換一個設備,MAC地址即發生改變,這會阻止新設備獲取地址,并且使進程處于停滯狀態,直到重新配置DHCP服務器。而使用DCP可以本地化管理地址,IP地址不會過期,并且設備名稱對每個設備來說都是唯一的,DCP可以在不使用組態工具的情況下完成設備替換。
2.2.2 設備替換
DCP和LLDP結合使用可以實現“無需組態工具的設備替換”[15]。LLDP通過交換機端口交換鄰居設備的信息,LLDP幀中包括發送端口的端口ID、發送設備的MAC地址或設備名稱、目的端口等。現場設備接通后,相鄰設備之間會周期性的發送LLDP幀用于交換設備信息。設備解析收到的LLDP報文,將端口ID和設備名稱結合形成設備別名,這個別名將用于替換設備的尋址。
如果設備發生故障,則將停止與其鄰居設備循環交換LLDP幀,這樣可以檢測出設備故障。當響應超時,鄰居設備會刪除故障設備的信息,控制器也將檢測出這個設備不再“可尋址”。更換設備后,控制器會循環的嘗試用原設備名稱和新設備建立聯系。因為新設備的設備名稱為空,所以不能成功建立聯系,此時控制器使用DCP_Identify服務,設置請求參數“Alias Name Of Station”,通過設備別名詢問設備,新設備進行應答,控制器再通過DCP_Set將新設備重新命名。
PROFINET IO提供了主要用于IO控制器和IO設備之間通信的服務和協議[16]。PROFINET IO協議是由一組協議機器定義,協議棧總架構如圖4所示[17]。圖3描繪了IO設備內提供應用關系應用服務元素(AR ASE,Application Relationship Application Service Element)行為的協議機器及協議機器之間的交互。灰色框為PROFINET IO協議中主要的協議機器,箭頭代表協議機器之間的主要交互。本文所實現的PROFINET IO協議棧以RT為最高通信標準實現數據收發和診斷報警功能。

圖4 PROFINET IO 協議總架構

圖5 PROFINET IO數據交互流程
PROFINET IO用戶通過IO設備的應用層服務協議映射機(FSPM,FAL service protocol machines)發布或接收服務原語。IO設備上下文協議機(CMDEV, context management protocol machine device)用于控制通信關系的建立和啟動停止其他協議機。上下文管理RPC設備協議機(CMRPC, context management RPC protocol machine)中映射并封裝了與遠程過程調用協議(DCE RPC,distributed computing environment remote procedure call)相關的服務。管理IP和名稱分配協議機器(CMINA,context management Ip and name assignment)主要用于處理站名和IP地址的分配,幫助處理DCP_Set和DCP_Identify請求和管理發送DCP_HELLO請求。消費者協議機器(CPM,consumer protocol machine)處理接收循環數據,為傳入的實時數據幀注冊處理程序并監視傳入的數據幀。提供者協議機器(PPM,provider protocol machine)處理數據的循環發送并初始化傳輸緩沖區。報警協議啟動機器(ALPMI,alarm protocol machine initiator)用于觸發警報。報警協議應答機器(ALPMR,alarm protocol machine responder)用于響應傳入的警報。非循環協議接收機器(APMR,acyclic protocol machine receiver)用于接收傳入的報警幀。非循環協議發送機器(APMS,acyclic protocol machine sender)用于向IO控制器發送報警以太網幀。
在PROFINET IO通信中,發送數據調度是周期進行,網絡中的每個設備的數據傳輸開始于循環RT數據,隨后是傳輸非循環RT數據,例如警報數據,最后才傳輸NRT數據。
PROFINET配置階段,控制器告訴IO設備實際的模塊和子模塊。IO設備會在app_plug_dap()函數中利用app_get_module_cfg()函數、app_get_submodule_cfg()函數、app_get_parameter_cfg函數獲取所需要模塊、子模塊、參數配置,再調用pnet_plug_module()、pnet_plug_submodule()將特定模塊插入特定的插槽,特定子插槽插入特定的子模塊,最終實現IO設備的實際應用模塊所有與組態信息相一致的模塊信息。配置完成后,IO設備和控制器之間連續交換循環數據。
PROFINET IO設備和IO控制器之間的實際數據傳輸只能通過應用關系(AR,application relationship)建立通信,而一個AR中可以包含一個或者多個用于交換數據的通信關系(CR,communication relationship)。CR在多個隊列或緩沖區之間建立,用于交換不同的數據,循環RT數據使用IO數據CR,配置和其他非循環數據在記錄數據CR中交換,實時報警在報警CR中交換。控制器與IO設備之間的數據交互根據不同事件調用不同的回調函數進行處理,反復調用Events_Stata()函數判斷不同事件。PROFINET數據交互流程如圖5所示。
PROFINET IO通信是按照生產者/消費者的模式進行,在循環數據交換時,不僅要包含數據單元還要包含兩個數據狀態屬性,輸入輸出生產者狀態(IOPS,input output provider status)和輸入輸出消費者狀態(IOCS,input output consumer status)。IOCS和IOPS狀態指示收到或發送的數據是否有效。
當IO設備向IO控制器發送輸入數據時,IO設備即是生產者也是消費者。作為生產者時,Set_Output_Data()函數發送過程數據并利用Set_Output_IOPS()函數為輸入數據設置IOPS狀態,然后通過輸出數據CR將過程數據提供給IO控制器。作為消費者時,用Set_Intput_IOCS()函數向控制器報告自己之前接收到的數據是否可以使用。
當IO控制器向IO設備發送輸出數據時,IO設備調用Get_Intput_Data()函數獲取輸入緩沖區中數據,Get_Intput_IOPS()函數讀取指定模塊的IOPS狀態,Get_Output_IOCS()函數獲取IO控制器報告的接收到的數據是否可用信息。Data_Status_Changed()函數通知應用程序接收到的數據狀態已更改。循環數據交換過程如圖6所示。

圖6 循環數據交互過程
PROFINET IO設備中集成的DCP協議實現程序主要包括處理DCP_Identify請求程序、處理DCP_Set請求程序、處理DCP_Get請求程序、處理DCP_Hello請求程序、閃爍信號燈、重置設置等。要求IO設備能夠對控制器發出的DCP服務請求作出正確的響應。IO控制器和IO設備上電后,IO設備接收到來自控制器的數據包,先判斷此包是否為PROFINET數據包,數據類型是否等于0x8892。再將接收到的數據包解析,根據frame ID發送到不同處理程序。本節主要分析DCP_Identify請求程序和處理DCP_Set請求程序的具體實現過程。
DCP是一種通過不同過濾判據進行讀取和寫入設備參數及發現設備的協議。DCP服務的實現是根據設備選項進行過濾判斷再執行,IO控制器中發送的請求命令中包含篩選條件,滿足篩選條件的設備才會作出響應。因此協議中定義了很多選項和子選項,選項及子選項如表1所示。

表1 DCP用到的選項及子選項
DCP_Identify_Req()是處理傳入的DCP_Identify請求函數,是實現構造響應并發送響應的過程。請求中包含篩選條件,只有所有的條件都匹配的設備才發送響應。接收到請求中的frame ID=0xfefe時,表示接收到的是DCP_Identify請求需要發送DCP_Identify響應。
先獲取本設備的MAC地址并給響應分配緩沖區,從接收到的請求幀中讀取信息準備構造響應幀,其中響應幀中的目的地址就是請求幀中的源地址,響應幀中的源地址就是本設備的MAC地址。構造響應幀的報文頭,從請求幀的報文頭中修改所需要的內容,包括以太網報文頭、PROFINET報文頭、DCP報文頭,DCP block報文頭。通過DCP_Get_Req_()函數來讀取請求幀中block頭中的選項和子選項。如果Option為PF_DCP_OPT_ALL并且子選項為PF_DCP_SUB_ALL時,則將變量Identify_all賦值為ture,表示請求幀是要尋址所有設備,不過濾此條信息,IO設備也準備做出響應。根據讀取請求幀中的Option的值來改變變量match和ret的值,當ret=0并且match=true時,PF_dcp_Get_Req()函數插入Device_Option的元素個數個block構造響應幀。造響應幀的流程圖如圖7所示。

圖7 處理DCP_Identify請求程序
DCP_Get_Set()是處理DCP_Set請求程序函數,發送DCP_Set響應的流程圖如圖8所示。使用Get_Device_Macaddr()函數檢查請求幀中的目的地址與本設備的MAC地址是否相匹配,如果匹配則修改請求幀為構造響應幀做準備。包括在響應幀中插入frame ID,設置以太網報頭,并從請求幀中復制DCP頭等。然后判斷請求幀中的Service_ID是否為PF_DCP_SERVICE_SET,在響應中插入塊構造完成響應后發送響應,再通過DCP_Set_Commit()函數提交對ip_suite的更改。

圖8 處理DCP_Set請求程序
GSD是由元素和屬性構成,基于可擴展標記語言(XML,eXtensible markup language)的通用工作站標識語言(GSDML,general station description markup language )編寫,用來描述PROFINET設備功能的文件[18]。該文件主要描述了可在PROFINET IO設備中使用的可插拔硬件模塊類型,但設備實際要使用的硬件模塊需要在工程工具中進行配置。配置好的組態信息下載到控制器中,控制器會告訴IO設備需要插入的IO模塊的類型,只有IO設備中所插入的模塊與組態信息中的配置模塊一致才能控制器和IO設備才能組態成功。GSD文件由

圖9 GSD文件結構圖

圖10 GSD文件
PROFINET是在標準以太網的基礎上精簡協議棧,不僅提高了實時性還使PROFINET的實現更加簡單[19]。這種優化是在軟件層面,因此主要要求硬件平臺能夠接受和發送以太網二層的數據幀就可以實現作為 IO設備接入PROFINET網絡中。本文選用Raspberry Pi 3B+(樹莓派)作為硬件平臺,它是基于Linux系統的Cortex-A53架構微型電腦主板,搭配千兆網卡LAN7515,不僅可以實現數據幀的收發還可以實現PC的基本功能[20]。樹莓派和PLC通過交換機連接,但此次測試采用的交換機不是鏡像交換機,因此需要在樹莓派上運行Wireshark軟件來抓取硬件平臺和IO控制器之間的數據交互。系統測試連接如圖11所示。

圖11 實驗平臺結構
在工程工具TAL Portal V15中對PROFINET IO系統進行組態,將IO設備的GSD文件加載到工程工具中[21]。組態連接如圖12所示。

圖12 TAL Portal組態
控制器上電后發送DCP廣播消息,子網上的所有IO設備用其MAC地址應答。控制器向IO設備發送帶有特定MAC地址的DCP消息,其中包含IO設備應使用的IP地址和站名。IO設備相應地設置自己的IP地址和站名。 然后,PLC使用在IP上的UDP運行的DCE/RPC協議啟動IO設備的實際配置。配置完成后,IO設備和控制器之間連續交換循環數據。
樹莓派上運行Wireshark對設備和控制器之間的通信進行抓包分析。在設備剛啟動時,控制器先通過設備名稱“pndev”尋址設備并通過DCP_Set服務分配IP地址,ARP確認過設備后開始建立連接。系統的初始化數據是NRT非實時數據,通過IP地址傳輸,其中192.168.0.1為PLC控制器的IP地址,192.168.0.50是樹莓派的IP地址。IO控制器和IO設備之間的連接建立分為四步:第一步建立AR和CR,控制器發送連接請求,樹莓派對建立連接的請求進行響應,只有在能保證建立連接的時候才會發送響應,然后開始建立數據交互所需的AR和CR。第二步傳輸參數,控制器發送寫請求,樹莓派進行響應后給IO設備傳輸參數,每個模塊或子模塊的參數都要進行傳輸。第三步傳輸結束,控制器發出“DControl”請求也就代表著控制器對參數的傳輸結束,樹莓派進行響應后連接就完全建立起來了。第四步確認,樹莓派在發送“CControl”請求對連接的建立進行確認,收到控制器的響應后就開始進行數據交換。Wireshark在啟動期間的抓包如圖13所示。

圖13 啟動期間的數據交換
在工程工具中組態時設置IO設備的更新時間為4 ms,利用Wireshark軟件對系統數據交互進行抓包,組態工具中的更新時間如圖14所示。將抓取到的數據進行篩選,篩選出IO設備發送給控制器的RT數據并導出為CSV文件。在Excel中處理數據,計算出相鄰兩個數據的發送時間差值得到更新時間,再計算相鄰兩個更新時間的差值得到更新時間抖動值。利用Matlab繪制更新時間折線圖和抖動折線圖,如圖15所示發送周期在所設置的4 ms上下浮動,并且可以看到抖動值不超過50 μs,所實現的IO設備符合PROFINET RT實時性的要求。

圖14 工程工具中的更新時間

圖15 更新時間及抖動值
PROFINET是工業實時以太網絡中的典型代表,在PROFINET應用廣泛的今天,對PROFINET的研究應該更加深入和多面化。針對同類設備依賴特定芯片,成本較高,可移植性差的問題,通過軟件設計在普通網卡下實現PROFINET IO的RT和NRT通信。為證明廣泛性,在樹莓派硬件平臺上移植協議棧實現樹莓派接入PROFINET網絡。本文在實現通信功能的基礎上對PROFIENT協議棧中的DCP協議進行重點研究。闡述了DCP協議的功能、原理和在PROFINET網絡中所起的作用,對DCP的軟件程序進行了設計與實現。最后為所設計的IO設備搭建了一套測試系統,并完成硬件組態。驗證了從組態到系統啟動中DCP的作用和IO設備所實現的RT和NRT通信功能。通過在樹莓派上運行Wireshark抓包軟件對IO設備和控制器PLC建立通信前的流程和DCP的功能實現過程進行分析,對所抓取的數據進行了篩選分析,得出了IO設備更新時間的抖動值,設備的實時性及可靠性滿足自動化生產控制中的需要,具有廣泛的應用前景。本文對PROFINET IO通信的實現和對集成協議DCP的分析與研究,可以幫助從事相關方向的工程師掌握PROFINET技術的應用。